Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Mar 2007 13:54:55 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 115202 for review
Message-ID:  <200703011354.l21Dst1k085884@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=115202

Change 115202 by jhb@jhb_zion on 2007/03/01 13:54:06

	IFC @115200.

Affected files ...

.. //depot/projects/smpng/sys/arm/at91/ohci_atmelarm.c#2 integrate
.. //depot/projects/smpng/sys/dev/em/if_em.c#80 integrate
.. //depot/projects/smpng/sys/dev/usb/umass.c#61 integrate
.. //depot/projects/smpng/sys/dev/usb/usbdevs#101 integrate
.. //depot/projects/smpng/sys/kern/kern_mutex.c#141 integrate
.. //depot/projects/smpng/sys/kern/kern_sx.c#41 integrate
.. //depot/projects/smpng/sys/kern/uipc_usrreq.c#74 integrate
.. //depot/projects/smpng/sys/net/if_vlan_var.h#18 integrate
.. //depot/projects/smpng/sys/netinet/ip_mroute.c#54 integrate
.. //depot/projects/smpng/sys/netinet/ip_output.c#90 integrate
.. //depot/projects/smpng/sys/netinet/tcp_input.c#96 integrate
.. //depot/projects/smpng/sys/netinet/tcp_output.c#43 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_mroute.c#30 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_mroute.h#7 integrate
.. //depot/projects/smpng/sys/sys/priv.h#3 integrate
.. //depot/projects/smpng/sys/sys/systm.h#80 integrate

Differences ...

==== //depot/projects/smpng/sys/arm/at91/ohci_atmelarm.c#2 (text) ====

@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/ohci_atmelarm.c,v 1.1 2006/03/18 01:45:29 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/ohci_atmelarm.c,v 1.2 2007/03/01 09:10:55 piso Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -99,8 +99,8 @@
 	}
 	device_set_ivars(sc->sc_ohci.sc_bus.bdev, &sc->sc_ohci.sc_bus);
 
-	err = bus_setup_intr(dev, sc->sc_ohci.irq_res, INTR_TYPE_BIO, ohci_intr, sc,
-	    &sc->sc_ohci.ih);
+	err = bus_setup_intr(dev, sc->sc_ohci.irq_res, INTR_TYPE_BIO, NULL, 
+	    ohci_intr, sc, &sc->sc_ohci.ih);
 	if (err) {
 		err = ENXIO;
 		goto error;

==== //depot/projects/smpng/sys/dev/em/if_em.c#80 (text+ko) ====

@@ -31,7 +31,7 @@
 
 ***************************************************************************/
 
-/*$FreeBSD: src/sys/dev/em/if_em.c,v 1.169 2007/02/23 12:18:38 piso Exp $*/
+/*$FreeBSD: src/sys/dev/em/if_em.c,v 1.171 2007/02/28 09:04:46 ru Exp $*/
 
 #ifdef HAVE_KERNEL_OPTION_HEADERS
 #include "opt_device_polling.h"

==== //depot/projects/smpng/sys/dev/usb/umass.c#61 (text+ko) ====

@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/usb/umass.c,v 1.141 2007/02/21 07:46:40 n_hibma Exp $
+ *	$FreeBSD: src/sys/dev/usb/umass.c,v 1.142 2007/02/27 22:33:50 imp Exp $
  *	$NetBSD: umass.c,v 1.28 2000/04/02 23:46:53 augustss Exp $
  */
 
@@ -317,6 +317,10 @@
 #	define NO_INQUIRY_EVPD		0x0800
 	/* Pad all RBC requests to 12 bytes. */
 #	define RBC_PAD_TO_12		0x1000
+	/* Device reports number of sectors from READ_CAPACITY, not max
+	 * sector number.
+	 */
+#	define READ_CAPACITY_OFFBY1	0x2000
 };
 
 static struct umass_devdescr_t umass_devdescrs[] = {
@@ -446,6 +450,10 @@
 	  UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
 	  IGNORE_RESIDUE | NO_START_STOP
 	},
