1145519Sdarrenr/*	$FreeBSD: releng/10.3/contrib/ipfilter/lib/checkrev.c 255332 2013-09-06 23:11:19Z cy $	*/
2145510Sdarrenr
3145510Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8255332Scy * $Id$
9145510Sdarrenr */
10145510Sdarrenr
11145510Sdarrenr#include <sys/ioctl.h>
12145510Sdarrenr#include <fcntl.h>
13145510Sdarrenr
14145510Sdarrenr#include "ipf.h"
15145510Sdarrenr#include "netinet/ipl.h"
16145510Sdarrenr
17145510Sdarrenrint checkrev(ipfname)
18255332Scy	char *ipfname;
19145510Sdarrenr{
20145510Sdarrenr	static int vfd = -1;
21255332Scy	struct friostat fio;
22255332Scy	ipfobj_t obj;
23145510Sdarrenr
24255332Scy	bzero((caddr_t)&obj, sizeof(obj));
25255332Scy	obj.ipfo_rev = IPFILTER_VERSION;
26255332Scy	obj.ipfo_size = sizeof(fio);
27255332Scy	obj.ipfo_ptr = (void *)&fio;
28255332Scy	obj.ipfo_type = IPFOBJ_IPFSTAT;
29145510Sdarrenr
30145510Sdarrenr	if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) {
31145510Sdarrenr		perror("open device");
32145510Sdarrenr		return -1;
33145510Sdarrenr	}
34145510Sdarrenr
35255332Scy	if (ioctl(vfd, SIOCGETFS, &obj)) {
36255332Scy		ipferror(vfd, "ioctl(SIOCGETFS)");
37145510Sdarrenr		close(vfd);
38145510Sdarrenr		vfd = -1;
39145510Sdarrenr		return -1;
40145510Sdarrenr	}
41145510Sdarrenr
42145510Sdarrenr	if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) {
43145510Sdarrenr		return -1;
44145510Sdarrenr	}
45145510Sdarrenr	return 0;
46145510Sdarrenr}
47