diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h --- a/sys/net/pfvar.h +++ b/sys/net/pfvar.h @@ -2533,6 +2533,7 @@ void pf_krule_free(struct pf_krule *); void pf_krule_clear_counters(struct pf_krule *); +void pf_addr_copyout(struct pf_addr_wrap *); #endif /* The fingerprint functions can be linked into userland programs (tcpdump) */ diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c --- a/sys/netpfil/pf/pf_ioctl.c +++ b/sys/netpfil/pf/pf_ioctl.c @@ -129,7 +129,6 @@ static int pf_commit_rules(u_int32_t, int, char *); static int pf_addr_setup(struct pf_kruleset *, struct pf_addr_wrap *, sa_family_t); -static void pf_addr_copyout(struct pf_addr_wrap *); static void pf_src_node_copy(const struct pf_ksrc_node *, struct pf_src_node *); #ifdef ALTQ @@ -1525,7 +1524,7 @@ return (error); } -static void +void pf_addr_copyout(struct pf_addr_wrap *addr) { diff --git a/sys/netpfil/pf/pf_nl.c b/sys/netpfil/pf/pf_nl.c --- a/sys/netpfil/pf/pf_nl.c +++ b/sys/netpfil/pf/pf_nl.c @@ -416,7 +416,6 @@ nlattr_add_addr_wrap(struct nl_writer *nw, int attrtype, struct pf_addr_wrap *a) { int off = nlattr_add_nested(nw, attrtype); - int num; nlattr_add_in6_addr(nw, PF_AT_ADDR, &a->v.a.addr.v6); nlattr_add_in6_addr(nw, PF_AT_MASK, &a->v.a.mask.v6); @@ -425,22 +424,10 @@ if (a->type == PF_ADDR_DYNIFTL) { nlattr_add_string(nw, PF_AT_IFNAME, a->v.ifname); - num = 0; - if (a->p.dyn != NULL) - num = a->p.dyn->pfid_acnt4 + a->p.dyn->pfid_acnt6; - nlattr_add_u32(nw, PF_AT_DYNCNT, num); + nlattr_add_u32(nw, PF_AT_DYNCNT, a->p.dyncnt); } else if (a->type == PF_ADDR_TABLE) { - struct pfr_ktable *kt; - nlattr_add_string(nw, PF_AT_TABLENAME, a->v.tblname); - num = -1; - kt = a->p.tbl; - if ((kt->pfrkt_flags & PFR_TFLAG_ACTIVE) && - kt->pfrkt_root != NULL) - kt = kt->pfrkt_root; - if (kt->pfrkt_flags & PFR_TFLAG_ACTIVE) - num = kt->pfrkt_cnt; - nlattr_add_u32(nw, PF_AT_TBLCNT, num); + nlattr_add_u32(nw, PF_AT_TBLCNT, a->p.tblcnt); } nlattr_set_len(nw, off); @@ -462,9 +449,13 @@ static bool nlattr_add_rule_addr(struct nl_writer *nw, int attrtype, struct pf_rule_addr *r) { + struct pf_addr_wrap aw = {0}; int off = nlattr_add_nested(nw, attrtype); - nlattr_add_addr_wrap(nw, PF_RAT_ADDR, &r->addr); + bcopy(&(r->addr), &aw, sizeof(struct pf_addr_wrap)); + pf_addr_copyout(&aw); + + nlattr_add_addr_wrap(nw, PF_RAT_ADDR, &aw); nlattr_add_u16(nw, PF_RAT_SRC_PORT, r->port[0]); nlattr_add_u16(nw, PF_RAT_DST_PORT, r->port[1]); nlattr_add_u8(nw, PF_RAT_NEG, r->neg);