+	{ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR31, RID_WILDCARD,
+	  UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
+	  READ_CAPACITY_OFFBY1
+	},
 	{ USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDCZ2_256, RID_WILDCARD,
 	  UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
 	  IGNORE_RESIDUE
@@ -2698,6 +2706,16 @@
 	switch (status) {
 	case STATUS_CMD_OK:
 		ccb->ccb_h.status = CAM_REQ_CMP;
+		if ((sc->quirks & READ_CAPACITY_OFFBY1) &&
+		    (ccb->ccb_h.func_code == XPT_SCSI_IO) &&
+		    (csio->cdb_io.cdb_bytes[0] == READ_CAPACITY)) {
+			struct scsi_read_capacity_data *rcap;
+			uint32_t maxsector;
+
+			rcap = (struct scsi_read_capacity_data *)csio->data_ptr;
+			maxsector = scsi_4btoul(rcap->addr) - 1;
+			scsi_ulto4b(maxsector, rcap->addr);
+		}
 		xpt_done(ccb);
 		break;
 

==== //depot/projects/smpng/sys/dev/usb/usbdevs#101 (text+ko) ====

@@ -1,4 +1,4 @@
-$FreeBSD: src/sys/dev/usb/usbdevs,v 1.287 2007/02/09 15:59:28 le Exp $
+$FreeBSD: src/sys/dev/usb/usbdevs,v 1.288 2007/02/27 22:27:53 imp Exp $
 /* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */
 
 /*-
@@ -1545,8 +1545,8 @@
 
 /* SanDisk products */
 product SANDISK SDDR05A		0x0001	ImageMate SDDR-05a
+product SANDISK SDDR31		0x0002	ImageMate SDDR-31
 product SANDISK SDDR05		0x0005	ImageMate SDDR-05
-product SANDISK SDDR31		0x0002	ImageMate SDDR-31
 product SANDISK SDDR12		0x0100	ImageMate SDDR-12
 product SANDISK SDDR09		0x0200	ImageMate SDDR-09
 product SANDISK SDDR75		0x0810	ImageMate SDDR-75

==== //depot/projects/smpng/sys/kern/kern_mutex.c#141 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_mutex.c,v 1.181 2007/02/27 06:42:04 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_mutex.c,v 1.182 2007/03/01 09:35:48 kmacy Exp $");
 
 #include "opt_adaptive_mutexes.h"
 #include "opt_ddb.h"
@@ -157,9 +157,9 @@
 void
 _mtx_unlock_flags(struct mtx *m, int opts, const char *file, int line)
 {
-
+#ifdef LOCK_PROFILING
 	struct lock_object lo;
-	
+#endif	
 	MPASS(curthread != NULL);
 	KASSERT(m->mtx_lock != MTX_DESTROYED,
 	    ("mtx_unlock() of destroyed mutex @ %s:%d", file, line));
@@ -176,7 +176,9 @@
 	m->mtx_object.lo_flags &= ~LO_CONTESTED;
 #endif
 	_rel_sleep_lock(m, curthread, opts, file, line);
+#ifdef LOCK_PROFILING
 	lock_profile_release_lock(&lo);
+#endif	
 }
 
 void
@@ -200,9 +202,9 @@
 void
 _mtx_unlock_spin_flags(struct mtx *m, int opts, const char *file, int line)
 {
-
+#ifdef LOCK_PROFILING
 	struct lock_object lo;
-	
+#endif	
 	MPASS(curthread != NULL);
 	KASSERT(m->mtx_lock != MTX_DESTROYED,
 	    ("mtx_unlock_spin() of destroyed mutex @ %s:%d", file, line));
@@ -218,7 +220,9 @@
 	m->mtx_object.lo_flags &= ~LO_CONTESTED;
 #endif
 	_rel_spin_lock(m);
+#ifdef LOCK_PROFILING	
 	lock_profile_release_lock(&lo);
+#endif
 }
 
 /*

==== //depot/projects/smpng/sys/kern/kern_sx.c#41 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_sx.c,v 1.34 2007/02/27 06:42:04 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_sx.c,v 1.35 2007/03/01 09:35:48 kmacy Exp $");
 
 #include "opt_ddb.h"
 
@@ -228,9 +228,10 @@
 void
 _sx_sunlock(struct sx *sx, const char *file, int line)
 {
+#ifdef LOCK_PROFILING
 	struct lock_object lo;
 	int count = -1;
-	
+#endif	
 	_sx_assert(sx, SX_SLOCKED, file, line);
 	mtx_lock(sx->sx_lock);
 
@@ -262,15 +263,18 @@
 	LOCK_LOG_LOCK("SUNLOCK", &sx->sx_object, 0, 0, file, line);
 
 	mtx_unlock(sx->sx_lock);
+#ifdef LOCK_PROFILING	
 	if (count == 0)
 		lock_profile_release_lock(&lo);
-
+#endif
 }
 
 void
 _sx_xunlock(struct sx *sx, const char *file, int line)
 {
+#ifdef LOCK_PROFILING	
 	struct lock_object lo;
+#endif
 	
 	_sx_assert(sx, SX_XLOCKED, file, line);
 	mtx_lock(sx->sx_lock);
@@ -298,7 +302,9 @@
 	LOCK_LOG_LOCK("XUNLOCK", &sx->sx_object, 0, 0, file, line);
 
 	mtx_unlock(sx->sx_lock);
+#ifdef LOCK_PROFILING	
 	lock_profile_release_lock(&lo);
+#endif
 }
 
 int

==== //depot/projects/smpng/sys/kern/uipc_usrreq.c#74 (text+ko) ====

@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/uipc_usrreq.c,v 1.197 2007/02/26 20:47:52 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/uipc_usrreq.c,v 1.199 2007/03/01 09:00:42 rwatson Exp $");
 
 #include "opt_mac.h"
 
@@ -774,21 +774,18 @@
 
 		unp2 = unp->unp_conn;
 		if (nam != NULL) {
+			UNP_GLOBAL_WLOCK_ASSERT();
 			if (unp2 != NULL) {
 				error = EISCONN;
-				UNP_PCB_LOCK(unp);
 				break;
 			}
 			error = unp_connect(so, nam, td);
-			UNP_PCB_LOCK(unp);
 			if (error)
 				break;
 			unp2 = unp->unp_conn;
 		} else {
-			UNP_PCB_LOCK(unp);
 			if (unp2 == NULL) {
 				error = ENOTCONN;
-				UNP_PCB_LOCK(unp);
 				break;
 			}
 		}
@@ -799,19 +796,19 @@
 		 * return the slightly counter-intuitive but otherwise
 		 * correct error that the socket is not connected.
 		 */
-		UNP_PCB_LOCK_ASSERT(unp);
-		UNP_PCB_LOCK(unp2);
 		if (unp2 == NULL) {
 			error = ENOTCONN;
 			break;
 		}
-		so2 = unp2->unp_socket;
+		/* Lockless read. */
+		if (unp2->unp_flags & UNP_WANTCRED)
+			control = unp_addsockcred(td, control);
+		UNP_PCB_LOCK(unp);
 		if (unp->unp_addr != NULL)
 			from = (struct sockaddr *)unp->unp_addr;
 		else
 			from = &sun_noname;
-		if (unp2->unp_flags & UNP_WANTCRED)
-			control = unp_addsockcred(td, control);
+		so2 = unp2->unp_socket;
 		SOCKBUF_LOCK(&so2->so_rcv);
 		if (sbappendaddr_locked(&so2->so_rcv, from, m, control)) {
 			sorwakeup_locked(so2);
@@ -821,9 +818,13 @@
 			SOCKBUF_UNLOCK(&so2->so_rcv);
 			error = ENOBUFS;
 		}
-		if (nam != NULL)
+		if (nam != NULL) {
+			UNP_GLOBAL_WLOCK_ASSERT();
+			UNP_PCB_LOCK(unp2);
 			unp_disconnect(unp, unp2);
-		UNP_PCB_UNLOCK(unp2);
+			UNP_PCB_UNLOCK(unp2);
+		}
+		UNP_PCB_UNLOCK(unp);
 		break;
 	}
 
@@ -836,18 +837,15 @@
 		 */
 		if ((so->so_state & SS_ISCONNECTED) == 0) {
 			if (nam != NULL) {
+				UNP_GLOBAL_WLOCK_ASSERT();
 				error = unp_connect(so, nam, td);
-				UNP_PCB_LOCK(unp);
 				if (error)
 					break;	/* XXX */
 			} else {
 				error = ENOTCONN;
-				UNP_PCB_LOCK(unp);
 				break;
 			}
-		} else
-			UNP_PCB_LOCK(unp);
-		UNP_PCB_LOCK_ASSERT(unp);
+		}
 
 		/* Lockless read. */
 		if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
