1 /* 2 * Copyright (C) 1993-2001 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 * 6 * $Id: checkrev.c,v 1.12.2.1 2004/03/09 14:44:39 darrenr Exp $ 7 */ 8 9 #include <sys/ioctl.h> 10 #include <fcntl.h> 11 12 #include "ipf.h" 13 #include "netinet/ipl.h" 14 checkrev(ipfname)15int checkrev(ipfname) 16 char *ipfname; 17 { 18 static int vfd = -1; 19 struct friostat fio, *fiop = &fio; 20 ipfobj_t ipfo; 21 22 bzero((caddr_t)&ipfo, sizeof(ipfo)); 23 ipfo.ipfo_rev = IPFILTER_VERSION; 24 ipfo.ipfo_size = sizeof(*fiop); 25 ipfo.ipfo_ptr = (void *)fiop; 26 ipfo.ipfo_type = IPFOBJ_IPFSTAT; 27 28 if ((vfd == -1) && ((vfd = open(ipfname, O_RDONLY)) == -1)) { 29 perror("open device"); 30 return -1; 31 } 32 33 if (ioctl(vfd, SIOCGETFS, &ipfo)) { 34 perror("ioctl(SIOCGETFS)"); 35 close(vfd); 36 vfd = -1; 37 return -1; 38 } 39 40 if (strncmp(IPL_VERSION, fio.f_version, sizeof(fio.f_version))) { 41 return -1; 42 } 43 return 0; 44 } 45