Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Mar 2010 17:59:12 +0000 (UTC)
From:      Qing Li <qingli@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r205222 - in head: sbin/ifconfig sys/net
Message-ID:  <201003161759.o2GHxCt6054727@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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) \



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003161759.o2GHxCt6054727>