1254219Scy/*
2254219Scy * Copyright (C) 2012 by Darren Reed.
3254219Scy *
4254219Scy * See the IPFILTER.LICENCE file for details on licencing.
5254219Scy *
6254219Scy * $Id: printnatfield.c,v 1.6.2.2 2012/01/26 05:44:26 darren_r Exp $
7254219Scy */
8254219Scy
9254219Scy#include "ipf.h"
10254219Scy
11254219Scywordtab_t natfields[] = {
12254219Scy	{ "all",	-2 },
13254219Scy	{ "ifp0",	1 },
14254219Scy	{ "ifp1",	2 },
15254219Scy	{ "mtu0",	3 },
16254219Scy	{ "mtu1",	4 },
17254219Scy	{ "ifname0",	5 },
18254219Scy	{ "ifname1",	6 },
19254219Scy	{ "sumd0",	7 },
20254219Scy	{ "sumd1",	8 },
21254219Scy	{ "pkts0",	9 },
22254219Scy	{ "pkts1",	10 },
23254219Scy	{ "bytes0",	11 },
24254219Scy	{ "bytes1",	12 },
25254219Scy	{ "proto0",	13 },
26254219Scy	{ "proto1",	14 },
27254219Scy	{ "hash0",	15 },
28254219Scy	{ "hash1",	16 },
29254219Scy	{ "ref",	17 },
30254219Scy	{ "rev",	18 },
31254219Scy	{ "v0",		19 },
32254219Scy	{ "redir",	20 },
33254219Scy	{ "use",	21 },
34254219Scy	{ "ipsumd",	22 },
35254219Scy	{ "dir",	23 },
36254219Scy	{ "olddstip",	24 },
37254219Scy	{ "oldsrcip",	25 },
38254219Scy	{ "newdstip",	26 },
39254219Scy	{ "newsrcip",	27 },
40254219Scy	{ "olddport",	28 },
41254219Scy	{ "oldsport",	29 },
42254219Scy	{ "newdport",	30 },
43254219Scy	{ "newsport",	31 },
44254219Scy	{ "age",	32 },
45254219Scy	{ "v1",		33 },
46254219Scy	{ NULL, 0 }
47254219Scy};
48254219Scy
49254219Scy
50254219Scyvoid
51254219Scyprintnatfield(n, fieldnum)
52254219Scy	nat_t *n;
53254219Scy	int fieldnum;
54254219Scy{
55254219Scy	int i;
56254219Scy
57254219Scy	switch (fieldnum)
58254219Scy	{
59254219Scy	case -2 :
60254219Scy		for (i = 1; natfields[i].w_word != NULL; i++) {
61254219Scy			if (natfields[i].w_value > 0) {
62254219Scy				printnatfield(n, i);
63254219Scy				if (natfields[i + 1].w_value > 0)
64254219Scy					putchar('\t');
65254219Scy			}
66254219Scy		}
67254219Scy		break;
68254219Scy
69254219Scy	case 1:
70254219Scy		PRINTF("%#lx", (u_long)n->nat_ifps[0]);
71254219Scy		break;
72254219Scy
73254219Scy	case 2:
74254219Scy		PRINTF("%#lx", (u_long)n->nat_ifps[1]);
75254219Scy		break;
76254219Scy
77254219Scy	case 3:
78254219Scy		PRINTF("%d", n->nat_mtu[0]);
79254219Scy		break;
80254219Scy
81254219Scy	case 4:
82254219Scy		PRINTF("%d", n->nat_mtu[1]);
83254219Scy		break;
84254219Scy
85254219Scy	case 5:
86254219Scy		PRINTF("%s", n->nat_ifnames[0]);
87254219Scy		break;
88254219Scy
89254219Scy	case 6:
90254219Scy		PRINTF("%s", n->nat_ifnames[1]);
91254219Scy		break;
92254219Scy
93254219Scy	case 7:
94254219Scy		PRINTF("%d", n->nat_sumd[0]);
95254219Scy		break;
96254219Scy
97254219Scy	case 8:
98254219Scy		PRINTF("%d", n->nat_sumd[1]);
99254219Scy		break;
100254219Scy
101254219Scy	case 9:
102254219Scy#ifdef USE_QUAD_T
103254219Scy		PRINTF("%"PRIu64"", n->nat_pkts[0]);
104254219Scy#else
105254219Scy		PRINTF("%lu", n->nat_pkts[0]);
106254219Scy#endif
107254219Scy		break;
108254219Scy
109254219Scy	case 10:
110254219Scy#ifdef USE_QUAD_T
111254219Scy		PRINTF("%"PRIu64"", n->nat_pkts[1]);
112254219Scy#else
113254219Scy		PRINTF("%lu", n->nat_pkts[1]);
114254219Scy#endif
115254219Scy		break;
116254219Scy
117254219Scy	case 11:
118254219Scy#ifdef USE_QUAD_T
119254219Scy		PRINTF("%"PRIu64"", n->nat_bytes[0]);
120254219Scy#else
121254219Scy		PRINTF("%lu", n->nat_bytes[0]);
122254219Scy#endif
123254219Scy		break;
124254219Scy
125254219Scy	case 12:
126254219Scy#ifdef USE_QUAD_T
127254219Scy		PRINTF("%"PRIu64"", n->nat_bytes[1]);
128254219Scy#else
129254219Scy		PRINTF("%lu", n->nat_bytes[1]);
130254219Scy#endif
131254219Scy		break;
132254219Scy
133254219Scy	case 13:
134254219Scy		PRINTF("%d", n->nat_pr[0]);
135254219Scy		break;
136254219Scy
137254219Scy	case 14:
138254219Scy		PRINTF("%d", n->nat_pr[1]);
139254219Scy		break;
140254219Scy
141254219Scy	case 15:
142254219Scy		PRINTF("%u", n->nat_hv[0]);
143254219Scy		break;
144254219Scy
145254219Scy	case 16:
146254219Scy		PRINTF("%u", n->nat_hv[1]);
147254219Scy		break;
148254219Scy
149254219Scy	case 17:
150254219Scy		PRINTF("%d", n->nat_ref);
151254219Scy		break;
152254219Scy
153254219Scy	case 18:
154254219Scy		PRINTF("%d", n->nat_rev);
155254219Scy		break;
156254219Scy
157254219Scy	case 19:
158254219Scy		PRINTF("%d", n->nat_v[0]);
159254219Scy		break;
160254219Scy
161254219Scy	case 33:
162254219Scy		PRINTF("%d", n->nat_v[0]);
163254219Scy		break;
164254219Scy
165254219Scy	case 20:
166254219Scy		PRINTF("%d", n->nat_redir);
167254219Scy		break;
168254219Scy
169254219Scy	case 21:
170254219Scy		PRINTF("%d", n->nat_use);
171254219Scy		break;
172254219Scy
173254219Scy	case 22:
174254219Scy		PRINTF("%u", n->nat_ipsumd);
175254219Scy		break;
176254219Scy
177254219Scy	case 23:
178254219Scy		PRINTF("%d", n->nat_dir);
179254219Scy		break;
180254219Scy
181254219Scy	case 24:
182254219Scy		PRINTF("%s", hostname(n->nat_v[0], &n->nat_odstip));
183254219Scy		break;
184254219Scy
185254219Scy	case 25:
186254219Scy		PRINTF("%s", hostname(n->nat_v[0], &n->nat_osrcip));
187254219Scy		break;
188254219Scy
189254219Scy	case 26:
190254219Scy		PRINTF("%s", hostname(n->nat_v[1], &n->nat_ndstip));
191254219Scy		break;
192254219Scy
193254219Scy	case 27:
194254219Scy		PRINTF("%s", hostname(n->nat_v[1], &n->nat_nsrcip));
195254219Scy		break;
196254219Scy
197254219Scy	case 28:
198254219Scy		PRINTF("%hu", ntohs(n->nat_odport));
199254219Scy		break;
200254219Scy
201254219Scy	case 29:
202254219Scy		PRINTF("%hu", ntohs(n->nat_osport));
203254219Scy		break;
204254219Scy
205254219Scy	case 30:
206254219Scy		PRINTF("%hu", ntohs(n->nat_ndport));
207254219Scy		break;
208254219Scy
209254219Scy	case 31:
210254219Scy		PRINTF("%hu", ntohs(n->nat_nsport));
211254219Scy		break;
212254219Scy
213254219Scy	case 32:
214254219Scy		PRINTF("%u", n->nat_age);
215254219Scy		break;
216254219Scy
217254219Scy	default:
218254219Scy		break;
219254219Scy	}
220254219Scy}
221