1170263Sdarrenr/* 2255332Scy * Copyright (C) 2012 by Darren Reed. 3170263Sdarrenr * 4170263Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 5170263Sdarrenr */ 6170263Sdarrenr 7170263Sdarrenr#include "ipf.h" 8255332Scy#include <ctype.h> 9170263Sdarrenr 10170263Sdarrenr 11255332Scyvoid 12255332Scyprinthashdata(hp, opts) 13255332Scy iphtable_t *hp; 14255332Scy int opts; 15170263Sdarrenr{ 16170263Sdarrenr 17170263Sdarrenr if ((opts & OPT_DEBUG) == 0) { 18170263Sdarrenr if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON) 19255332Scy PRINTF("# 'anonymous' table refs %d\n", hp->iph_ref); 20170263Sdarrenr if ((hp->iph_flags & IPHASH_DELETE) == IPHASH_DELETE) 21170263Sdarrenr PRINTF("# "); 22170263Sdarrenr switch (hp->iph_type & ~IPHASH_ANON) 23170263Sdarrenr { 24170263Sdarrenr case IPHASH_LOOKUP : 25170263Sdarrenr PRINTF("table"); 26170263Sdarrenr break; 27170263Sdarrenr case IPHASH_GROUPMAP : 28170263Sdarrenr PRINTF("group-map"); 29170263Sdarrenr if (hp->iph_flags & FR_INQUE) 30170263Sdarrenr PRINTF(" in"); 31170263Sdarrenr else if (hp->iph_flags & FR_OUTQUE) 32170263Sdarrenr PRINTF(" out"); 33170263Sdarrenr else 34170263Sdarrenr PRINTF(" ???"); 35170263Sdarrenr break; 36170263Sdarrenr default : 37170263Sdarrenr PRINTF("%#x", hp->iph_type); 38170263Sdarrenr break; 39170263Sdarrenr } 40255332Scy PRINTF(" role="); 41170263Sdarrenr } else { 42170263Sdarrenr PRINTF("Hash Table %s: %s", 43255332Scy ISDIGIT(*hp->iph_name) ? "Number" : "Name", 44170263Sdarrenr hp->iph_name); 45170263Sdarrenr if ((hp->iph_type & IPHASH_ANON) == IPHASH_ANON) 46170263Sdarrenr PRINTF("(anon)"); 47170263Sdarrenr putchar(' '); 48170263Sdarrenr PRINTF("Role: "); 49170263Sdarrenr } 50170263Sdarrenr 51255332Scy printunit(hp->iph_unit); 52170263Sdarrenr 53170263Sdarrenr if ((opts & OPT_DEBUG) == 0) { 54170263Sdarrenr if ((hp->iph_type & ~IPHASH_ANON) == IPHASH_LOOKUP) 55255332Scy PRINTF(" type=hash"); 56255332Scy PRINTF(" %s=%s size=%lu", 57255332Scy ISDIGIT(*hp->iph_name) ? "number" : "name", 58170263Sdarrenr hp->iph_name, (u_long)hp->iph_size); 59170263Sdarrenr if (hp->iph_seed != 0) 60255332Scy PRINTF(" seed=%lu", hp->iph_seed); 61170263Sdarrenr putchar('\n'); 62170263Sdarrenr } else { 63170263Sdarrenr PRINTF(" Type: "); 64170263Sdarrenr switch (hp->iph_type & ~IPHASH_ANON) 65170263Sdarrenr { 66170263Sdarrenr case IPHASH_LOOKUP : 67170263Sdarrenr PRINTF("lookup"); 68170263Sdarrenr break; 69170263Sdarrenr case IPHASH_GROUPMAP : 70170263Sdarrenr PRINTF("groupmap Group. %s", hp->iph_name); 71170263Sdarrenr break; 72170263Sdarrenr default : 73170263Sdarrenr break; 74170263Sdarrenr } 75170263Sdarrenr 76170263Sdarrenr putchar('\n'); 77170263Sdarrenr PRINTF("\t\tSize: %lu\tSeed: %lu", 78170263Sdarrenr (u_long)hp->iph_size, hp->iph_seed); 79170263Sdarrenr PRINTF("\tRef. Count: %d\tMasks: %#x\n", hp->iph_ref, 80255332Scy hp->iph_maskset[0]); 81170263Sdarrenr } 82170263Sdarrenr 83170263Sdarrenr if ((opts & OPT_DEBUG) != 0) { 84170263Sdarrenr struct in_addr m; 85170263Sdarrenr int i; 86170263Sdarrenr 87170263Sdarrenr for (i = 0; i < 32; i++) { 88255332Scy if ((1 << i) & hp->iph_maskset[0]) { 89255332Scy ntomask(AF_INET, i, &m.s_addr); 90170263Sdarrenr PRINTF("\t\tMask: %s\n", inet_ntoa(m)); 91170263Sdarrenr } 92170263Sdarrenr } 93170263Sdarrenr } 94170263Sdarrenr} 95