1 /* 2 * Copyright (C) 2002 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 * 6 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 7 * Use is subject to license terms. 8 */ 9 10 #include "ipf.h" 11 12 #define PRINTF (void)printf 13 #define FPRINTF (void)fprintf 14 15 ip_pool_t *printpool(pp, copyfunc, name, opts) 16 ip_pool_t *pp; 17 copyfunc_t copyfunc; 18 char *name; 19 int opts; 20 { 21 ip_pool_node_t *ipnp, *ipnpn, ipn; 22 ip_pool_t ipp; 23 24 if ((*copyfunc)(pp, &ipp, sizeof(ipp))) 25 return NULL; 26 27 if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN)) 28 return ipp.ipo_next; 29 30 if ((opts & OPT_DEBUG) == 0) { 31 if ((ipp.ipo_flags & IPOOL_ANON) != 0) 32 PRINTF("# 'anonymous' tree %s\n", ipp.ipo_name); 33 PRINTF("table role = "); 34 } else { 35 PRINTF("Name: %s", ipp.ipo_name); 36 if ((ipp.ipo_flags & IPOOL_ANON) == IPOOL_ANON) 37 PRINTF("(anon)"); 38 putchar(' '); 39 PRINTF("Role: "); 40 } 41 42 switch (ipp.ipo_unit) 43 { 44 case IPL_LOGIPF : 45 printf("ipf"); 46 break; 47 case IPL_LOGNAT : 48 printf("nat"); 49 break; 50 case IPL_LOGSTATE : 51 printf("state"); 52 break; 53 case IPL_LOGAUTH : 54 printf("auth"); 55 break; 56 case IPL_LOGSYNC : 57 printf("sync"); 58 break; 59 case IPL_LOGSCAN : 60 printf("scan"); 61 break; 62 case IPL_LOGLOOKUP : 63 printf("lookup"); 64 break; 65 case IPL_LOGCOUNT : 66 printf("count"); 67 break; 68 default : 69 printf("unknown(%d)", ipp.ipo_unit); 70 } 71 72 if ((opts & OPT_DEBUG) == 0) { 73 PRINTF(" type = tree number = %s\n", ipp.ipo_name); 74 PRINTF("\t{"); 75 } else { 76 putchar(' '); 77 78 PRINTF("\tReferences: %d\tHits: %lu\n", ipp.ipo_ref, 79 ipp.ipo_hits); 80 PRINTF("\tNodes Starting at %p\n", ipp.ipo_list); 81 } 82 83 ipnpn = ipp.ipo_list; 84 ipp.ipo_list = NULL; 85 while (ipnpn != NULL) { 86 ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp)); 87 (*copyfunc)(ipnpn, ipnp, sizeof(ipn)); 88 ipnpn = ipnp->ipn_next; 89 ipnp->ipn_next = ipp.ipo_list; 90 ipp.ipo_list = ipnp; 91 } 92 93 if (ipp.ipo_list == NULL) { 94 putchar(';'); 95 } else { 96 for (ipnp = ipp.ipo_list; ipnp != NULL; ) { 97 ipnp = printpoolnode(ipnp, opts); 98 99 if ((opts & OPT_DEBUG) == 0) { 100 putchar(';'); 101 } 102 } 103 } 104 105 if ((opts & OPT_DEBUG) == 0) 106 PRINTF(" };\n"); 107 108 return ipp.ipo_next; 109 } 110