summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/lib/printpoolfield.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/lib/printpoolfield.c')
-rw-r--r--contrib/ipfilter/lib/printpoolfield.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/contrib/ipfilter/lib/printpoolfield.c b/contrib/ipfilter/lib/printpoolfield.c
new file mode 100644
index 0000000..9254ab8
--- /dev/null
+++ b/contrib/ipfilter/lib/printpoolfield.c
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2012 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id: printpoolfield.c,v 1.1.2.4 2012/01/26 05:44:26 darren_r Exp $
+ */
+
+#include "ipf.h"
+
+wordtab_t poolfields[] = {
+ { "all", -2 },
+ { "address", 1 },
+ { "mask", 2 },
+ { "ifname", 3 },
+ { "pkts", 4 },
+ { "bytes", 5 },
+ { "family", 6 },
+ { NULL, 0 }
+};
+
+
+void
+printpoolfield(p, ptype, fieldnum)
+ void *p;
+ int ptype;
+ int fieldnum;
+{
+ addrfamily_t *a;
+ char abuf[80];
+ int i;
+
+ switch (fieldnum)
+ {
+ case -2 :
+ for (i = 1; poolfields[i].w_word != NULL; i++) {
+ if (poolfields[i].w_value > 0) {
+ printpoolfield(p, ptype, i);
+ if (poolfields[i + 1].w_value > 0)
+ putchar('\t');
+ }
+ }
+ break;
+
+ case 1:
+ if (ptype == IPLT_POOL) {
+ ip_pool_node_t *node = (ip_pool_node_t *)p;
+
+ if (node->ipn_info)
+ PRINTF("!");
+ a = &node->ipn_addr;
+ PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr,
+ abuf, sizeof(abuf)));
+ } else if (ptype == IPLT_HASH) {
+ iphtent_t *node = (iphtent_t *)p;
+
+ PRINTF("%s", inet_ntop(node->ipe_family,
+ &node->ipe_addr,
+ abuf, sizeof(abuf)));
+ } else if (ptype == IPLT_DSTLIST) {
+ ipf_dstnode_t *node = (ipf_dstnode_t *)p;
+
+ a = &node->ipfd_dest.fd_addr;
+ PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr,
+ abuf, sizeof(abuf)));
+ }
+ break;
+
+ case 2:
+ if (ptype == IPLT_POOL) {
+ ip_pool_node_t *node = (ip_pool_node_t *)p;
+
+ a = &node->ipn_mask;
+ PRINTF("%s", inet_ntop(a->adf_family, &a->adf_addr,
+ abuf, sizeof(abuf)));
+ } else if (ptype == IPLT_HASH) {
+ iphtent_t *node = (iphtent_t *)p;
+
+ PRINTF("%s", inet_ntop(node->ipe_family,
+ &node->ipe_mask,
+ abuf, sizeof(abuf)));
+ } else if (ptype == IPLT_DSTLIST) {
+ PRINTF("%s", "");
+ }
+ break;
+
+ case 3:
+ if (ptype == IPLT_POOL) {
+ PRINTF("%s", "");
+ } else if (ptype == IPLT_HASH) {
+ PRINTF("%s", "");
+ } else if (ptype == IPLT_DSTLIST) {
+ ipf_dstnode_t *node = (ipf_dstnode_t *)p;
+
+ if (node->ipfd_dest.fd_name == -1) {
+ PRINTF("%s", "");
+ } else {
+ PRINTF("%s", node->ipfd_names +
+ node->ipfd_dest.fd_name);
+ }
+ }
+ break;
+
+ case 4:
+ if (ptype == IPLT_POOL) {
+ ip_pool_node_t *node = (ip_pool_node_t *)p;
+
+#ifdef USE_QUAD_T
+ PRINTF("%"PRIu64"", node->ipn_hits);
+#else
+ PRINTF("%lu", node->ipn_hits);
+#endif
+ } else if (ptype == IPLT_HASH) {
+ iphtent_t *node = (iphtent_t *)p;
+
+#ifdef USE_QUAD_T
+ PRINTF("%"PRIu64"", node->ipe_hits);
+#else
+ PRINTF("%lu", node->ipe_hits);
+#endif
+ } else if (ptype == IPLT_DSTLIST) {
+ printf("0");
+ }
+ break;
+
+ case 5:
+ if (ptype == IPLT_POOL) {
+ ip_pool_node_t *node = (ip_pool_node_t *)p;
+
+#ifdef USE_QUAD_T
+ PRINTF("%"PRIu64"", node->ipn_bytes);
+#else
+ PRINTF("%lu", node->ipn_bytes);
+#endif
+ } else if (ptype == IPLT_HASH) {
+ iphtent_t *node = (iphtent_t *)p;
+
+#ifdef USE_QUAD_T
+ PRINTF("%"PRIu64"", node->ipe_bytes);
+#else
+ PRINTF("%lu", node->ipe_bytes);
+#endif
+ } else if (ptype == IPLT_DSTLIST) {
+ printf("0");
+ }
+ break;
+
+ case 6:
+ if (ptype == IPLT_POOL) {
+ ip_pool_node_t *node = (ip_pool_node_t *)p;
+
+ PRINTF("%s", familyname(node->ipn_addr.adf_family));
+ } else if (ptype == IPLT_HASH) {
+ iphtent_t *node = (iphtent_t *)p;
+
+ PRINTF("%s", familyname(node->ipe_family));
+ } else if (ptype == IPLT_DSTLIST) {
+ ipf_dstnode_t *node = (ipf_dstnode_t *)p;
+
+ a = &node->ipfd_dest.fd_addr;
+ PRINTF("%s", familyname(a->adf_family));
+ }
+ break;
+
+ default :
+ break;
+ }
+}
OpenPOWER on IntegriCloud