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(sp, fieldnum)
74	ipstate_t *sp;
75	int fieldnum;
76{
77	int i;
78
79	switch (fieldnum)
80	{
81	case -2 :
82		for (i = 1; statefields[i].w_word != NULL; i++) {
83			if (statefields[i].w_value > 0) {
84				printstatefield(sp, i);
85				if (statefields[i + 1].w_value > 0)
86					putchar('\t');
87			}
88		}
89		break;
90
91	case 1:
92		PRINTF("%#lx", (u_long)sp->is_ifp[0]);
93		break;
94
95	case 2:
96		PRINTF("%#lx", (u_long)sp->is_ifp[1]);
97		break;
98
99	case 3:
100		PRINTF("%#lx", (u_long)sp->is_ifp[2]);
101		break;
102
103	case 4:
104		PRINTF("%#lx", (u_long)sp->is_ifp[3]);
105		break;
106
107	case 5:
108		PRINTF("%s", sp->is_ifname[0]);
109		break;
110
111	case 6:
112		PRINTF("%s", sp->is_ifname[1]);
113		break;
114
115	case 7:
116		PRINTF("%s", sp->is_ifname[2]);
117		break;
118
119	case 8:
120		PRINTF("%s", sp->is_ifname[3]);
121		break;
122
123	case 9:
124#ifdef USE_QUAD_T
125		PRINTF("%"PRIu64"", sp->is_pkts[0]);
126#else
127		PRINTF("%lu", sp->is_pkts[0]);
128#endif
129		break;
130
131	case 10:
132#ifdef USE_QUAD_T
133		PRINTF("%"PRIu64"", sp->is_pkts[1]);
134#else
135		PRINTF("%lu", sp->is_pkts[1]);
136#endif
137		break;
138
139	case 11:
140#ifdef USE_QUAD_T
141		PRINTF("%"PRIu64"", sp->is_pkts[2]);
142#else
143		PRINTF("%lu", sp->is_pkts[2]);
144#endif
145		break;
146
147	case 12:
148#ifdef USE_QUAD_T
149		PRINTF("%"PRIu64"", sp->is_pkts[3]);
150#else
151		PRINTF("%lu", sp->is_pkts[3]);
152#endif
153		break;
154
155	case 13:
156#ifdef USE_QUAD_T
157		PRINTF("%"PRIu64"", sp->is_bytes[0]);
158#else
159		PRINTF("%lu", sp->is_bytes[0]);
160#endif
161		break;
162
163	case 14:
164#ifdef USE_QUAD_T
165		PRINTF("%"PRIu64"", sp->is_bytes[1]);
166#else
167		PRINTF("%lu", sp->is_bytes[1]);
168#endif
169		break;
170
171	case 15:
172#ifdef USE_QUAD_T
173		PRINTF("%"PRIu64"", sp->is_bytes[2]);
174#else
175		PRINTF("%lu", sp->is_bytes[2]);
176#endif
177		break;
178
179	case 16:
180#ifdef USE_QUAD_T
181		PRINTF("%"PRIu64"", sp->is_bytes[3]);
182#else
183		PRINTF("%lu", sp->is_bytes[3]);
184#endif
185		break;
186
187	case 17:
188		PRINTF("%d", sp->is_state[0]);
189		break;
190
191	case 18:
192		PRINTF("%d", sp->is_state[1]);
193		break;
194
195	case 19:
196		PRINTF("%d", sp->is_frage[0]);
197		break;
198
199	case 20:
200		PRINTF("%d", sp->is_frage[1]);
201		break;
202
203	case 21:
204		PRINTF("%d", sp->is_ref);
205		break;
206
207	case 22:
208		PRINTF("%d", sp->is_isninc[0]);
209		break;
210
211	case 23:
212		PRINTF("%d", sp->is_isninc[1]);
213		break;
214
215	case 24:
216		PRINTF("%hd", sp->is_sumd[0]);
217		break;
218
219	case 25:
220		PRINTF("%hd", sp->is_sumd[1]);
221		break;
222
223	case 26:
224		PRINTF("%s", hostname(sp->is_v, &sp->is_src.in4));
225		break;
226
227	case 27:
228		PRINTF("%s", hostname(sp->is_v, &sp->is_dst.in4));
229		break;
230
231	case 28:
232		PRINTF("%hu", ntohs(sp->is_sport));
233		break;
234
235	case 29:
236		PRINTF("%hu", ntohs(sp->is_dport));
237		break;
238
239	case 30:
240		PRINTF("%d", sp->is_type);
241		break;
242
243	case 32:
244		PRINTF("%#x", sp->is_pass);
245		break;
246
247	case 33:
248		PRINTF("%d", sp->is_p);
249		break;
250
251	case 34:
252		PRINTF("%d", sp->is_v);
253		break;
254
255	case 35:
256		PRINTF("%d", sp->is_hv);
257		break;
258
259	case 36:
260		PRINTF("%d", sp->is_tag);
261		break;
262
263	case 37:
264		PRINTF("%#x", sp->is_flags);
265		break;
266
267	case 38:
268		PRINTF("%d", sp->is_rulen);
269		break;
270
271	case 39:
272		PRINTF("%s", sp->is_group);
273		break;
274
275	case 40:
276		PRINTF("%#x", sp->is_flx[0][0]);
277		break;
278
279	case 41:
280		PRINTF("%#x", sp->is_flx[0][1]);
281		break;
282
283	case 42:
284		PRINTF("%#x", sp->is_flx[1][0]);
285		break;
286
287	case 43:
288		PRINTF("%#x", sp->is_flx[1][1]);
289		break;
290
291	case 44:
292		PRINTF("%#x", sp->is_opt[0]);
293		break;
294
295	case 45:
296		PRINTF("%#x", sp->is_opt[1]);
297		break;
298
299	case 46:
300		PRINTF("%#x", sp->is_optmsk[0]);
301		break;
302
303	case 47:
304		PRINTF("%#x", sp->is_optmsk[1]);
305		break;
306
307	case 48:
308		PRINTF("%#x", sp->is_sec);
309		break;
310
311	case 49:
312		PRINTF("%#x", sp->is_secmsk);
313		break;
314
315	case 50:
316		PRINTF("%#x", sp->is_auth);
317		break;
318
319	case 51:
320		PRINTF("%#x", sp->is_authmsk);
321		break;
322
323	case 52:
324#ifdef USE_QUAD_T
325		PRINTF("%"PRIu64"", sp->is_icmppkts[0]);
326#else
327		PRINTF("%lu", sp->is_icmppkts[0]);
328#endif
329		break;
330
331	case 53:
332#ifdef USE_QUAD_T
333		PRINTF("%"PRIu64"", sp->is_icmppkts[1]);
334#else
335		PRINTF("%lu", sp->is_icmppkts[1]);
336#endif
337		break;
338
339	case 54:
340#ifdef USE_QUAD_T
341		PRINTF("%"PRIu64"", sp->is_icmppkts[2]);
342#else
343		PRINTF("%lu", sp->is_icmppkts[2]);
344#endif
345		break;
346
347	case 55:
348#ifdef USE_QUAD_T
349		PRINTF("%"PRIu64"", sp->is_icmppkts[3]);
350#else
351		PRINTF("%lu", sp->is_icmppkts[3]);
352#endif
353		break;
354
355	default:
356		break;
357	}
358}
359