On 30/06/14 10:39, Nehal J Wani wrote:
> Hi!
> The man page of dnsmasq (under the section "-9, --leasefile-ro"), states:
> When called like this the script should write the saved state of the
> lease database, in dnsmasq leasefile format, to stdout and exit with
> zero exit code.
> Q1. What is the purpose of printing to stdout? I guess it is for
> dnsmasq to know the information of previous leases, but I am not sure.

Exactly that. Dnsmasq keeps a working copy of the lease database in
memory, and it calls the lease script whenever this changes so that the
lease-script can maintain the external copy in whatever non-volatile
storage it wants (a database, disk file, NVRAM, etc). When dnsmasq first
starts it has to copy the state of the lease database from the
non-volatile storage to the in-memory copy. It does this by running the
lease-script with the "init" method and the lease-script should dump the
contents of the database. The reason the format is exactly the same as
the lease-file and to stdout is that the whole thing can be done simply
by replacing 'fopen(leasefile)' with 'popen(lease-script, "init")', the
rest of the code is unchanged.

> Q2. What all information do I need to print in 'dnsmasq leasefile
> format' ? What is the exact format? Is there an example for this (like
> the example file macscript)?

The file starts with IPv4 leases, one per line. There are five fields on
each line, seperated by spaces.

Expiry time - decimal number, seconds since start of epoch

MAC address - a hex "ARP type", followed by '-' followed by zero to 16
hex bytes, separated by ':'. If the ARP type is 1, for ethernet (this is
most common) then the ARP type is skipped, UNLESS the MAC address in
zero length. So


are valid strings.

IP address in dotted-quad format.

Hostname, as specified in RFC 1123, para 2.1, or '*' if no hostname known.

Client-id, up to 255 hex bytes separated by ':', or * if no client-id

Next, if DHCPv6 is in use there may be a single line

duid 00:11:22:33

which records the DUID used by the server. Max length of a duid is not
specified in the standards, I think. dnsmasq limits it to 85 bytes. The
longest defined DUID format is currently about 28 bytes, I think.

If the duid line exists, then it will be followed by the DHCPv6 leases,
one per line, five fields as for IPv4. The fields are different.

Expiry time - same definition as for IPv4.

IP address - in standard hex-and-colons format

IAID Unsigned 32-bit decimal number, possibly preceded by "T" for a
temporary lease.

Hostname - same as IPv4

Client DUID - same representation as IPv4 client-ID.

> Q3. Apart from the leases, dnsmasq also prints some extra information
> like "duid 00:01:00:01:1b:40:8d:94:00:25:64:8b:e4:2c" in the lease
> file. Is this also mandatory to print to stdout in case I use
> leasefile-ro ?

If you don't want to support DHCPv6, then you don't need the duid and
the DHCPv6 lease format. It would be a pity not to support DHPCv6 though.



> Thanking You,

Happy to help with any of this.

> Nehal J Wani

Dnsmasq-discuss mailing list

Reply via email to