1/*
2 * Copyright (C) 2012 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id: printnatfield.c,v 1.6.2.2 2012/01/26 05:44:26 darren_r Exp $
7 */
8
9#include "ipf.h"
10
11wordtab_t natfields[] = {
12	{ "all",	-2 },
13	{ "ifp0",	1 },
14	{ "ifp1",	2 },
15	{ "mtu0",	3 },
16	{ "mtu1",	4 },
17	{ "ifname0",	5 },
18	{ "ifname1",	6 },
19	{ "sumd0",	7 },
20	{ "sumd1",	8 },
21	{ "pkts0",	9 },
22	{ "pkts1",	10 },
23	{ "bytes0",	11 },
24	{ "bytes1",	12 },
25	{ "proto0",	13 },
26	{ "proto1",	14 },
27	{ "hash0",	15 },
28	{ "hash1",	16 },
29	{ "ref",	17 },
30	{ "rev",	18 },
31	{ "v0",		19 },
32	{ "redir",	20 },
33	{ "use",	21 },
34	{ "ipsumd",	22 },
35	{ "dir",	23 },
36	{ "olddstip",	24 },
37	{ "oldsrcip",	25 },
38	{ "newdstip",	26 },
39	{ "newsrcip",	27 },
40	{ "olddport",	28 },
41	{ "oldsport",	29 },
42	{ "newdport",	30 },
43	{ "newsport",	31 },
44	{ "age",	32 },
45	{ "v1",		33 },
46	{ NULL, 0 }
47};
48
49
50void
51printnatfield(n, fieldnum)
52	nat_t *n;
53	int fieldnum;
54{
55	int i;
56
57	switch (fieldnum)
58	{
59	case -2 :
60		for (i = 1; natfields[i].w_word != NULL; i++) {
61			if (natfields[i].w_value > 0) {
62				printnatfield(n, i);
63				if (natfields[i + 1].w_value > 0)
64					putchar('\t');
65			}
66		}
67		break;
68
69	case 1:
70		PRINTF("%#lx", (u_long)n->nat_ifps[0]);
71		break;
72
73	case 2:
74		PRINTF("%#lx", (u_long)n->nat_ifps[1]);
75		break;
76
77	case 3:
78		PRINTF("%d", n->nat_mtu[0]);
79		break;
80
81	case 4:
82		PRINTF("%d", n->nat_mtu[1]);
83		break;
84
85	case 5:
86		PRINTF("%s", n->nat_ifnames[0]);
87		break;
88
89	case 6:
90		PRINTF("%s", n->nat_ifnames[1]);
91		break;
92
93	case 7:
94		PRINTF("%d", n->nat_sumd[0]);
95		break;
96
97	case 8:
98		PRINTF("%d", n->nat_sumd[1]);
99		break;
100
101	case 9:
102#ifdef USE_QUAD_T
103		PRINTF("%"PRIu64"", n->nat_pkts[0]);
104#else
105		PRINTF("%lu", n->nat_pkts[0]);
106#endif
107		break;
108
109	case 10:
110#ifdef USE_QUAD_T
111		PRINTF("%"PRIu64"", n->nat_pkts[1]);
112#else
113		PRINTF("%lu", n->nat_pkts[1]);
114#endif
115		break;
116
117	case 11:
118#ifdef USE_QUAD_T
119		PRINTF("%"PRIu64"", n->nat_bytes[0]);
120#else
121		PRINTF("%lu", n->nat_bytes[0]);
122#endif
123		break;
124
125	case 12:
126#ifdef USE_QUAD_T
127		PRINTF("%"PRIu64"", n->nat_bytes[1]);
128#else
129		PRINTF("%lu", n->nat_bytes[1]);
130#endif
131		break;
132
133	case 13:
134		PRINTF("%d", n->nat_pr[0]);
135		break;
136
137	case 14:
138		PRINTF("%d", n->nat_pr[1]);
139		break;
140
141	case 15:
142		PRINTF("%u", n->nat_hv[0]);
143		break;
144
145	case 16:
146		PRINTF("%u", n->nat_hv[1]);
147		break;
148
149	case 17:
150		PRINTF("%d", n->nat_ref);
151		break;
152
153	case 18:
154		PRINTF("%d", n->nat_rev);
155		break;
156
157	case 19:
158		PRINTF("%d", n->nat_v[0]);
159		break;
160
161	case 33:
162		PRINTF("%d", n->nat_v[0]);
163		break;
164
165	case 20:
166		PRINTF("%d", n->nat_redir);
167		break;
168
169	case 21:
170		PRINTF("%d", n->nat_use);
171		break;
172
173	case 22:
174		PRINTF("%u", n->nat_ipsumd);
175		break;
176
177	case 23:
178		PRINTF("%d", n->nat_dir);
179		break;
180
181	case 24:
182		PRINTF("%s", hostname(n->nat_v[0], &n->nat_odstip));
183		break;
184
185	case 25:
186		PRINTF("%s", hostname(n->nat_v[0], &n->nat_osrcip));
187		break;
188
189	case 26:
190		PRINTF("%s", hostname(n->nat_v[1], &n->nat_ndstip));
191		break;
192
193	case 27:
194		PRINTF("%s", hostname(n->nat_v[1], &n->nat_nsrcip));
195		break;
196
197	case 28:
198		PRINTF("%hu", ntohs(n->nat_odport));
199		break;
200
201	case 29:
202		PRINTF("%hu", ntohs(n->nat_osport));
203		break;
204
205	case 30:
206		PRINTF("%hu", ntohs(n->nat_ndport));
207		break;
208
209	case 31:
210		PRINTF("%hu", ntohs(n->nat_nsport));
211		break;
212
213	case 32:
214		PRINTF("%u", n->nat_age);
215		break;
216
217	default:
218		break;
219	}
220}
221