1/*
2 * Copyright (C) 2012 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id: printstatefields.c,v 1.4.2.2 2012/01/26 05:44:26 darren_r Exp $
7 */
8
9#include "ipf.h"
10
11wordtab_t statefields[] = {
12	{ "all",	-2 },
13	{ "ifp0",	1 },
14	{ "ifp1",	2 },
15	{ "ifp2",	3 },
16	{ "ifp3",	4 },
17	{ "ifname0",	5 },
18	{ "ifname1",	6 },
19	{ "ifname2",	7 },
20	{ "ifname3",	8 },
21	{ "pkts0",	9 },
22	{ "pkts1",	10 },
23	{ "pkts2",	11 },
24	{ "pkts3",	12 },
25	{ "bytes0",	13 },
26	{ "bytes1",	14 },
27	{ "bytes2",	15 },
28	{ "bytes3",	16 },
29	{ "state0",	17 },
30	{ "state1",	18 },
31	{ "age0",	19 },
32	{ "age1",	20 },
33	{ "ref",	21 },
34	{ "isn0",	22 },
35	{ "isn1",	23 },
36	{ "sumd0",	24 },
37	{ "sumd1",	25 },
38	{ "src",	26 },
39	{ "dst",	27 },
40	{ "sport",	28 },
41	{ "dport",	29 },
42	{ "icmptype",	30 },
43	{ "-",		31 },
44	{ "pass",	32 },
45	{ "proto",	33 },
46	{ "version",	34 },
47	{ "hash",	35 },
48	{ "tag",	36 },
49	{ "flags",	37 },
50	{ "rulen",	38 },
51	{ "group",	39 },
52	{ "flx0",	40 },
53	{ "flx1",	41 },
54	{ "flx2",	42 },
55	{ "flx3",	43 },
56	{ "opt0",	44 },
57	{ "opt1",	45 },
58	{ "optmsk0",	46 },
59	{ "optmsk1",	47 },
60	{ "sec",	48 },
61	{ "secmsk",	49 },
62	{ "auth",	50 },
63	{ "authmsk",	51 },
64	{ "icmppkts0",	52 },
65	{ "icmppkts1",	53 },
66	{ "icmppkts2",	54 },
67	{ "icmppkts3",	55 },
68	{ NULL, 0 }
69};
70
71
72void
73printstatefield(ipstate_t *sp, int fieldnum)
74{
75	int i;
76
77	switch (fieldnum)
78	{
79	case -2 :
80		for (i = 1; statefields[i].w_word != NULL; i++) {
81			if (statefields[i].w_value > 0) {
82				printstatefield(sp, i);
83				if (statefields[i + 1].w_value > 0)
84					putchar('\t');
85			}
86		}
87		break;
88
89	case 1:
90		PRINTF("%#lx", (u_long)sp->is_ifp[0]);
91		break;
92
93	case 2:
94		PRINTF("%#lx", (u_long)sp->is_ifp[1]);
95		break;
96
97	case 3:
98		PRINTF("%#lx", (u_long)sp->is_ifp[2]);
99		break;
100
101	case 4:
102		PRINTF("%#lx", (u_long)sp->is_ifp[3]);
103		break;
104
105	case 5:
106		PRINTF("%s", sp->is_ifname[0]);
107		break;
108
109	case 6:
110		PRINTF("%s", sp->is_ifname[1]);
111		break;
112
113	case 7:
114		PRINTF("%s", sp->is_ifname[2]);
115		break;
116
117	case 8:
118		PRINTF("%s", sp->is_ifname[3]);
119		break;
120
121	case 9:
122#ifdef USE_QUAD_T
123		PRINTF("%"PRIu64"", sp->is_pkts[0]);
124#else
125		PRINTF("%lu", sp->is_pkts[0]);
126#endif
127		break;
128
129	case 10:
130#ifdef USE_QUAD_T
131		PRINTF("%"PRIu64"", sp->is_pkts[1]);
132#else
133		PRINTF("%lu", sp->is_pkts[1]);
134#endif
135		break;
136
137	case 11:
138#ifdef USE_QUAD_T
139		PRINTF("%"PRIu64"", sp->is_pkts[2]);
140#else
141		PRINTF("%lu", sp->is_pkts[2]);
142#endif
143		break;
144
145	case 12:
146#ifdef USE_QUAD_T
147		PRINTF("%"PRIu64"", sp->is_pkts[3]);
148#else
149		PRINTF("%lu", sp->is_pkts[3]);
150#endif
151		break;
152
153	case 13:
154#ifdef USE_QUAD_T
155		PRINTF("%"PRIu64"", sp->is_bytes[0]);
156#else
157		PRINTF("%lu", sp->is_bytes[0]);
158#endif
159		break;
160
161	case 14:
162#ifdef USE_QUAD_T
163		PRINTF("%"PRIu64"", sp->is_bytes[1]);
164#else
165		PRINTF("%lu", sp->is_bytes[1]);
166#endif
167		break;
168
169	case 15:
170#ifdef USE_QUAD_T
171		PRINTF("%"PRIu64"", sp->is_bytes[2]);
172#else
173		PRINTF("%lu", sp->is_bytes[2]);
174#endif
175		break;
176
177	case 16:
178#ifdef USE_QUAD_T
179		PRINTF("%"PRIu64"", sp->is_bytes[3]);
180#else
181		PRINTF("%lu", sp->is_bytes[3]);
182#endif
183		break;
184
185	case 17:
186		PRINTF("%d", sp->is_state[0]);
187		break;
188
189	case 18:
190		PRINTF("%d", sp->is_state[1]);
191		break;
192
193	case 19:
194		PRINTF("%d", sp->is_frage[0]);
195		break;
196
197	case 20:
198		PRINTF("%d", sp->is_frage[1]);
199		break;
200
201	case 21:
202		PRINTF("%d", sp->is_ref);
203		break;
204
205	case 22:
206		PRINTF("%d", sp->is_isninc[0]);
207		break;
208
209	case 23:
210		PRINTF("%d", sp->is_isninc[1]);
211		break;
212
213	case 24:
214		PRINTF("%hd", sp->is_sumd[0]);
215		break;
216
217	case 25:
218		PRINTF("%hd", sp->is_sumd[1]);
219		break;
220
221	case 26:
222		PRINTF("%s", hostname(sp->is_v, &sp->is_src.in4));
223		break;
224
225	case 27:
226		PRINTF("%s", hostname(sp->is_v, &sp->is_dst.in4));
227		break;
228
229	case 28:
230		PRINTF("%hu", ntohs(sp->is_sport));
231		break;
232
233	case 29:
234		PRINTF("%hu", ntohs(sp->is_dport));
235		break;
236
237	case 30:
238		PRINTF("%d", sp->is_type);
239		break;
240
241	case 32:
242		PRINTF("%#x", sp->is_pass);
243		break;
244
245	case 33:
246		PRINTF("%d", sp->is_p);
247		break;
248
249	case 34:
250		PRINTF("%d", sp->is_v);
251		break;
252
253	case 35:
254		PRINTF("%d", sp->is_hv);
255		break;
256
257	case 36:
258		PRINTF("%d", sp->is_tag);
259		break;
260
261	case 37:
262		PRINTF("%#x", sp->is_flags);
263		break;
264
265	case 38:
266		PRINTF("%d", sp->is_rulen);
267		break;
268
269	case 39:
270		PRINTF("%s", sp->is_group);
271		break;
272
273	case 40:
274		PRINTF("%#x", sp->is_flx[0][0]);
275		break;
276
277	case 41:
278		PRINTF("%#x", sp->is_flx[0][1]);
279		break;
280
281	case 42:
282		PRINTF("%#x", sp->is_flx[1][0]);
283		break;
284
285	case 43:
286		PRINTF("%#x", sp->is_flx[1][1]);
287		break;
288
289	case 44:
290		PRINTF("%#x", sp->is_opt[0]);
291		break;
292
293	case 45:
294		PRINTF("%#x", sp->is_opt[1]);
295		break;
296
297	case 46:
298		PRINTF("%#x", sp->is_optmsk[0]);
299		break;
300
301	case 47:
302		PRINTF("%#x", sp->is_optmsk[1]);
303		break;
304
305	case 48:
306		PRINTF("%#x", sp->is_sec);
307		break;
308
309	case 49:
310		PRINTF("%#x", sp->is_secmsk);
311		break;
312
313	case 50:
314		PRINTF("%#x", sp->is_auth);
315		break;
316
317	case 51:
318		PRINTF("%#x", sp->is_authmsk);
319		break;
320
321	case 52:
322#ifdef USE_QUAD_T
323		PRINTF("%"PRIu64"", sp->is_icmppkts[0]);
324#else
325		PRINTF("%lu", sp->is_icmppkts[0]);
326#endif
327		break;
328
329	case 53:
330#ifdef USE_QUAD_T
331		PRINTF("%"PRIu64"", sp->is_icmppkts[1]);
332#else
333		PRINTF("%lu", sp->is_icmppkts[1]);
334#endif
335		break;
336
337	case 54:
338#ifdef USE_QUAD_T
339		PRINTF("%"PRIu64"", sp->is_icmppkts[2]);
340#else
341		PRINTF("%lu", sp->is_icmppkts[2]);
342#endif
343		break;
344
345	case 55:
346#ifdef USE_QUAD_T
347		PRINTF("%"PRIu64"", sp->is_icmppkts[3]);
348#else
349		PRINTF("%lu", sp->is_icmppkts[3]);
350#endif
351		break;
352
353	default:
354		break;
355	}
356}
357