checkrev.c revision 255332
1228753Smm/* $FreeBSD: head/contrib/ipfilter/lib/checkrev.c 255332 2013-09-06 23:11:19Z cy $ */ 2228753Smm 3228753Smm/* 4228753Smm * Copyright (C) 2012 by Darren Reed. 5228753Smm * 6228753Smm * See the IPFILTER.LICENCE file for details on licencing. 7228753Smm * 8228753Smm * $Id$ 9228753Smm */ 10228753Smm 11228753Smm#include <sys/ioctl.h> 12228753Smm#include <fcntl.h> 13228753Smm 14228753Smm#include "ipf.h" 15228753Smm#include "netinet/ipl.h" 16228753Smm 17228753Smmint checkrev(ipfname) 18228753Smm char *ipfname; 19228753Smm{ 20228753Smm static int vfd = -1; 21228753Smm struct friostat fio; 22228753Smm ipfobj_t obj; 23228753Smm 24228753Smm bzero((caddr_t)&obj, sizeof(obj)); 25228753Smm obj.ipfo_rev = IPFILTER_VERSION; 26228753Smm obj.ipfo_size = sizeof(fio); 27228763Smm obj.ipfo_ptr = (void *)&fio; 28228753Smm obj.ipfo_type = IPFOBJ_IPFSTAT; 29248616Smm 30228753Smm if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) { 31228753Smm perror("open device"); 32228753Smm return -1; 33248616Smm } 34248616Smm 35248616Smm if (ioctl(vfd, SIOCGETFS, &obj)) { 36228753Smm ipferror(vfd, "ioctl(SIOCGETFS)"); 37248616Smm close(vfd); 38228753Smm vfd = -1; 39228753Smm return -1; 40228753Smm } 41228753Smm 42228753Smm if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) { 43228753Smm return -1; 44228753Smm } 45228753Smm return 0; 46228753Smm} 47228753Smm