xref: /freebsd/sbin/ipf/libipf/printstatefields.c (revision efeb8bffe34422937c7f8df836afb5b817366d16)
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