DBus support must be enabled at compile-time and run-time. Ensure that src/config.h contains the line #define HAVE_DBUS. and that /etc/dnsmasq.conf contains the line enable-dbus Because dnsmasq can operate stand-alone from the DBus, and may need to provide service before the dbus daemon is available, it will continue to run if the DBus connection is not available at startup. The DBus will be polled every 250ms until a connection is established. Start of polling and final connection establishment are both logged. When dnsmasq establishes a connection to the dbus, it sends the signal "Up". Anything controlling the server settings in dnsmasq should re-invoke the SetServers method (q.v.) when it sees this signal. This allows dnsmasq to be restarted and avoids startup races with the provider of nameserver information. Dnsmasq provides one service on the DBus: uk.org.thekelleys.dnsmasq and a single object: /uk/org/thekelleys/dnsmasq 1. METHODS ---------- Methods are of the form uk.org.thekelleys.<method> Available methods are: GetVersion ---------- Returns a string containing the version of dnsmasq running. ClearCache ---------- Returns nothing. Clears the domain name cache and re-reads /etc/hosts. The same as sending dnsmasq a HUP signal. SetServers ---------- Returns nothing. Takes a set of arguments representing the new upstream DNS servers to be used by dnsmasq. IPv4 addresses are represented as a UINT32 (in network byte order) and IPv6 addresses are represented as sixteen BYTEs (since there is no UINT128 type). Each server address may be followed by one or more STRINGS, which are the domains for which the preceding server should be used. Examples. UINT32: <address1> UNIT32: <address2> is equivalent to --server=<address1> --server=<address2> UINT32 <address1> UINT32 <address2> STRING "somedomain.com" is equivalent to --server=<address1> --server=/somedomain.com/<address2> UINT32 <address1> UINT32 <address2> STRING "somedomain.com" UINT32 <address3> STRING "anotherdomain.com" STRING "thirddomain.com" is equivalent to --server=<address1> --server=/somedomain.com/<address2> --server=/anotherdomain.com/thirddomain.com/<address3> Am IPv4 address of 0.0.0.0 is interpreted as "no address, local only", so UINT32: <0.0.0.0> STRING "local.domain" is equivalent to --local=/local.domain/ Each call to SetServers completely replaces the set of servers specified by via the DBus, but it leaves any servers specified via the command line or /etc/dnsmasq.conf or /etc/resolv.conf alone. 2. SIGNALS ---------- If dnsmasq's DHCP server is active, it will send signals over DBUS whenever the DHCP lease database changes. Think of these signals as transactions on a database with the IP address acting as the primary key. Signals are of the form: uk.org.thekelleys.<signal> and their parameters are: STRING "192.168.1.115" STRING "01:23:45:67:89:ab" STRING "hostname.or.fqdn" Available signals are: DhcpLeaseAdded --------------- This signal is emitted when a DHCP lease for a given IP address is created. DhcpLeaseDeleted ---------------- This signal is emitted when a DHCP lease for a given IP address is deleted. DhcpLeaseUpdated ---------------- This signal is emitted when a DHCP lease for a given IP address is updated.