Lines Matching refs:rpool
224 struct pf_srchash **sh, struct pf_kpool *rpool, in pf_get_sport() argument
241 if (pd->proto == IPPROTO_UDP && (rpool->opts & PF_POOL_ENDPI)) { in pf_get_sport()
254 if (*sn == NULL && rpool->opts & PF_POOL_STICKYADDR && in pf_get_sport()
255 (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE) in pf_get_sport()
271 sn, sh, rpool, sn_type)) in pf_get_sport()
369 (rpool->opts & PF_POOL_ENDPI && in pf_get_sport()
386 switch (rpool->opts & PF_POOL_TYPEMASK) { in pf_get_sport()
395 &init_addr, sn, sh, rpool, sn_type)) in pf_get_sport()
464 struct pf_kpool *rpool) in pf_map_addr() argument
471 mtx_lock(&rpool->mtx); in pf_map_addr()
474 if (rpool->cur->addr.type == PF_ADDR_NOROUTE) { in pf_map_addr()
478 if (rpool->cur->addr.type == PF_ADDR_DYNIFTL) { in pf_map_addr()
482 if (rpool->cur->addr.p.dyn->pfid_acnt4 < 1 && in pf_map_addr()
483 !PF_POOL_DYNTYPE(rpool->opts)) { in pf_map_addr()
487 raddr = &rpool->cur->addr.p.dyn->pfid_addr4; in pf_map_addr()
488 rmask = &rpool->cur->addr.p.dyn->pfid_mask4; in pf_map_addr()
493 if (rpool->cur->addr.p.dyn->pfid_acnt6 < 1 && in pf_map_addr()
494 !PF_POOL_DYNTYPE(rpool->opts)) { in pf_map_addr()
498 raddr = &rpool->cur->addr.p.dyn->pfid_addr6; in pf_map_addr()
499 rmask = &rpool->cur->addr.p.dyn->pfid_mask6; in pf_map_addr()
505 } else if (rpool->cur->addr.type == PF_ADDR_TABLE) { in pf_map_addr()
506 if (!PF_POOL_DYNTYPE(rpool->opts)) { in pf_map_addr()
511 raddr = &rpool->cur->addr.v.a.addr; in pf_map_addr()
512 rmask = &rpool->cur->addr.v.a.mask; in pf_map_addr()
515 switch (rpool->opts & PF_POOL_TYPEMASK) { in pf_map_addr()
523 if (rpool->cur->addr.type == PF_ADDR_TABLE) { in pf_map_addr()
524 cnt = rpool->cur->addr.p.tbl->pfrkt_cnt; in pf_map_addr()
526 rpool->tblidx = 0; in pf_map_addr()
528 rpool->tblidx = (int)arc4random_uniform(cnt); in pf_map_addr()
529 memset(&rpool->counter, 0, sizeof(rpool->counter)); in pf_map_addr()
530 if (pfr_pool_get(rpool->cur->addr.p.tbl, in pf_map_addr()
531 &rpool->tblidx, &rpool->counter, af, NULL)) { in pf_map_addr()
535 PF_ACPY(naddr, &rpool->counter, af); in pf_map_addr()
536 } else if (rpool->cur->addr.type == PF_ADDR_DYNIFTL) { in pf_map_addr()
537 cnt = rpool->cur->addr.p.dyn->pfid_kt->pfrkt_cnt; in pf_map_addr()
539 rpool->tblidx = 0; in pf_map_addr()
541 rpool->tblidx = (int)arc4random_uniform(cnt); in pf_map_addr()
542 memset(&rpool->counter, 0, sizeof(rpool->counter)); in pf_map_addr()
543 if (pfr_pool_get(rpool->cur->addr.p.dyn->pfid_kt, in pf_map_addr()
544 &rpool->tblidx, &rpool->counter, af, in pf_map_addr()
549 PF_ACPY(naddr, &rpool->counter, af); in pf_map_addr()
554 rpool->counter.addr32[0] = htonl(arc4random()); in pf_map_addr()
560 rpool->counter.addr32[3] = in pf_map_addr()
565 rpool->counter.addr32[2] = in pf_map_addr()
570 rpool->counter.addr32[1] = in pf_map_addr()
575 rpool->counter.addr32[0] = in pf_map_addr()
580 PF_POOLMASK(naddr, raddr, rmask, &rpool->counter, af); in pf_map_addr()
584 PF_AINC(&rpool->counter, af); in pf_map_addr()
585 PF_POOLMASK(naddr, raddr, rmask, &rpool->counter, af); in pf_map_addr()
593 pf_hash(saddr, (struct pf_addr *)&hash, &rpool->key, af); in pf_map_addr()
594 if (rpool->cur->addr.type == PF_ADDR_TABLE) { in pf_map_addr()
595 cnt = rpool->cur->addr.p.tbl->pfrkt_cnt; in pf_map_addr()
597 rpool->tblidx = 0; in pf_map_addr()
599 rpool->tblidx = (int)(hashidx % cnt); in pf_map_addr()
600 memset(&rpool->counter, 0, sizeof(rpool->counter)); in pf_map_addr()
601 if (pfr_pool_get(rpool->cur->addr.p.tbl, in pf_map_addr()
602 &rpool->tblidx, &rpool->counter, af, NULL)) { in pf_map_addr()
606 PF_ACPY(naddr, &rpool->counter, af); in pf_map_addr()
607 } else if (rpool->cur->addr.type == PF_ADDR_DYNIFTL) { in pf_map_addr()
608 cnt = rpool->cur->addr.p.dyn->pfid_kt->pfrkt_cnt; in pf_map_addr()
610 rpool->tblidx = 0; in pf_map_addr()
612 rpool->tblidx = (int)(hashidx % cnt); in pf_map_addr()
613 memset(&rpool->counter, 0, sizeof(rpool->counter)); in pf_map_addr()
614 if (pfr_pool_get(rpool->cur->addr.p.dyn->pfid_kt, in pf_map_addr()
615 &rpool->tblidx, &rpool->counter, af, in pf_map_addr()
620 PF_ACPY(naddr, &rpool->counter, af); in pf_map_addr()
629 struct pf_kpooladdr *acur = rpool->cur; in pf_map_addr()
631 if (rpool->cur->addr.type == PF_ADDR_TABLE) { in pf_map_addr()
632 if (!pfr_pool_get(rpool->cur->addr.p.tbl, in pf_map_addr()
633 &rpool->tblidx, &rpool->counter, af, NULL)) in pf_map_addr()
635 } else if (rpool->cur->addr.type == PF_ADDR_DYNIFTL) { in pf_map_addr()
636 if (!pfr_pool_get(rpool->cur->addr.p.dyn->pfid_kt, in pf_map_addr()
637 &rpool->tblidx, &rpool->counter, af, pf_islinklocal)) in pf_map_addr()
639 } else if (pf_match_addr(0, raddr, rmask, &rpool->counter, af)) in pf_map_addr()
643 if (TAILQ_NEXT(rpool->cur, entries) == NULL) in pf_map_addr()
644 rpool->cur = TAILQ_FIRST(&rpool->list); in pf_map_addr()
646 rpool->cur = TAILQ_NEXT(rpool->cur, entries); in pf_map_addr()
647 if (rpool->cur->addr.type == PF_ADDR_TABLE) { in pf_map_addr()
648 if (pfr_pool_get(rpool->cur->addr.p.tbl, in pf_map_addr()
649 &rpool->tblidx, &rpool->counter, af, NULL)) { in pf_map_addr()
651 if (rpool->cur != acur) in pf_map_addr()
656 } else if (rpool->cur->addr.type == PF_ADDR_DYNIFTL) { in pf_map_addr()
657 rpool->tblidx = -1; in pf_map_addr()
658 if (pfr_pool_get(rpool->cur->addr.p.dyn->pfid_kt, in pf_map_addr()
659 &rpool->tblidx, &rpool->counter, af, pf_islinklocal)) { in pf_map_addr()
661 if (rpool->cur != acur) in pf_map_addr()
667 raddr = &rpool->cur->addr.v.a.addr; in pf_map_addr()
668 rmask = &rpool->cur->addr.v.a.mask; in pf_map_addr()
669 PF_ACPY(&rpool->counter, raddr, af); in pf_map_addr()
673 PF_ACPY(naddr, &rpool->counter, af); in pf_map_addr()
676 PF_AINC(&rpool->counter, af); in pf_map_addr()
682 *nkif = rpool->cur->kif; in pf_map_addr()
685 mtx_unlock(&rpool->mtx); in pf_map_addr()
697 struct pf_ksrc_node **sn, struct pf_srchash **sh, struct pf_kpool *rpool, in pf_map_addr_sn() argument
709 if (rpool->opts & PF_POOL_STICKYADDR && in pf_map_addr_sn()
710 (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE) in pf_map_addr_sn()
743 if (pf_map_addr(af, r, saddr, naddr, nkif, init_addr, rpool) != 0) { in pf_map_addr_sn()
749 (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE) { in pf_map_addr_sn()