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 | |||||