1 /* $FreeBSD$ */
2
3 /*
4 * Copyright (C) 2012 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 */
8
9 #include "ipf.h"
10
11
12 ip_pool_node_t *
printpoolnode(ip_pool_node_t * np,int opts,wordtab_t * fields)13 printpoolnode(ip_pool_node_t *np, int opts, wordtab_t *fields)
14 {
15 int i;
16
17 if (fields != NULL) {
18 for (i = 0; fields[i].w_value != 0; i++) {
19 printpoolfield(np, IPLT_POOL, i);
20 if (fields[i + 1].w_value != 0)
21 printf("\t");
22 }
23 printf("\n");
24 } else if ((opts & OPT_DEBUG) == 0) {
25 putchar(' ');
26 if (np->ipn_info == 1)
27 PRINTF("! ");
28 printip(np->ipn_addr.adf_family,
29 (u_32_t *)&np->ipn_addr.adf_addr.in4);
30 printmask(np->ipn_addr.adf_family,
31 (u_32_t *)&np->ipn_mask.adf_addr);
32 } else {
33 #ifdef USE_INET6
34 if (np->ipn_addr.adf_family == AF_INET6) {
35 char buf[INET6_ADDRSTRLEN + 1];
36 const char *str;
37
38 buf[0] = '\0';
39 str = inet_ntop(AF_INET6, &np->ipn_addr.adf_addr.in6,
40 buf, sizeof(buf) - 1);
41 if (str == NULL)
42 str = "???";
43 PRINTF("\tAddress: %s%s", np->ipn_info ? "! " : "",
44 str);
45 } else if (np->ipn_addr.adf_family == AF_INET) {
46 #else
47 if (np->ipn_addr.adf_family == AF_INET) {
48 #endif
49 PRINTF("\tAddress: %s%s", np->ipn_info ? "! " : "",
50 inet_ntoa(np->ipn_addr.adf_addr.in4));
51 } else {
52 PRINTF("\tAddress: family: %d\n",
53 np->ipn_addr.adf_family);
54 }
55 printmask(np->ipn_addr.adf_family,
56 (u_32_t *)&np->ipn_mask.adf_addr);
57 #ifdef USE_QUAD_T
58 PRINTF("\n\t\tHits %"PRIu64"\tBytes %"PRIu64"\tName %s\tRef %d\n",
59 np->ipn_hits, np->ipn_bytes,
60 np->ipn_name, np->ipn_ref);
61 #else
62 PRINTF("\n\t\tHits %lu\tBytes %lu\tName %s\tRef %d\n",
63 np->ipn_hits, np->ipn_bytes,
64 np->ipn_name, np->ipn_ref);
65 #endif
66 }
67 return (np->ipn_next);
68 }
69