示例#1
0
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;
	}
}
示例#2
0
void
ipfw_bpf_uninit(int last)
{

	if_clone_detach(V_ipfw_cloner);
	if_clone_detach(V_ipfwlog_cloner);
	if (last)
		LOGIF_LOCK_DESTROY();
}
示例#3
0
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();
	}
}