Bug 6176

Summary: Реализовать модуль управления Dnsmasq.
Product: [Свободные проекты (Open source projects)] Tartarus Reporter: Devaev Maxim <mdevaev>
Component: Settingsd modulesAssignee: Devaev Maxim <mdevaev>
Status: CLOSED FIXED QA Contact: Vitaly Lipatov <lav>
Severity: minor    
Priority: P4 CC: lav, pav, pv, sin
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 4915    
Bug Blocks: 5903    

Description Devaev Maxim 2010-10-12 19:42:06 MSD
Бинд имен, раздачу адресов и минимальные конфиги.
Comment 1 Devaev Maxim 2010-12-03 22:07:05 MSK
Написал общий каркас модуля. Поскольку возможности dnsmasq достаточно обширны, я сделал лишь несколько основных методов, которые будут нужны при реализации домашнего сервера:
setServers() и servers() - устанавливает и возвращает список DNS верхнего уровня;
setRange() и range() - устанавливает и возвращает диапазон динамической раздачи адресов, дополнительно можно указать маску и таймаут;
addStaticHost(), removeStaticHost(), staticHosts() - устанавливает хост, удалает хост и возвращает список адресов со статическими адресами. При добавлении можно указать имя хоста. Удаление производится либо по MAC, IP или по имени хоста;
update() - обновляет параметры сервера без его перезагрузки.

Dnsmasq так же обладает своим собственным DBus-API - рассылка сигналов о подключенни/отключении хостов, добавление и удаление серверов, однако этим возможности и ограничиваются: http://www.thekelleys.org.uk/dnsmasq/docs/DBus-interface
Comment 2 Devaev Maxim 2010-12-04 16:17:49 MSK
Реализовал метод обновления кэша и чтения конфигов без перезапуска демона
Comment 3 Pavel Vainerman 2010-12-04 17:06:08 MSK
> update() - обновляет параметры сервера без его перезагрузки.
 В 'service' это называют 'reload'. Может такое название сделать?
(хотя не знаю насколько это общепринято).
Comment 4 Devaev Maxim 2010-12-06 15:34:27 MSK
Ну, можно и такое, я думаю
Comment 5 Devaev Maxim 2010-12-06 22:05:15 MSK
Написал черновой вариант замены опций, но получилось достаточно много повторяющегося кода. Нужно выносить парсеры в отдельные библиотечные функции.
Comment 6 Devaev Maxim 2010-12-07 20:37:58 MSK
Переписал парсеры, теперь происходит корректная замена в тексте конфига, вместо удаления и дописывания в конец файла. Добавил еще несколько методов, например, для управления прослушиваемыми интерфейсами. Текущее API выглядит так:
-------------------------
void addStaticHost(QString mac, QString ip, QString name)
void removeStaticHost(QString identifier)
{QString mac, QString ip, QString name} staticHosts()

void setServers(QStringList servers_list)
QStringList servers()

void setRange(QString start_ip, QString stop_ip, QString netmask, QString lease)
[QString start_ip, QString stop_ip, QString netmask, QString lease] QString range()

void setInterfaces(QStringList interfaces_list)
QStringList interfaces()
void setExceptInterfaces(QStringList interfaces_list)
QStringList exceptInterfaces()

void reload()
-------------------------
Comment 7 Devaev Maxim 2010-12-07 20:38:17 MSK
<fixed>
Comment 8 Pavel Vainerman 2010-12-07 20:44:37 MSK
> void addStaticHost(QString mac, QString ip, QString name)
 "QString" - интерфейс на QT что-ли?
Comment 9 Devaev Maxim 2010-12-07 20:50:07 MSK
Нет, просто так отображает клиент.
Comment 10 Pavel Vainerman 2010-12-07 20:59:02 MSK
ну заодно..
Функции 'void'. Неудачное завершение - исключением?
Comment 11 Devaev Maxim 2010-12-07 21:46:09 MSK
Да, исключением. В D-Bus есть специальный класс сообщений - "ошибка", так что это будет работать корректно везде.