Tommy Brander wrote:
Hi All

I'm using dnsmasq version 2.47 on Ubuntu Server Jaunty with a custom dhcp-script and the option leasefile-ro. The script is a PHP file which stores the lease database together with available DHCP options (vendorid and so on) in a PostgreSQL database. After a restart of dnsmasq, when the script is called with init, i read the active leases and print them with the following statement:

fputs(STDOUT, "$lease");

where $lease = '1255470657 00:1f:29:b4:84:82 192.168.0.194 pisces *'. Observe that this is without any added \n.

I also log this to a log file, that after init contains the following:

2009-10-13 23:23:18 - init: 1255470657 00:1f:29:b4:84:82 192.168.0.194 pisces * 2009-10-13 23:23:18 - init: 1255470430 00:01:38:99:52:80 192.168.0.182 betelgeuse 01:00:01:38:99:52:80 2009-10-13 23:23:18 - init: 1255470317 00:21:00:d2:25:4e 192.168.0.113 Delphinus 01:00:21:00:d2:25:4e 2009-10-13 23:23:18 - init: 1255470271 08:00:27:23:dd:64 192.168.0.104 caelum 01:08:00:27:23:dd:64 2009-10-13 23:23:18 - init: 1255470066 00:02:61:0f:c2:ec 192.168.0.123 * 01:00:02:61:0f:c2:ec

In the syslog, the following rows has appeared:

Oct 13 23:23:17 aurora dnsmasq[5420]: exiting on receipt of SIGTERM
Oct 13 23:23:18 aurora dnsmasq[5611]: started, version 2.47 cachesize 150
Oct 13 23:23:18 aurora dnsmasq[5611]: compile time options: IPv6 GNU-getopt DBus I18N TFTP Oct 13 23:23:18 aurora dnsmasq[5611]: DHCP, IP range 192.168.0.101 -- 192.168.0.199, lease time 30m
Oct 13 23:23:18 aurora dnsmasq[5611]: reading /etc/resolv.conf
Oct 13 23:23:18 aurora dnsmasq[5611]: using nameserver 195.54.122.200#53
Oct 13 23:23:18 aurora dnsmasq[5611]: using nameserver 195.54.122.198#53
Oct 13 23:23:18 aurora dnsmasq[5611]: read /etc/hosts - 21 addresses

The problem I'm having with this setup is that when the host pisces, which is a Ubuntu Karmic host, request it's next IP, the event generated is not an 'Old' but an 'Add'. This is the row that appears in my dhcp log file:

2009-10-13 23:23:45 - add: 00:1f:29:b4:84:82 192.168.0.194 pisces eth1 1800 brander.local

Is that correct? The client first does two DHCPREQUEST, which dnsmasq host responds with DHCPNAK. Then the client does a DHCPDISCOVER and gets an IP - some times the same IP, some times a different IP. Is this a feature or a bug?

Since dnsmasq read the lease file during init, it should give out the same address and generate an 'Old' event. Or am I just stupid?

Can anyone help me?


I guess the first step is to find out exactly what leases dnsmasq has in its database after the "init" event. The easiest way to do this is to run dnsmasq with the --no-daemon --log-queries flags, and then send it a USR1 signal. That will dump the DNS cache to the stdout. DNS entries which arise from DHCP leases will have a "D" in the flags field. You should see one for each of your DHCP leases which have a name.

My guess, without looking in detail, is that you have already found the problem - the lack of newline characters.

HTH

Simon.

Reply via email to