On Oct 3, 2013, at 8:05 AM, Nehal J Wani wrote: >> Yes. I just added contrib/mactable/macscript to the git repo, which is your >> previous script slightly less elegantly modified by me for this >> circumstance. I also put back the "make new file then atomically rename" >> behaviour since that means anything using this file doesn't risk a race >> condition leading to a half-written file. >> > > I gave a try to the --dhcp-script option of dnsmasq. Following are the > findings: > > Script used: (a little modified version of > http://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=blob_plain;f=contrib/mactable/macscript;hb=HEAD): > > #!/bin/bash > > STATUS_FILE="/var/lib/libvirt/ > dnsmasq/dnsmasq-ip-mac.status" > > # Script for dnsmasq lease-change hook. > # Maintains the above file with a IP address/MAC address pairs, > # one lease per line. Works with IPv4 and IPv6 leases, file is > # atomically updated, so no races for users of the data. > > action="$1" > mac="$2" # IPv4 > ip="$3" > > expirytime="$DNSMASQ_LEASE_EXPIRES" > hostname="$DNSMASQ_SUPPLIED_HOSTNAME" > clientid="$DNSMASQ_CLIENT_ID" > > # ensure it always exists. > > if [ ! -f "$STATUS_FILE" ]; then > touch "$STATUS_FILE" > fi > > if [ -n "$DNSMASQ_IAID" ]; then > mac="$DNSMASQ_MAC" # IPv6 > clientid="$2" > fi > > # worry about an add or old action when the MAC address is not known: > # leave any old one in place in that case. > > if [ "$action" = "add" -o "$action" = "old" -o "$action" = "del" ]; then > if [ -n "$mac" -o "$action" = "del" ]; then > sed "/^${ip//./\.} / d" "$STATUS_FILE" > "$STATUS_FILE".new > > if [ "$action" = "add" -o "$action" = "old" ]; then > echo "$expirytime $mac $ip $hostname $clientid" >> "$STATUS_FILE".new > fi > mv "$STATUS_FILE".new "$STATUS_FILE" # atomic update. > fi > fi
-- snip -- > -- > Nehal J Wani Unrelated to your questions, you broke the script by not keeping the $ip as the first field in the status file. The "$ip" is used as a unique index of sorts. The simple fix would be to put $ip as the first output of your "echo" command, otherwise some regex work on the "sed" command is required to match $ip in the middle rather than at the beginning. Lonnie _______________________________________________ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss