Changeset View
Changeset View
Standalone View
Standalone View
sys/netpfil/pf/pf_if.c
Show First 20 Lines • Show All 397 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
int | int | ||||
pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af) | pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af) | ||||
{ | { | ||||
struct epoch_tracker et; | struct epoch_tracker et; | ||||
struct pfi_dynaddr *dyn; | struct pfi_dynaddr *dyn; | ||||
char tblname[PF_TABLE_NAME_SIZE]; | char tblname[PF_TABLE_NAME_SIZE]; | ||||
struct pf_ruleset *ruleset = NULL; | struct pf_kruleset *ruleset = NULL; | ||||
struct pfi_kif *kif; | struct pfi_kif *kif; | ||||
int rv = 0; | int rv = 0; | ||||
PF_RULES_WASSERT(); | PF_RULES_WASSERT(); | ||||
KASSERT(aw->type == PF_ADDR_DYNIFTL, ("%s: type %u", | KASSERT(aw->type == PF_ADDR_DYNIFTL, ("%s: type %u", | ||||
__func__, aw->type)); | __func__, aw->type)); | ||||
KASSERT(aw->p.dyn == NULL, ("%s: dyn is %p", __func__, aw->p.dyn)); | KASSERT(aw->p.dyn == NULL, ("%s: dyn is %p", __func__, aw->p.dyn)); | ||||
Show All 21 Lines | if (aw->iflags & PFI_AFLAG_BROADCAST) | ||||
strlcat(tblname, ":broadcast", sizeof(tblname)); | strlcat(tblname, ":broadcast", sizeof(tblname)); | ||||
if (aw->iflags & PFI_AFLAG_PEER) | if (aw->iflags & PFI_AFLAG_PEER) | ||||
strlcat(tblname, ":peer", sizeof(tblname)); | strlcat(tblname, ":peer", sizeof(tblname)); | ||||
if (aw->iflags & PFI_AFLAG_NOALIAS) | if (aw->iflags & PFI_AFLAG_NOALIAS) | ||||
strlcat(tblname, ":0", sizeof(tblname)); | strlcat(tblname, ":0", sizeof(tblname)); | ||||
if (dyn->pfid_net != 128) | if (dyn->pfid_net != 128) | ||||
snprintf(tblname + strlen(tblname), | snprintf(tblname + strlen(tblname), | ||||
sizeof(tblname) - strlen(tblname), "/%d", dyn->pfid_net); | sizeof(tblname) - strlen(tblname), "/%d", dyn->pfid_net); | ||||
if ((ruleset = pf_find_or_create_ruleset(PF_RESERVED_ANCHOR)) == NULL) { | if ((ruleset = pf_find_or_create_kruleset(PF_RESERVED_ANCHOR)) == NULL) { | ||||
rv = ENOMEM; | rv = ENOMEM; | ||||
goto _bad; | goto _bad; | ||||
} | } | ||||
if ((dyn->pfid_kt = pfr_attach_table(ruleset, tblname)) == NULL) { | if ((dyn->pfid_kt = pfr_attach_table(ruleset, tblname)) == NULL) { | ||||
rv = ENOMEM; | rv = ENOMEM; | ||||
goto _bad; | goto _bad; | ||||
} | } | ||||
Show All 9 Lines | pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af) | ||||
NET_EPOCH_EXIT(et); | NET_EPOCH_EXIT(et); | ||||
return (0); | return (0); | ||||
_bad: | _bad: | ||||
if (dyn->pfid_kt != NULL) | if (dyn->pfid_kt != NULL) | ||||
pfr_detach_table(dyn->pfid_kt); | pfr_detach_table(dyn->pfid_kt); | ||||
if (ruleset != NULL) | if (ruleset != NULL) | ||||
pf_remove_if_empty_ruleset(ruleset); | pf_remove_if_empty_kruleset(ruleset); | ||||
if (dyn->pfid_kif != NULL) | if (dyn->pfid_kif != NULL) | ||||
pfi_kif_unref(dyn->pfid_kif); | pfi_kif_unref(dyn->pfid_kif); | ||||
free(dyn, PFI_MTYPE); | free(dyn, PFI_MTYPE); | ||||
return (rv); | return (rv); | ||||
} | } | ||||
static void | static void | ||||
▲ Show 20 Lines • Show All 527 Lines • Show Last 20 Lines |