@@ -874,13 +872,12 @@
 			error = ENOTCONN;
 			break;
 		}
+		so2 = unp2->unp_socket;
 		UNP_PCB_LOCK(unp2);
-		so2 = unp2->unp_socket;
 		SOCKBUF_LOCK(&so2->so_rcv);
 		if (unp2->unp_flags & UNP_WANTCRED) {
 			/*
-			 * Credentials are passed only once on
-			 * SOCK_STREAM.
+			 * Credentials are passed only once on SOCK_STREAM.
 			 */
 			unp2->unp_flags &= ~UNP_WANTCRED;
 			control = unp_addsockcred(td, control);
@@ -915,14 +912,14 @@
 	}
 
 	/*
-	 * SEND_EOF is equivalent to a SEND followed by
-	 * a SHUTDOWN.
+	 * SEND_EOF is equivalent to a SEND followed by a SHUTDOWN.
 	 */
 	if (flags & PRUS_EOF) {
+		UNP_PCB_LOCK(unp);
 		socantsendmore(so);
 		unp_shutdown(unp);
+		UNP_PCB_UNLOCK(unp);
 	}
-	UNP_PCB_UNLOCK(unp);
 
 	if ((nam != NULL) || (flags & PRUS_EOF))
 		UNP_GLOBAL_WUNLOCK();

==== //depot/projects/smpng/sys/net/if_vlan_var.h#18 (text+ko) ====

@@ -26,7 +26,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/net/if_vlan_var.h,v 1.25 2006/09/17 13:33:29 andre Exp $
+ * $FreeBSD: src/sys/net/if_vlan_var.h,v 1.26 2007/02/28 22:05:30 bms Exp $
  */
 
 #ifndef _NET_IF_VLAN_VAR_H_
@@ -40,9 +40,40 @@
 	u_int16_t evl_proto;
 };
 
