1/*
2 * Copyright (C) 2002 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id: remove_hashnode.c,v 1.1 2003/04/13 06:40:14 darrenr Exp $
7 */
8
9#include <fcntl.h>
10#include <sys/ioctl.h>
11#include "ipf.h"
12#include "netinet/ip_lookup.h"
13#include "netinet/ip_htable.h"
14
15static int hashfd = -1;
16
17
18int remove_hashnode(unit, name, node, iocfunc)
19int unit;
20char *name;
21iphtent_t *node;
22ioctlfunc_t iocfunc;
23{
24	iplookupop_t op;
25	iphtent_t ipe;
26
27	if ((hashfd == -1) && ((opts & OPT_DONOTHING) == 0))
28		hashfd = open(IPLOOKUP_NAME, O_RDWR);
29	if ((hashfd == -1) && ((opts & OPT_DONOTHING) == 0))
30		return -1;
31
32	op.iplo_type = IPLT_HASH;
33	op.iplo_unit = unit;
34	op.iplo_size = sizeof(ipe);
35	op.iplo_struct = &ipe;
36	op.iplo_arg = 0;
37	strncpy(op.iplo_name, name, sizeof(op.iplo_name));
38
39	bzero((char *)&ipe, sizeof(ipe));
40	bcopy((char *)&node->ipe_addr, (char *)&ipe.ipe_addr,
41	      sizeof(ipe.ipe_addr));
42	bcopy((char *)&node->ipe_mask, (char *)&ipe.ipe_mask,
43	      sizeof(ipe.ipe_mask));
44
45	if (opts & OPT_DEBUG) {
46		printf("\t%s - ", inet_ntoa(ipe.ipe_addr.in4));
47		printf("%s\n", inet_ntoa(ipe.ipe_mask.in4));
48	}
49
50	if ((*iocfunc)(hashfd, SIOCLOOKUPDELNODE, &op))
51		if (!(opts & OPT_DONOTHING)) {
52			perror("remove_hash:SIOCLOOKUPDELNODE");
53			return -1;
54		}
55	return 0;
56}
57