]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/ipfilter/mlso_rule.c
MFC r368207,368607:
[FreeBSD/stable/10.git] / contrib / ipfilter / mlso_rule.c
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
53 char    _depends_on[] = "drv/ipf";
54
55
56 extern  ipf_main_softc_t        ipfmain;
57 extern  struct mod_ops          mod_miscops;
58 static  struct modlmisc         ipfrulemod = {
59                 &mod_miscops,
60                 "IP Filter rules"
61 };
62
63 static  struct modlinkage       modlink1 = {
64                 MODREV_1,
65                 &ipfrulemod,
66                 NULL
67 };
68
69
70 int _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
98 int _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
119 int _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 }