1 /*
2  * Copyright (C) 2002 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  */
6 
7 #include "ipf.h"
8 
9 #define	PRINTF	(void)printf
10 #define	FPRINTF	(void)fprintf
11 
12 
printhashdata(hp,opts)13 void printhashdata(hp, opts)
14 iphtable_t *hp;
15 int opts;
16 {
17 
18 	if ((opts & OPT_DEBUG) == 0) {
19 		if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON)
20 			PRINTF("# 'anonymous' table\n");
21 		if ((hp->iph_flags & IPHASH_DELETE) == IPHASH_DELETE)
22 			PRINTF("# ");
23 		switch (hp->iph_type & ~IPHASH_ANON)
24 		{
25 		case IPHASH_LOOKUP :
26 			PRINTF("table");
27 			break;
28 		case IPHASH_GROUPMAP :
29 			PRINTF("group-map");
30 			if (hp->iph_flags & FR_INQUE)
31 				PRINTF(" in");
32 			else if (hp->iph_flags & FR_OUTQUE)
33 				PRINTF(" out");
34 			else
35 				PRINTF(" ???");
36 			break;
37 		default :
38 			PRINTF("%#x", hp->iph_type);
39 			break;
40 		}
41 		PRINTF(" role = ");
42 	} else {
43 		PRINTF("Hash Table %s: %s",
44 			isdigit(*hp->iph_name) ? "Number" : "Name",
45 			hp->iph_name);
46 		if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON)
47 			PRINTF("(anon)");
48 		putchar(' ');
49 		PRINTF("Role: ");
50 	}
51 
52 	switch (hp->iph_unit)
53 	{
54 	case IPL_LOGNAT :
55 		PRINTF("nat");
56 		break;
57 	case IPL_LOGIPF :
58 		PRINTF("ipf");
59 		break;
60 	case IPL_LOGAUTH :
61 		PRINTF("auth");
62 		break;
63 	case IPL_LOGCOUNT :
64 		PRINTF("count");
65 		break;
66 	default :
67 		PRINTF("#%d", hp->iph_unit);
68 		break;
69 	}
70 
71 	if ((opts & OPT_DEBUG) == 0) {
72 		if ((hp->iph_type & ~IPHASH_ANON) == IPHASH_LOOKUP)
73 			PRINTF(" type = hash");
74 		PRINTF(" %s = %s size = %lu",
75 			isdigit(*hp->iph_name) ? "number" : "name",
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);
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) {
107 				ntomask(4, i, &m.s_addr);
108 				PRINTF("\t\tMask: %s\n", inet_ntoa(m));
109 			}
110 		}
111 	}
112 }
113