1 /* 2 * Copyright (C) 2012 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 * 6 * $Id: printpoolfield.c,v 1.1.2.4 2012/01/26 05:44:26 darren_r Exp $ 7 */ 8 9 #include "ipf.h" 10 11 wordtab_t poolfields[] = { 12 { "all", -2 }, 13 { "address", 1 }, 14 { "mask", 2 }, 15 { "ifname", 3 }, 16 { "pkts", 4 }, 17 { "bytes", 5 }, 18 { "family", 6 }, 19 { NULL, 0 } 20 }; 21 22 23 void 24 printpoolfield(void *p, int ptype, int fieldnum) 25 { 26 addrfamily_t *a; 27 char abuf[80]; 28 int i; 29 30 switch (fieldnum) 31 { 32 case -2 : 33 for (i = 1; poolfields[i].w_word != NULL; i++) { 34 if (poolfields[i].w_value > 0) { 35 printpoolfield(p, ptype, i); 36 if (poolfields[i + 1].w_value > 0) 37 putchar('\t'); 38 } 39 } 40 break; 41 42 case 1: 43 if (ptype == IPLT_POOL) { 44 ip_pool_node_t *node = (ip_pool_node_t *)p; 45 46 if (node->ipn_info) 47 PRINTF("!"); 48 a = &node->ipn_addr; 49 PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr, 50 abuf, sizeof(abuf))); 51 } else if (ptype == IPLT_HASH) { 52 iphtent_t *node = (iphtent_t *)p; 53 54 PRINTF("%s", inet_ntop(node->ipe_family, 55 &node->ipe_addr, 56 abuf, sizeof(abuf))); 57 } else if (ptype == IPLT_DSTLIST) { 58 ipf_dstnode_t *node = (ipf_dstnode_t *)p; 59 60 a = &node->ipfd_dest.fd_addr; 61 PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr, 62 abuf, sizeof(abuf))); 63 } 64 break; 65 66 case 2: 67 if (ptype == IPLT_POOL) { 68 ip_pool_node_t *node = (ip_pool_node_t *)p; 69 70 a = &node->ipn_mask; 71 PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr, 72 abuf, sizeof(abuf))); 73 } else if (ptype == IPLT_HASH) { 74 iphtent_t *node = (iphtent_t *)p; 75 76 PRINTF("%s", inet_ntop(node->ipe_family, 77 &node->ipe_mask, 78 abuf, sizeof(abuf))); 79 } else if (ptype == IPLT_DSTLIST) { 80 PRINTF("%s", ""); 81 } 82 break; 83 84 case 3: 85 if (ptype == IPLT_POOL) { 86 PRINTF("%s", ""); 87 } else if (ptype == IPLT_HASH) { 88 PRINTF("%s", ""); 89 } else if (ptype == IPLT_DSTLIST) { 90 ipf_dstnode_t *node = (ipf_dstnode_t *)p; 91 92 if (node->ipfd_dest.fd_name == -1) { 93 PRINTF("%s", ""); 94 } else { 95 PRINTF("%s", node->ipfd_names + 96 node->ipfd_dest.fd_name); 97 } 98 } 99 break; 100 101 case 4: 102 if (ptype == IPLT_POOL) { 103 ip_pool_node_t *node = (ip_pool_node_t *)p; 104 105 #ifdef USE_QUAD_T 106 PRINTF("%"PRIu64"", node->ipn_hits); 107 #else 108 PRINTF("%lu", node->ipn_hits); 109 #endif 110 } else if (ptype == IPLT_HASH) { 111 iphtent_t *node = (iphtent_t *)p; 112 113 #ifdef USE_QUAD_T 114 PRINTF("%"PRIu64"", node->ipe_hits); 115 #else 116 PRINTF("%lu", node->ipe_hits); 117 #endif 118 } else if (ptype == IPLT_DSTLIST) { 119 printf("0"); 120 } 121 break; 122 123 case 5: 124 if (ptype == IPLT_POOL) { 125 ip_pool_node_t *node = (ip_pool_node_t *)p; 126 127 #ifdef USE_QUAD_T 128 PRINTF("%"PRIu64"", node->ipn_bytes); 129 #else 130 PRINTF("%lu", node->ipn_bytes); 131 #endif 132 } else if (ptype == IPLT_HASH) { 133 iphtent_t *node = (iphtent_t *)p; 134 135 #ifdef USE_QUAD_T 136 PRINTF("%"PRIu64"", node->ipe_bytes); 137 #else 138 PRINTF("%lu", node->ipe_bytes); 139 #endif 140 } else if (ptype == IPLT_DSTLIST) { 141 printf("0"); 142 } 143 break; 144 145 case 6: 146 if (ptype == IPLT_POOL) { 147 ip_pool_node_t *node = (ip_pool_node_t *)p; 148 149 PRINTF("%s", familyname(node->ipn_addr.adf_family)); 150 } else if (ptype == IPLT_HASH) { 151 iphtent_t *node = (iphtent_t *)p; 152 153 PRINTF("%s", familyname(node->ipe_family)); 154 } else if (ptype == IPLT_DSTLIST) { 155 ipf_dstnode_t *node = (ipf_dstnode_t *)p; 156 157 a = &node->ipfd_dest.fd_addr; 158 PRINTF("%s", familyname(a->adf_family)); 159 } 160 break; 161 162 default : 163 break; 164 } 165 } 166