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