1 /* $NetBSD: printhashnode.c,v 1.1.1.1 2012/03/23 21:20:09 christos 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 11 12 iphtent_t * 13 printhashnode(iph, ipep, copyfunc, opts, fields) 14 iphtable_t *iph; 15 iphtent_t *ipep; 16 copyfunc_t copyfunc; 17 int opts; 18 wordtab_t *fields; 19 { 20 iphtent_t ipe; 21 u_int hv; 22 int i; 23 24 if ((*copyfunc)(ipep, &ipe, sizeof(ipe))) 25 return NULL; 26 27 hv = IPE_V4_HASH_FN(ipe.ipe_addr.i6[0], ipe.ipe_mask.i6[0], 28 iph->iph_size); 29 ipe.ipe_addr.i6[0] = htonl(ipe.ipe_addr.i6[0]); 30 ipe.ipe_addr.i6[1] = htonl(ipe.ipe_addr.i6[1]); 31 ipe.ipe_addr.i6[2] = htonl(ipe.ipe_addr.i6[2]); 32 ipe.ipe_addr.i6[3] = htonl(ipe.ipe_addr.i6[3]); 33 ipe.ipe_mask.i6[0] = htonl(ipe.ipe_mask.i6[0]); 34 ipe.ipe_mask.i6[1] = htonl(ipe.ipe_mask.i6[1]); 35 ipe.ipe_mask.i6[2] = htonl(ipe.ipe_mask.i6[2]); 36 ipe.ipe_mask.i6[3] = htonl(ipe.ipe_mask.i6[3]); 37 38 if (fields != NULL) { 39 for (i = 0; fields[i].w_value != 0; i++) { 40 printpoolfield(&ipe, IPLT_HASH, i); 41 if (fields[i + 1].w_value != 0) 42 printf("\t"); 43 } 44 printf("\n"); 45 } else if ((opts & OPT_DEBUG) != 0) { 46 PRINTF("\t%d\tAddress: %s", hv, 47 inet_ntoa(ipe.ipe_addr.in4)); 48 printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr); 49 PRINTF("\tRef. Count: %d\tGroup: %s\n", ipe.ipe_ref, 50 ipe.ipe_group); 51 #ifdef USE_QUAD_T 52 PRINTF("\tHits: %"PRIu64"\tBytes: %"PRIu64"\n", 53 ipe.ipe_hits, ipe.ipe_bytes); 54 #else 55 PRINTF("\tHits: %lu\tBytes: %lu\n", 56 ipe.ipe_hits, ipe.ipe_bytes); 57 #endif 58 } else { 59 putchar(' '); 60 printip(ipe.ipe_family, (u_32_t *)&ipe.ipe_addr.in4_addr); 61 printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr); 62 if (ipe.ipe_value != 0) { 63 switch (iph->iph_type & ~IPHASH_ANON) 64 { 65 case IPHASH_GROUPMAP : 66 if (strncmp(ipe.ipe_group, iph->iph_name, 67 FR_GROUPLEN)) 68 PRINTF(", group=%s", ipe.ipe_group); 69 break; 70 } 71 } 72 putchar(';'); 73 } 74 75 ipep = ipe.ipe_next; 76 return ipep; 77 } 78