Lines Matching defs:pcbinfo

139 static struct inpcb	*in_pcblookup_hash_locked(struct inpcbinfo *pcbinfo,
251 * the pcbinfo lock held, and often, the inpcb lock held, as these utility
299 struct inpcbinfo *pcbinfo;
305 pcbinfo = inp->inp_pcbinfo;
306 INP_HASH_LOCK_ASSERT(pcbinfo);
308 hdr = &pcbinfo->ipi_lbgrouphashbase[
309 INP_PCBPORTHASH(inp->inp_lport, pcbinfo->ipi_lbgrouphashmask)];
389 struct inpcbinfo *pcbinfo;
394 pcbinfo = inp->inp_pcbinfo;
397 INP_HASH_WLOCK_ASSERT(pcbinfo);
410 idx = INP_PCBPORTHASH(inp->inp_lport, pcbinfo->ipi_lbgrouphashmask);
411 hdr = &pcbinfo->ipi_lbgrouphashbase[idx];
457 struct inpcbinfo *pcbinfo;
463 pcbinfo = inp->inp_pcbinfo;
467 INP_HASH_WLOCK_ASSERT(pcbinfo);
469 hdr = &pcbinfo->ipi_lbgrouphashbase[
470 INP_PCBPORTHASH(inp->inp_lport, pcbinfo->ipi_lbgrouphashmask)];
507 struct inpcbinfo *pcbinfo;
524 pcbinfo = inp->inp_pcbinfo;
526 INP_HASH_WLOCK(pcbinfo);
536 INP_HASH_WUNLOCK(pcbinfo);
547 in_pcbinfo_init(struct inpcbinfo *pcbinfo, struct inpcbstorage *pcbstor,
551 mtx_init(&pcbinfo->ipi_lock, pcbstor->ips_infolock_name, NULL, MTX_DEF);
552 mtx_init(&pcbinfo->ipi_hash_lock, pcbstor->ips_hashlock_name,
555 pcbinfo->ipi_vnet = curvnet;
557 CK_LIST_INIT(&pcbinfo->ipi_listhead);
558 pcbinfo->ipi_count = 0;
559 pcbinfo->ipi_hash_exact = hashinit(hash_nelements, M_PCB,
560 &pcbinfo->ipi_hashmask);
561 pcbinfo->ipi_hash_wild = hashinit(hash_nelements, M_PCB,
562 &pcbinfo->ipi_hashmask);
564 pcbinfo->ipi_porthashbase = hashinit(porthash_nelements, M_PCB,
565 &pcbinfo->ipi_porthashmask);
566 pcbinfo->ipi_lbgrouphashbase = hashinit(porthash_nelements, M_PCB,
567 &pcbinfo->ipi_lbgrouphashmask);
568 pcbinfo->ipi_zone = pcbstor->ips_zone;
569 pcbinfo->ipi_portzone = pcbstor->ips_portzone;
570 pcbinfo->ipi_smr = uma_zone_get_smr(pcbinfo->ipi_zone);
577 in_pcbinfo_destroy(struct inpcbinfo *pcbinfo)
580 KASSERT(pcbinfo->ipi_count == 0,
581 ("%s: ipi_count = %u", __func__, pcbinfo->ipi_count));
583 hashdestroy(pcbinfo->ipi_hash_exact, M_PCB, pcbinfo->ipi_hashmask);
584 hashdestroy(pcbinfo->ipi_hash_wild, M_PCB, pcbinfo->ipi_hashmask);
585 hashdestroy(pcbinfo->ipi_porthashbase, M_PCB,
586 pcbinfo->ipi_porthashmask);
587 hashdestroy(pcbinfo->ipi_lbgrouphashbase, M_PCB,
588 pcbinfo->ipi_lbgrouphashmask);
589 mtx_destroy(&pcbinfo->ipi_hash_lock);
590 mtx_destroy(&pcbinfo->ipi_lock);
628 in_pcballoc(struct socket *so, struct inpcbinfo *pcbinfo)
635 inp = uma_zalloc_smr(pcbinfo->ipi_zone, M_NOWAIT);
642 inp->inp_pcbinfo = pcbinfo;
690 INP_INFO_WLOCK(pcbinfo);
691 pcbinfo->ipi_count++;
692 inp->inp_gencnt = ++pcbinfo->ipi_gencnt;
693 CK_LIST_INSERT_HEAD(&pcbinfo->ipi_listhead, inp, inp_list);
694 INP_INFO_WUNLOCK(pcbinfo);
705 uma_zfree_smr(pcbinfo->ipi_zone, inp);
752 struct inpcbinfo *pcbinfo;
764 pcbinfo = inp->inp_pcbinfo;
768 * the pcbinfo isn't required.
771 INP_HASH_LOCK_ASSERT(pcbinfo);
776 lastport = &pcbinfo->ipi_lasthi;
783 lastport = &pcbinfo->ipi_lastlow;
787 lastport = &pcbinfo->ipi_lastport;
839 tmpinp = in_pcblookup_hash_locked(pcbinfo,
846 tmpinp = in6_pcblookup_hash_locked(pcbinfo,
854 tmpinp = in6_pcblookup_local(pcbinfo,
859 tmpinp = in_pcblookup_local(pcbinfo,
868 tmpinp = in_pcblookup_local(pcbinfo, laddr,
1484 struct inpcbinfo *pcbinfo;
1486 pcbinfo = inp->inp_pcbinfo;
1487 INP_HASH_WLOCK(pcbinfo);
1491 INP_HASH_WUNLOCK(pcbinfo);
1791 * context, where the pcbinfo lock is held.
1796 struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
1816 INP_INFO_WLOCK(pcbinfo);
1817 inp->inp_gencnt = ++pcbinfo->ipi_gencnt;
1818 pcbinfo->ipi_count--;
1820 INP_INFO_WUNLOCK(pcbinfo);
1954 in_pcbpurgeif0(struct inpcbinfo *pcbinfo, struct ifnet *ifp)
1956 struct inpcb_iterator inpi = INP_ITERATOR(pcbinfo, INPLOOKUP_WLOCKPCB,
2002 in_pcblookup_local(struct inpcbinfo *pcbinfo, struct in_addr laddr,
2015 INP_HASH_LOCK_ASSERT(pcbinfo);
2023 head = &pcbinfo->ipi_hash_wild[INP_PCBHASH_WILD(lport,
2024 pcbinfo->ipi_hashmask)];
2056 porthash = &pcbinfo->ipi_porthashbase[INP_PCBPORTHASH(lport,
2057 pcbinfo->ipi_porthashmask)];
2123 in_pcblookup_lbgroup(const struct inpcbinfo *pcbinfo,
2133 INP_HASH_LOCK_ASSERT(pcbinfo);
2136 hdr = &pcbinfo->ipi_lbgrouphashbase[
2137 INP_PCBPORTHASH(lport, pcbinfo->ipi_lbgrouphashmask)];
2224 in_pcblookup_hash_exact(struct inpcbinfo *pcbinfo, struct in_addr faddr,
2230 INP_HASH_LOCK_ASSERT(pcbinfo);
2232 head = &pcbinfo->ipi_hash_exact[INP_PCBHASH(&faddr, lport, fport,
2233 pcbinfo->ipi_hashmask)];
2268 in_pcblookup_hash_wild_smr(struct inpcbinfo *pcbinfo, struct in_addr laddr,
2274 KASSERT(SMR_ENTERED(pcbinfo->ipi_smr),
2277 head = &pcbinfo->ipi_hash_wild[INP_PCBHASH_WILD(lport,
2278 pcbinfo->ipi_hashmask)];
2305 in_pcblookup_hash_wild_locked(struct inpcbinfo *pcbinfo, struct in_addr laddr,
2314 INP_HASH_LOCK_ASSERT(pcbinfo);
2323 head = &pcbinfo->ipi_hash_wild[INP_PCBHASH_WILD(lport,
2324 pcbinfo->ipi_hashmask)];
2378 * Lookup PCB in hash list, using pcbinfo tables. This variation assumes
2384 in_pcblookup_hash_locked(struct inpcbinfo *pcbinfo, struct in_addr faddr,
2397 INP_HASH_WLOCK_ASSERT(pcbinfo);
2399 inp = in_pcblookup_hash_exact(pcbinfo, faddr, fport, laddr, lport);
2404 inp = in_pcblookup_lbgroup(pcbinfo, &faddr, fport,
2407 inp = in_pcblookup_hash_wild_locked(pcbinfo, laddr,
2416 in_pcblookup_hash(struct inpcbinfo *pcbinfo, struct in_addr faddr,
2426 INP_HASH_WLOCK(pcbinfo);
2427 inp = in_pcblookup_hash_locked(pcbinfo, faddr, fport, laddr, lport,
2431 INP_HASH_WUNLOCK(pcbinfo);
2437 INP_HASH_WUNLOCK(pcbinfo);
2443 in_pcblookup_hash_smr(struct inpcbinfo *pcbinfo, struct in_addr faddr,
2456 smr_enter(pcbinfo->ipi_smr);
2457 inp = in_pcblookup_hash_exact(pcbinfo, faddr, fport, laddr, lport);
2474 return (in_pcblookup_hash(pcbinfo, faddr, fport, laddr, lport,
2479 inp = in_pcblookup_lbgroup(pcbinfo, &faddr, fport,
2490 inp = in_pcblookup_hash_wild_smr(pcbinfo, laddr, lport,
2494 return (in_pcblookup_hash(pcbinfo, faddr, fport, laddr,
2500 smr_exit(pcbinfo->ipi_smr);
2510 in_pcblookup(struct inpcbinfo *pcbinfo, struct in_addr faddr, u_int fport,
2514 return (in_pcblookup_hash_smr(pcbinfo, faddr, fport, laddr, lport,
2519 in_pcblookup_mbuf(struct inpcbinfo *pcbinfo, struct in_addr faddr,
2523 return (in_pcblookup_hash_smr(pcbinfo, faddr, fport, laddr, lport,
2650 struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
2656 INP_HASH_WLOCK_ASSERT(pcbinfo);
2663 inp->inp_fport, pcbinfo->ipi_hashmask);
2669 inp->inp_fport, pcbinfo->ipi_hashmask);
2674 pcbhash = &pcbinfo->ipi_hash_exact[hash];
2676 pcbhash = &pcbinfo->ipi_hash_wild[hash];
2678 pcbporthash = &pcbinfo->ipi_porthashbase[
2679 INP_PCBPORTHASH(inp->inp_lport, pcbinfo->ipi_porthashmask)];
2703 phd = uma_zalloc_smr(pcbinfo->ipi_portzone, M_NOWAIT);
2722 smr_wait(pcbinfo->ipi_smr, inp->inp_smr);
2791 struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
2797 INP_HASH_WLOCK_ASSERT(pcbinfo);
2806 inp->inp_fport, pcbinfo->ipi_hashmask);
2812 inp->inp_fport, pcbinfo->ipi_hashmask);
2826 head = &pcbinfo->ipi_hash_exact[hash];
2829 head = &pcbinfo->ipi_hash_wild[hash];
2914 inp_apply_all(struct inpcbinfo *pcbinfo,
2917 struct inpcb_iterator inpi = INP_ALL_ITERATOR(pcbinfo,
2978 sysctl_setsockopt(SYSCTL_HANDLER_ARGS, struct inpcbinfo *pcbinfo,
2982 struct inpcb_iterator inpi = INP_ALL_ITERATOR(pcbinfo,
3026 pcbinfo->ipi_hashmask);
3033 pcbinfo->ipi_hashmask);