remove_pool.c revision 145519
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/remove_pool.c 145519 2005-04-25 18:20:15Z darrenr $ */ 2145510Sdarrenr 3145510Sdarrenr/* 4145510Sdarrenr * Copyright (C) 2002 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr * 8145510Sdarrenr * Id: remove_pool.c,v 1.1 2003/04/13 06:40:14 darrenr Exp 9145510Sdarrenr */ 10145510Sdarrenr 11145510Sdarrenr#include <fcntl.h> 12145510Sdarrenr#include <sys/ioctl.h> 13145510Sdarrenr#include "ipf.h" 14145510Sdarrenr#include "netinet/ip_lookup.h" 15145510Sdarrenr#include "netinet/ip_htable.h" 16145510Sdarrenr 17145510Sdarrenrstatic int poolfd = -1; 18145510Sdarrenr 19145510Sdarrenr 20145510Sdarrenrint remove_pool(poolp, iocfunc) 21145510Sdarrenrip_pool_t *poolp; 22145510Sdarrenrioctlfunc_t iocfunc; 23145510Sdarrenr{ 24145510Sdarrenr iplookupop_t op; 25145510Sdarrenr ip_pool_t pool; 26145510Sdarrenr 27145510Sdarrenr if ((poolfd == -1) && ((opts & OPT_DONOTHING) == 0)) 28145510Sdarrenr poolfd = open(IPLOOKUP_NAME, O_RDWR); 29145510Sdarrenr if ((poolfd == -1) && ((opts & OPT_DONOTHING) == 0)) 30145510Sdarrenr return -1; 31145510Sdarrenr 32145510Sdarrenr op.iplo_type = IPLT_POOL; 33145510Sdarrenr op.iplo_unit = poolp->ipo_unit; 34145510Sdarrenr strncpy(op.iplo_name, poolp->ipo_name, sizeof(op.iplo_name)); 35145510Sdarrenr op.iplo_size = sizeof(pool); 36145510Sdarrenr op.iplo_struct = &pool; 37145510Sdarrenr 38145510Sdarrenr bzero((char *)&pool, sizeof(pool)); 39145510Sdarrenr pool.ipo_unit = poolp->ipo_unit; 40145510Sdarrenr strncpy(pool.ipo_name, poolp->ipo_name, sizeof(pool.ipo_name)); 41145510Sdarrenr pool.ipo_flags = poolp->ipo_flags; 42145510Sdarrenr 43145510Sdarrenr if ((*iocfunc)(poolfd, SIOCLOOKUPDELTABLE, &op)) 44145510Sdarrenr if ((opts & OPT_DONOTHING) == 0) { 45145510Sdarrenr perror("remove_pool:SIOCLOOKUPDELTABLE"); 46145510Sdarrenr return -1; 47145510Sdarrenr } 48145510Sdarrenr 49145510Sdarrenr return 0; 50145510Sdarrenr} 51