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