1/* $FreeBSD$ */ 2 3/* 4 * Copyright (C) 2012 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 */ 8#pragma ident "@(#)$Id$" 9 10#include <sys/systm.h> 11#include <sys/types.h> 12#include <sys/param.h> 13#include <sys/errno.h> 14#include <sys/uio.h> 15#include <sys/buf.h> 16#include <sys/modctl.h> 17#include <sys/open.h> 18#include <sys/kmem.h> 19#include <sys/conf.h> 20#include <sys/cmn_err.h> 21#include <sys/stat.h> 22#include <sys/cred.h> 23#include <sys/dditypes.h> 24#include <sys/stream.h> 25#include <sys/poll.h> 26#include <sys/autoconf.h> 27#include <sys/byteorder.h> 28#include <sys/socket.h> 29#include <sys/dlpi.h> 30#include <sys/stropts.h> 31#include <sys/sockio.h> 32#include <net/if.h> 33#if SOLARIS2 >= 6 34# include <net/if_types.h> 35#endif 36#include <net/af.h> 37#include <net/route.h> 38#include <netinet/in.h> 39#include <netinet/in_systm.h> 40#include <netinet/if_ether.h> 41#include <netinet/ip.h> 42#include <netinet/ip_var.h> 43#include <netinet/tcp.h> 44#include <netinet/udp.h> 45#include <netinet/tcpip.h> 46#include <netinet/ip_icmp.h> 47#include <sys/ddi.h> 48#include <sys/sunddi.h> 49#include "ip_compat.h" 50#include "ip_fil.h" 51#include "ip_rules.h" 52 53char _depends_on[] = "drv/ipf"; 54 55 56extern ipf_main_softc_t ipfmain; 57extern struct mod_ops mod_miscops; 58static struct modlmisc ipfrulemod = { 59 &mod_miscops, 60 "IP Filter rules" 61}; 62 63static struct modlinkage modlink1 = { 64 MODREV_1, 65 &ipfrulemod, 66 NULL 67}; 68 69 70int _init() 71{ 72 int ipfruleinst; 73 74 ipfruleinst = mod_install(&modlink1); 75#ifdef IPFRULEDEBUG 76 cmn_err(CE_NOTE, "IP Filter Rules: _init() = %d", ipfruleinst); 77#endif 78 79 if (ipfruleinst == 0) { 80 if (ipfmain.ipf_running >= 0) { 81 ipfruleinst = ipfrule_add(); 82 if (!ipfruleinst) 83 ipfmain.ipf_refcnt++; 84 else { 85 cmn_err(CE_NOTE, 86 "IP Filter Rules: ipfrule_add failed"); 87 ipfruleinst = -1; 88 } 89 } else 90 ipfruleinst = -1; 91 } 92 if (ipfruleinst == 0) 93 cmn_err(CE_CONT, "IP Filter Rules: loaded\n"); 94 return ipfruleinst; 95} 96 97 98int _fini(void) 99{ 100 int ipfruleinst; 101 102 ipfruleinst = mod_remove(&modlink1); 103#ifdef IPFRULEDEBUG 104 cmn_err(CE_NOTE, "IP Filter Rules: _fini() = %d", ipfruleinst); 105#endif 106 if (ipfruleinst == 0) { 107 ipfruleinst = ipfrule_remove(); 108 if (!ipfruleinst) 109 ipfmain.ipf_refcnt--; 110 else 111 ipfruleinst = -1; 112 } 113 if (ipfruleinst == 0) 114 cmn_err(CE_CONT, "IP Filter Rules: unloaded\n"); 115 return ipfruleinst; 116} 117 118 119int _info(modinfop) 120 struct modinfo *modinfop; 121{ 122 int ipfruleinst; 123 124 ipfruleinst = mod_info(&modlink1, modinfop); 125#ifdef IPFRULEDEBUG 126 cmn_err(CE_NOTE, "IP Filter Rules: _info(%x) = %x", 127 modinfop, ipfruleinst); 128#endif 129 return ipfruleinst; 130} 131