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