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);
}