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