summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ipfilter/netinet/mlfk_ipl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/ipfilter/netinet/mlfk_ipl.c')
-rw-r--r--sys/contrib/ipfilter/netinet/mlfk_ipl.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/sys/contrib/ipfilter/netinet/mlfk_ipl.c b/sys/contrib/ipfilter/netinet/mlfk_ipl.c
index 2048df4..9166712 100644
--- a/sys/contrib/ipfilter/netinet/mlfk_ipl.c
+++ b/sys/contrib/ipfilter/netinet/mlfk_ipl.c
@@ -33,8 +33,6 @@
#include <netinet/ip_frag.h>
#include <netinet/ip_sync.h>
-extern struct selinfo ipfselwait[IPL_LOGSIZE];
-
#if __FreeBSD_version >= 502116
static struct cdev *ipf_devs[IPL_LOGSIZE];
#else
@@ -101,8 +99,8 @@ SYSCTL_IPF(_net_inet_ipf, OID_AUTO, fr_chksrc, CTLFLAG_RW, &fr_chksrc, 0, "");
SYSCTL_IPF(_net_inet_ipf, OID_AUTO, fr_minttl, CTLFLAG_RW, &fr_minttl, 0, "");
#define CDEV_MAJOR 79
-#if __FreeBSD_version >= 501000
-# include <sys/poll.h>
+#include <sys/poll.h>
+#if __FreeBSD_version >= 500043
# include <sys/select.h>
static int iplpoll(struct cdev *dev, int events, struct thread *td);
@@ -117,12 +115,16 @@ static struct cdevsw ipl_cdevsw = {
.d_write = iplwrite,
.d_ioctl = iplioctl,
.d_name = "ipl",
+# if __FreeBSD_version >= 500043
.d_poll = iplpoll,
+# endif
# if __FreeBSD_version < 600000
.d_maj = CDEV_MAJOR,
# endif
};
#else
+static int iplpoll(dev_t dev, int events, struct proc *p);
+
static struct cdevsw ipl_cdevsw = {
/* open */ iplopen,
/* close */ iplclose,
@@ -140,7 +142,9 @@ static struct cdevsw ipl_cdevsw = {
# if (__FreeBSD_version < 500043)
/* bmaj */ -1,
# endif
+# if (__FreeBSD_version > 430000)
/* kqfilter */ NULL
+# endif
};
#endif
@@ -176,9 +180,17 @@ ipf_modload()
char *defpass, *c, *str;
int i, j, error;
- error = iplattach();
- if (error)
+ RWLOCK_INIT(&ipf_global, "ipf filter load/unload mutex");
+ RWLOCK_INIT(&ipf_mutex, "ipf filter rwlock");
+ RWLOCK_INIT(&ipf_frcache, "ipf cache rwlock");
+
+ error = ipfattach();
+ if (error) {
+ RW_DESTROY(&ipf_global);
+ RW_DESTROY(&ipf_mutex);
+ RW_DESTROY(&ipf_frcache);
return error;
+ }
for (i = 0; i < IPL_LOGSIZE; i++)
ipf_devs[i] = NULL;
@@ -228,12 +240,16 @@ ipf_modunload()
return EBUSY;
if (fr_running >= 0) {
- error = ipldetach();
+ error = ipfdetach();
if (error != 0)
return error;
} else
error = 0;
+ RW_DESTROY(&ipf_global);
+ RW_DESTROY(&ipf_mutex);
+ RW_DESTROY(&ipf_frcache);
+
fr_running = -2;
for (i = 0; ipf_devfiles[i]; i++) {
@@ -287,9 +303,12 @@ sysctl_ipf_int ( SYSCTL_HANDLER_ARGS )
#endif
-#if __FreeBSD_version >= 501000
static int
+#if __FreeBSD_version >= 500043
iplpoll(struct cdev *dev, int events, struct thread *td)
+#else
+iplpoll(dev_t dev, int events, struct proc *td)
+#endif
{
u_int xmin = GET_MINOR(dev);
int revents;
@@ -332,4 +351,3 @@ iplpoll(struct cdev *dev, int events, struct thread *td)
return revents;
}
-#endif
OpenPOWER on IntegriCloud