2007-04-15 00:17:19 +04:00
|
|
|
/* $NetBSD: checkrev.c,v 1.1.1.2 2007/04/14 20:17:31 martin Exp $ */
|
2004-03-28 12:55:20 +04:00
|
|
|
|
|
|
|
/*
|
2007-04-15 00:17:19 +04:00
|
|
|
* Copyright (C) 2000-2004 by Darren Reed.
|
2004-03-28 12:55:20 +04:00
|
|
|
*
|
|
|
|
* See the IPFILTER.LICENCE file for details on licencing.
|
|
|
|
*
|
2007-04-15 00:17:19 +04:00
|
|
|
* Id: checkrev.c,v 1.12.2.2 2006/06/16 17:20:56 darrenr Exp
|
2004-03-28 12:55:20 +04:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <sys/ioctl.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
|
|
#include "ipf.h"
|
|
|
|
#include "netinet/ipl.h"
|
|
|
|
|
|
|
|
int checkrev(ipfname)
|
|
|
|
char *ipfname;
|
|
|
|
{
|
|
|
|
static int vfd = -1;
|
|
|
|
struct friostat fio, *fiop = &fio;
|
|
|
|
ipfobj_t ipfo;
|
|
|
|
|
|
|
|
bzero((caddr_t)&ipfo, sizeof(ipfo));
|
|
|
|
ipfo.ipfo_rev = IPFILTER_VERSION;
|
|
|
|
ipfo.ipfo_size = sizeof(*fiop);
|
|
|
|
ipfo.ipfo_ptr = (void *)fiop;
|
|
|
|
ipfo.ipfo_type = IPFOBJ_IPFSTAT;
|
|
|
|
|
|
|
|
if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) {
|
|
|
|
perror("open device");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ioctl(vfd, SIOCGETFS, &ipfo)) {
|
|
|
|
perror("ioctl(SIOCGETFS)");
|
|
|
|
close(vfd);
|
|
|
|
vfd = -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|