On 10 Jul 2014, at 03:10 , Adrian Chadd <adr...@freebsd.org> wrote: > Author: adrian > Date: Thu Jul 10 03:10:56 2014 > New Revision: 268479 > URL: http://svnweb.freebsd.org/changeset/base/268479 > > Log: > Implement the first stage of multi-bind listen sockets and RSS socket > awareness. > > * Introduce IP_BINDMULTI - indicating that it's okay to bind multiple > sockets on the same bind details. > > Although the PCB code has been taught about this (see below) this patch > doesn't introduce the rest of the PCB changes necessary to distribute > lookups among multiple PCB entries in the global wildcard table. > > * Introduce IP_RSS_LISTEN_BUCKET - placing an listen socket into the > given RSS bucket (and thus a single PCBGROUP hash.) > > * Modify the PCB add path to be aware of IP_BINDMULTI: > + Only allow further PCB entries to be added if the owner credentials > and IP_BINDMULTI has been specified. Ie, only allow further > IP_BINDMULTI sockets to appear if the first bind() was IP_BINDMULTI. > > * Teach the PCBGROUP code about IP_RSS_LISTE_BUCKET marked PCB entries. > Instead of using the wildcard logic and hashing, these sockets are > simply placed into the PCBGROUP and _not_ in the wildcard hash. > > * When doing a PCBGROUP lookup, also do a wildcard match as well. > This allows for an RSS bucket PCB entry to appear in a PCBGROUP > rather than having to exist in the wildcard list. > > Tested: > > * TCP IPv4 server testing with igb(4) > * TCP IPv4 server testing with ix(4) > > TODO: > > * The pcbgroup lookup code duplicated the wildcard and wildcard-PCB > logic. This could be refactored into a single function. > > * This doesn't yet work for IPv6 (The PCBGROUP code in netinet6/ doesn't > yet know about this); nor does it yet fully work for UDP.
Is there any intention to bring the feature parity in the close future? I am tired of fixing this kind of stuff 6 years later; been there, had to do that too often. > Modified: head/sys/netinet/in_pcb.h > ============================================================================== > --- head/sys/netinet/in_pcb.h Thu Jul 10 02:15:16 2014 (r268478) > +++ head/sys/netinet/in_pcb.h Thu Jul 10 03:10:56 2014 (r268479) > @@ -181,7 +181,8 @@ struct inpcb { > u_int inp_refcount; /* (i) refcount */ > void *inp_pspare[5]; /* (x) route caching / general use */ > uint32_t inp_flowtype; /* (x) M_HASHTYPE value */ > - u_int inp_ispare[5]; /* (x) route caching / user cookie / > + uint32_t inp_rss_listen_bucket; /* (x) overridden RSS listen bucket */ > + u_int inp_ispare[4]; /* (x) route caching / user cookie / > * general use */ Please do not use spares that were not reserved for you. — Bjoern A. Zeeb "Come on. Learn, goddamn it.", WarGames, 1983 _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"