checkrev.c revision 302408
1217309Snwhitehorn/* $FreeBSD: stable/11/contrib/ipfilter/lib/checkrev.c 255332 2013-09-06 23:11:19Z cy $ */ 2224014Snwhitehorn 3217309Snwhitehorn/* 4217309Snwhitehorn * Copyright (C) 2012 by Darren Reed. 5217309Snwhitehorn * 6224014Snwhitehorn * See the IPFILTER.LICENCE file for details on licencing. 7217309Snwhitehorn * 8217309Snwhitehorn * $Id$ 9217309Snwhitehorn */ 10217309Snwhitehorn 11217309Snwhitehorn#include <sys/ioctl.h> 12217309Snwhitehorn#include <fcntl.h> 13217309Snwhitehorn 14217309Snwhitehorn#include "ipf.h" 15217309Snwhitehorn#include "netinet/ipl.h" 16217309Snwhitehorn 17217309Snwhitehornint checkrev(ipfname) 18217309Snwhitehorn char *ipfname; 19217309Snwhitehorn{ 20217309Snwhitehorn static int vfd = -1; 21217309Snwhitehorn struct friostat fio; 22217309Snwhitehorn ipfobj_t obj; 23217309Snwhitehorn 24217309Snwhitehorn bzero((caddr_t)&obj, sizeof(obj)); 25217309Snwhitehorn obj.ipfo_rev = IPFILTER_VERSION; 26217309Snwhitehorn obj.ipfo_size = sizeof(fio); 27217309Snwhitehorn obj.ipfo_ptr = (void *)&fio; 28217309Snwhitehorn obj.ipfo_type = IPFOBJ_IPFSTAT; 29217309Snwhitehorn 30217309Snwhitehorn if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) { 31217309Snwhitehorn perror("open device"); 32217309Snwhitehorn return -1; 33217309Snwhitehorn } 34217309Snwhitehorn 35217309Snwhitehorn if (ioctl(vfd, SIOCGETFS, &obj)) { 36217309Snwhitehorn ipferror(vfd, "ioctl(SIOCGETFS)"); 37217309Snwhitehorn close(vfd); 38217309Snwhitehorn vfd = -1; 39217309Snwhitehorn return -1; 40217309Snwhitehorn } 41217309Snwhitehorn 42217309Snwhitehorn if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) { 43217309Snwhitehorn return -1; 44217309Snwhitehorn } 45217309Snwhitehorn return 0; 46217309Snwhitehorn} 47217309Snwhitehorn