printhashdata.c revision 170264
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
13void printhashdata(hp, opts)
14iphtable_t *hp;
15int 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