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