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