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
mailing list