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