On Tuesday, August 14, 2012 8:31:51 pm Peter Jeremy wrote:
> On 2012-Jul-13 11:20:36 -0700, Yuri <y...@rawbw.com> wrote:
> >On 07/13/2012 02:48, Peter Jeremy wrote:
> >> This is a bug in dhclient - see PR bin/166656, which includes a fix.
> >
> >I think this PR addresses part of the problem: dhclient doesn't exit when 
> >the link goes down.
> >But even if it exits, it leaves the IP address that it has set, which is 
> >wrong. This IP address survives through the next DHCP setup process and 
ends up being the second IP address.
> >Should be very easy to on exit remove any IP address that was set during 
> >dhclient process lifetime.
> 
> I agree that it _should_ be easy to remove the existing address and the
> existing patch in that PR should already do that.  Unfortunately,
> there seems to be another issue in dhclient that means that it isn't.

Hmm, I think I see the issue.  It doesn't export the existing lease info to
the script when running the FAIL action.  I just tested this change and it
removed the old IP on my laptop when I tested it just now.  Note that I
kept the warning as "Interface foo is down" rather than "Link foo is down"
since dhclient consistently uses that language elsewhere.

Index: dhclient.c
===================================================================
--- dhclient.c  (revision 239333)
+++ dhclient.c  (working copy)
@@ -278,6 +278,11 @@ routehandler(struct protocol *p)
                            ifi->name);
                        goto die;
                }
+               if (!interface_link_status(ifi->name)) {
+                       warning("Interface %s is down, dhclient exiting",
+                           ifi->name);
+                       goto die;
+               }
                break;
        case RTM_IFANNOUNCE:
                ifan = (struct if_announcemsghdr *)rtm;
@@ -316,6 +321,8 @@ routehandler(struct protocol *p)
 
 die:
        script_init("FAIL", NULL);
+       if (ip->client->active)
+               script_write_params("old_", ip->client->active);
        if (ifi->client->alias)
                script_write_params("alias_", ifi->client->alias);
        script_go();

-- 
John Baldwin
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to