-#define EVL_VLID_MASK	0x0FFF
-#define	EVL_VLANOFTAG(tag) ((tag) & EVL_VLID_MASK)
-#define	EVL_PRIOFTAG(tag) (((tag) >> 13) & 7)
+#define	EVL_VLID_MASK		0x0FFF
+#define	EVL_PRI_MASK		0xE000
+#define	EVL_VLANOFTAG(tag)	((tag) & EVL_VLID_MASK)
+#define	EVL_PRIOFTAG(tag)	(((tag) >> 13) & 7)
+#define	EVL_CFIOFTAG(tag)	(((tag) >> 12) & 1)
+#define	EVL_MAKETAG(vlid, pri, cfi)					\
+	((((((pri) & 7) << 1) | ((cfi) & 1)) << 12) | ((vlid) & EVL_VLID_MASK))
+
+/* Set the VLAN ID in an mbuf packet header non-destructively. */
+#define EVL_APPLY_VLID(m, vlid)						\
+	do {								\
+		if ((m)->m_flags & M_VLANTAG) {				\
+			(m)->m_pkthdr.ether_vtag &= EVL_VLID_MASK;	\
+			(m)->m_pkthdr.ether_vtag |= (vlid);		\
+		} else {						\
+			(m)->m_pkthdr.ether_vtag = (vlid);		\
+			(m)->m_flags |= M_VLANTAG;			\
+		}							\
+	} while (0)
+
+/* Set the priority ID in an mbuf packet header non-destructively. */
+#define EVL_APPLY_PRI(m, pri)						\
+	do {								\
+		if ((m)->m_flags & M_VLANTAG) {				\
+			uint16_t __vlantag = (m)->m_pkthdr.ether_vtag;	\
+			(m)->m_pkthdr.ether_vtag |= EVL_MAKETAG(	\
+			    EVL_VLANOFTAG(__vlantag), (pri),		\
+			    EVL_CFIOFTAG(__vlantag));			\
+		} else {						\
+			(m)->m_pkthdr.ether_vtag =			\
+			    EVL_MAKETAG(0, (pri), 0);			\
+			(m)->m_flags |= M_VLANTAG;			\
+		}							\
+	} while (0)
 
 /* sysctl(3) tags, for compatibility purposes */
 #define	VLANCTL_PROTO	1

==== //depot/projects/smpng/sys/netinet/ip_mroute.c#54 (text+ko) ====

@@ -52,7 +52,7 @@
  * and PIM-SMv2 and PIM-DM support, advanced API support,
  * bandwidth metering and signaling
  *
- * $FreeBSD: src/sys/netinet/ip_mroute.c,v 1.131 2007/02/25 14:22:03 bms Exp $
+ * $FreeBSD: src/sys/netinet/ip_mroute.c,v 1.132 2007/02/28 20:02:24 bms Exp $
  */
 
 #include "opt_inet.h"
@@ -146,6 +146,17 @@
     &mfctable, sizeof(mfctable), "S,*mfc[MFCTBLSIZ]",
     "Multicast Forwarding Table (struct *mfc[MFCTBLSIZ], netinet/ip_mroute.h)");
 
+static struct mtx mrouter_mtx;
+#define	MROUTER_LOCK()		mtx_lock(&mrouter_mtx)
+#define	MROUTER_UNLOCK()	mtx_unlock(&mrouter_mtx)
+#define	MROUTER_LOCK_ASSERT()	do {					\
+	mtx_assert(&mrouter_mtx, MA_OWNED);				\
+	NET_ASSERT_GIANT();						\
+} while (0)
+#define	MROUTER_LOCK_INIT()	\
+	mtx_init(&mrouter_mtx, "IPv4 multicast forwarding", NULL, MTX_DEF)
+#define	MROUTER_LOCK_DESTROY()	mtx_destroy(&mrouter_mtx)
+
 static struct mtx mfc_mtx;
 #define	MFC_LOCK()	mtx_lock(&mfc_mtx)
 #define	MFC_UNLOCK()	mtx_unlock(&mfc_mtx)
@@ -637,8 +648,6 @@
     callout_init(&bw_meter_ch, NET_CALLOUT_MPSAFE);
 }
 
