141edb306SCy Schubert /*
241edb306SCy Schubert * Copyright (C) 2012 by Darren Reed.
341edb306SCy Schubert *
441edb306SCy Schubert * See the IPFILTER.LICENCE file for details on licencing.
541edb306SCy Schubert *
641edb306SCy Schubert * $Id: printstatefields.c,v 1.4.2.2 2012/01/26 05:44:26 darren_r Exp $
741edb306SCy Schubert */
841edb306SCy Schubert
941edb306SCy Schubert #include "ipf.h"
1041edb306SCy Schubert
1141edb306SCy Schubert wordtab_t statefields[] = {
1241edb306SCy Schubert { "all", -2 },
1341edb306SCy Schubert { "ifp0", 1 },
1441edb306SCy Schubert { "ifp1", 2 },
1541edb306SCy Schubert { "ifp2", 3 },
1641edb306SCy Schubert { "ifp3", 4 },
1741edb306SCy Schubert { "ifname0", 5 },
1841edb306SCy Schubert { "ifname1", 6 },
1941edb306SCy Schubert { "ifname2", 7 },
2041edb306SCy Schubert { "ifname3", 8 },
2141edb306SCy Schubert { "pkts0", 9 },
2241edb306SCy Schubert { "pkts1", 10 },
2341edb306SCy Schubert { "pkts2", 11 },
2441edb306SCy Schubert { "pkts3", 12 },
2541edb306SCy Schubert { "bytes0", 13 },
2641edb306SCy Schubert { "bytes1", 14 },
2741edb306SCy Schubert { "bytes2", 15 },
2841edb306SCy Schubert { "bytes3", 16 },
2941edb306SCy Schubert { "state0", 17 },
3041edb306SCy Schubert { "state1", 18 },
3141edb306SCy Schubert { "age0", 19 },
3241edb306SCy Schubert { "age1", 20 },
3341edb306SCy Schubert { "ref", 21 },
3441edb306SCy Schubert { "isn0", 22 },
3541edb306SCy Schubert { "isn1", 23 },
3641edb306SCy Schubert { "sumd0", 24 },
3741edb306SCy Schubert { "sumd1", 25 },
3841edb306SCy Schubert { "src", 26 },
3941edb306SCy Schubert { "dst", 27 },
4041edb306SCy Schubert { "sport", 28 },
4141edb306SCy Schubert { "dport", 29 },
4241edb306SCy Schubert { "icmptype", 30 },
4341edb306SCy Schubert { "-", 31 },
4441edb306SCy Schubert { "pass", 32 },
4541edb306SCy Schubert { "proto", 33 },
4641edb306SCy Schubert { "version", 34 },
4741edb306SCy Schubert { "hash", 35 },
4841edb306SCy Schubert { "tag", 36 },
4941edb306SCy Schubert { "flags", 37 },
5041edb306SCy Schubert { "rulen", 38 },
5141edb306SCy Schubert { "group", 39 },
5241edb306SCy Schubert { "flx0", 40 },
5341edb306SCy Schubert { "flx1", 41 },
5441edb306SCy Schubert { "flx2", 42 },
5541edb306SCy Schubert { "flx3", 43 },
5641edb306SCy Schubert { "opt0", 44 },
5741edb306SCy Schubert { "opt1", 45 },
5841edb306SCy Schubert { "optmsk0", 46 },
5941edb306SCy Schubert { "optmsk1", 47 },
6041edb306SCy Schubert { "sec", 48 },
6141edb306SCy Schubert { "secmsk", 49 },
6241edb306SCy Schubert { "auth", 50 },
6341edb306SCy Schubert { "authmsk", 51 },
6441edb306SCy Schubert { "icmppkts0", 52 },
6541edb306SCy Schubert { "icmppkts1", 53 },
6641edb306SCy Schubert { "icmppkts2", 54 },
6741edb306SCy Schubert { "icmppkts3", 55 },
6841edb306SCy Schubert { NULL, 0 }
6941edb306SCy Schubert };
7041edb306SCy Schubert
7141edb306SCy Schubert
7241edb306SCy Schubert void
printstatefield(ipstate_t * sp,int fieldnum)73*efeb8bffSCy Schubert printstatefield(ipstate_t *sp, int fieldnum)
7441edb306SCy Schubert {
7541edb306SCy Schubert int i;
7641edb306SCy Schubert
7741edb306SCy Schubert switch (fieldnum)
7841edb306SCy Schubert {
7941edb306SCy Schubert case -2 :
8041edb306SCy Schubert for (i = 1; statefields[i].w_word != NULL; i++) {
8141edb306SCy Schubert if (statefields[i].w_value > 0) {
8241edb306SCy Schubert printstatefield(sp, i);
8341edb306SCy Schubert if (statefields[i + 1].w_value > 0)
8441edb306SCy Schubert putchar('\t');
8541edb306SCy Schubert }
8641edb306SCy Schubert }
8741edb306SCy Schubert break;
8841edb306SCy Schubert
8941edb306SCy Schubert case 1:
9041edb306SCy Schubert PRINTF("%#lx", (u_long)sp->is_ifp[0]);
9141edb306SCy Schubert break;
9241edb306SCy Schubert
9341edb306SCy Schubert case 2:
9441edb306SCy Schubert PRINTF("%#lx", (u_long)sp->is_ifp[1]);
9541edb306SCy Schubert break;
9641edb306SCy Schubert
9741edb306SCy Schubert case 3:
9841edb306SCy Schubert PRINTF("%#lx", (u_long)sp->is_ifp[2]);
9941edb306SCy Schubert break;
10041edb306SCy Schubert
10141edb306SCy Schubert case 4:
10241edb306SCy Schubert PRINTF("%#lx", (u_long)sp->is_ifp[3]);
10341edb306SCy Schubert break;
10441edb306SCy Schubert
10541edb306SCy Schubert case 5:
10641edb306SCy Schubert PRINTF("%s", sp->is_ifname[0]);
10741edb306SCy Schubert break;
10841edb306SCy Schubert
10941edb306SCy Schubert case 6:
11041edb306SCy Schubert PRINTF("%s", sp->is_ifname[1]);
11141edb306SCy Schubert break;
11241edb306SCy Schubert
11341edb306SCy Schubert case 7:
11441edb306SCy Schubert PRINTF("%s", sp->is_ifname[2]);
11541edb306SCy Schubert break;
11641edb306SCy Schubert
11741edb306SCy Schubert case 8:
11841edb306SCy Schubert PRINTF("%s", sp->is_ifname[3]);
11941edb306SCy Schubert break;
12041edb306SCy Schubert
12141edb306SCy Schubert case 9:
12241edb306SCy Schubert #ifdef USE_QUAD_T
12341edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_pkts[0]);
12441edb306SCy Schubert #else
12541edb306SCy Schubert PRINTF("%lu", sp->is_pkts[0]);
12641edb306SCy Schubert #endif
12741edb306SCy Schubert break;
12841edb306SCy Schubert
12941edb306SCy Schubert case 10:
13041edb306SCy Schubert #ifdef USE_QUAD_T
13141edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_pkts[1]);
13241edb306SCy Schubert #else
13341edb306SCy Schubert PRINTF("%lu", sp->is_pkts[1]);
13441edb306SCy Schubert #endif
13541edb306SCy Schubert break;
13641edb306SCy Schubert
13741edb306SCy Schubert case 11:
13841edb306SCy Schubert #ifdef USE_QUAD_T
13941edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_pkts[2]);
14041edb306SCy Schubert #else
14141edb306SCy Schubert PRINTF("%lu", sp->is_pkts[2]);
14241edb306SCy Schubert #endif
14341edb306SCy Schubert break;
14441edb306SCy Schubert
14541edb306SCy Schubert case 12:
14641edb306SCy Schubert #ifdef USE_QUAD_T
14741edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_pkts[3]);
14841edb306SCy Schubert #else
14941edb306SCy Schubert PRINTF("%lu", sp->is_pkts[3]);
15041edb306SCy Schubert #endif
15141edb306SCy Schubert break;
15241edb306SCy Schubert
15341edb306SCy Schubert case 13:
15441edb306SCy Schubert #ifdef USE_QUAD_T
15541edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_bytes[0]);
15641edb306SCy Schubert #else
15741edb306SCy Schubert PRINTF("%lu", sp->is_bytes[0]);
15841edb306SCy Schubert #endif
15941edb306SCy Schubert break;
16041edb306SCy Schubert
16141edb306SCy Schubert case 14:
16241edb306SCy Schubert #ifdef USE_QUAD_T
16341edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_bytes[1]);
16441edb306SCy Schubert #else
16541edb306SCy Schubert PRINTF("%lu", sp->is_bytes[1]);
16641edb306SCy Schubert #endif
16741edb306SCy Schubert break;
16841edb306SCy Schubert
16941edb306SCy Schubert case 15:
17041edb306SCy Schubert #ifdef USE_QUAD_T
17141edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_bytes[2]);
17241edb306SCy Schubert #else
17341edb306SCy Schubert PRINTF("%lu", sp->is_bytes[2]);
17441edb306SCy Schubert #endif
17541edb306SCy Schubert break;
17641edb306SCy Schubert
17741edb306SCy Schubert case 16:
17841edb306SCy Schubert #ifdef USE_QUAD_T
17941edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_bytes[3]);
18041edb306SCy Schubert #else
18141edb306SCy Schubert PRINTF("%lu", sp->is_bytes[3]);
18241edb306SCy Schubert #endif
18341edb306SCy Schubert break;
18441edb306SCy Schubert
18541edb306SCy Schubert case 17:
18641edb306SCy Schubert PRINTF("%d", sp->is_state[0]);
18741edb306SCy Schubert break;
18841edb306SCy Schubert
18941edb306SCy Schubert case 18:
19041edb306SCy Schubert PRINTF("%d", sp->is_state[1]);
19141edb306SCy Schubert break;
19241edb306SCy Schubert
19341edb306SCy Schubert case 19:
19441edb306SCy Schubert PRINTF("%d", sp->is_frage[0]);
19541edb306SCy Schubert break;
19641edb306SCy Schubert
19741edb306SCy Schubert case 20:
19841edb306SCy Schubert PRINTF("%d", sp->is_frage[1]);
19941edb306SCy Schubert break;
20041edb306SCy Schubert
20141edb306SCy Schubert case 21:
20241edb306SCy Schubert PRINTF("%d", sp->is_ref);
20341edb306SCy Schubert break;
20441edb306SCy Schubert
20541edb306SCy Schubert case 22:
20641edb306SCy Schubert PRINTF("%d", sp->is_isninc[0]);
20741edb306SCy Schubert break;
20841edb306SCy Schubert
20941edb306SCy Schubert case 23:
21041edb306SCy Schubert PRINTF("%d", sp->is_isninc[1]);
21141edb306SCy Schubert break;
21241edb306SCy Schubert
21341edb306SCy Schubert case 24:
21441edb306SCy Schubert PRINTF("%hd", sp->is_sumd[0]);
21541edb306SCy Schubert break;
21641edb306SCy Schubert
21741edb306SCy Schubert case 25:
21841edb306SCy Schubert PRINTF("%hd", sp->is_sumd[1]);
21941edb306SCy Schubert break;
22041edb306SCy Schubert
22141edb306SCy Schubert case 26:
22241edb306SCy Schubert PRINTF("%s", hostname(sp->is_v, &sp->is_src.in4));
22341edb306SCy Schubert break;
22441edb306SCy Schubert
22541edb306SCy Schubert case 27:
22641edb306SCy Schubert PRINTF("%s", hostname(sp->is_v, &sp->is_dst.in4));
22741edb306SCy Schubert break;
22841edb306SCy Schubert
22941edb306SCy Schubert case 28:
23041edb306SCy Schubert PRINTF("%hu", ntohs(sp->is_sport));
23141edb306SCy Schubert break;
23241edb306SCy Schubert
23341edb306SCy Schubert case 29:
23441edb306SCy Schubert PRINTF("%hu", ntohs(sp->is_dport));
23541edb306SCy Schubert break;
23641edb306SCy Schubert
23741edb306SCy Schubert case 30:
23841edb306SCy Schubert PRINTF("%d", sp->is_type);
23941edb306SCy Schubert break;
24041edb306SCy Schubert
24141edb306SCy Schubert case 32:
24241edb306SCy Schubert PRINTF("%#x", sp->is_pass);
24341edb306SCy Schubert break;
24441edb306SCy Schubert
24541edb306SCy Schubert case 33:
24641edb306SCy Schubert PRINTF("%d", sp->is_p);
24741edb306SCy Schubert break;
24841edb306SCy Schubert
24941edb306SCy Schubert case 34:
25041edb306SCy Schubert PRINTF("%d", sp->is_v);
25141edb306SCy Schubert break;
25241edb306SCy Schubert
25341edb306SCy Schubert case 35:
25441edb306SCy Schubert PRINTF("%d", sp->is_hv);
25541edb306SCy Schubert break;
25641edb306SCy Schubert
25741edb306SCy Schubert case 36:
25841edb306SCy Schubert PRINTF("%d", sp->is_tag);
25941edb306SCy Schubert break;
26041edb306SCy Schubert
26141edb306SCy Schubert case 37:
26241edb306SCy Schubert PRINTF("%#x", sp->is_flags);
26341edb306SCy Schubert break;
26441edb306SCy Schubert
26541edb306SCy Schubert case 38:
26641edb306SCy Schubert PRINTF("%d", sp->is_rulen);
26741edb306SCy Schubert break;
26841edb306SCy Schubert
26941edb306SCy Schubert case 39:
27041edb306SCy Schubert PRINTF("%s", sp->is_group);
27141edb306SCy Schubert break;
27241edb306SCy Schubert
27341edb306SCy Schubert case 40:
27441edb306SCy Schubert PRINTF("%#x", sp->is_flx[0][0]);
27541edb306SCy Schubert break;
27641edb306SCy Schubert
27741edb306SCy Schubert case 41:
27841edb306SCy Schubert PRINTF("%#x", sp->is_flx[0][1]);
27941edb306SCy Schubert break;
28041edb306SCy Schubert
28141edb306SCy Schubert case 42:
28241edb306SCy Schubert PRINTF("%#x", sp->is_flx[1][0]);
28341edb306SCy Schubert break;
28441edb306SCy Schubert
28541edb306SCy Schubert case 43:
28641edb306SCy Schubert PRINTF("%#x", sp->is_flx[1][1]);
28741edb306SCy Schubert break;
28841edb306SCy Schubert
28941edb306SCy Schubert case 44:
29041edb306SCy Schubert PRINTF("%#x", sp->is_opt[0]);
29141edb306SCy Schubert break;
29241edb306SCy Schubert
29341edb306SCy Schubert case 45:
29441edb306SCy Schubert PRINTF("%#x", sp->is_opt[1]);
29541edb306SCy Schubert break;
29641edb306SCy Schubert
29741edb306SCy Schubert case 46:
29841edb306SCy Schubert PRINTF("%#x", sp->is_optmsk[0]);
29941edb306SCy Schubert break;
30041edb306SCy Schubert
30141edb306SCy Schubert case 47:
30241edb306SCy Schubert PRINTF("%#x", sp->is_optmsk[1]);
30341edb306SCy Schubert break;
30441edb306SCy Schubert
30541edb306SCy Schubert case 48:
30641edb306SCy Schubert PRINTF("%#x", sp->is_sec);
30741edb306SCy Schubert break;
30841edb306SCy Schubert
30941edb306SCy Schubert case 49:
31041edb306SCy Schubert PRINTF("%#x", sp->is_secmsk);
31141edb306SCy Schubert break;
31241edb306SCy Schubert
31341edb306SCy Schubert case 50:
31441edb306SCy Schubert PRINTF("%#x", sp->is_auth);
31541edb306SCy Schubert break;
31641edb306SCy Schubert
31741edb306SCy Schubert case 51:
31841edb306SCy Schubert PRINTF("%#x", sp->is_authmsk);
31941edb306SCy Schubert break;
32041edb306SCy Schubert
32141edb306SCy Schubert case 52:
32241edb306SCy Schubert #ifdef USE_QUAD_T
32341edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_icmppkts[0]);
32441edb306SCy Schubert #else
32541edb306SCy Schubert PRINTF("%lu", sp->is_icmppkts[0]);
32641edb306SCy Schubert #endif
32741edb306SCy Schubert break;
32841edb306SCy Schubert
32941edb306SCy Schubert case 53:
33041edb306SCy Schubert #ifdef USE_QUAD_T
33141edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_icmppkts[1]);
33241edb306SCy Schubert #else
33341edb306SCy Schubert PRINTF("%lu", sp->is_icmppkts[1]);
33441edb306SCy Schubert #endif
33541edb306SCy Schubert break;
33641edb306SCy Schubert
33741edb306SCy Schubert case 54:
33841edb306SCy Schubert #ifdef USE_QUAD_T
33941edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_icmppkts[2]);
34041edb306SCy Schubert #else
34141edb306SCy Schubert PRINTF("%lu", sp->is_icmppkts[2]);
34241edb306SCy Schubert #endif
34341edb306SCy Schubert break;
34441edb306SCy Schubert
34541edb306SCy Schubert case 55:
34641edb306SCy Schubert #ifdef USE_QUAD_T
34741edb306SCy Schubert PRINTF("%"PRIu64"", sp->is_icmppkts[3]);
34841edb306SCy Schubert #else
34941edb306SCy Schubert PRINTF("%lu", sp->is_icmppkts[3]);
35041edb306SCy Schubert #endif
35141edb306SCy Schubert break;
35241edb306SCy Schubert
35341edb306SCy Schubert default:
35441edb306SCy Schubert break;
35541edb306SCy Schubert }
35641edb306SCy Schubert }
357