| /* |
| * Copyright (C) 1993-1998 by Darren Reed. |
| * |
| * See the IPFILTER.LICENCE file for details on licencing. |
| * |
| */ |
| /* #pragma ident "@(#)solaris.c 1.12 6/5/96 (C) 1995 Darren Reed"*/ |
| |
| /*typedef unsigned int spustate_t;*/ |
| struct uio; |
| |
| #include <sys/types.h> |
| #include <sys/cmn_err.h> |
| #include <sys/kernel.h> |
| #include <sys/systm.h> |
| #include <sys/malloc.h> |
| #include <sys/conf.h> |
| #include <sys/callout.h> |
| #include <sys/moddefs.h> |
| #include <sys/io.h> |
| #include <sys/wsio.h> |
| #include <sys/param.h> |
| #include <sys/errno.h> |
| #include <sys/byteorder.h> |
| #include <sys/socket.h> |
| #include <sys/stropts.h> |
| #include <net/if.h> |
| #include <net/af.h> |
| #include <net/route.h> |
| #include <netinet/in.h> |
| #include <netinet/in_systm.h> |
| #include <netinet/if_ether.h> |
| #include <netinet/ip.h> |
| #include <netinet/ip_var.h> |
| #include <netinet/tcp.h> |
| #include <netinet/udp.h> |
| #include <netinet/tcpip.h> |
| #include <netinet/ip_icmp.h> |
| |
| #include "ip_compat.h" |
| #include "ip_fil.h" |
| #include "ip_rules.h" |
| |
| |
| /* |
| * Driver Header |
| */ |
| static drv_info_t ipf_drv_info = { |
| "IP Filter Rules", /* type */ |
| "pseudo", /* class */ |
| DRV_PSEUDO|DRV_SAVE_CONF|DRV_MP_SAFE, /* flags */ |
| -1, /* b_major */ |
| -1, /* c_major */ |
| NULL, /* cdio */ |
| NULL, /* gio_private */ |
| NULL, /* cdio_private */ |
| }; |
| |
| |
| extern struct mod_operations gio_mod_ops; |
| static drv_info_t ipf_drv_info; |
| extern struct mod_conf_data ipf_conf_data; |
| |
| static struct mod_type_data ipf_drv_link = { |
| IPL_VERSION, (void *)NULL |
| }; |
| |
| static struct modlink ipf_mod_link[] = { |
| { &gio_mod_ops, (void *)&ipf_drv_link }, |
| { NULL, (void *)NULL } |
| }; |
| |
| struct modwrapper ipf_wrapper = { |
| MODREV, |
| ipf_load, |
| ipf_unload, |
| (void (*)())NULL, |
| (void *)&ipf_conf_data, |
| ipf_mod_link |
| }; |
| |
| |
| static int ipf_load(void *arg) |
| { |
| int i; |
| |
| i = ipfrule_add(); |
| if (!i) |
| ipf_refcnt--; |
| #ifdef IPFDEBUG |
| printf("IP Filter Rules: ipfrule_add() = %d\n", i); |
| #endif |
| if (!i) |
| cmn_err(CE_CONT, "IP Filter Rules: Loaded\n"); |
| return i; |
| } |
| |
| |
| static int ipf_unload(void *arg) |
| { |
| int i; |
| |
| i = ipfrule_remove(); |
| if (!i) |
| ipf_refcnt--; |
| #ifdef IPFDEBUG |
| printf("IP Filter Rules: ipfrule_remove() = %d\n", i); |
| #endif |
| if (!i) |
| cmn_err(CE_CONT, "IP Filter Rules: Unloaded\n"); |
| return i; |
| } |