From: Antonio Huete Jimenez Date: Tue, 14 Aug 2012 22:44:47 +0000 (+0200) Subject: dhclient - Nuke interface_link_status(). X-Git-Tag: v3.2.0~320 X-Git-Url: http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/80d26e4806f1a40969bd60f4cac0aba9c29f3886 dhclient - Nuke interface_link_status(). - Make use of interface_status() (check IFF_UP|IFF_RUNNING and media status). The interface is forced up when dhclient starts so the flags should be correct. Taken-from: OpenBSD --- diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c index 3df23eaffb..ff1a326236 100644 --- a/sbin/dhclient/dhclient.c +++ b/sbin/dhclient/dhclient.c @@ -1,4 +1,4 @@ -/* $OpenBSD: src/sbin/dhclient/dhclient.c,v 1.144 2012/06/22 00:08:43 krw Exp $ */ +/* $OpenBSD: src/sbin/dhclient/dhclient.c,v 1.145 2012/06/24 16:01:18 krw Exp $ */ /* * Copyright 2004 Henning Brauer @@ -240,7 +240,7 @@ routehandler(void) ifi->linkstat ? "up" : "down", linkstat ? "up" : "down"); #endif - ifi->linkstat = interface_link_status(ifi->name); + ifi->linkstat = interface_status(ifi->name); if (ifi->linkstat) { client->state = S_REBOOTING; state_reboot(); @@ -340,7 +340,7 @@ main(int argc, char *argv[]) } else i = 0; - while (!(ifi->linkstat = interface_link_status(ifi->name))) { + while (!(ifi->linkstat = interface_status(ifi->name))) { if (i == 0) fprintf(stderr, "%s: no link ...", ifi->name); else if (i > 0) diff --git a/sbin/dhclient/dhcpd.h b/sbin/dhclient/dhcpd.h index 2397f3348a..27055566f0 100644 --- a/sbin/dhclient/dhcpd.h +++ b/sbin/dhclient/dhcpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: src/sbin/dhclient/dhcpd.h,v 1.74 2011/12/10 15:55:43 krw Exp $ */ +/* $OpenBSD: src/sbin/dhclient/dhcpd.h,v 1.75 2012/06/24 16:01:18 krw Exp $ */ /* * Copyright (c) 2004 Henning Brauer @@ -252,7 +252,6 @@ void got_one(void); void add_timeout(time_t, void (*)(void)); void cancel_timeout(void (*)(void)); int interface_status(char *); -int interface_link_status(char *); int interface_link_forceup(char *); /* tables.c */ diff --git a/sbin/dhclient/dispatch.c b/sbin/dhclient/dispatch.c index 8f8e9ae609..16a94cbcf0 100644 --- a/sbin/dhclient/dispatch.c +++ b/sbin/dhclient/dispatch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: src/sbin/dhclient/dispatch.c,v 1.50 2012/06/22 01:01:59 krw Exp $ */ +/* $OpenBSD: src/sbin/dhclient/dispatch.c,v 1.51 2012/06/24 16:01:18 krw Exp $ */ /* * Copyright 2004 Henning Brauer @@ -393,34 +393,3 @@ cancel_timeout(void (*where)(void)) free_timeouts = q; } } - -int -interface_link_status(char *ifname) -{ - struct ifmediareq ifmr; - int sock; - - if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) - error("Can't create socket"); - - memset(&ifmr, 0, sizeof(ifmr)); - strlcpy(ifmr.ifm_name, ifname, sizeof(ifmr.ifm_name)); - if (ioctl(sock, SIOCGIFMEDIA, (caddr_t)&ifmr) == -1) { - /* EINVAL/ENOTTY -> link state unknown. treat as active */ -#ifdef DEBUG - if (errno != EINVAL && errno != ENOTTY) - debug("ioctl(SIOCGIFMEDIA) on %s: %m", ifname); -#endif - close(sock); - return (1); - } - close(sock); - - if (ifmr.ifm_status & IFM_AVALID) { - if (ifmr.ifm_status & IFM_ACTIVE) - return (1); - else - return (0); - } - return (1); -}