svn commit: r205222 - in head: sbin/ifconfig sys/net
Qing Li
qingli at FreeBSD.org
Tue Mar 16 17:59:13 UTC 2010
Author: qingli
Date: Tue Mar 16 17:59:12 2010
New Revision: 205222
URL: http://svn.freebsd.org/changeset/base/205222
Log:
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
MFC after: 3 days
Modified:
head/sbin/ifconfig/ifconfig.c
head/sys/net/if.h
head/sys/net/if_tap.c
head/sys/net/if_tun.c
head/sys/net/route.h
Modified: head/sbin/ifconfig/ifconfig.c
==============================================================================
--- head/sbin/ifconfig/ifconfig.c Tue Mar 16 17:45:16 2010 (r205221)
+++ head/sbin/ifconfig/ifconfig.c Tue Mar 16 17:59:12 2010 (r205222)
@@ -881,7 +881,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: head/sys/net/if.h
==============================================================================
--- head/sys/net/if.h Tue Mar 16 17:45:16 2010 (r205221)
+++ head/sys/net/if.h Tue Mar 16 17:59:12 2010 (r205222)
@@ -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: head/sys/net/if_tap.c
==============================================================================
--- head/sys/net/if_tap.c Tue Mar 16 17:45:16 2010 (r205221)
+++ head/sys/net/if_tap.c Tue Mar 16 17:59:12 2010 (r205222)
@@ -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: head/sys/net/if_tun.c
==============================================================================
--- head/sys/net/if_tun.c Tue Mar 16 17:45:16 2010 (r205221)
+++ head/sys/net/if_tun.c Tue Mar 16 17:59:12 2010 (r205222)
@@ -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: head/sys/net/route.h
==============================================================================
--- head/sys/net/route.h Tue Mar 16 17:45:16 2010 (r205221)
+++ head/sys/net/route.h Tue Mar 16 17:59:12 2010 (r205222)
@@ -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) \
More information about the svn-src-all
mailing list