mls_rule.c revision 254219
1254219Scy/* 2254219Scy * Copyright (C) 2012 by Darren Reed. 3254219Scy * 4254219Scy * See the IPFILTER.LICENCE file for details on licencing. 5254219Scy */ 6254219Scy/* 7254219Scy * 29/12/94 Added code from Marc Huber <huber@fzi.de> to allow it to allocate 8254219Scy * its own major char number! Way cool patch! 9254219Scy */ 10254219Scy#include <sys/types.h> 11254219Scy#include <sys/stat.h> 12254219Scy#include <sys/time.h> 13254219Scy#include <sys/file.h> 14254219Scy#include <sys/socket.h> 15254219Scy#include <sys/conf.h> 16254219Scy#include <sys/syslog.h> 17254219Scy#include <sys/buf.h> 18254219Scy#include <sys/mbuf.h> 19254219Scy#include <sys/param.h> 20254219Scy#include <sys/errno.h> 21254219Scy#include <sys/uio.h> 22254219Scy#include <sys/vnode.h> 23254219Scy#include <sundev/mbvar.h> 24254219Scy#include <sun/autoconf.h> 25254219Scy#include <sun/vddrv.h> 26254219Scy#if defined(sun4c) || defined(sun4m) 27254219Scy# include <sun/openprom.h> 28254219Scy#endif 29254219Scy#include <netinet/in.h> 30254219Scy#include <netinet/in_systm.h> 31254219Scy#include <netinet/ip.h> 32254219Scy#include <netinet/ip_var.h> 33254219Scy#include <netinet/tcp.h> 34254219Scy#include <netinet/tcpip.h> 35254219Scy#include <net/if.h> 36254219Scy#include "ip_compat.h" 37254219Scy#include "ip_fil.h" 38254219Scy#include "ip_rules.h" 39254219Scy 40254219Scy 41254219Scyextern int errno; 42254219Scy 43254219Scy 44254219Scyint xxxinit __P((u_int, struct vddrv *, caddr_t, struct vdstat *)); 45254219Scy 46254219Scyint ipl_major = 0; 47254219Scy 48254219Scy#ifdef sun4m 49254219Scystruct vdldrv vd = 50254219Scy{ 51254219Scy VDMAGIC_USER, 52254219Scy "IP Filter rules", 53254219Scy NULL, 54254219Scy NULL, 55254219Scy NULL, 56254219Scy 0, 57254219Scy 0, 58254219Scy NULL, 59254219Scy NULL, 60254219Scy NULL, 61254219Scy 0, 62254219Scy 1, 63254219Scy}; 64254219Scy#else /* sun4m */ 65254219Scystruct vdldrv vd = 66254219Scy{ 67254219Scy VDMAGIC_USER, /* magic */ 68254219Scy "IP Filter rules", 69254219Scy#ifdef sun4c 70254219Scy NULL, /* dev_ops */ 71254219Scy#else 72254219Scy NULL, /* struct mb_ctlr *mb_ctlr */ 73254219Scy NULL, /* struct mb_driver *mb_driver */ 74254219Scy NULL, /* struct mb_device *mb_device */ 75254219Scy 0, /* num ctlrs */ 76254219Scy 1, /* numdevs */ 77254219Scy#endif /* sun4c */ 78254219Scy NULL, /* bdevsw */ 79254219Scy NULL, /* cdevsw */ 80254219Scy 0, /* block major */ 81254219Scy 0, /* char major */ 82254219Scy}; 83254219Scy#endif /* sun4m */ 84254219Scy 85254219Scy 86254219Scyxxxinit(fc, vdp, data, vds) 87254219Scy u_int fc; 88254219Scy struct vddrv *vdp; 89254219Scy caddr_t data; 90254219Scy struct vdstat *vds; 91254219Scy{ 92254219Scy struct vdioctl_load *vdi = (struct vdioctl_load *)data; 93254219Scy int err; 94254219Scy 95254219Scy switch (fc) 96254219Scy { 97254219Scy case VDLOAD: 98254219Scy err = ipfrule_add(); 99254219Scy if (!err) 100254219Scy ipf_refcnt++; 101254219Scy break; 102254219Scy case VDUNLOAD: 103254219Scy err = ipfrule_remove(); 104254219Scy if (!err) 105254219Scy ipf_refcnt--; 106254219Scy break; 107254219Scy case VDSTAT: 108254219Scy err = 0; 109254219Scy break; 110254219Scy default: 111254219Scy err = EIO; 112254219Scy break; 113254219Scy } 114254219Scy} 115