xref: /illumos-gate/usr/src/cmd/ipf/lib/printhashdata.c (revision f3ac678143127d4c6c1793fadabb5ded04e127b6)
1*f3ac6781SToomas Soome /*
2*f3ac6781SToomas Soome  * Copyright (C) 2002 by Darren Reed.
3*f3ac6781SToomas Soome  *
4*f3ac6781SToomas Soome  * See the IPFILTER.LICENCE file for details on licencing.
5*f3ac6781SToomas Soome  *
6*f3ac6781SToomas Soome  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
7*f3ac6781SToomas Soome  * Use is subject to license terms.
8*f3ac6781SToomas Soome  */
9*f3ac6781SToomas Soome 
10*f3ac6781SToomas Soome #include "ipf.h"
11*f3ac6781SToomas Soome 
12*f3ac6781SToomas Soome #define	PRINTF	(void)printf
13*f3ac6781SToomas Soome #define	FPRINTF	(void)fprintf
14*f3ac6781SToomas Soome 
15*f3ac6781SToomas Soome 
printhashdata(hp,opts)16*f3ac6781SToomas Soome void printhashdata(hp, opts)
17*f3ac6781SToomas Soome iphtable_t *hp;
18*f3ac6781SToomas Soome int opts;
19*f3ac6781SToomas Soome {
20*f3ac6781SToomas Soome 
21*f3ac6781SToomas Soome 	if ((opts & OPT_DEBUG) == 0) {
22*f3ac6781SToomas Soome 		if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON)
23*f3ac6781SToomas Soome 			PRINTF("# 'anonymous' table\n");
24*f3ac6781SToomas Soome 		switch (hp->iph_type & ~IPHASH_ANON)
25*f3ac6781SToomas Soome 		{
26*f3ac6781SToomas Soome 		case IPHASH_LOOKUP :
27*f3ac6781SToomas Soome 			PRINTF("table");
28*f3ac6781SToomas Soome 			break;
29*f3ac6781SToomas Soome 		case IPHASH_GROUPMAP :
30*f3ac6781SToomas Soome 			PRINTF("group-map");
31*f3ac6781SToomas Soome 			if (hp->iph_flags & FR_INQUE)
32*f3ac6781SToomas Soome 				PRINTF(" in");
33*f3ac6781SToomas Soome 			else if (hp->iph_flags & FR_OUTQUE)
34*f3ac6781SToomas Soome 				PRINTF(" out");
35*f3ac6781SToomas Soome 			else
36*f3ac6781SToomas Soome 				PRINTF(" ???");
37*f3ac6781SToomas Soome 			break;
38*f3ac6781SToomas Soome 		default :
39*f3ac6781SToomas Soome 			PRINTF("%#x", hp->iph_type);
40*f3ac6781SToomas Soome 			break;
41*f3ac6781SToomas Soome 		}
42*f3ac6781SToomas Soome 		PRINTF(" role = ");
43*f3ac6781SToomas Soome 	} else {
44*f3ac6781SToomas Soome 		PRINTF("Hash Table Number: %s", hp->iph_name);
45*f3ac6781SToomas Soome 		if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON)
46*f3ac6781SToomas Soome 			PRINTF("(anon)");
47*f3ac6781SToomas Soome 		putchar(' ');
48*f3ac6781SToomas Soome 		PRINTF("Role: ");
49*f3ac6781SToomas Soome 	}
50*f3ac6781SToomas Soome 
51*f3ac6781SToomas Soome 	switch (hp->iph_unit)
52*f3ac6781SToomas Soome 	{
53*f3ac6781SToomas Soome 	case IPL_LOGNAT :
54*f3ac6781SToomas Soome 		PRINTF("nat");
55*f3ac6781SToomas Soome 		break;
56*f3ac6781SToomas Soome 	case IPL_LOGIPF :
57*f3ac6781SToomas Soome 		PRINTF("ipf");
58*f3ac6781SToomas Soome 		break;
59*f3ac6781SToomas Soome 	case IPL_LOGAUTH :
60*f3ac6781SToomas Soome 		PRINTF("auth");
61*f3ac6781SToomas Soome 		break;
62*f3ac6781SToomas Soome 	case IPL_LOGCOUNT :
63*f3ac6781SToomas Soome 		PRINTF("count");
64*f3ac6781SToomas Soome 		break;
65*f3ac6781SToomas Soome 	default :
66*f3ac6781SToomas Soome 		PRINTF("#%d", hp->iph_unit);
67*f3ac6781SToomas Soome 		break;
68*f3ac6781SToomas Soome 	}
69*f3ac6781SToomas Soome 
70*f3ac6781SToomas Soome 	if ((opts & OPT_DEBUG) == 0) {
71*f3ac6781SToomas Soome 		if ((hp->iph_type & ~IPHASH_ANON) == IPHASH_LOOKUP)
72*f3ac6781SToomas Soome 			PRINTF(" type = hash");
73*f3ac6781SToomas Soome 		PRINTF(" number = %s size = %lu",
74*f3ac6781SToomas Soome 			hp->iph_name, (u_long)hp->iph_size);
75*f3ac6781SToomas Soome 		if (hp->iph_seed != 0)
76*f3ac6781SToomas Soome 			PRINTF(" seed = %lu", hp->iph_seed);
77*f3ac6781SToomas Soome 		putchar('\n');
78*f3ac6781SToomas Soome 	} else {
79*f3ac6781SToomas Soome 		PRINTF(" Type: ");
80*f3ac6781SToomas Soome 		switch (hp->iph_type & ~IPHASH_ANON)
81*f3ac6781SToomas Soome 		{
82*f3ac6781SToomas Soome 		case IPHASH_LOOKUP :
83*f3ac6781SToomas Soome 			PRINTF("lookup");
84*f3ac6781SToomas Soome 			break;
85*f3ac6781SToomas Soome 		case IPHASH_GROUPMAP :
86*f3ac6781SToomas Soome 			PRINTF("groupmap Group. %s", hp->iph_name);
87*f3ac6781SToomas Soome 			break;
88*f3ac6781SToomas Soome 		default :
89*f3ac6781SToomas Soome 			break;
90*f3ac6781SToomas Soome 		}
91*f3ac6781SToomas Soome 
92*f3ac6781SToomas Soome 		putchar('\n');
93*f3ac6781SToomas Soome 		PRINTF("\t\tSize: %lu\tSeed: %lu",
94*f3ac6781SToomas Soome 			(u_long)hp->iph_size, hp->iph_seed);
95*f3ac6781SToomas Soome 		PRINTF("\tRef. Count: %d\tMasks: %#x\n", hp->iph_ref,
96*f3ac6781SToomas Soome 			hp->iph_masks[0]);
97*f3ac6781SToomas Soome 	}
98*f3ac6781SToomas Soome 
99*f3ac6781SToomas Soome 	if ((opts & OPT_DEBUG) != 0) {
100*f3ac6781SToomas Soome 		struct in_addr m;
101*f3ac6781SToomas Soome 		int i;
102*f3ac6781SToomas Soome 
103*f3ac6781SToomas Soome 		for (i = 0; i < 32; i++) {
104*f3ac6781SToomas Soome 			if ((1 << i) & hp->iph_masks[0]) {
105*f3ac6781SToomas Soome 				ntomask(4, i, &m.s_addr);
106*f3ac6781SToomas Soome 				PRINTF("\t\tMask: %s\n", inet_ntoa(m));
107*f3ac6781SToomas Soome 			}
108*f3ac6781SToomas Soome 		}
109*f3ac6781SToomas Soome 	}
110*f3ac6781SToomas Soome }
111