1145519Sdarrenr/* $FreeBSD: releng/11.0/contrib/ipfilter/lib/printhashnode.c 255332 2013-09-06 23:11:19Z cy $ */ 2145510Sdarrenr 3145510Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr */ 8145510Sdarrenr 9145510Sdarrenr#include "ipf.h" 10145510Sdarrenr 11145510Sdarrenr 12255332Scyiphtent_t * 13255332Scyprinthashnode(iph, ipep, copyfunc, opts, fields) 14255332Scy iphtable_t *iph; 15255332Scy iphtent_t *ipep; 16255332Scy copyfunc_t copyfunc; 17255332Scy int opts; 18255332Scy wordtab_t *fields; 19145510Sdarrenr{ 20145510Sdarrenr iphtent_t ipe; 21255332Scy u_int hv; 22255332Scy int i; 23145510Sdarrenr 24145510Sdarrenr if ((*copyfunc)(ipep, &ipe, sizeof(ipe))) 25145510Sdarrenr return NULL; 26145510Sdarrenr 27255332Scy hv = IPE_V4_HASH_FN(ipe.ipe_addr.i6[0], ipe.ipe_mask.i6[0], 28255332Scy iph->iph_size); 29145510Sdarrenr 30255332Scy if (fields != NULL) { 31255332Scy for (i = 0; fields[i].w_value != 0; i++) { 32255332Scy printpoolfield(&ipe, IPLT_HASH, i); 33255332Scy if (fields[i + 1].w_value != 0) 34255332Scy printf("\t"); 35255332Scy } 36255332Scy printf("\n"); 37255332Scy } else if ((opts & OPT_DEBUG) != 0) { 38255332Scy PRINTF("\t%d\tAddress: %s", hv, 39145510Sdarrenr inet_ntoa(ipe.ipe_addr.in4)); 40255332Scy printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr); 41145510Sdarrenr PRINTF("\tRef. Count: %d\tGroup: %s\n", ipe.ipe_ref, 42145510Sdarrenr ipe.ipe_group); 43255332Scy#ifdef USE_QUAD_T 44255332Scy PRINTF("\tHits: %"PRIu64"\tBytes: %"PRIu64"\n", 45255332Scy ipe.ipe_hits, ipe.ipe_bytes); 46255332Scy#else 47255332Scy PRINTF("\tHits: %lu\tBytes: %lu\n", 48255332Scy ipe.ipe_hits, ipe.ipe_bytes); 49255332Scy#endif 50145510Sdarrenr } else { 51145510Sdarrenr putchar(' '); 52255332Scy printip(ipe.ipe_family, (u_32_t *)&ipe.ipe_addr.in4_addr); 53255332Scy printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr); 54145510Sdarrenr if (ipe.ipe_value != 0) { 55145510Sdarrenr switch (iph->iph_type & ~IPHASH_ANON) 56145510Sdarrenr { 57145510Sdarrenr case IPHASH_GROUPMAP : 58145510Sdarrenr if (strncmp(ipe.ipe_group, iph->iph_name, 59145510Sdarrenr FR_GROUPLEN)) 60255332Scy PRINTF(", group=%s", ipe.ipe_group); 61145510Sdarrenr break; 62145510Sdarrenr } 63145510Sdarrenr } 64145510Sdarrenr putchar(';'); 65145510Sdarrenr } 66170268Sdarrenr 67145510Sdarrenr ipep = ipe.ipe_next; 68145510Sdarrenr return ipep; 69145510Sdarrenr} 70