| 548 | } |
| 549 | |
| 550 | int |
| 551 | pfr_get_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int *size, |
| 552 | int flags) |
| 553 | { |
| 554 | struct pfr_ktable *kt; |
| 555 | struct pfr_walktree w; |
| 556 | int rv; |
| 557 | |
| 558 | PF_RULES_RASSERT(); |
| 559 | |
| 560 | ACCEPT_FLAGS(flags, 0); |
| 561 | if (pfr_validate_table(tbl, 0, 0)) |
| 562 | return (EINVAL); |
| 563 | kt = pfr_lookup_table(tbl); |
| 564 | if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) |
| 565 | return (ESRCH); |
| 566 | if (kt->pfrkt_cnt > *size) { |
| 567 | *size = kt->pfrkt_cnt; |
| 568 | return (0); |
| 569 | } |
| 570 | |
| 571 | bzero(&w, sizeof(w)); |
| 572 | w.pfrw_op = PFRW_GET_ADDRS; |
| 573 | w.pfrw_addr = addr; |
| 574 | w.pfrw_free = kt->pfrkt_cnt; |
| 575 | rv = kt->pfrkt_ip4->rnh_walktree(&kt->pfrkt_ip4->rh, pfr_walktree, &w); |
| 576 | if (!rv) |
| 577 | rv = kt->pfrkt_ip6->rnh_walktree(&kt->pfrkt_ip6->rh, |
| 578 | pfr_walktree, &w); |
| 579 | if (rv) |
| 580 | return (rv); |
| 581 | |
| 582 | KASSERT(w.pfrw_free == 0, ("%s: corruption detected (%d)", __func__, |
| 583 | w.pfrw_free)); |
| 584 | |
| 585 | *size = kt->pfrkt_cnt; |
| 586 | return (0); |
| 587 | } |
| 588 | |
| 589 | int |
| 590 | pfr_get_astats(struct pfr_table *tbl, struct pfr_astats *addr, int *size, |
no test coverage detected