Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netpfil/pf/pf_if.c
Show First 20 Lines • Show All 795 Lines • ▼ Show 20 Lines | if (!strncmp(i->ifgl_group->ifg_group, filter, IFNAMSIZ)) | ||||
return (0); /* iface is in group "filter" */ | return (0); /* iface is in group "filter" */ | ||||
return (1); | return (1); | ||||
} | } | ||||
int | int | ||||
pfi_set_flags(const char *name, int flags) | pfi_set_flags(const char *name, int flags) | ||||
{ | { | ||||
struct epoch_tracker et; | struct epoch_tracker et; | ||||
struct pfi_kif *p; | struct pfi_kif *p, *kif; | ||||
kif = malloc(sizeof(*kif), PFI_MTYPE, M_NOWAIT); | |||||
if (kif == NULL) | |||||
return (ENOMEM); | |||||
NET_EPOCH_ENTER(et); | NET_EPOCH_ENTER(et); | ||||
kif = pfi_kif_attach(kif, name); | |||||
RB_FOREACH(p, pfi_ifhead, &V_pfi_ifs) { | RB_FOREACH(p, pfi_ifhead, &V_pfi_ifs) { | ||||
if (pfi_skip_if(name, p)) | if (pfi_skip_if(name, p)) | ||||
continue; | continue; | ||||
p->pfik_flags |= flags; | p->pfik_flags |= flags; | ||||
} | } | ||||
NET_EPOCH_EXIT(et); | NET_EPOCH_EXIT(et); | ||||
return (0); | return (0); | ||||
} | } | ||||
int | int | ||||
pfi_clear_flags(const char *name, int flags) | pfi_clear_flags(const char *name, int flags) | ||||
{ | { | ||||
struct epoch_tracker et; | struct epoch_tracker et; | ||||
struct pfi_kif *p; | struct pfi_kif *p, *tmp; | ||||
NET_EPOCH_ENTER(et); | NET_EPOCH_ENTER(et); | ||||
RB_FOREACH(p, pfi_ifhead, &V_pfi_ifs) { | RB_FOREACH_SAFE(p, pfi_ifhead, &V_pfi_ifs, tmp) { | ||||
if (pfi_skip_if(name, p)) | if (pfi_skip_if(name, p)) | ||||
continue; | continue; | ||||
p->pfik_flags &= ~flags; | p->pfik_flags &= ~flags; | ||||
if (p->pfik_ifp == NULL && p->pfik_group == NULL && | |||||
p->pfik_flags == 0) { | |||||
/* Delete this kif. */ | |||||
RB_REMOVE(pfi_ifhead, &V_pfi_ifs, p); | |||||
free(p, PFI_MTYPE); | |||||
} | |||||
} | } | ||||
NET_EPOCH_EXIT(et); | NET_EPOCH_EXIT(et); | ||||
return (0); | return (0); | ||||
} | } | ||||
/* from pf_print_state.c */ | /* from pf_print_state.c */ | ||||
static int | static int | ||||
pfi_unmask(void *addr) | pfi_unmask(void *addr) | ||||
▲ Show 20 Lines • Show All 155 Lines • Show Last 20 Lines |