1/*
2 * Copyright (C) 2012 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 */
6
7#include <sys/ioctl.h>
8#include "ipf.h"
9#include "netinet/ipl.h"
10
11
12ip_pool_t *
13printpool_live(pool, fd, name, opts, fields)
14	ip_pool_t *pool;
15	int fd;
16	char *name;
17	int opts;
18	wordtab_t *fields;
19{
20	ip_pool_node_t entry;
21	ipflookupiter_t iter;
22	int printed, last;
23	ipfobj_t obj;
24
25	if ((name != NULL) && strncmp(name, pool->ipo_name, FR_GROUPLEN))
26		return pool->ipo_next;
27
28	if (fields == NULL)
29		printpooldata(pool, opts);
30
31	if ((pool->ipo_flags & IPOOL_DELETE) != 0)
32		PRINTF("# ");
33	if ((opts & OPT_DEBUG) == 0)
34		PRINTF("\t{");
35
36	obj.ipfo_rev = IPFILTER_VERSION;
37	obj.ipfo_type = IPFOBJ_LOOKUPITER;
38	obj.ipfo_ptr = &iter;
39	obj.ipfo_size = sizeof(iter);
40
41	iter.ili_data = &entry;
42	iter.ili_type = IPLT_POOL;
43	iter.ili_otype = IPFLOOKUPITER_NODE;
44	iter.ili_ival = IPFGENITER_LOOKUP;
45	iter.ili_unit = pool->ipo_unit;
46	strncpy(iter.ili_name, pool->ipo_name, FR_GROUPLEN);
47
48	last = 0;
49	printed = 0;
50
51	if (pool->ipo_list != NULL) {
52		while (!last && (ioctl(fd, SIOCLOOKUPITER, &obj) == 0)) {
53			if (entry.ipn_next == NULL)
54				last = 1;
55			(void) printpoolnode(&entry, opts, fields);
56			if ((opts & OPT_DEBUG) == 0)
57				putchar(';');
58			printed++;
59		}
60	}
61
62	if (printed == 0)
63		putchar(';');
64
65	if ((opts & OPT_DEBUG) == 0)
66		PRINTF(" };\n");
67
68	(void) ioctl(fd,SIOCIPFDELTOK, &iter.ili_key);
69
70	return pool->ipo_next;
71}
72