xref: /illumos-gate/usr/src/cmd/ipf/lib/common/printpool.c (revision ab25eeb5)
1 /*
2  * Copyright (C) 2002 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  *
6  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
7  * Use is subject to license terms.
8  */
9 
10 #pragma ident	"%Z%%M%	%I%	%E% SMI"
11 
12 #include "ipf.h"
13 
14 #define	PRINTF	(void)printf
15 #define	FPRINTF	(void)fprintf
16 
printpool(pp,copyfunc,name,opts)17 ip_pool_t *printpool(pp, copyfunc, name, opts)
18 ip_pool_t *pp;
19 copyfunc_t copyfunc;
20 char *name;
21 int opts;
22 {
23 	ip_pool_node_t *ipnp, *ipnpn, ipn;
24 	ip_pool_t ipp;
25 
26 	if ((*copyfunc)(pp, &ipp, sizeof(ipp)))
27 		return NULL;
28 
29 	if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN))
30 		return ipp.ipo_next;
31 
32 	if ((opts & OPT_DEBUG) == 0) {
33 		if ((ipp.ipo_flags & IPOOL_ANON) != 0)
34 			PRINTF("# 'anonymous' tree %s\n", ipp.ipo_name);
35 		PRINTF("table role = ");
36 	} else {
37 		PRINTF("Name: %s", ipp.ipo_name);
38 		if ((ipp.ipo_flags & IPOOL_ANON) == IPOOL_ANON)
39 			PRINTF("(anon)");
40 		putchar(' ');
41 		PRINTF("Role: ");
42 	}
43 
44 	switch (ipp.ipo_unit)
45 	{
46 	case IPL_LOGIPF :
47 		printf("ipf");
48 		break;
49 	case IPL_LOGNAT :
50 		printf("nat");
51 		break;
52 	case IPL_LOGSTATE :
53 		printf("state");
54 		break;
55 	case IPL_LOGAUTH :
56 		printf("auth");
57 		break;
58 	case IPL_LOGSYNC :
59 		printf("sync");
60 		break;
61 	case IPL_LOGSCAN :
62 		printf("scan");
63 		break;
64 	case IPL_LOGLOOKUP :
65 		printf("lookup");
66 		break;
67 	case IPL_LOGCOUNT :
68 		printf("count");
69 		break;
70 	default :
71 		printf("unknown(%d)", ipp.ipo_unit);
72 	}
73 
74 	if ((opts & OPT_DEBUG) == 0) {
75 		PRINTF(" type = tree number = %s\n", ipp.ipo_name);
76 		PRINTF("\t{");
77 	} else {
78 		putchar(' ');
79 
80 		PRINTF("\tReferences: %d\tHits: %lu\n", ipp.ipo_ref,
81 			ipp.ipo_hits);
82 		PRINTF("\tNodes Starting at %p\n", ipp.ipo_list);
83 	}
84 
85 	ipnpn = ipp.ipo_list;
86 	ipp.ipo_list = NULL;
87 	while (ipnpn != NULL) {
88 		ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp));
89 		(*copyfunc)(ipnpn, ipnp, sizeof(ipn));
90 		ipnpn = ipnp->ipn_next;
91 		ipnp->ipn_next = ipp.ipo_list;
92 		ipp.ipo_list = ipnp;
93 	}
94 
95 	if (ipp.ipo_list == NULL) {
96 		putchar(';');
97 	} else {
98 		for (ipnp = ipp.ipo_list; ipnp != NULL; ) {
99 			ipnp = printpoolnode(ipnp, opts);
100 
101 			if ((opts & OPT_DEBUG) == 0) {
102 				putchar(';');
103 			}
104 		}
105 	}
106 
107 	if ((opts & OPT_DEBUG) == 0)
108 		PRINTF(" };\n");
109 
110 	return ipp.ipo_next;
111 }
112