1145519Sdarrenr/* $FreeBSD$ */ 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 12255332Scyiphtable_t * 13255332Scyprinthash(hp, copyfunc, name, opts, fields) 14255332Scy iphtable_t *hp; 15255332Scy copyfunc_t copyfunc; 16255332Scy char *name; 17255332Scy int opts; 18255332Scy wordtab_t *fields; 19145510Sdarrenr{ 20145510Sdarrenr iphtent_t *ipep, **table; 21145510Sdarrenr iphtable_t iph; 22170268Sdarrenr int printed; 23145510Sdarrenr size_t sz; 24145510Sdarrenr 25145510Sdarrenr if ((*copyfunc)((char *)hp, (char *)&iph, sizeof(iph))) 26145510Sdarrenr return NULL; 27145510Sdarrenr 28145510Sdarrenr if ((name != NULL) && strncmp(name, iph.iph_name, FR_GROUPLEN)) 29145510Sdarrenr return iph.iph_next; 30145510Sdarrenr 31255332Scy if (fields == NULL) 32255332Scy printhashdata(hp, opts); 33145510Sdarrenr 34170268Sdarrenr if ((hp->iph_flags & IPHASH_DELETE) != 0) 35170268Sdarrenr PRINTF("# "); 36145510Sdarrenr 37145510Sdarrenr if ((opts & OPT_DEBUG) == 0) 38145510Sdarrenr PRINTF("\t{"); 39145510Sdarrenr 40145510Sdarrenr sz = iph.iph_size * sizeof(*table); 41145510Sdarrenr table = malloc(sz); 42145510Sdarrenr if ((*copyfunc)((char *)iph.iph_table, (char *)table, sz)) 43145510Sdarrenr return NULL; 44145510Sdarrenr 45170268Sdarrenr for (printed = 0, ipep = iph.iph_list; ipep != NULL; ) { 46255332Scy ipep = printhashnode(&iph, ipep, copyfunc, opts, fields); 47170268Sdarrenr printed++; 48145510Sdarrenr } 49145510Sdarrenr if (printed == 0) 50145510Sdarrenr putchar(';'); 51145510Sdarrenr 52145510Sdarrenr free(table); 53145510Sdarrenr 54145510Sdarrenr if ((opts & OPT_DEBUG) == 0) 55145510Sdarrenr PRINTF(" };\n"); 56145510Sdarrenr 57145510Sdarrenr return iph.iph_next; 58145510Sdarrenr} 59