1254219Scy/*
2254219Scy * Copyright (C) 2012 by Darren Reed.
3254219Scy *
4254219Scy * See the IPFILTER.LICENCE file for details on licencing.
5254219Scy *
6254219Scy * $Id: printstatefields.c,v 1.4.2.2 2012/01/26 05:44:26 darren_r Exp $
7254219Scy */
8254219Scy
9254219Scy#include "ipf.h"
10254219Scy
11254219Scywordtab_t statefields[] = {
12254219Scy	{ "all",	-2 },
13254219Scy	{ "ifp0",	1 },
14254219Scy	{ "ifp1",	2 },
15254219Scy	{ "ifp2",	3 },
16254219Scy	{ "ifp3",	4 },
17254219Scy	{ "ifname0",	5 },
18254219Scy	{ "ifname1",	6 },
19254219Scy	{ "ifname2",	7 },
20254219Scy	{ "ifname3",	8 },
21254219Scy	{ "pkts0",	9 },
22254219Scy	{ "pkts1",	10 },
23254219Scy	{ "pkts2",	11 },
24254219Scy	{ "pkts3",	12 },
25254219Scy	{ "bytes0",	13 },
26254219Scy	{ "bytes1",	14 },
27254219Scy	{ "bytes2",	15 },
28254219Scy	{ "bytes3",	16 },
29254219Scy	{ "state0",	17 },
30254219Scy	{ "state1",	18 },
31254219Scy	{ "age0",	19 },
32254219Scy	{ "age1",	20 },
33254219Scy	{ "ref",	21 },
34254219Scy	{ "isn0",	22 },
35254219Scy	{ "isn1",	23 },
36254219Scy	{ "sumd0",	24 },
37254219Scy	{ "sumd1",	25 },
38254219Scy	{ "src",	26 },
39254219Scy	{ "dst",	27 },
40254219Scy	{ "sport",	28 },
41254219Scy	{ "dport",	29 },
42254219Scy	{ "icmptype",	30 },
43254219Scy	{ "-",		31 },
44254219Scy	{ "pass",	32 },
45254219Scy	{ "proto",	33 },
46254219Scy	{ "version",	34 },
47254219Scy	{ "hash",	35 },
48254219Scy	{ "tag",	36 },
49254219Scy	{ "flags",	37 },
50254219Scy	{ "rulen",	38 },
51254219Scy	{ "group",	39 },
52254219Scy	{ "flx0",	40 },
53254219Scy	{ "flx1",	41 },
54254219Scy	{ "flx2",	42 },
55254219Scy	{ "flx3",	43 },
56254219Scy	{ "opt0",	44 },
57254219Scy	{ "opt1",	45 },
58254219Scy	{ "optmsk0",	46 },
59254219Scy	{ "optmsk1",	47 },
60254219Scy	{ "sec",	48 },
61254219Scy	{ "secmsk",	49 },
62254219Scy	{ "auth",	50 },
63254219Scy	{ "authmsk",	51 },
64254219Scy	{ "icmppkts0",	52 },
65254219Scy	{ "icmppkts1",	53 },
66254219Scy	{ "icmppkts2",	54 },
67254219Scy	{ "icmppkts3",	55 },
68254219Scy	{ NULL, 0 }
69254219Scy};
70254219Scy
71254219Scy
72254219Scyvoid
73254219Scyprintstatefield(sp, fieldnum)
74254219Scy	ipstate_t *sp;
75254219Scy	int fieldnum;
76254219Scy{
77254219Scy	int i;
78254219Scy
79254219Scy	switch (fieldnum)
80254219Scy	{
81254219Scy	case -2 :
82254219Scy		for (i = 1; statefields[i].w_word != NULL; i++) {
83254219Scy			if (statefields[i].w_value > 0) {
84254219Scy				printstatefield(sp, i);
85254219Scy				if (statefields[i + 1].w_value > 0)
86254219Scy					putchar('\t');
87254219Scy			}
88254219Scy		}
89254219Scy		break;
90254219Scy
91254219Scy	case 1:
92254219Scy		PRINTF("%#lx", (u_long)sp->is_ifp[0]);
93254219Scy		break;
94254219Scy
95254219Scy	case 2:
96254219Scy		PRINTF("%#lx", (u_long)sp->is_ifp[1]);
97254219Scy		break;
98254219Scy
99254219Scy	case 3:
100254219Scy		PRINTF("%#lx", (u_long)sp->is_ifp[2]);
101254219Scy		break;
102254219Scy
103254219Scy	case 4:
104254219Scy		PRINTF("%#lx", (u_long)sp->is_ifp[3]);
105254219Scy		break;
106254219Scy
107254219Scy	case 5:
108254219Scy		PRINTF("%s", sp->is_ifname[0]);
109254219Scy		break;
110254219Scy
111254219Scy	case 6:
112254219Scy		PRINTF("%s", sp->is_ifname[1]);
113254219Scy		break;
114254219Scy
115254219Scy	case 7:
116254219Scy		PRINTF("%s", sp->is_ifname[2]);
117254219Scy		break;
118254219Scy
119254219Scy	case 8:
120254219Scy		PRINTF("%s", sp->is_ifname[3]);
121254219Scy		break;
122254219Scy
123254219Scy	case 9:
124254219Scy#ifdef USE_QUAD_T
125254219Scy		PRINTF("%"PRIu64"", sp->is_pkts[0]);
126254219Scy#else
127254219Scy		PRINTF("%lu", sp->is_pkts[0]);
128254219Scy#endif
129254219Scy		break;
130254219Scy
131254219Scy	case 10:
132254219Scy#ifdef USE_QUAD_T
133254219Scy		PRINTF("%"PRIu64"", sp->is_pkts[1]);
134254219Scy#else
135254219Scy		PRINTF("%lu", sp->is_pkts[1]);
136254219Scy#endif
137254219Scy		break;
138254219Scy
139254219Scy	case 11:
140254219Scy#ifdef USE_QUAD_T
141254219Scy		PRINTF("%"PRIu64"", sp->is_pkts[2]);
142254219Scy#else
143254219Scy		PRINTF("%lu", sp->is_pkts[2]);
144254219Scy#endif
145254219Scy		break;
146254219Scy
147254219Scy	case 12:
148254219Scy#ifdef USE_QUAD_T
149254219Scy		PRINTF("%"PRIu64"", sp->is_pkts[3]);
150254219Scy#else
151254219Scy		PRINTF("%lu", sp->is_pkts[3]);
152254219Scy#endif
153254219Scy		break;
154254219Scy
155254219Scy	case 13:
156254219Scy#ifdef USE_QUAD_T
157254219Scy		PRINTF("%"PRIu64"", sp->is_bytes[0]);
158254219Scy#else
159254219Scy		PRINTF("%lu", sp->is_bytes[0]);
160254219Scy#endif
161254219Scy		break;
162254219Scy
163254219Scy	case 14:
164254219Scy#ifdef USE_QUAD_T
165254219Scy		PRINTF("%"PRIu64"", sp->is_bytes[1]);
166254219Scy#else
167254219Scy		PRINTF("%lu", sp->is_bytes[1]);
168254219Scy#endif
169254219Scy		break;
170254219Scy
171254219Scy	case 15:
172254219Scy#ifdef USE_QUAD_T
173254219Scy		PRINTF("%"PRIu64"", sp->is_bytes[2]);
174254219Scy#else
175254219Scy		PRINTF("%lu", sp->is_bytes[2]);
176254219Scy#endif
177254219Scy		break;
178254219Scy
179254219Scy	case 16:
180254219Scy#ifdef USE_QUAD_T
181254219Scy		PRINTF("%"PRIu64"", sp->is_bytes[3]);
182254219Scy#else
183254219Scy		PRINTF("%lu", sp->is_bytes[3]);
184254219Scy#endif
185254219Scy		break;
186254219Scy
187254219Scy	case 17:
188254219Scy		PRINTF("%d", sp->is_state[0]);
189254219Scy		break;
190254219Scy
191254219Scy	case 18:
192254219Scy		PRINTF("%d", sp->is_state[1]);
193254219Scy		break;
194254219Scy
195254219Scy	case 19:
196254219Scy		PRINTF("%d", sp->is_frage[0]);
197254219Scy		break;
198254219Scy
199254219Scy	case 20:
200254219Scy		PRINTF("%d", sp->is_frage[1]);
201254219Scy		break;
202254219Scy
203254219Scy	case 21:
204254219Scy		PRINTF("%d", sp->is_ref);
205254219Scy		break;
206254219Scy
207254219Scy	case 22:
208254219Scy		PRINTF("%d", sp->is_isninc[0]);
209254219Scy		break;
210254219Scy
211254219Scy	case 23:
212254219Scy		PRINTF("%d", sp->is_isninc[1]);
213254219Scy		break;
214254219Scy
215254219Scy	case 24:
216254219Scy		PRINTF("%hd", sp->is_sumd[0]);
217254219Scy		break;
218254219Scy
219254219Scy	case 25:
220254219Scy		PRINTF("%hd", sp->is_sumd[1]);
221254219Scy		break;
222254219Scy
223254219Scy	case 26:
224254219Scy		PRINTF("%s", hostname(sp->is_v, &sp->is_src.in4));
225254219Scy		break;
226254219Scy
227254219Scy	case 27:
228254219Scy		PRINTF("%s", hostname(sp->is_v, &sp->is_dst.in4));
229254219Scy		break;
230254219Scy
231254219Scy	case 28:
232254219Scy		PRINTF("%hu", ntohs(sp->is_sport));
233254219Scy		break;
234254219Scy
235254219Scy	case 29:
236254219Scy		PRINTF("%hu", ntohs(sp->is_dport));
237254219Scy		break;
238254219Scy
239254219Scy	case 30:
240254219Scy		PRINTF("%d", sp->is_type);
241254219Scy		break;
242254219Scy
243254219Scy	case 32:
244254219Scy		PRINTF("%#x", sp->is_pass);
245254219Scy		break;
246254219Scy
247254219Scy	case 33:
248254219Scy		PRINTF("%d", sp->is_p);
249254219Scy		break;
250254219Scy
251254219Scy	case 34:
252254219Scy		PRINTF("%d", sp->is_v);
253254219Scy		break;
254254219Scy
255254219Scy	case 35:
256254219Scy		PRINTF("%d", sp->is_hv);
257254219Scy		break;
258254219Scy
259254219Scy	case 36:
260254219Scy		PRINTF("%d", sp->is_tag);
261254219Scy		break;
262254219Scy
263254219Scy	case 37:
264254219Scy		PRINTF("%#x", sp->is_flags);
265254219Scy		break;
266254219Scy
267254219Scy	case 38:
268254219Scy		PRINTF("%d", sp->is_rulen);
269254219Scy		break;
270254219Scy
271254219Scy	case 39:
272254219Scy		PRINTF("%s", sp->is_group);
273254219Scy		break;
274254219Scy
275254219Scy	case 40:
276254219Scy		PRINTF("%#x", sp->is_flx[0][0]);
277254219Scy		break;
278254219Scy
279254219Scy	case 41:
280254219Scy		PRINTF("%#x", sp->is_flx[0][1]);
281254219Scy		break;
282254219Scy
283254219Scy	case 42:
284254219Scy		PRINTF("%#x", sp->is_flx[1][0]);
285254219Scy		break;
286254219Scy
287254219Scy	case 43:
288254219Scy		PRINTF("%#x", sp->is_flx[1][1]);
289254219Scy		break;
290254219Scy
291254219Scy	case 44:
292254219Scy		PRINTF("%#x", sp->is_opt[0]);
293254219Scy		break;
294254219Scy
295254219Scy	case 45:
296254219Scy		PRINTF("%#x", sp->is_opt[1]);
297254219Scy		break;
298254219Scy
299254219Scy	case 46:
300254219Scy		PRINTF("%#x", sp->is_optmsk[0]);
301254219Scy		break;
302254219Scy
303254219Scy	case 47:
304254219Scy		PRINTF("%#x", sp->is_optmsk[1]);
305254219Scy		break;
306254219Scy
307254219Scy	case 48:
308254219Scy		PRINTF("%#x", sp->is_sec);
309254219Scy		break;
310254219Scy
311254219Scy	case 49:
312254219Scy		PRINTF("%#x", sp->is_secmsk);
313254219Scy		break;
314254219Scy
315254219Scy	case 50:
316254219Scy		PRINTF("%#x", sp->is_auth);
317254219Scy		break;
318254219Scy
319254219Scy	case 51:
320254219Scy		PRINTF("%#x", sp->is_authmsk);
321254219Scy		break;
322254219Scy
323254219Scy	case 52:
324254219Scy#ifdef USE_QUAD_T
325254219Scy		PRINTF("%"PRIu64"", sp->is_icmppkts[0]);
326254219Scy#else
327254219Scy		PRINTF("%lu", sp->is_icmppkts[0]);
328254219Scy#endif
329254219Scy		break;
330254219Scy
331254219Scy	case 53:
332254219Scy#ifdef USE_QUAD_T
333254219Scy		PRINTF("%"PRIu64"", sp->is_icmppkts[1]);
334254219Scy#else
335254219Scy		PRINTF("%lu", sp->is_icmppkts[1]);
336254219Scy#endif
337254219Scy		break;
338254219Scy
339254219Scy	case 54:
340254219Scy#ifdef USE_QUAD_T
341254219Scy		PRINTF("%"PRIu64"", sp->is_icmppkts[2]);
342254219Scy#else
343254219Scy		PRINTF("%lu", sp->is_icmppkts[2]);
344254219Scy#endif
345254219Scy		break;
346254219Scy
347254219Scy	case 55:
348254219Scy#ifdef USE_QUAD_T
349254219Scy		PRINTF("%"PRIu64"", sp->is_icmppkts[3]);
350254219Scy#else
351254219Scy		PRINTF("%lu", sp->is_icmppkts[3]);
352254219Scy#endif
353254219Scy		break;
354254219Scy
355254219Scy	default:
356254219Scy		break;
357254219Scy	}
358254219Scy}
359