]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sbin/ipf/libipf/printhashnode.c
ipfilter userland: Remove trailing whitespace
[FreeBSD/FreeBSD.git] / sbin / ipf / libipf / printhashnode.c
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
12 iphtent_t *
13 printhashnode(iphtable_t *iph, iphtent_t *ipep, copyfunc_t copyfunc, int opts,
14         wordtab_t *fields)
15 {
16         iphtent_t ipe;
17         u_int hv;
18         int i;
19
20         if ((*copyfunc)(ipep, &ipe, sizeof(ipe)))
21                 return(NULL);
22
23         hv = IPE_V4_HASH_FN(ipe.ipe_addr.i6[0], ipe.ipe_mask.i6[0],
24                             iph->iph_size);
25
26         if (fields != NULL) {
27                 for (i = 0; fields[i].w_value != 0; i++) {
28                         printpoolfield(&ipe, IPLT_HASH, i);
29                         if (fields[i + 1].w_value != 0)
30                                 printf("\t");
31                 }
32                 printf("\n");
33         } else if ((opts & OPT_DEBUG) != 0) {
34 #ifdef USE_INET6
35                 if (ipe.ipe_family == AF_INET6) {
36                         char buf[INET6_ADDRSTRLEN + 1];
37                         const char *str;
38
39                         buf[0] = '\0';
40                         str = inet_ntop(AF_INET6, &ipe.ipe_addr.in6,
41                                 buf, sizeof(buf) - 1);
42                         if (str == NULL)
43                                 str = "???";
44                         PRINTF("\t%d\tAddress: %s", hv, str);
45                         printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr);
46                         PRINTF("\tRef. Count: %d\tGroup: %s\n", ipe.ipe_ref,
47                                 ipe.ipe_group);
48 #ifdef USE_QUAD_T
49                         PRINTF("\tHits: %"PRIu64"\tBytes: %"PRIu64"\n",
50                                ipe.ipe_hits, ipe.ipe_bytes);
51 #else
52                         PRINTF("\tHits: %lu\tBytes: %lu\n",
53                                ipe.ipe_hits, ipe.ipe_bytes);
54 #endif /* USE_QUAD_T */
55                 } else if (ipe.ipe_family == AF_INET) {
56 #else
57                 if (ipe.ipe_family == AF_INET) {
58 #endif /* USE_INET6 */
59                         PRINTF("\t%d\tAddress: %s", hv,
60                                 inet_ntoa(ipe.ipe_addr.in4));
61                         printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr);
62                         PRINTF("\tRef. Count: %d\tGroup: %s\n", ipe.ipe_ref,
63                                 ipe.ipe_group);
64 #ifdef USE_QUAD_T
65                         PRINTF("\tHits: %"PRIu64"\tBytes: %"PRIu64"\n",
66                                ipe.ipe_hits, ipe.ipe_bytes);
67 #else
68                         PRINTF("\tHits: %lu\tBytes: %lu\n",
69                                ipe.ipe_hits, ipe.ipe_bytes);
70 #endif /* USE_QUAD_T */
71                 } else {
72                         PRINTF("\tAddress: family: %d\n",
73                                 ipe.ipe_family);
74                 }
75         } else {
76                 putchar(' ');
77                 printip(ipe.ipe_family, (u_32_t *)&ipe.ipe_addr.in4_addr);
78                 printmask(ipe.ipe_family, (u_32_t *)&ipe.ipe_mask.in4_addr);
79                 if (ipe.ipe_value != 0) {
80                         switch (iph->iph_type & ~IPHASH_ANON)
81                         {
82                         case IPHASH_GROUPMAP :
83                                 if (strncmp(ipe.ipe_group, iph->iph_name,
84                                             FR_GROUPLEN))
85                                         PRINTF(", group=%s", ipe.ipe_group);
86                                 break;
87                         }
88                 }
89                 putchar(';');
90         }
91
92         ipep = ipe.ipe_next;
93         return(ipep);
94 }