-static struct mtx mrouter_mtx;
-
 static void
 if_detached_event(void *arg __unused, struct ifnet *ifp)
 {
@@ -650,9 +659,9 @@
     struct rtdetq *pq;
     struct rtdetq *npq;
 
-    mtx_lock(&mrouter_mtx);
+    MROUTER_LOCK();
     if (ip_mrouter == NULL) {
-	mtx_unlock(&mrouter_mtx);
+	MROUTER_UNLOCK();
     }
 
     /*
@@ -696,7 +705,7 @@
     MFC_UNLOCK();
     VIF_UNLOCK();
 
-    mtx_unlock(&mrouter_mtx);
+    MROUTER_UNLOCK();
 }
                         
 /*
@@ -715,17 +724,17 @@
     if (version != 1)
 	return ENOPROTOOPT;
 
-    mtx_lock(&mrouter_mtx);
+    MROUTER_LOCK();
 
     if (ip_mrouter != NULL) {
-	mtx_unlock(&mrouter_mtx);
+	MROUTER_UNLOCK();
 	return EADDRINUSE;
     }
 
     if_detach_event_tag = EVENTHANDLER_REGISTER(ifnet_departure_event, 
         if_detached_event, NULL, EVENTHANDLER_PRI_ANY);
     if (if_detach_event_tag == NULL) {
-	mtx_unlock(&mrouter_mtx);
+	MROUTER_UNLOCK();
 	return (ENOMEM);
     }
 
@@ -737,7 +746,7 @@
 
     ip_mrouter = so;
 
-    mtx_unlock(&mrouter_mtx);
+    MROUTER_UNLOCK();
 
     if (mrtdebug)
 	log(LOG_DEBUG, "ip_mrouter_init\n");
@@ -758,10 +767,10 @@
     struct mfc *rt;
     struct rtdetq *rte;
 
-    mtx_lock(&mrouter_mtx);
+    MROUTER_LOCK();
 
     if (ip_mrouter == NULL) {
-	mtx_unlock(&mrouter_mtx);
+	MROUTER_UNLOCK();
 	return EINVAL;
     }
 
@@ -826,7 +835,7 @@
 
     reg_vif_num = VIFI_INVALID;
 
-    mtx_unlock(&mrouter_mtx);
+    MROUTER_UNLOCK();
 
     if (mrtdebug)
 	log(LOG_DEBUG, "ip_mrouter_done\n");
@@ -3027,7 +3036,7 @@
 {
     switch (type) {
     case MOD_LOAD:
-	mtx_init(&mrouter_mtx, "mrouter initialization", NULL, MTX_DEF);
+	MROUTER_LOCK_INIT();
 	MFC_LOCK_INIT();
 	VIF_LOCK_INIT();
 	ip_mrouter_reset();
@@ -3040,7 +3049,7 @@
 		printf("ip_mroute: unable to attach pim encap\n");
 		VIF_LOCK_DESTROY();
 		MFC_LOCK_DESTROY();
-		mtx_destroy(&mrouter_mtx);
+		MROUTER_LOCK_DESTROY();
 		return (EINVAL);
 	}
 
@@ -3055,7 +3064,7 @@
 		}
 		VIF_LOCK_DESTROY();
 		MFC_LOCK_DESTROY();
-		mtx_destroy(&mrouter_mtx);
+		MROUTER_LOCK_DESTROY();
 		return (EINVAL);
 	}
 #endif
@@ -3131,7 +3140,7 @@
 
 	VIF_LOCK_DESTROY();
 	MFC_LOCK_DESTROY();
-	mtx_destroy(&mrouter_mtx);
+	MROUTER_LOCK_DESTROY();
 	break;
 
     default:

==== //depot/projects/smpng/sys/netinet/ip_output.c#90 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)ip_output.c	8.3 (Berkeley) 1/21/94
- * $FreeBSD: src/sys/netinet/ip_output.c,v 1.269 2006/12/10 13:44:00 bms Exp $
+ * $FreeBSD: src/sys/netinet/ip_output.c,v 1.270 2007/03/01 13:29:30 bms Exp $
  */
 
 #include "opt_ipfw.h"
@@ -188,30 +188,33 @@
 		dst->sin_addr = ip->ip_dst;
 	}
 	/*
-	 * If routing to interface only,
-	 * short circuit routing lookup.
+	 * If routing to interface only, short circuit routing lookup.
+	 * The use of an all-ones broadcast address implies this; an
+	 * interface is specified by the broadcast address of an interface,
+	 * or the destination address of a ptp interface.
 	 */
