1 /* $NetBSD: printhashdata.c,v 1.1.1.2 2012/07/22 13:44:40 darrenr Exp $ */ 2 3 /* 4 * Copyright (C) 2012 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 */ 8 9 #include "ipf.h" 10 #include <ctype.h> 11 12 13 void 14 printhashdata(hp, opts) 15 iphtable_t *hp; 16 int opts; 17 { 18 19 if ((opts & OPT_DEBUG) == 0) { 20 if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON) 21 PRINTF("# 'anonymous' table refs %d\n", hp->iph_ref); 22 if ((hp->iph_flags & IPHASH_DELETE) == IPHASH_DELETE) 23 PRINTF("# "); 24 switch (hp->iph_type & ~IPHASH_ANON) 25 { 26 case IPHASH_LOOKUP : 27 PRINTF("table"); 28 break; 29 case IPHASH_GROUPMAP : 30 PRINTF("group-map"); 31 if (hp->iph_flags & FR_INQUE) 32 PRINTF(" in"); 33 else if (hp->iph_flags & FR_OUTQUE) 34 PRINTF(" out"); 35 else 36 PRINTF(" ???"); 37 break; 38 default : 39 PRINTF("%#x", hp->iph_type); 40 break; 41 } 42 PRINTF(" role="); 43 } else { 44 PRINTF("Hash Table %s: %s", 45 ISDIGIT(*hp->iph_name) ? "Number" : "Name", 46 hp->iph_name); 47 if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON) 48 PRINTF("(anon)"); 49 putchar(' '); 50 PRINTF("Role: "); 51 } 52 53 printunit(hp->iph_unit); 54 55 if ((opts & OPT_DEBUG) == 0) { 56 if ((hp->iph_type & ~IPHASH_ANON) == IPHASH_LOOKUP) 57 PRINTF(" type=hash"); 58 PRINTF(" %s=%s size=%lu", 59 ISDIGIT(*hp->iph_name) ? "number" : "name", 60 hp->iph_name, (u_long)hp->iph_size); 61 if (hp->iph_seed != 0) 62 PRINTF(" seed=%lu", hp->iph_seed); 63 putchar('\n'); 64 } else { 65 PRINTF(" Type: "); 66 switch (hp->iph_type & ~IPHASH_ANON) 67 { 68 case IPHASH_LOOKUP : 69 PRINTF("lookup"); 70 break; 71 case IPHASH_GROUPMAP : 72 PRINTF("groupmap Group. %s", hp->iph_name); 73 break; 74 default : 75 break; 76 } 77 78 putchar('\n'); 79 PRINTF("\t\tSize: %lu\tSeed: %lu", 80 (u_long)hp->iph_size, hp->iph_seed); 81 PRINTF("\tRef. Count: %d\tMasks: %#x\n", hp->iph_ref, 82 hp->iph_maskset[0]); 83 } 84 85 if ((opts & OPT_DEBUG) != 0) { 86 struct in_addr m; 87 int i; 88 89 for (i = 0; i < 32; i++) { 90 if ((1 << i) & hp->iph_maskset[0]) { 91 ntomask(AF_INET, i, &m.s_addr); 92 PRINTF("\t\tMask: %s\n", inet_ntoa(m)); 93 } 94 } 95 } 96 } 97