printpool.c revision 145519
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/printpool.c 145519 2005-04-25 18:20:15Z darrenr $ */ 2145510Sdarrenr 3145510Sdarrenr/* 4145510Sdarrenr * Copyright (C) 2002 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr */ 8145510Sdarrenr 9145510Sdarrenr#include "ipf.h" 10145510Sdarrenr 11145510Sdarrenr#define PRINTF (void)printf 12145510Sdarrenr#define FPRINTF (void)fprintf 13145510Sdarrenr 14145510Sdarrenrip_pool_t *printpool(pp, copyfunc, name, opts) 15145510Sdarrenrip_pool_t *pp; 16145510Sdarrenrcopyfunc_t copyfunc; 17145510Sdarrenrchar *name; 18145510Sdarrenrint opts; 19145510Sdarrenr{ 20145510Sdarrenr ip_pool_node_t *ipnp, *ipnpn, ipn; 21145510Sdarrenr ip_pool_t ipp; 22145510Sdarrenr 23145510Sdarrenr if ((*copyfunc)(pp, &ipp, sizeof(ipp))) 24145510Sdarrenr return NULL; 25145510Sdarrenr 26145510Sdarrenr if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN)) 27145510Sdarrenr return ipp.ipo_next; 28145510Sdarrenr 29145510Sdarrenr if ((opts & OPT_DEBUG) == 0) { 30145510Sdarrenr if ((ipp.ipo_flags & IPOOL_ANON) != 0) 31145510Sdarrenr PRINTF("# 'anonymous' tree %s\n", ipp.ipo_name); 32145510Sdarrenr PRINTF("table role = "); 33145510Sdarrenr } else { 34145510Sdarrenr PRINTF("Name: %s", ipp.ipo_name); 35145510Sdarrenr if ((ipp.ipo_flags & IPOOL_ANON) == IPOOL_ANON) 36145510Sdarrenr PRINTF("(anon)"); 37145510Sdarrenr putchar(' '); 38145510Sdarrenr PRINTF("Role: "); 39145510Sdarrenr } 40145510Sdarrenr 41145510Sdarrenr switch (ipp.ipo_unit) 42145510Sdarrenr { 43145510Sdarrenr case IPL_LOGIPF : 44145510Sdarrenr printf("ipf"); 45145510Sdarrenr break; 46145510Sdarrenr case IPL_LOGNAT : 47145510Sdarrenr printf("nat"); 48145510Sdarrenr break; 49145510Sdarrenr case IPL_LOGSTATE : 50145510Sdarrenr printf("state"); 51145510Sdarrenr break; 52145510Sdarrenr case IPL_LOGAUTH : 53145510Sdarrenr printf("auth"); 54145510Sdarrenr break; 55145510Sdarrenr case IPL_LOGSYNC : 56145510Sdarrenr printf("sync"); 57145510Sdarrenr break; 58145510Sdarrenr case IPL_LOGSCAN : 59145510Sdarrenr printf("scan"); 60145510Sdarrenr break; 61145510Sdarrenr case IPL_LOGLOOKUP : 62145510Sdarrenr printf("lookup"); 63145510Sdarrenr break; 64145510Sdarrenr case IPL_LOGCOUNT : 65145510Sdarrenr printf("count"); 66145510Sdarrenr break; 67145510Sdarrenr default : 68145510Sdarrenr printf("unknown(%d)", ipp.ipo_unit); 69145510Sdarrenr } 70145510Sdarrenr 71145510Sdarrenr if ((opts & OPT_DEBUG) == 0) { 72145510Sdarrenr PRINTF(" type = tree number = %s\n", ipp.ipo_name); 73145510Sdarrenr PRINTF("\t{"); 74145510Sdarrenr } else { 75145510Sdarrenr putchar(' '); 76145510Sdarrenr 77145510Sdarrenr PRINTF("\tReferences: %d\tHits: %lu\n", ipp.ipo_ref, 78145510Sdarrenr ipp.ipo_hits); 79145510Sdarrenr PRINTF("\tNodes Starting at %p\n", ipp.ipo_list); 80145510Sdarrenr } 81145510Sdarrenr 82145510Sdarrenr ipnpn = ipp.ipo_list; 83145510Sdarrenr ipp.ipo_list = NULL; 84145510Sdarrenr while (ipnpn != NULL) { 85145510Sdarrenr ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp)); 86145510Sdarrenr (*copyfunc)(ipnpn, ipnp, sizeof(ipn)); 87145510Sdarrenr ipnpn = ipnp->ipn_next; 88145510Sdarrenr ipnp->ipn_next = ipp.ipo_list; 89145510Sdarrenr ipp.ipo_list = ipnp; 90145510Sdarrenr } 91145510Sdarrenr 92145510Sdarrenr if (ipp.ipo_list == NULL) { 93145510Sdarrenr putchar(';'); 94145510Sdarrenr } else { 95145510Sdarrenr for (ipnp = ipp.ipo_list; ipnp != NULL; ) { 96145510Sdarrenr ipnp = printpoolnode(ipnp, opts); 97145510Sdarrenr 98145510Sdarrenr if ((opts & OPT_DEBUG) == 0) { 99145510Sdarrenr putchar(';'); 100145510Sdarrenr } 101145510Sdarrenr } 102145510Sdarrenr } 103145510Sdarrenr 104145510Sdarrenr if ((opts & OPT_DEBUG) == 0) 105145510Sdarrenr PRINTF(" };\n"); 106145510Sdarrenr 107145510Sdarrenr return ipp.ipo_next; 108145510Sdarrenr} 109