1*f3ac6781SToomas Soome /*
2*f3ac6781SToomas Soome * Copyright (C) 2002 by Darren Reed.
3*f3ac6781SToomas Soome *
4*f3ac6781SToomas Soome * See the IPFILTER.LICENCE file for details on licencing.
5*f3ac6781SToomas Soome *
6*f3ac6781SToomas Soome * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
7*f3ac6781SToomas Soome * Use is subject to license terms.
8*f3ac6781SToomas Soome */
9*f3ac6781SToomas Soome
10*f3ac6781SToomas Soome #include <sys/ioctl.h>
11*f3ac6781SToomas Soome #include "ipf.h"
12*f3ac6781SToomas Soome #include "netinet/ipl.h"
13*f3ac6781SToomas Soome
14*f3ac6781SToomas Soome #define PRINTF (void)printf
15*f3ac6781SToomas Soome #define FPRINTF (void)fprintf
16*f3ac6781SToomas Soome
17*f3ac6781SToomas Soome
printpool_live(pool,fd,name,opts)18*f3ac6781SToomas Soome ip_pool_t *printpool_live(pool, fd, name, opts)
19*f3ac6781SToomas Soome ip_pool_t *pool;
20*f3ac6781SToomas Soome int fd;
21*f3ac6781SToomas Soome char *name;
22*f3ac6781SToomas Soome int opts;
23*f3ac6781SToomas Soome {
24*f3ac6781SToomas Soome ip_pool_node_t entry, *top, *node;
25*f3ac6781SToomas Soome ipflookupiter_t iter;
26*f3ac6781SToomas Soome int i, printed = 0, last;
27*f3ac6781SToomas Soome ipfobj_t obj;
28*f3ac6781SToomas Soome
29*f3ac6781SToomas Soome if ((name != NULL) && strncmp(name, pool->ipo_name, FR_GROUPLEN))
30*f3ac6781SToomas Soome return pool->ipo_next;
31*f3ac6781SToomas Soome
32*f3ac6781SToomas Soome printpooldata(pool, opts);
33*f3ac6781SToomas Soome
34*f3ac6781SToomas Soome if ((opts & OPT_DEBUG) == 0)
35*f3ac6781SToomas Soome PRINTF("\t{");
36*f3ac6781SToomas Soome
37*f3ac6781SToomas Soome obj.ipfo_rev = IPFILTER_VERSION;
38*f3ac6781SToomas Soome obj.ipfo_type = IPFOBJ_LOOKUPITER;
39*f3ac6781SToomas Soome obj.ipfo_ptr = &iter;
40*f3ac6781SToomas Soome obj.ipfo_size = sizeof(iter);
41*f3ac6781SToomas Soome
42*f3ac6781SToomas Soome iter.ili_data = &entry;
43*f3ac6781SToomas Soome iter.ili_type = IPLT_POOL;
44*f3ac6781SToomas Soome iter.ili_otype = IPFLOOKUPITER_NODE;
45*f3ac6781SToomas Soome iter.ili_ival = IPFGENITER_LOOKUP;
46*f3ac6781SToomas Soome iter.ili_unit = pool->ipo_unit;
47*f3ac6781SToomas Soome strncpy(iter.ili_name, pool->ipo_name, FR_GROUPLEN);
48*f3ac6781SToomas Soome
49*f3ac6781SToomas Soome last = 0;
50*f3ac6781SToomas Soome top = NULL;
51*f3ac6781SToomas Soome
52*f3ac6781SToomas Soome while (!last && (ioctl(fd, SIOCLOOKUPITER, &obj) == 0)) {
53*f3ac6781SToomas Soome if (entry.ipn_next == NULL)
54*f3ac6781SToomas Soome last = 1;
55*f3ac6781SToomas Soome entry.ipn_next = top;
56*f3ac6781SToomas Soome top = malloc(sizeof(*top));
57*f3ac6781SToomas Soome if (top == NULL)
58*f3ac6781SToomas Soome break;
59*f3ac6781SToomas Soome bcopy(&entry, top, sizeof(entry));
60*f3ac6781SToomas Soome }
61*f3ac6781SToomas Soome
62*f3ac6781SToomas Soome while (top != NULL) {
63*f3ac6781SToomas Soome node = top;
64*f3ac6781SToomas Soome (void) printpoolnode(node, opts);
65*f3ac6781SToomas Soome top = node->ipn_next;
66*f3ac6781SToomas Soome free(node);
67*f3ac6781SToomas Soome printed++;
68*f3ac6781SToomas Soome
69*f3ac6781SToomas Soome if ((opts & OPT_DEBUG) == 0)
70*f3ac6781SToomas Soome putchar(';');
71*f3ac6781SToomas Soome }
72*f3ac6781SToomas Soome
73*f3ac6781SToomas Soome if (printed == 0)
74*f3ac6781SToomas Soome putchar(';');
75*f3ac6781SToomas Soome
76*f3ac6781SToomas Soome if ((opts & OPT_DEBUG) == 0)
77*f3ac6781SToomas Soome PRINTF(" };\n");
78*f3ac6781SToomas Soome return pool->ipo_next;
79*f3ac6781SToomas Soome }
80