On 2014-01-02 Adam Thompson wrote:
RTFM: dhclient-script(8).
Been there, done that. :-) I tried to simplify my list posting a bit by not getting too in depth.
The exit hooks are supposed to get called at every step of the DHCP process, and you should examine - at least - ${OPERATION} to determine what stage you're at before assuming that the new IP has already been assigned and bound to the interface.
I'm checking $reason, but only loosely as I originally could not guess which of the 12 state changes I really cared about, so my scripts re-evaluate the whole situation on nearly every state change. Missing ip address changes is *very bad* in my situation.
In other words, what you're seeing is the expected (i.e. correct) behaviour.
I wish that were true. It's very strange as my scripts indicated in the logs that only one call to dhclient-exit-hooks was made when this change happened (happened to be on a reboot). Even if I was acting on an interim state change, it should have triggered again on the final (I guess BOUND?) state change, and so properly caught the IP change. I do not log the $reason, but I will start now.
I did find one new thing RTFMing again, since I wrote these scripts they seem to have added /etc/dhcp/dhclient-up-hooks which may be a better choice (can't think of why I would not have used that before). That explicitly says it runs "after dhclient brings an interface UP with a new IP address, subnet mask, and routes". That's exactly what I want. If it captures all possible ways an IP can change, it may be better than exit-hooks.
...or just put a DHCP server of your own in front of the system you're testing. Changing the MAC address will cause the cable modem (usually) to stop forwarding packets after the 2nd change, at least until you reboot the cable modem.
Good idea, though a bit of a pain in my situation. It would have to be a router I control the DHCP server on (to delete entries), like a full *nix box. Not sure even custom router f/w lets you do that? Definitely easier than the Shaw-fooling route. PS I find Shaw modems need a reboot on any NIC/MAC change, not just the 2nd.