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