4 * Copyright (C) 2012 by Darren Reed.
6 * See the IPFILTER.LICENCE file for details on licencing.
9 * 29/12/94 Added code from Marc Huber <huber@fzi.de> to allow it to allocate
10 * its own major char number! Way cool patch!
12 #include <sys/types.h>
17 #include <sys/syslog.h>
19 #include <sys/param.h>
20 #include <sys/errno.h>
22 #include <sys/vnode.h>
23 #include <sundev/mbvar.h>
24 #include <sun/autoconf.h>
25 #include <sun/vddrv.h>
26 #if defined(sun4c) || defined(sun4m)
27 #include <sun/openprom.h>
31 #define IPL_NAME "/dev/ipf"
34 extern int ipfattach(), ipfopen(), ipfclose(), ipfioctl(), ipfread();
35 extern int nulldev(), ipfidentify(), errno;
37 struct cdevsw ipfdevsw =
39 ipfopen, ipfclose, ipfread, nulldev,
40 ipfioctl, nulldev, nulldev, nulldev,
45 struct dev_ops ipf_ops =
83 VDMAGIC_PSEUDO, /* magic */
86 &ipf_ops, /* dev_ops */
88 NULL, /* struct mb_ctlr *mb_ctlr */
89 NULL, /* struct mb_driver *mb_driver */
90 NULL, /* struct mb_device *mb_device */
95 &ipfdevsw, /* cdevsw */
101 extern int vd_unuseddev();
102 extern struct cdevsw cdevsw[];
105 xxxinit(fc, vdp, vdi, vds)
117 while (ipf_major < nchrdev &&
118 cdevsw[ipf_major].d_open != vd_unuseddev)
120 if (ipf_major == nchrdev)
122 vd.Drv_charmajor = ipf_major;
123 vdp->vdd_vdtab = (struct vdlinkage *)&vd;
124 return ipf_attach(vdi);
126 return unload(vdp, vdi);
136 static unload(vdp, vdi)
138 struct vdioctl_unload *vdi;
142 (void) vn_remove(IPL_NAME, UIO_SYSSPACE, FILE);
147 static int ipf_attach(vdi)
148 struct vdioctl_load *vdi;
152 int error = 0, fmode = S_IFCHR|0600;
154 (void) vn_remove(IPL_NAME, UIO_SYSSPACE, FILE);
156 vattr.va_type = MFTOVT(fmode);
157 vattr.va_mode = (fmode & 07777);
158 vattr.va_rdev = ipf_major<<8;
160 error = vn_create(IPL_NAME, UIO_SYSSPACE, &vattr, EXCL, 0, &vp);