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