Date: Sun, 1 Mar 2009 05:09:34 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r189206 - in user/kmacy/releng_7_fast_net/sys: netinet sys Message-ID: <200903010509.n2159YAV031240@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Sun Mar 1 05:09:34 2009 New Revision: 189206 URL: http://svn.freebsd.org/changeset/base/189206 Log: multiq step 5: flowid: allow TCP to track driver furnished flow identifier and pass it down to the driver in ip_output to give the driver the option of identifying flows to provide connection ordering while using multiple transmit queues Modified: user/kmacy/releng_7_fast_net/sys/netinet/in_pcb.h user/kmacy/releng_7_fast_net/sys/netinet/ip_output.c user/kmacy/releng_7_fast_net/sys/netinet/tcp_input.c user/kmacy/releng_7_fast_net/sys/sys/mbuf.h Modified: user/kmacy/releng_7_fast_net/sys/netinet/in_pcb.h ============================================================================== --- user/kmacy/releng_7_fast_net/sys/netinet/in_pcb.h Sun Mar 1 04:59:54 2009 (r189205) +++ user/kmacy/releng_7_fast_net/sys/netinet/in_pcb.h Sun Mar 1 05:09:34 2009 (r189206) @@ -160,7 +160,8 @@ struct inpcb { u_char inp_ip_ttl; /* (i) time to live proto */ u_char inp_ip_p; /* (c) protocol proto */ u_char inp_ip_minttl; /* (i) minimum TTL or drop */ - u_int inp_refcount; /* (i) refcount */ + uint16_t inp_connid; /* (x) connection id / queue id */ + uint16_t inp_refcount; /* (i) refcount */ struct ucred *inp_cred; /* (c) cache of socket cred */ void *inp_pspare[1]; /* L2 information */ struct rtentry *inp_rt; /* L3 information */ Modified: user/kmacy/releng_7_fast_net/sys/netinet/ip_output.c ============================================================================== --- user/kmacy/releng_7_fast_net/sys/netinet/ip_output.c Sun Mar 1 04:59:54 2009 (r189205) +++ user/kmacy/releng_7_fast_net/sys/netinet/ip_output.c Sun Mar 1 05:09:34 2009 (r189206) @@ -129,6 +129,7 @@ ip_output(struct mbuf *m, struct mbuf *o if (inp != NULL) { M_SETFIB(m, inp->inp_inc.inc_fibnum); + M_SETFLOWID(m, inp->inp_connid); INP_LOCK_ASSERT(inp); if ((ro == &iproute) && (inp->inp_vflag & INP_RT_VALID)) { if (inp->inp_rt->rt_flags & RTF_UP) { Modified: user/kmacy/releng_7_fast_net/sys/netinet/tcp_input.c ============================================================================== --- user/kmacy/releng_7_fast_net/sys/netinet/tcp_input.c Sun Mar 1 04:59:54 2009 (r189205) +++ user/kmacy/releng_7_fast_net/sys/netinet/tcp_input.c Sun Mar 1 05:09:34 2009 (r189206) @@ -478,7 +478,9 @@ findpcb: goto dropwithreset; } INP_WLOCK(inp); - + if (inp->inp_connid == 0) + inp->inp_connid = M_GETFLOWID(m); + #ifdef IPSEC #ifdef INET6 if (isipv6 && ipsec6_in_reject(m, inp)) { Modified: user/kmacy/releng_7_fast_net/sys/sys/mbuf.h ============================================================================== --- user/kmacy/releng_7_fast_net/sys/sys/mbuf.h Sun Mar 1 04:59:54 2009 (r189205) +++ user/kmacy/releng_7_fast_net/sys/sys/mbuf.h Sun Mar 1 05:09:34 2009 (r189206) @@ -962,15 +962,25 @@ m_tag_find(struct mbuf *m, int type, str #define M_FIBSHIFT 28 #define M_FIBMASK 0x0F +#define M_FLOWIDSHIFT 16 + /* get the fib from an mbuf and if it is not set, return the default */ #define M_GETFIB(_m) \ ((((_m)->m_flags & M_FIB) >> M_FIBSHIFT) & M_FIBMASK) #define M_SETFIB(_m, _fib) do { \ _m->m_flags &= ~M_FIB; \ - _m->m_flags |= (((_fib) << M_FIBSHIFT) & M_FIB); \ + _m->m_flags |= (((_fib) << M_FIBSHIFT) & M_FIB); \ } while (0) +#define M_GETFLOWID(_m) \ + ((_m)->m_pkthdr.csum_flags >> M_FLOWIDSHIFT) + +#define M_SETFLOWID(_m, _flowid) do { \ + _m->m_pkthdr.csum_flags |= ((_flowid) << M_FLOWIDSHIFT); \ +} while (0) + + #endif /* _KERNEL */ #endif /* !_SYS_MBUF_H_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903010509.n2159YAV031240>