Author: qingli
Date: Fri Apr  2 05:12:46 2010
New Revision: 206069
URL: http://svn.freebsd.org/changeset/base/206069

Log:
  MFC   205222
  
  Verify interface up status using its link state only
  if the interface has such capability. The interface
  capability flag indicates whether such capability
  exists. This approach is much more backward compatible.
  Physical device driver changes will be part of another
  commit.
  
  Also updated the ifconfig utility to show the LINKSTATE
  capability if present.
  
  Reviewed by:  rwatson, imp, juli

Modified:
  stable/8/sbin/ifconfig/ifconfig.c
  stable/8/sys/net/if.h
  stable/8/sys/net/if_tap.c
  stable/8/sys/net/if_tun.c
  stable/8/sys/net/route.h
Directory Properties:
  stable/8/sbin/   (props changed)
  stable/8/sbin/atacontrol/   (props changed)
  stable/8/sbin/bsdlabel/   (props changed)
  stable/8/sbin/camcontrol/   (props changed)
  stable/8/sbin/ddb/   (props changed)
  stable/8/sbin/devfs/   (props changed)
  stable/8/sbin/dhclient/   (props changed)
  stable/8/sbin/dump/   (props changed)
  stable/8/sbin/dumpfs/   (props changed)
  stable/8/sbin/fsck/   (props changed)
  stable/8/sbin/fsck_ffs/   (props changed)
  stable/8/sbin/geom/   (props changed)
  stable/8/sbin/geom/class/stripe/   (props changed)
  stable/8/sbin/ggate/   (props changed)
  stable/8/sbin/growfs/   (props changed)
  stable/8/sbin/ifconfig/   (props changed)
  stable/8/sbin/ipfw/   (props changed)
  stable/8/sbin/iscontrol/   (props changed)
  stable/8/sbin/mdconfig/   (props changed)
  stable/8/sbin/mksnap_ffs/   (props changed)
  stable/8/sbin/mount/   (props changed)
  stable/8/sbin/mount_cd9660/   (props changed)
  stable/8/sbin/mount_msdosfs/   (props changed)
  stable/8/sbin/mount_nfs/   (props changed)
  stable/8/sbin/natd/   (props changed)
  stable/8/sbin/newfs/   (props changed)
  stable/8/sbin/restore/   (props changed)
  stable/8/sbin/routed/   (props changed)
  stable/8/sbin/sysctl/   (props changed)
  stable/8/sbin/tunefs/   (props changed)
  stable/8/sbin/umount/   (props changed)
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/net/   (props changed)

Modified: stable/8/sbin/ifconfig/ifconfig.c
==============================================================================
--- stable/8/sbin/ifconfig/ifconfig.c   Fri Apr  2 05:05:51 2010        
(r206068)
+++ stable/8/sbin/ifconfig/ifconfig.c   Fri Apr  2 05:12:46 2010        
(r206069)
@@ -865,7 +865,7 @@ unsetifdescr(const char *val, int value,
 #define        IFCAPBITS \
 "\020\1RXCSUM\2TXCSUM\3NETCONS\4VLAN_MTU\5VLAN_HWTAGGING\6JUMBO_MTU\7POLLING" \
 "\10VLAN_HWCSUM\11TSO4\12TSO6\13LRO\14WOL_UCAST\15WOL_MCAST\16WOL_MAGIC" \
-"\21VLAN_HWFILTER\23VLAN_HWTSO"
+"\21VLAN_HWFILTER\23VLAN_HWTSO\24LINKSTATE"
 
 /*
  * Print the status of the interface.  If an address family was

Modified: stable/8/sys/net/if.h
==============================================================================
--- stable/8/sys/net/if.h       Fri Apr  2 05:05:51 2010        (r206068)
+++ stable/8/sys/net/if.h       Fri Apr  2 05:12:46 2010        (r206069)
@@ -219,6 +219,7 @@ struct if_data {
 #define        IFCAP_VLAN_HWFILTER     0x10000 /* interface hw can filter vlan 
tag */
 #define        IFCAP_POLLING_NOCOUNT   0x20000 /* polling ticks cannot be 
fragmented */
 #define        IFCAP_VLAN_HWTSO        0x40000 /* can do IFCAP_TSO on VLANs */
+#define        IFCAP_LINKSTATE         0x80000 /* the runtime link state is 
dynamic */
 
 #define IFCAP_HWCSUM   (IFCAP_RXCSUM | IFCAP_TXCSUM)
 #define        IFCAP_TSO       (IFCAP_TSO4 | IFCAP_TSO6)

Modified: stable/8/sys/net/if_tap.c
==============================================================================
--- stable/8/sys/net/if_tap.c   Fri Apr  2 05:05:51 2010        (r206068)
+++ stable/8/sys/net/if_tap.c   Fri Apr  2 05:12:46 2010        (r206069)
@@ -443,6 +443,8 @@ tapcreate(struct cdev *dev)
        ifp->if_mtu = ETHERMTU;
        ifp->if_flags = (IFF_BROADCAST|IFF_SIMPLEX|IFF_MULTICAST);
        ifp->if_snd.ifq_maxlen = ifqmaxlen;
+       ifp->if_capabilities |= IFCAP_LINKSTATE;
+       ifp->if_capenable |= IFCAP_LINKSTATE;
 
        dev->si_drv1 = tp;
        tp->tap_dev = dev;

Modified: stable/8/sys/net/if_tun.c
==============================================================================
--- stable/8/sys/net/if_tun.c   Fri Apr  2 05:05:51 2010        (r206068)
+++ stable/8/sys/net/if_tun.c   Fri Apr  2 05:12:46 2010        (r206069)
@@ -386,6 +386,8 @@ tuncreate(const char *name, struct cdev 
        ifp->if_snd.ifq_drv_maxlen = 0;
        IFQ_SET_READY(&ifp->if_snd);
        knlist_init_mtx(&sc->tun_rsel.si_note, NULL);
+       ifp->if_capabilities |= IFCAP_LINKSTATE;
+       ifp->if_capenable |= IFCAP_LINKSTATE;
 
        if_attach(ifp);
        bpfattach(ifp, DLT_NULL, sizeof(u_int32_t));

Modified: stable/8/sys/net/route.h
==============================================================================
--- stable/8/sys/net/route.h    Fri Apr  2 05:05:51 2010        (r206068)
+++ stable/8/sys/net/route.h    Fri Apr  2 05:12:46 2010        (r206069)
@@ -319,8 +319,7 @@ struct rt_addrinfo {
 
 #ifdef _KERNEL
 
-#define RT_LINK_IS_UP(ifp)     (((ifp)->if_flags &                 \
-                                 (IFF_LOOPBACK | IFF_POINTOPOINT)) \
+#define RT_LINK_IS_UP(ifp)     (!((ifp)->if_capabilities & IFCAP_LINKSTATE) \
                                 || (ifp)->if_link_state == LINK_STATE_UP)
 
 #define        RT_LOCK_INIT(_rt) \
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to