/* $FreeBSD$ */ /* * Copyright (C) 2012 by Darren Reed. * * See the IPFILTER.LICENCE file for details on licencing. */ #pragma ident "@(#)$Id$" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if SOLARIS2 >= 6 # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ip_compat.h" #include "ip_fil.h" #include "ip_rules.h" char _depends_on[] = "drv/ipf"; extern ipf_main_softc_t ipfmain; extern struct mod_ops mod_miscops; static struct modlmisc ipfrulemod = { &mod_miscops, "IP Filter rules" }; static struct modlinkage modlink1 = { MODREV_1, &ipfrulemod, NULL }; int _init() { int ipfruleinst; ipfruleinst = mod_install(&modlink1); #ifdef IPFRULEDEBUG cmn_err(CE_NOTE, "IP Filter Rules: _init() = %d", ipfruleinst); #endif if (ipfruleinst == 0) { if (ipfmain.ipf_running >= 0) { ipfruleinst = ipfrule_add(); if (!ipfruleinst) ipfmain.ipf_refcnt++; else { cmn_err(CE_NOTE, "IP Filter Rules: ipfrule_add failed"); ipfruleinst = -1; } } else ipfruleinst = -1; } if (ipfruleinst == 0) cmn_err(CE_CONT, "IP Filter Rules: loaded\n"); return ipfruleinst; } int _fini(void) { int ipfruleinst; ipfruleinst = mod_remove(&modlink1); #ifdef IPFRULEDEBUG cmn_err(CE_NOTE, "IP Filter Rules: _fini() = %d", ipfruleinst); #endif if (ipfruleinst == 0) { ipfruleinst = ipfrule_remove(); if (!ipfruleinst) ipfmain.ipf_refcnt--; else ipfruleinst = -1; } if (ipfruleinst == 0) cmn_err(CE_CONT, "IP Filter Rules: unloaded\n"); return ipfruleinst; } int _info(modinfop) struct modinfo *modinfop; { int ipfruleinst; ipfruleinst = mod_info(&modlink1, modinfop); #ifdef IPFRULEDEBUG cmn_err(CE_NOTE, "IP Filter Rules: _info(%x) = %x", modinfop, ipfruleinst); #endif return ipfruleinst; }