svn commit: r231412 - stable/8/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Fri Feb 10 19:40:20 UTC 2012


Author: tuexen
Date: Fri Feb 10 19:40:19 2012
New Revision: 231412
URL: http://svn.freebsd.org/changeset/base/231412

Log:
  MFC r218371:
  1) Use same scheme Michael and I discussed for a selected for a flowid
  2) If flowid is not set, arrange so it is stored.
  3) If flowid is set by lower layer, use it.
  From rrs at .

Modified:
  stable/8/sys/netinet/sctp_input.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/boot/   (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/e1000/   (props changed)

Modified: stable/8/sys/netinet/sctp_input.c
==============================================================================
--- stable/8/sys/netinet/sctp_input.c	Fri Feb 10 19:37:23 2012	(r231411)
+++ stable/8/sys/netinet/sctp_input.c	Fri Feb 10 19:40:19 2012	(r231412)
@@ -5948,32 +5948,32 @@ sctp_input(struct mbuf *m, int off)
 	struct sctphdr *sh;
 	int offset;
 	int cpu_to_use;
-	uint32_t tag;
+	uint32_t flowid, tag;
 
 	if (mp_ncpus > 1) {
-		ip = mtod(m, struct ip *);
-		offset = off + sizeof(*sh);
-		if (SCTP_BUF_LEN(m) < offset) {
-			if ((m = m_pullup(m, offset)) == 0) {
-				SCTP_STAT_INCR(sctps_hdrops);
-				return;
-			}
-			ip = mtod(m, struct ip *);
-		}
-		sh = (struct sctphdr *)((caddr_t)ip + off);
-		if (sh->v_tag) {
-			tag = htonl(sh->v_tag);
+		if (m->m_flags & M_FLOWID) {
+			flowid = m->m_pkthdr.flowid;
 		} else {
 			/*
-			 * Distribute new INIT's to all CPU's don't just
-			 * pick on 0.
+			 * No flow id built by lower layers fix it so we
+			 * create one.
 			 */
-			struct timeval tv;
-
-			(void)SCTP_GETTIME_TIMEVAL(&tv);
-			tag = (uint32_t) tv.tv_usec;
+			ip = mtod(m, struct ip *);
+			offset = off + sizeof(*sh);
+			if (SCTP_BUF_LEN(m) < offset) {
+				if ((m = m_pullup(m, offset)) == 0) {
+					SCTP_STAT_INCR(sctps_hdrops);
+					return;
+				}
+				ip = mtod(m, struct ip *);
+			}
+			sh = (struct sctphdr *)((caddr_t)ip + off);
+			tag = htonl(sh->v_tag);
+			flowid = tag ^ ntohs(sh->dest_port) ^ ntohs(sh->src_port);
+			m->m_pkthdr.flowid = flowid;
+			m->m_flags |= M_FLOWID;
 		}
-		cpu_to_use = sctp_cpuarry[tag % mp_ncpus];
+		cpu_to_use = sctp_cpuarry[flowid % mp_ncpus];
 		sctp_queue_to_mcore(m, off, cpu_to_use);
 		return;
 	}


More information about the svn-src-stable-8 mailing list