summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/lib/checkrev.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/lib/checkrev.c')
-rw-r--r--contrib/ipfilter/lib/checkrev.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/contrib/ipfilter/lib/checkrev.c b/contrib/ipfilter/lib/checkrev.c
new file mode 100644
index 0000000..b6f8eee
--- /dev/null
+++ b/contrib/ipfilter/lib/checkrev.c
@@ -0,0 +1,46 @@
+/* $FreeBSD$ */
+
+/*
+ * Copyright (C) 2012 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id$
+ */
+
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+#include "ipf.h"
+#include "netinet/ipl.h"
+
+int checkrev(ipfname)
+ char *ipfname;
+{
+ static int vfd = -1;
+ struct friostat fio;
+ ipfobj_t obj;
+
+ bzero((caddr_t)&obj, sizeof(obj));
+ obj.ipfo_rev = IPFILTER_VERSION;
+ obj.ipfo_size = sizeof(fio);
+ obj.ipfo_ptr = (void *)&fio;
+ obj.ipfo_type = IPFOBJ_IPFSTAT;
+
+ if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) {
+ perror("open device");
+ return -1;
+ }
+
+ if (ioctl(vfd, SIOCGETFS, &obj)) {
+ ipferror(vfd, "ioctl(SIOCGETFS)");
+ close(vfd);
+ vfd = -1;
+ return -1;
+ }
+
+ if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) {
+ return -1;
+ }
+ return 0;
+}
OpenPOWER on IntegriCloud