[link-detect] Improve BSD support.
2008-01-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* lib/zebra.h: Revert previous change, no need to include
	  <net/if_media.h> here.
	* zebra/ioctl.c: If HAVE_BSD_LINK_DETECT is defined, include
	  <net/if_media.h>
	  (if_get_flags) Remove debug messages about BSD link state.
	* zebra/kernel_socket.c: (bsd_linkdetect_translate) If link state
	  is unknown, we should set the IFF_RUNNING flag.
diff --git a/zebra/ChangeLog b/zebra/ChangeLog
index ba6d307..0aabc3c 100644
--- a/zebra/ChangeLog
+++ b/zebra/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+	* ioctl.c: If HAVE_BSD_LINK_DETECT is defined, include <net/if_media.h>
+	  (if_get_flags) Remove debug messages about BSD link state.
+	* kernel_socket.c: (bsd_linkdetect_translate) If link state
+	  is unknown, we should set the IFF_RUNNING flag.
+
 2008-01-10 Ingo Flaschberger <if@xip.at>
 
 	* ioctl.c: (if_get_flags) If HAVE_BSD_LINK_DETECT, use the SIOCGIFMEDIA
diff --git a/zebra/ioctl.c b/zebra/ioctl.c
index 4f99a6c..7bb4da1 100644
--- a/zebra/ioctl.c
+++ b/zebra/ioctl.c
@@ -33,6 +33,10 @@
 #include "zebra/rt.h"
 #include "zebra/interface.h"
 
+#ifdef HAVE_BSD_LINK_DETECT
+#include <net/if_media.h>
+#endif /* HAVE_BSD_LINK_DETECT*/
+
 extern struct zebra_privs_t zserv_privs;
 
 /* clear and set interface name string */
@@ -367,24 +371,12 @@
   if (ifmr.ifm_status & IFM_AVALID) /* Link state is valid */
     {
       if (ifmr.ifm_status & IFM_ACTIVE)
-        {
-	  SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
-	  zlog_debug("%s: BSD link state to up at interface %s, ifindex %d",
-		     __func__, ifp->name, ifp->ifindex);
-        }
+	SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
       else
-        {
-	  UNSET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
-	  zlog_debug("%s: BSD link state to down at interface %s, ifindex %d",
-		     __func__, ifp->name, ifp->ifindex);
-        }
+	UNSET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
     }
   else /* Force always up */
-    {
-      SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
-      zlog_debug("%s: BSD link state invalid, forced up at interface %s, ifindex %d",
-		 __func__, ifp->name, ifp->ifindex);
-    }
+    SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
 #endif /* HAVE_BSD_LINK_DETECT */
 
   if_flags_update (ifp, (ifreq.ifr_flags & 0x0000ffff));
diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c
index cd30631..2e04b03 100644
--- a/zebra/kernel_socket.c
+++ b/zebra/kernel_socket.c
@@ -300,7 +300,8 @@
 static void
 bsd_linkdetect_translate (struct if_msghdr *ifm)
 {
-  if (ifm->ifm_data.ifi_link_state >= LINK_STATE_UP)
+  if ((ifm->ifm_data.ifi_link_state >= LINK_STATE_UP) ||
+      (ifm->ifm_data.ifi_link_state == LINK_STATE_UNKNOWN))
     SET_FLAG(ifm->ifm_flags, IFF_RUNNING);
   else
     UNSET_FLAG(ifm->ifm_flags, IFF_RUNNING);