Lines Matching refs:inp

304 in_pcbgroup_byinpcb(struct inpcb *inp)
315 if (inp->inp_flags2 & INP_RSS_BUCKET_SET)
316 return (&inp->inp_pcbinfo->ipi_pcbgroups[inp->inp_rss_listen_bucket]);
319 return (in_pcbgroup_bytuple(inp->inp_pcbinfo, inp->inp_laddr,
320 inp->inp_lport, inp->inp_faddr, inp->inp_fport));
324 in_pcbwild_add(struct inpcb *inp)
330 INP_WLOCK_ASSERT(inp);
331 KASSERT(!(inp->inp_flags2 & INP_PCBGROUPWILD),
334 pcbinfo = inp->inp_pcbinfo;
337 head = &pcbinfo->ipi_wildbase[INP_PCBHASH(INADDR_ANY, inp->inp_lport,
339 LIST_INSERT_HEAD(head, inp, inp_pcbgroup_wild);
340 inp->inp_flags2 |= INP_PCBGROUPWILD;
346 in_pcbwild_remove(struct inpcb *inp)
351 INP_WLOCK_ASSERT(inp);
352 KASSERT((inp->inp_flags2 & INP_PCBGROUPWILD),
355 pcbinfo = inp->inp_pcbinfo;
358 LIST_REMOVE(inp, inp_pcbgroup_wild);
361 inp->inp_flags2 &= ~INP_PCBGROUPWILD;
365 in_pcbwild_needed(struct inpcb *inp)
371 * Thus we don't treat it as a pcbwild inp.
373 if (inp->inp_flags2 & INP_RSS_BUCKET_SET)
378 if (inp->inp_vflag & INP_IPV6)
379 return (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr));
382 return (inp->inp_faddr.s_addr == htonl(INADDR_ANY));
386 in_pcbwild_update_internal(struct inpcb *inp)
390 wildcard_needed = in_pcbwild_needed(inp);
391 if (wildcard_needed && !(inp->inp_flags2 & INP_PCBGROUPWILD))
392 in_pcbwild_add(inp);
393 else if (!wildcard_needed && (inp->inp_flags2 & INP_PCBGROUPWILD))
394 in_pcbwild_remove(inp);
405 struct inpcbgroup *newpcbgroup, struct inpcb *inp)
411 INP_WLOCK_ASSERT(inp);
413 oldpcbgroup = inp->inp_pcbgroup;
416 LIST_REMOVE(inp, inp_pcbgrouphash);
417 inp->inp_pcbgroup = NULL;
422 if (inp->inp_vflag & INP_IPV6)
423 hashkey_faddr = INP6_PCBHASHKEY(&inp->in6p_faddr);
426 hashkey_faddr = inp->inp_faddr.s_addr;
429 * If the inp is an RSS bucket wildcard entry, ensure
436 if (inp->inp_flags2 & INP_RSS_BUCKET_SET) {
438 INP_PCBHASH(INADDR_ANY, inp->inp_lport, 0,
442 INP_PCBHASH(hashkey_faddr, inp->inp_lport,
443 inp->inp_fport,
446 LIST_INSERT_HEAD(pcbhash, inp, inp_pcbgrouphash);
447 inp->inp_pcbgroup = newpcbgroup;
451 KASSERT(!(newpcbgroup != NULL && in_pcbwild_needed(inp)),
468 in_pcbgroup_update(struct inpcb *inp)
473 INP_WLOCK_ASSERT(inp);
475 pcbinfo = inp->inp_pcbinfo;
479 in_pcbwild_update_internal(inp);
480 if (!(inp->inp_flags2 & INP_PCBGROUPWILD) &&
481 !(inp->inp_flags & INP_DROPPED)) {
483 if (inp->inp_vflag & INP_IPV6)
484 newpcbgroup = in6_pcbgroup_byinpcb(inp);
487 newpcbgroup = in_pcbgroup_byinpcb(inp);
490 in_pcbgroup_update_internal(pcbinfo, newpcbgroup, inp);
494 in_pcbgroup_update_mbuf(struct inpcb *inp, struct mbuf *m)
499 INP_WLOCK_ASSERT(inp);
501 pcbinfo = inp->inp_pcbinfo;
510 in_pcbwild_update_internal(inp);
511 if (!(inp->inp_flags2 & INP_PCBGROUPWILD) &&
512 !(inp->inp_flags & INP_DROPPED)) {
515 if (inp->inp_vflag & INP_IPV6) {
517 newpcbgroup = in6_pcbgroup_byinpcb(inp);
521 newpcbgroup = in_pcbgroup_byinpcb(inp);
527 in_pcbgroup_update_internal(pcbinfo, newpcbgroup, inp);
534 in_pcbgroup_remove(struct inpcb *inp)
538 INP_WLOCK_ASSERT(inp);
540 if (!in_pcbgroup_enabled(inp->inp_pcbinfo))
543 if (inp->inp_flags2 & INP_PCBGROUPWILD)
544 in_pcbwild_remove(inp);
546 pcbgroup = inp->inp_pcbgroup;
549 LIST_REMOVE(inp, inp_pcbgrouphash);
550 inp->inp_pcbgroup = NULL;