]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ipfilter/lib/checkrev.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ipfilter / lib / checkrev.c
1 /*      $FreeBSD$       */
2
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * $Id$
9  */
10
11 #include <sys/ioctl.h>
12 #include <fcntl.h>
13
14 #include "ipf.h"
15 #include "netinet/ipl.h"
16
17 int checkrev(ipfname)
18         char *ipfname;
19 {
20         static int vfd = -1;
21         struct friostat fio;
22         ipfobj_t obj;
23
24         bzero((caddr_t)&obj, sizeof(obj));
25         obj.ipfo_rev = IPFILTER_VERSION;
26         obj.ipfo_size = sizeof(fio);
27         obj.ipfo_ptr = (void *)&fio;
28         obj.ipfo_type = IPFOBJ_IPFSTAT;
29
30         if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) {
31                 perror("open device");
32                 return -1;
33         }
34
35         if (ioctl(vfd, SIOCGETFS, &obj)) {
36                 ipferror(vfd, "ioctl(SIOCGETFS)");
37                 close(vfd);
38                 vfd = -1;
39                 return -1;
40         }
41
42         if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) {
43                 return -1;
44         }
45         return 0;
46 }