void ipfw3_log_modevent(int type){ struct ifnet *tmpif; int i; switch (type) { case MOD_LOAD: LOGIF_LOCK_INIT(); log_if_count = 0; if_clone_attach(&ipfw_log_cloner); ipfw_log_ifdetach_cookie = EVENTHANDLER_REGISTER(ifnet_detach_event, ipfw_log_clone_destroy, &ipfw_log_cloner, EVENTHANDLER_PRI_ANY); break; case MOD_UNLOAD: EVENTHANDLER_DEREGISTER(ifnet_detach_event, ipfw_log_ifdetach_cookie); if_clone_detach(&ipfw_log_cloner); for(i = 0; log_if_count > 0 && i < LOG_IF_MAX; i++){ tmpif = log_if_table[i]; if (tmpif != NULL) { ipfw_log_clone_destroy(tmpif); } } LOGIF_LOCK_DESTROY(); break; default: break; } }
void ipfw_log_bpf(int onoff) { if (onoff) { LOGIF_LOCK_INIT(); ipfw_log_cloner = if_clone_advanced(ipfwname, 0, ipfw_log_clone_match, ipfw_log_clone_create, ipfw_log_clone_destroy); } else { if_clone_detach(ipfw_log_cloner); LOGIF_LOCK_DESTROY(); } }
void ipfw_bpf_init(int first) { if (first) { LOGIF_LOCK_INIT(); V_log_if = NULL; V_pflog_if = NULL; } V_ipfw_cloner = if_clone_simple(ipfwname, ipfw_clone_create, ipfw_clone_destroy, 0); V_ipfwlog_cloner = if_clone_simple(ipfwlogname, ipfwlog_clone_create, ipfw_clone_destroy, 0); }