The current use of in_pcblookup() in in6_pcbconnect() is suboptimal :
all of the addresses and ports are defined, we are only interested in
exact matches, and its v4 cousin in_pcbconnect() already uses
in_pcbhashlookup().

Ok ?

Index: sys/netinet6/in6_pcb.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_pcb.c,v
retrieving revision 1.89
diff -u -p -r1.89 in6_pcb.c
--- sys/netinet6/in6_pcb.c      23 Mar 2016 15:50:36 -0000      1.89
+++ sys/netinet6/in6_pcb.c      23 Mar 2016 17:09:11 -0000
@@ -304,9 +304,9 @@ in6_pcbconnect(struct inpcb *inp, struct

        inp->inp_ipv6.ip6_hlim = (u_int8_t)in6_selecthlim(inp);

-       if (in_pcblookup(inp->inp_table, &sin6->sin6_addr, sin6->sin6_port,
+       if (in6_pcbhashlookup(inp->inp_table, &sin6->sin6_addr, sin6->sin6_port,
            IN6_IS_ADDR_UNSPECIFIED(&inp->inp_laddr6) ? in6a : &inp->inp_laddr6,
-           inp->inp_lport, INPLOOKUP_IPV6, inp->inp_rtableid)) {
+           inp->inp_lport, inp->inp_rtableid)) {
                return (EADDRINUSE);
        }

Reply via email to