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
printhash_live(hp,fd,name,opts)18*f3ac6781SToomas Soome iphtable_t *printhash_live(hp, fd, name, opts)
19*f3ac6781SToomas Soome iphtable_t *hp;
20*f3ac6781SToomas Soome int fd;
21*f3ac6781SToomas Soome char *name;
22*f3ac6781SToomas Soome int opts;
23*f3ac6781SToomas Soome {
24*f3ac6781SToomas Soome iphtent_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, hp->iph_name, FR_GROUPLEN))
30*f3ac6781SToomas Soome return hp->iph_next;
31*f3ac6781SToomas Soome
32*f3ac6781SToomas Soome printhashdata(hp, 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_HASH;
44*f3ac6781SToomas Soome iter.ili_otype = IPFLOOKUPITER_NODE;
45*f3ac6781SToomas Soome iter.ili_ival = IPFGENITER_LOOKUP;
46*f3ac6781SToomas Soome iter.ili_unit = hp->iph_unit;
47*f3ac6781SToomas Soome strncpy(iter.ili_name, hp->iph_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.ipe_snext == NULL)
54*f3ac6781SToomas Soome last = 1;
55*f3ac6781SToomas Soome entry.ipe_snext = 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) printhashnode(hp, node, bcopywrap, opts);
65*f3ac6781SToomas Soome top = node->ipe_snext;
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 hp->iph_next;
79*f3ac6781SToomas Soome }
80