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