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