-	if (flags & IP_ROUTETOIF) {
-		if ((ia = ifatoia(ifa_ifwithdstaddr(sintosa(dst)))) == NULL &&
-		    (ia = ifatoia(ifa_ifwithnet(sintosa(dst)))) == NULL) {
+	if (flags & IP_SENDONES) {
+		if ((ia = ifatoia(ifa_ifwithbroadaddr(sintosa(dst)))) == NULL &&
+		    (ia = ifatoia(ifa_ifwithdstaddr(sintosa(dst)))) == NULL) {
 			ipstat.ips_noroute++;
 			error = ENETUNREACH;
 			goto bad;
 		}
+		ip->ip_dst.s_addr = INADDR_BROADCAST;
+		dst->sin_addr = ip->ip_dst;
 		ifp = ia->ia_ifp;
 		ip->ip_ttl = 1;
-		isbroadcast = in_broadcast(dst->sin_addr, ifp);
-	} else if (flags & IP_SENDONES) {
-		if ((ia = ifatoia(ifa_ifwithbroadaddr(sintosa(dst)))) == NULL) {
+		isbroadcast = 1;
+	} else if (flags & IP_ROUTETOIF) {
+		if ((ia = ifatoia(ifa_ifwithdstaddr(sintosa(dst)))) == NULL &&
+		    (ia = ifatoia(ifa_ifwithnet(sintosa(dst)))) == NULL) {
 			ipstat.ips_noroute++;
 			error = ENETUNREACH;
 			goto bad;
 		}
 		ifp = ia->ia_ifp;
-		ip->ip_dst.s_addr = INADDR_BROADCAST;
-		dst->sin_addr = ip->ip_dst;
 		ip->ip_ttl = 1;
-		isbroadcast = 1;
+		isbroadcast = in_broadcast(dst->sin_addr, ifp);
 	} else if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) &&
 	    imo != NULL && imo->imo_multicast_ifp != NULL) {
 		/*

==== //depot/projects/smpng/sys/netinet/tcp_input.c#96 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)tcp_input.c	8.12 (Berkeley) 5/24/95
- * $FreeBSD: src/sys/netinet/tcp_input.c,v 1.314 2007/02/26 22:25:20 mohans Exp $
+ * $FreeBSD: src/sys/netinet/tcp_input.c,v 1.315 2007/02/28 20:48:00 mohans Exp $
  */
 
 #include "opt_ipfw.h"		/* for ipfw_fwd		*/
@@ -1155,6 +1155,8 @@
 			tp->ts_recent = to.to_tsval;
 			tp->ts_recent_age = ticks;
 		}
+		/* Initial send window, already scaled. */
+		tp->snd_wnd = th->th_win;
 		if (to.to_flags & TOF_MSS)
 			tcp_mss(tp, to.to_mss);
 		if (tp->sack_enable) {
@@ -1484,9 +1486,6 @@
 		if ((thflags & TH_SYN) == 0)
 			goto drop;
 
-		/* Initial send window, already scaled. */
-		tp->snd_wnd = th->th_win;
-
 		tp->irs = th->th_seq;
 		tcp_rcvseqinit(tp);
 		if (thflags & TH_ACK) {

==== //depot/projects/smpng/sys/netinet/tcp_output.c#43 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)tcp_output.c	8.4 (Berkeley) 5/24/95
- * $FreeBSD: src/sys/netinet/tcp_output.c,v 1.122 2007/02/01 18:32:13 andre Exp $
+ * $FreeBSD: src/sys/netinet/tcp_output.c,v 1.125 2007/03/01 13:12:09 andre Exp $
  */
 
 #include "opt_inet.h"
@@ -801,13 +801,14 @@
 	 * IP, TCP and Options length to keep ip->ip_len from
 	 * overflowing.  Prevent the last segment from being
 	 * fractional thus making them all equal sized and set
-	 * the flag to continue sending.
+	 * the flag to continue sending.  TSO is disabled when
+	 * IP options or IPSEC are present.
 	 */
 	if (len + optlen + ipoptlen > tp->t_maxopd) {
 		flags &= ~TH_FIN;
 		if (tso) {
 			if (len > TCP_MAXWIN - hdrlen) {
-				len = TCP_MAXWIN - hdrlen;
+				len = TCP_MAXWIN - hdrlen - optlen;
 				len = len - (len % (tp->t_maxopd - optlen));
 				sendalot = 1;
 			} else if (tp->t_flags & TF_NEEDFIN)
@@ -1214,39 +1215,32 @@
 		 * XXX: It is a POLA question whether calling tcp_drop right
 		 * away would be the really correct behavior instead.
 		 */
-		if (error != EPERM && ((tp->t_flags & TF_FORCEDATA) == 0 ||
-		    !callout_active(tp->tt_persist))) {
-			/*
-			 * No need to check for TH_FIN here because
-			 * the TF_SENTFIN flag handles that case.
-			 */
-			if ((flags & TH_SYN) == 0) {
-				if (sack_rxmit) {
-					p->rxmit -= len;
-					tp->sackhint.sack_bytes_rexmit -= len;
-					KASSERT(tp->sackhint.sack_bytes_rexmit
-						>= 0,
-						("sackhint bytes rtx >= 0"));
-				} else
-					tp->snd_nxt -= len;
-			}
+		if (((tp->t_flags & TF_FORCEDATA) == 0 ||
+		    !callout_active(tp->tt_persist)) &&
+		    ((flags & TH_SYN) == 0) &&
+		    (error != EPERM)) {
+			if (sack_rxmit) {
+				p->rxmit -= len;
+				tp->sackhint.sack_bytes_rexmit -= len;
+				KASSERT(tp->sackhint.sack_bytes_rexmit >= 0,
+				    ("sackhint bytes rtx >= 0"));
+			} else
+				tp->snd_nxt -= len;
 		}
-		if (error == EPERM) {
+out:
+		SOCKBUF_UNLOCK_ASSERT(&so->so_snd);	/* Check gotos. */
+		switch (error) {
+		case EPERM:
 			tp->t_softerror = error;
 			return (error);
-		}
-
-out:
-		SOCKBUF_UNLOCK_ASSERT(&so->so_snd);	/* Check gotos. */
-		if (error == ENOBUFS) {
+		case ENOBUFS:
 	                if (!callout_active(tp->tt_rexmt) &&
 			    !callout_active(tp->tt_persist))
 	                        callout_reset(tp->tt_rexmt, tp->t_rxtcur,
 				    tcp_timer_rexmt, tp);
 			tp->snd_cwnd = tp->t_maxseg;
 			return (0);
-		}
-		if (error == EMSGSIZE) {
+		case EMSGSIZE:
 			/*
 			 * For some reason the interface we used initially
 			 * to send segments changed to another or lowered
@@ -1265,14 +1259,19 @@
 			if (tso)
 				tp->t_flags &= ~TF_TSO;
 			tcp_mtudisc(tp->t_inpcb, 0);
-			return 0;
-		}
-		if ((error == EHOSTUNREACH || error == ENETDOWN)
-		    && TCPS_HAVERCVDSYN(tp->t_state)) {
-			tp->t_softerror = error;
 			return (0);
+		case EHOSTDOWN:
+		case EHOSTUNREACH:
+		case ENETDOWN:
+		case ENETUNREACH:
+			if (TCPS_HAVERCVDSYN(tp->t_state)) {
+				tp->t_softerror = error;
+				return (0);
+			}
+			/* FALLTHROUGH */
+		default:
+			return (error);
 		}
-		return (error);
 	}
 	tcpstat.tcps_sndtotal++;
 

==== //depot/projects/smpng/sys/netinet6/ip6_mroute.c#30 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$FreeBSD: src/sys/netinet6/ip6_mroute.c,v 1.41 2007/02/24 21:09:35 bms Exp $	*/
+/*	$FreeBSD: src/sys/netinet6/ip6_mroute.c,v 1.44 2007/02/28 21:58:37 bms Exp $	*/
 /*	$KAME: ip6_mroute.c,v 1.58 2001/12/18 02:36:31 itojun Exp $	*/
 
 /*-
@@ -121,6 +121,7 @@
 
 static MALLOC_DEFINE(M_MRTABLE6, "mf6c", "multicast forwarding cache entry");
 
+/* XXX: this is a very common idiom; move to <sys/mbuf.h> ? */
 #define M_HASCL(m) ((m)->m_flags & M_EXT)
 
 static int ip6_mdq __P((struct mbuf *, struct ifnet *, struct mf6c *));
@@ -133,6 +134,8 @@
 	    struct mbuf *));
 
 extern struct domain inet6domain;
+
+/* XXX: referenced from ip_mroute.c for dynamically loading this code. */
 struct ip6protosw in6_pim_protosw = {
 	.pr_type =		SOCK_RAW,
 	.pr_domain =		&inet6domain,
@@ -144,18 +147,13 @@
 	.pr_usrreqs =		&rip6_usrreqs
 };
 
-/*
- * Globals.  All but ip6_mrtproto and mrt6stat could be static,
- * except for netstat or debugging purposes.
- */
-int		ip6_mrouter_ver = 0;
-int		ip6_mrtproto = IPPROTO_PIM;    /* for netstat only */
+static int ip6_mrouter_ver = 0;
 
 SYSCTL_DECL(_net_inet6);
 SYSCTL_DECL(_net_inet6_ip6);
 SYSCTL_NODE(_net_inet6, IPPROTO_PIM, pim, CTLFLAG_RW, 0, "PIM");
 
-struct mrt6stat	mrt6stat;
+static struct mrt6stat mrt6stat;
 SYSCTL_STRUCT(_net_inet6_ip6, OID_AUTO, mrt6stat, CTLFLAG_RW,
     &mrt6stat, mrt6stat,
     "Multicast Routing Statistics (struct mrt6stat, netinet6/ip6_mroute.h)");
@@ -163,13 +161,13 @@
 #define NO_RTE_FOUND 	0x1
 #define RTE_FOUND	0x2
 
-struct mf6c	*mf6ctable[MF6CTBLSIZ];
+static struct mf6c *mf6ctable[MF6CTBLSIZ];
 SYSCTL_OPAQUE(_net_inet6_ip6, OID_AUTO, mf6ctable, CTLFLAG_RD,
     &mf6ctable, sizeof(mf6ctable), "S,*mf6ctable[MF6CTBLSIZ]",
     "Multicast Forwarding Table (struct *mf6ctable[MF6CTBLSIZ], "
     "netinet6/ip6_mroute.h)");
 
-u_char		n6expire[MF6CTBLSIZ];
+static u_char n6expire[MF6CTBLSIZ];
 
 static struct mif6 mif6table[MAXMIFS];
 SYSCTL_OPAQUE(_net_inet6_ip6, OID_AUTO, mif6table, CTLFLAG_RD,
@@ -177,7 +175,7 @@
     "Multicast Interfaces (struct mif[MAXMIFS], netinet6/ip6_mroute.h)");
 
 #ifdef MRT6DEBUG
-u_int		mrt6debug = 0;	  /* debug level 	*/
+static u_int mrt6debug = 0;		/* debug level */
 #define DEBUG_MFC	0x02
 #define DEBUG_FORWARD	0x04
 #define DEBUG_EXPIRE	0x08
@@ -234,9 +232,7 @@
 
 /*
  * Find a route for a given origin IPv6 address and Multicast group address.
- * Quality of service parameter to be added in the future!!!
  */
-
 #define MF6CFIND(o, g, rt) do { \
 	struct mf6c *_rt = mf6ctable[MF6CHASH(o,g)]; \
 	rt = NULL; \
@@ -258,6 +254,7 @@
 /*
  * Macros to compute elapsed time efficiently
  * Borrowed from Van Jacobson's scheduling code
+ * XXX: replace with timersub() ?
  */
 #define TV_DELTA(a, b, delta) do { \
 	    int xxs; \
@@ -277,12 +274,13 @@
 	    } \
 } while (/*CONSTCOND*/ 0)
 
+/* XXX: replace with timercmp(a, b, <) ? */
 #define TV_LT(a, b) (((a).tv_usec < (b).tv_usec && \
 	      (a).tv_sec <= (b).tv_sec) || (a).tv_sec < (b).tv_sec)
 
 #ifdef UPCALL_TIMING
 #define UPCALL_MAX	50
