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