1 /*
2 * Copyright (C) 2012 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id: printnatfield.c,v 1.6.2.2 2012/01/26 05:44:26 darren_r Exp $
7 */
8
9 #include "ipf.h"
10
11 wordtab_t natfields[] = {
12 { "all", -2 },
13 { "ifp0", 1 },
14 { "ifp1", 2 },
15 { "mtu0", 3 },
16 { "mtu1", 4 },
17 { "ifname0", 5 },
18 { "ifname1", 6 },
19 { "sumd0", 7 },
20 { "sumd1", 8 },
21 { "pkts0", 9 },
22 { "pkts1", 10 },
23 { "bytes0", 11 },
24 { "bytes1", 12 },
25 { "proto0", 13 },
26 { "proto1", 14 },
27 { "hash0", 15 },
28 { "hash1", 16 },
29 { "ref", 17 },
30 { "rev", 18 },
31 { "v0", 19 },
32 { "redir", 20 },
33 { "use", 21 },
34 { "ipsumd", 22 },
35 { "dir", 23 },
36 { "olddstip", 24 },
37 { "oldsrcip", 25 },
38 { "newdstip", 26 },
39 { "newsrcip", 27 },
40 { "olddport", 28 },
41 { "oldsport", 29 },
42 { "newdport", 30 },
43 { "newsport", 31 },
44 { "age", 32 },
45 { "v1", 33 },
46 { NULL, 0 }
47 };
48
49
50 void
printnatfield(n,fieldnum)51 printnatfield(n, fieldnum)
52 nat_t *n;
53 int fieldnum;
54 {
55 int i;
56
57 switch (fieldnum)
58 {
59 case -2 :
60 for (i = 1; natfields[i].w_word != NULL; i++) {
61 if (natfields[i].w_value > 0) {
62 printnatfield(n, i);
63 if (natfields[i + 1].w_value > 0)
64 putchar('\t');
65 }
66 }
67 break;
68
69 case 1:
70 PRINTF("%#lx", (u_long)n->nat_ifps[0]);
71 break;
72
73 case 2:
74 PRINTF("%#lx", (u_long)n->nat_ifps[1]);
75 break;
76
77 case 3:
78 PRINTF("%d", n->nat_mtu[0]);
79 break;
80
81 case 4:
82 PRINTF("%d", n->nat_mtu[1]);
83 break;
84
85 case 5:
86 PRINTF("%s", n->nat_ifnames[0]);
87 break;
88
89 case 6:
90 PRINTF("%s", n->nat_ifnames[1]);
91 break;
92
93 case 7:
94 PRINTF("%d", n->nat_sumd[0]);
95 break;
96
97 case 8:
98 PRINTF("%d", n->nat_sumd[1]);
99 break;
100
101 case 9:
102 #ifdef USE_QUAD_T
103 PRINTF("%"PRIu64"", n->nat_pkts[0]);
104 #else
105 PRINTF("%lu", n->nat_pkts[0]);
106 #endif
107 break;
108
109 case 10:
110 #ifdef USE_QUAD_T
111 PRINTF("%"PRIu64"", n->nat_pkts[1]);
112 #else
113 PRINTF("%lu", n->nat_pkts[1]);
114 #endif
115 break;
116
117 case 11:
118 #ifdef USE_QUAD_T
119 PRINTF("%"PRIu64"", n->nat_bytes[0]);
120 #else
121 PRINTF("%lu", n->nat_bytes[0]);
122 #endif
123 break;
124
125 case 12:
126 #ifdef USE_QUAD_T
127 PRINTF("%"PRIu64"", n->nat_bytes[1]);
128 #else
129 PRINTF("%lu", n->nat_bytes[1]);
130 #endif
131 break;
132
133 case 13:
134 PRINTF("%d", n->nat_pr[0]);
135 break;
136
137 case 14:
138 PRINTF("%d", n->nat_pr[1]);
139 break;
140
141 case 15:
142 PRINTF("%u", n->nat_hv[0]);
143 break;
144
145 case 16:
146 PRINTF("%u", n->nat_hv[1]);
147 break;
148
149 case 17:
150 PRINTF("%d", n->nat_ref);
151 break;
152
153 case 18:
154 PRINTF("%d", n->nat_rev);
155 break;
156
157 case 19:
158 PRINTF("%d", n->nat_v[0]);
159 break;
160
161 case 33:
162 PRINTF("%d", n->nat_v[0]);
163 break;
164
165 case 20:
166 PRINTF("%d", n->nat_redir);
167 break;
168
169 case 21:
170 PRINTF("%d", n->nat_use);
171 break;
172
173 case 22:
174 PRINTF("%u", n->nat_ipsumd);
175 break;
176
177 case 23:
178 PRINTF("%d", n->nat_dir);
179 break;
180
181 case 24:
182 PRINTF("%s", hostname(n->nat_v[0], &n->nat_odstip));
183 break;
184
185 case 25:
186 PRINTF("%s", hostname(n->nat_v[0], &n->nat_osrcip));
187 break;
188
189 case 26:
190 PRINTF("%s", hostname(n->nat_v[1], &n->nat_ndstip));
191 break;
192
193 case 27:
194 PRINTF("%s", hostname(n->nat_v[1], &n->nat_nsrcip));
195 break;
196
197 case 28:
198 PRINTF("%hu", ntohs(n->nat_odport));
199 break;
200
201 case 29:
202 PRINTF("%hu", ntohs(n->nat_osport));
203 break;
204
205 case 30:
206 PRINTF("%hu", ntohs(n->nat_ndport));
207 break;
208
209 case 31:
210 PRINTF("%hu", ntohs(n->nat_nsport));
211 break;
212
213 case 32:
214 PRINTF("%u", n->nat_age);
215 break;
216
217 default:
218 break;
219 }
220 }
221