-u_long upcall_data[UPCALL_MAX + 1];
+static u_long upcall_data[UPCALL_MAX + 1];
 static void collate();
 #endif /* UPCALL_TIMING */
 
@@ -546,10 +544,6 @@
 			}
 		}
 	}
-#ifdef notyet
-	bzero((caddr_t)qtable, sizeof(qtable));
-	bzero((caddr_t)tbftable, sizeof(tbftable));
-#endif
 	bzero((caddr_t)mif6table, sizeof(mif6table));
 	nummifs = 0;
 
@@ -615,9 +609,6 @@
 	struct mif6 *mifp;
 	struct ifnet *ifp;
 	int error, s;
-#ifdef notyet
-	struct tbf *m_tbf = tbftable + mifcp->mif6c_mifi;
-#endif
 
 	if (mifcp->mif6c_mifi >= MAXMIFS)
 		return (EINVAL);
@@ -663,10 +654,7 @@
 	s = splnet();
 	mifp->m6_flags     = mifcp->mif6c_flags;
 	mifp->m6_ifp       = ifp;
-#ifdef notyet
-	/* scaling up here allows division by 1024 in critical code */
-	mifp->m6_rate_limit = mifcp->mif6c_rate_limit * 1024 / 1000;
-#endif
+
 	/* initialize per mif pkt counters */
 	mifp->m6_pkt_in    = 0;
 	mifp->m6_pkt_out   = 0;
