1145519Sdarrenr/*	$FreeBSD$	*/
2145510Sdarrenr
3145510Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8145510Sdarrenr */
9145510Sdarrenr/* #pragma ident   "@(#)solaris.c	1.12 6/5/96 (C) 1995 Darren Reed"*/
10145510Sdarrenr
11145510Sdarrenr/*typedef unsigned int spustate_t;*/
12145510Sdarrenrstruct uio;
13145510Sdarrenr
14145510Sdarrenr#include <sys/types.h>
15145510Sdarrenr#include <sys/cmn_err.h>
16145510Sdarrenr#include <sys/kernel.h>
17145510Sdarrenr#include <sys/systm.h>
18145510Sdarrenr#include <sys/malloc.h>
19145510Sdarrenr#include <sys/conf.h>
20145510Sdarrenr#include <sys/callout.h>
21145510Sdarrenr#include <sys/moddefs.h>
22145510Sdarrenr#include <sys/io.h>
23145510Sdarrenr#include <sys/wsio.h>
24145510Sdarrenr#include <sys/param.h>
25145510Sdarrenr#include <sys/errno.h>
26145510Sdarrenr#include <sys/byteorder.h>
27145510Sdarrenr#include <sys/socket.h>
28145510Sdarrenr#include <sys/stropts.h>
29145510Sdarrenr#include <net/if.h>
30145510Sdarrenr#include <net/af.h>
31145510Sdarrenr#include <net/route.h>
32145510Sdarrenr#include <netinet/in.h>
33145510Sdarrenr#include <netinet/in_systm.h>
34145510Sdarrenr#include <netinet/if_ether.h>
35145510Sdarrenr#include <netinet/ip.h>
36145510Sdarrenr#include <netinet/ip_var.h>
37145510Sdarrenr#include <netinet/tcp.h>
38145510Sdarrenr#include <netinet/udp.h>
39145510Sdarrenr#include <netinet/tcpip.h>
40145510Sdarrenr#include <netinet/ip_icmp.h>
41145510Sdarrenr
42145510Sdarrenr#include "ip_compat.h"
43145510Sdarrenr#include "ip_fil.h"
44145510Sdarrenr#include "ip_rules.h"
45145510Sdarrenr
46145510Sdarrenr
47145510Sdarrenr/*
48145510Sdarrenr * Driver Header
49145510Sdarrenr */
50145510Sdarrenrstatic drv_info_t ipf_drv_info = {
51145510Sdarrenr	"IP Filter Rules",				/* type */
52145510Sdarrenr	"pseudo",					/* class */
53145510Sdarrenr	DRV_PSEUDO|DRV_SAVE_CONF|DRV_MP_SAFE,		/* flags */
54145510Sdarrenr	-1,						/* b_major */
55145510Sdarrenr	-1,						/* c_major */
56145510Sdarrenr	NULL,						/* cdio */
57145510Sdarrenr	NULL,						/* gio_private */
58145510Sdarrenr	NULL,						/* cdio_private */
59145510Sdarrenr};
60145510Sdarrenr
61145510Sdarrenr
62145510Sdarrenrextern	struct	mod_operations	gio_mod_ops;
63145510Sdarrenrstatic	drv_info_t	ipf_drv_info;
64145510Sdarrenrextern	struct	mod_conf_data	ipf_conf_data;
65145510Sdarrenr
66145510Sdarrenrstatic struct mod_type_data	ipf_drv_link = {
67145510Sdarrenr	IPL_VERSION, (void *)NULL
68145510Sdarrenr};
69145510Sdarrenr
70145510Sdarrenrstatic	struct	modlink	ipf_mod_link[] = {
71145510Sdarrenr	{ &gio_mod_ops, (void *)&ipf_drv_link },
72145510Sdarrenr	{ NULL, (void *)NULL }
73145510Sdarrenr};
74145510Sdarrenr
75145510Sdarrenrstruct	modwrapper	ipf_wrapper = {
76145510Sdarrenr	MODREV,
77145510Sdarrenr	ipf_load,
78145510Sdarrenr	ipf_unload,
79145510Sdarrenr	(void (*)())NULL,
80145510Sdarrenr	(void *)&ipf_conf_data,
81145510Sdarrenr	ipf_mod_link
82145510Sdarrenr};
83145510Sdarrenr
84145510Sdarrenr
85145510Sdarrenrstatic int ipf_load(void *arg)
86145510Sdarrenr{
87145510Sdarrenr	int i;
88145510Sdarrenr
89145510Sdarrenr	i = ipfrule_add();
90145510Sdarrenr	if (!i)
91255332Scy		ipf_refcnt--;
92145510Sdarrenr#ifdef	IPFDEBUG
93145510Sdarrenr	printf("IP Filter Rules: ipfrule_add() = %d\n", i);
94145510Sdarrenr#endif
95145510Sdarrenr	if (!i)
96145510Sdarrenr		cmn_err(CE_CONT, "IP Filter Rules: Loaded\n");
97145510Sdarrenr	return i;
98145510Sdarrenr}
99145510Sdarrenr
100145510Sdarrenr
101145510Sdarrenrstatic int ipf_unload(void *arg)
102145510Sdarrenr{
103145510Sdarrenr	int i;
104145510Sdarrenr
105145510Sdarrenr	i = ipfrule_remove();
106145510Sdarrenr	if (!i)
107255332Scy		ipf_refcnt--;
108145510Sdarrenr#ifdef	IPFDEBUG
109145510Sdarrenr	printf("IP Filter Rules: ipfrule_remove() = %d\n", i);
110145510Sdarrenr#endif
111145510Sdarrenr	if (!i)
112145510Sdarrenr		cmn_err(CE_CONT, "IP Filter Rules: Unloaded\n");
113145510Sdarrenr	return i;
114145510Sdarrenr}
115