dhclient - Nuke interface_link_status().
authorAntonio Huete Jimenez <tuxillo@quantumachine.net>
Tue, 14 Aug 2012 22:44:47 +0000 (00:44 +0200)
committerAntonio Huete Jimenez <tuxillo@quantumachine.net>
Wed, 15 Aug 2012 01:22:19 +0000 (03:22 +0200)
- 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

sbin/dhclient/dhclient.c
sbin/dhclient/dhcpd.h
sbin/dhclient/dispatch.c

index 3df23ea..ff1a326 100644 (file)
@@ -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 <henning@openbsd.org>
@@ -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)
index 2397f33..2705556 100644 (file)
@@ -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 <henning@openbsd.org>
@@ -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 */
index 8f8e9ae..16a94cb 100644 (file)
@@ -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 <henning@openbsd.org>
@@ -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);
-}