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