Бинд имен, раздачу адресов и минимальные конфиги.
Написал общий каркас модуля. Поскольку возможности dnsmasq достаточно обширны, я сделал лишь несколько основных методов, которые будут нужны при реализации домашнего сервера: setServers() и servers() - устанавливает и возвращает список DNS верхнего уровня; setRange() и range() - устанавливает и возвращает диапазон динамической раздачи адресов, дополнительно можно указать маску и таймаут; addStaticHost(), removeStaticHost(), staticHosts() - устанавливает хост, удалает хост и возвращает список адресов со статическими адресами. При добавлении можно указать имя хоста. Удаление производится либо по MAC, IP или по имени хоста; update() - обновляет параметры сервера без его перезагрузки. Dnsmasq так же обладает своим собственным DBus-API - рассылка сигналов о подключенни/отключении хостов, добавление и удаление серверов, однако этим возможности и ограничиваются: http://www.thekelleys.org.uk/dnsmasq/docs/DBus-interface
Реализовал метод обновления кэша и чтения конфигов без перезапуска демона
> update() - обновляет параметры сервера без его перезагрузки. В 'service' это называют 'reload'. Может такое название сделать? (хотя не знаю насколько это общепринято).
Ну, можно и такое, я думаю
Написал черновой вариант замены опций, но получилось достаточно много повторяющегося кода. Нужно выносить парсеры в отдельные библиотечные функции.
Переписал парсеры, теперь происходит корректная замена в тексте конфига, вместо удаления и дописывания в конец файла. Добавил еще несколько методов, например, для управления прослушиваемыми интерфейсами. Текущее 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() -------------------------
<fixed>
> void addStaticHost(QString mac, QString ip, QString name) "QString" - интерфейс на QT что-ли?
Нет, просто так отображает клиент.
ну заодно.. Функции 'void'. Неудачное завершение - исключением?
Да, исключением. В D-Bus есть специальный класс сообщений - "ошибка", так что это будет работать корректно везде.