printpoolfield.c revision 1.2
1/*	$NetBSD: printpoolfield.c,v 1.2 2012/07/22 14:27:37 darrenr Exp $	*/
2
3/*
4 * Copyright (C) 2012 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 *
8 * Id: printpoolfield.c,v 1.1.1.2 2012/07/22 13:44:42 darrenr Exp $
9 */
10
11#include "ipf.h"
12
13wordtab_t poolfields[] = {
14	{ "all",	-2 },
15	{ "address",	1 },
16	{ "mask",	2 },
17	{ "ifname",	3 },
18	{ "pkts",	4 },
19	{ "bytes",	5 },
20	{ "family",	6 },
21	{ NULL, 0 }
22};
23
24
25void
26printpoolfield(p, ptype, fieldnum)
27	void *p;
28	int ptype;
29	int fieldnum;
30{
31	addrfamily_t *a;
32	char abuf[80];
33	int i;
34
35	switch (fieldnum)
36	{
37	case -2 :
38		for (i = 1; poolfields[i].w_word != NULL; i++) {
39			if (poolfields[i].w_value > 0) {
40				printpoolfield(p, ptype, i);
41				if (poolfields[i + 1].w_value > 0)
42					putchar('\t');
43			}
44		}
45		break;
46
47	case 1:
48		if (ptype == IPLT_POOL) {
49			ip_pool_node_t *node = (ip_pool_node_t *)p;
50
51			if (node->ipn_info)
52				PRINTF("!");
53			a = &node->ipn_addr;
54			PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr,
55					       abuf, sizeof(abuf)));
56		} else if (ptype == IPLT_HASH) {
57			iphtent_t *node = (iphtent_t *)p;
58
59			PRINTF("%s", inet_ntop(node->ipe_family,
60					       &node->ipe_addr,
61					       abuf, sizeof(abuf)));
62		} else if (ptype == IPLT_DSTLIST) {
63			ipf_dstnode_t *node = (ipf_dstnode_t *)p;
64
65			a = &node->ipfd_dest.fd_addr;
66			PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr,
67					       abuf, sizeof(abuf)));
68		}
69		break;
70
71	case 2:
72		if (ptype == IPLT_POOL) {
73			ip_pool_node_t *node = (ip_pool_node_t *)p;
74
75			a = &node->ipn_mask;
76			PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr,
77					       abuf, sizeof(abuf)));
78		} else if (ptype == IPLT_HASH) {
79			iphtent_t *node = (iphtent_t *)p;
80
81			PRINTF("%s", inet_ntop(node->ipe_family,
82					       &node->ipe_mask,
83					       abuf, sizeof(abuf)));
84		} else if (ptype == IPLT_DSTLIST) {
85			PRINTF("%s", "");
86		}
87		break;
88
89	case 3:
90		if (ptype == IPLT_POOL) {
91			PRINTF("%s", "");
92		} else if (ptype == IPLT_HASH) {
93			PRINTF("%s", "");
94		} else if (ptype == IPLT_DSTLIST) {
95			ipf_dstnode_t *node = (ipf_dstnode_t *)p;
96
97			if (node->ipfd_dest.fd_name == -1) {
98				PRINTF("%s", "");
99			} else {
100				PRINTF("%s", node->ipfd_names +
101				       node->ipfd_dest.fd_name);
102			}
103		}
104		break;
105
106	case 4:
107		if (ptype == IPLT_POOL) {
108			ip_pool_node_t *node = (ip_pool_node_t *)p;
109
110#ifdef USE_QUAD_T
111			PRINTF("%"PRIu64"", node->ipn_hits);
112#else
113			PRINTF("%lu", node->ipn_hits);
114#endif
115		} else if (ptype == IPLT_HASH) {
116			iphtent_t *node = (iphtent_t *)p;
117
118#ifdef USE_QUAD_T
119			PRINTF("%"PRIu64"", node->ipe_hits);
120#else
121			PRINTF("%lu", node->ipe_hits);
122#endif
123		} else if (ptype == IPLT_DSTLIST) {
124			printf("0");
125		}
126		break;
127
128	case 5:
129		if (ptype == IPLT_POOL) {
130			ip_pool_node_t *node = (ip_pool_node_t *)p;
131
132#ifdef USE_QUAD_T
133			PRINTF("%"PRIu64"", node->ipn_bytes);
134#else
135			PRINTF("%lu", node->ipn_bytes);
136#endif
137		} else if (ptype == IPLT_HASH) {
138			iphtent_t *node = (iphtent_t *)p;
139
140#ifdef USE_QUAD_T
141			PRINTF("%"PRIu64"", node->ipe_bytes);
142#else
143			PRINTF("%lu", node->ipe_bytes);
144#endif
145		} else if (ptype == IPLT_DSTLIST) {
146			printf("0");
147		}
148		break;
149
150	case 6:
151		if (ptype == IPLT_POOL) {
152			ip_pool_node_t *node = (ip_pool_node_t *)p;
153
154			PRINTF("%s", familyname(node->ipn_addr.adf_family));
155		} else if (ptype == IPLT_HASH) {
156			iphtent_t *node = (iphtent_t *)p;
157
158			PRINTF("%s", familyname(node->ipe_family));
159		} else if (ptype == IPLT_DSTLIST) {
160			ipf_dstnode_t *node = (ipf_dstnode_t *)p;
161
162			a = &node->ipfd_dest.fd_addr;
163			PRINTF("%s", familyname(a->adf_family));
164		}
165		break;
166
167	default :
168		break;
169	}
170}
171