Changeset View
Changeset View
Standalone View
Standalone View
sys/netpfil/pf/pf_ioctl.c
Show First 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | |||||
static int pf_check6_out(void *arg, struct mbuf **m, struct ifnet *ifp, | static int pf_check6_out(void *arg, struct mbuf **m, struct ifnet *ifp, | ||||
int dir, struct inpcb *inp); | int dir, struct inpcb *inp); | ||||
#endif | #endif | ||||
static int hook_pf(void); | static int hook_pf(void); | ||||
static int dehook_pf(void); | static int dehook_pf(void); | ||||
static int shutdown_pf(void); | static int shutdown_pf(void); | ||||
static int pf_load(void); | static int pf_load(void); | ||||
static int pf_unload(void); | static void pf_unload(void); | ||||
static struct cdevsw pf_cdevsw = { | static struct cdevsw pf_cdevsw = { | ||||
.d_ioctl = pfioctl, | .d_ioctl = pfioctl, | ||||
.d_name = PF_NAME, | .d_name = PF_NAME, | ||||
.d_version = D_VERSION, | .d_version = D_VERSION, | ||||
}; | }; | ||||
static volatile VNET_DEFINE(int, pf_pfil_hooked); | static volatile VNET_DEFINE(int, pf_pfil_hooked); | ||||
▲ Show 20 Lines • Show All 3,591 Lines • ▼ Show 20 Lines | pf_unload_vnet(void) | ||||
PF_RULES_WUNLOCK(); | PF_RULES_WUNLOCK(); | ||||
pfr_cleanup(); | pfr_cleanup(); | ||||
pf_osfp_flush(); | pf_osfp_flush(); | ||||
pf_cleanup(); | pf_cleanup(); | ||||
if (IS_DEFAULT_VNET(curvnet)) | if (IS_DEFAULT_VNET(curvnet)) | ||||
pf_mtag_cleanup(); | pf_mtag_cleanup(); | ||||
} | } | ||||
static int | static void | ||||
pf_unload(void) | pf_unload(void) | ||||
{ | { | ||||
int error = 0; | |||||
sx_xlock(&pf_end_lock); | sx_xlock(&pf_end_lock); | ||||
pf_end_threads = 1; | pf_end_threads = 1; | ||||
while (pf_end_threads < 2) { | while (pf_end_threads < 2) { | ||||
wakeup_one(pf_purge_thread); | wakeup_one(pf_purge_thread); | ||||
sx_sleep(pf_purge_proc, &pf_end_lock, 0, "pftmo", 0); | sx_sleep(pf_purge_proc, &pf_end_lock, 0, "pftmo", 0); | ||||
} | } | ||||
sx_xunlock(&pf_end_lock); | sx_xunlock(&pf_end_lock); | ||||
if (pf_dev != NULL) | if (pf_dev != NULL) | ||||
destroy_dev(pf_dev); | destroy_dev(pf_dev); | ||||
pfi_cleanup(); | pfi_cleanup(); | ||||
rw_destroy(&pf_rules_lock); | rw_destroy(&pf_rules_lock); | ||||
sx_destroy(&pf_ioctl_lock); | sx_destroy(&pf_ioctl_lock); | ||||
sx_destroy(&pf_end_lock); | sx_destroy(&pf_end_lock); | ||||
return (error); | |||||
} | } | ||||
static void | static void | ||||
vnet_pf_init(void *unused __unused) | vnet_pf_init(void *unused __unused) | ||||
{ | { | ||||
pf_load_vnet(); | pf_load_vnet(); | ||||
} | } | ||||
VNET_SYSINIT(vnet_pf_init, SI_SUB_PROTO_FIREWALL, SI_ORDER_THIRD, | VNET_SYSINIT(vnet_pf_init, SI_SUB_PROTO_FIREWALL, SI_ORDER_THIRD, | ||||
vnet_pf_init, NULL); | vnet_pf_init, NULL); | ||||
static void | static void | ||||
vnet_pf_uninit(const void *unused __unused) | vnet_pf_uninit(const void *unused __unused) | ||||
{ | { | ||||
pf_unload_vnet(); | pf_unload_vnet(); | ||||
} | } | ||||
SYSUNINIT(pf_unload, SI_SUB_PROTO_FIREWALL, SI_ORDER_SECOND, pf_unload, NULL); | |||||
VNET_SYSUNINIT(vnet_pf_uninit, SI_SUB_PROTO_FIREWALL, SI_ORDER_THIRD, | VNET_SYSUNINIT(vnet_pf_uninit, SI_SUB_PROTO_FIREWALL, SI_ORDER_THIRD, | ||||
vnet_pf_uninit, NULL); | vnet_pf_uninit, NULL); | ||||
static int | static int | ||||
pf_modevent(module_t mod, int type, void *data) | pf_modevent(module_t mod, int type, void *data) | ||||
{ | { | ||||
int error = 0; | int error = 0; | ||||
switch(type) { | switch(type) { | ||||
case MOD_LOAD: | case MOD_LOAD: | ||||
error = pf_load(); | error = pf_load(); | ||||
break; | break; | ||||
case MOD_QUIESCE: | case MOD_QUIESCE: | ||||
/* | /* | ||||
* Module should not be unloaded due to race conditions. | * Module should not be unloaded due to race conditions. | ||||
*/ | */ | ||||
error = EBUSY; | error = EBUSY; | ||||
break; | break; | ||||
case MOD_UNLOAD: | case MOD_UNLOAD: | ||||
error = pf_unload(); | /* Handled in vnet_pf_uninit() */ | ||||
break; | break; | ||||
default: | default: | ||||
error = EINVAL; | error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
Show All 9 Lines |