@@ -726,10 +714,6 @@
 		}
 	}
 
-#ifdef notyet
-	bzero((caddr_t)qtable[*mifip], sizeof(qtable[*mifip]));
-	bzero((caddr_t)mifp->m6_tbf, sizeof(*(mifp->m6_tbf)));
-#endif
 	bzero((caddr_t)mifp, sizeof(*mifp));
 
 	/* Adjust nummifs down */

==== //depot/projects/smpng/sys/netinet6/ip6_mroute.h#7 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$FreeBSD: src/sys/netinet6/ip6_mroute.h,v 1.10 2007/02/24 11:38:47 bms Exp $	*/
+/*	$FreeBSD: src/sys/netinet6/ip6_mroute.h,v 1.11 2007/02/28 20:32:25 bms Exp $	*/
 /*	$KAME: ip6_mroute.h,v 1.19 2001/06/14 06:12:55 suz Exp $	*/
 
 /*-
@@ -103,9 +103,6 @@
 	mifi_t	    mif6c_mifi;	    	/* the index of the mif to be added  */
 	u_char	    mif6c_flags;     	/* MIFF_ flags defined below         */
 	u_short	    mif6c_pifi;		/* the index of the physical IF */
-#ifdef notyet
-	u_int	    mif6c_rate_limit;    /* max rate           		     */
-#endif
 };
 
 #define	MIFF_REGISTER	0x1	/* mif represents a register end-point */
@@ -209,9 +206,6 @@
 struct mif6 {
         u_char   	m6_flags;     	/* MIFF_ flags defined above         */
 	u_int      	m6_rate_limit; 	/* max rate			     */
-#ifdef notyet
-	struct tbf      *m6_tbf;      	/* token bucket structure at intf.   */
-#endif
 	struct in6_addr	m6_lcl_addr;   	/* local interface address           */
 	struct ifnet    *m6_ifp;     	/* pointer to interface              */
 	u_quad_t	m6_pkt_in;	/* # pkts in on interface            */

==== //depot/projects/smpng/sys/sys/priv.h#3 (text+ko) ====

@@ -26,7 +26,7 @@
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/sys/priv.h,v 1.5 2007/02/20 23:49:31 rwatson Exp $
+ * $FreeBSD: src/sys/sys/priv.h,v 1.6 2007/02/27 23:38:58 pjd Exp $
  */
 
 /*
@@ -303,7 +303,7 @@
 #define	PRIV_NET_ADDMULTI	405	/* Add multicast addr. to ifnet. */
 #define	PRIV_NET_DELMULTI	406	/* Delete multicast addr. from ifnet. */
 #define	PRIV_NET_HWIOCTL	407	/* Issue hardware ioctl on ifnet. */
-#define	PRIV_NET_SETLLADDR	408
+#define	PRIV_NET_SETLLADDR	408	/* Set interface link-level address. */
 #define	PRIV_NET_ADDIFGROUP	409	/* Add new interface group. */
 #define	PRIV_NET_DELIFGROUP	410	/* Delete interface group. */
 #define	PRIV_NET_IFCREATE	411	/* Create cloned interface. */

==== //depot/projects/smpng/sys/sys/systm.h#80 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)systm.h	8.7 (Berkeley) 3/29/95
- * $FreeBSD: src/sys/sys/systm.h,v 1.250 2007/02/23 16:22:09 jhb Exp $
+ * $FreeBSD: src/sys/sys/systm.h,v 1.251 2007/02/28 16:51:52 thomas Exp $
  */
 
 #ifndef _SYS_SYSTM_H_
@@ -271,7 +271,7 @@
 void	cpu_initclocks(void);
 void	usrinfoinit(void);
 
-/* Finalize the world. */
+/* Finalize the world */
 void	shutdown_nice(int);
 
 /* Timeouts */
@@ -285,7 +285,7 @@
 caddr_t	kern_timeout_callwheel_alloc(caddr_t v);
 void	kern_timeout_callwheel_init(void);
 
-/* Stubs for obsolete functions that used to be for interrupt  management */
+/* Stubs for obsolete functions that used to be for interrupt management */

>>> TRUNCATED FOR MAIL (1000 lines) <<<



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