1*c9d5dc6cSdarrenr /* $NetBSD: remove_poolnode.c,v 1.1.1.2 2012/07/22 13:44:42 darrenr Exp $ */ 2bc4097aaSchristos 3bc4097aaSchristos /* 4*c9d5dc6cSdarrenr * Copyright (C) 2012 by Darren Reed. 5bc4097aaSchristos * 6bc4097aaSchristos * See the IPFILTER.LICENCE file for details on licencing. 7bc4097aaSchristos * 8*c9d5dc6cSdarrenr * $Id: remove_poolnode.c,v 1.1.1.2 2012/07/22 13:44:42 darrenr Exp $ 9bc4097aaSchristos */ 10bc4097aaSchristos 11bc4097aaSchristos #include <fcntl.h> 12bc4097aaSchristos #include <sys/ioctl.h> 13bc4097aaSchristos #include "ipf.h" 14bc4097aaSchristos #include "netinet/ip_lookup.h" 15bc4097aaSchristos #include "netinet/ip_pool.h" 16bc4097aaSchristos 17bc4097aaSchristos 18bc4097aaSchristos int 19bc4097aaSchristos remove_poolnode(unit, name, node, iocfunc) 20bc4097aaSchristos int unit; 21bc4097aaSchristos char *name; 22bc4097aaSchristos ip_pool_node_t *node; 23bc4097aaSchristos ioctlfunc_t iocfunc; 24bc4097aaSchristos { 25bc4097aaSchristos ip_pool_node_t pn; 26bc4097aaSchristos iplookupop_t op; 27bc4097aaSchristos 28bc4097aaSchristos if (pool_open() == -1) 29bc4097aaSchristos return -1; 30bc4097aaSchristos 31bc4097aaSchristos op.iplo_unit = unit; 32bc4097aaSchristos op.iplo_type = IPLT_POOL; 33bc4097aaSchristos op.iplo_arg = 0; 34bc4097aaSchristos strncpy(op.iplo_name, name, sizeof(op.iplo_name)); 35bc4097aaSchristos op.iplo_struct = &pn; 36bc4097aaSchristos op.iplo_size = sizeof(pn); 37bc4097aaSchristos 38bc4097aaSchristos bzero((char *)&pn, sizeof(pn)); 39bc4097aaSchristos bcopy((char *)&node->ipn_addr, (char *)&pn.ipn_addr, 40bc4097aaSchristos sizeof(pn.ipn_addr)); 41bc4097aaSchristos bcopy((char *)&node->ipn_mask, (char *)&pn.ipn_mask, 42bc4097aaSchristos sizeof(pn.ipn_mask)); 43bc4097aaSchristos pn.ipn_info = node->ipn_info; 44bc4097aaSchristos strncpy(pn.ipn_name, node->ipn_name, sizeof(pn.ipn_name)); 45bc4097aaSchristos 46bc4097aaSchristos if (pool_ioctl(iocfunc, SIOCLOOKUPDELNODE, &op)) { 47bc4097aaSchristos if ((opts & OPT_DONOTHING) == 0) { 48*c9d5dc6cSdarrenr return ipf_perror_fd(pool_fd(), iocfunc, 49*c9d5dc6cSdarrenr "remove lookup pool node"); 50bc4097aaSchristos } 51bc4097aaSchristos } 52bc4097aaSchristos 53bc4097aaSchristos return 0; 54bc4097aaSchristos } 55