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