1/*
2 * Copyright (C) 2002 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
7 */
8
9#include "ipf.h"
10
11#define	PRINTF	(void)printf
12#define	FPRINTF	(void)fprintf
13
14iphtent_t *printhashnode(iph, ipep, copyfunc, opts)
15iphtable_t *iph;
16iphtent_t *ipep;
17copyfunc_t copyfunc;
18int opts;
19{
20	iphtent_t ipe;
21
22	if ((*copyfunc)(ipep, &ipe, sizeof(ipe)))
23		return NULL;
24
25	if (ipe.ipe_family == AF_INET) {
26		ipe.ipe_addr.in4_addr = htonl(ipe.ipe_addr.in4_addr);
27		ipe.ipe_mask.in4_addr = htonl(ipe.ipe_mask.in4_addr);
28	}
29
30	if ((opts & OPT_DEBUG) != 0) {
31#ifdef USE_INET6
32		char addinfo[INET6_ADDRSTRLEN];
33		PRINTF("\tAddress: %s",
34			inet_ntop(ipe.ipe_family, (void *)&ipe.ipe_addr.in4,
35				  addinfo, sizeof(addinfo)));
36#else
37		PRINTF("\tAddress: %s",
38			inet_ntoa(ipe.ipe_addr.in4));
39#endif
40#ifdef USE_INET6
41		if (ipe.ipe_family == AF_INET6)
42			printmask(6, (u_32_t *)&ipe.ipe_mask.in6);
43		else
44#endif
45			printmask(4, (u_32_t *)&ipe.ipe_mask.in4_addr);
46
47#ifdef USE_QUAD_T
48		PRINTF("\tHits %qu\tBytes %qu", ipe.ipe_hits, ipe.ipe_bytes);
49#else
50		PRINTF("\tHits %lu\tBytes %lu", ipe.ipe_hits, ipe.ipe_bytes);
51#endif
52		PRINTF("\tRef. Count: %d\tGroup: %s\n", ipe.ipe_ref,
53			ipe.ipe_group);
54	} else {
55		putchar(' ');
56#ifdef USE_INET6
57		if (ipe.ipe_family == AF_INET6)
58			printhostmask(6, (u_32_t *)&ipe.ipe_addr.in6,
59					 (u_32_t *)&ipe.ipe_mask.in6);
60		else
61#endif
62		{
63			printip((u_32_t *)&ipe.ipe_addr.in4_addr);
64			printmask(4, (u_32_t *)&ipe.ipe_mask.in4_addr);
65		}
66		if (ipe.ipe_value != 0) {
67			switch (iph->iph_type & ~IPHASH_ANON)
68			{
69			case IPHASH_GROUPMAP :
70				if (strncmp(ipe.ipe_group, iph->iph_name,
71					    FR_GROUPLEN))
72					PRINTF(", group = %s", ipe.ipe_group);
73				break;
74			}
75		}
76		putchar(';');
77	}
78	ipep = ipe.ipe_next;
79	return ipep;
80}
81