libnetfilter_conntrack  1.0.6
conntrack/getter.c
1 /*
2  * (C) 2005-2011 by Pablo Neira Ayuso <pablo@netfilter.org>
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  */
9 
10 #include "internal/internal.h"
11 
12 static const void *get_attr_orig_ipv4_src(const struct nf_conntrack *ct)
13 {
14  return &ct->head.orig.src.v4;
15 }
16 
17 static const void *get_attr_orig_ipv4_dst(const struct nf_conntrack *ct)
18 {
19  return &ct->head.orig.dst.v4;
20 }
21 
22 static const void *get_attr_repl_ipv4_src(const struct nf_conntrack *ct)
23 {
24  return &ct->repl.src.v4;
25 }
26 
27 static const void *get_attr_repl_ipv4_dst(const struct nf_conntrack *ct)
28 {
29  return &ct->repl.dst.v4;
30 }
31 
32 static const void *get_attr_orig_ipv6_src(const struct nf_conntrack *ct)
33 {
34  return &ct->head.orig.src.v6;
35 }
36 
37 static const void *get_attr_orig_ipv6_dst(const struct nf_conntrack *ct)
38 {
39  return &ct->head.orig.dst.v6;
40 }
41 
42 static const void *get_attr_repl_ipv6_src(const struct nf_conntrack *ct)
43 {
44  return &ct->repl.src.v6;
45 }
46 
47 static const void *get_attr_repl_ipv6_dst(const struct nf_conntrack *ct)
48 {
49  return &ct->repl.dst.v6;
50 }
51 
52 static const void *get_attr_orig_port_src(const struct nf_conntrack *ct)
53 {
54  return &ct->head.orig.l4src.all;
55 }
56 
57 static const void *get_attr_orig_port_dst(const struct nf_conntrack *ct)
58 {
59  return &ct->head.orig.l4dst.all;
60 }
61 
62 static const void *get_attr_repl_port_src(const struct nf_conntrack *ct)
63 {
64  return &ct->repl.l4src.all;
65 }
66 
67 static const void *get_attr_repl_port_dst(const struct nf_conntrack *ct)
68 {
69  return &ct->repl.l4dst.all;
70 }
71 
72 static const void *get_attr_orig_zone(const struct nf_conntrack *ct)
73 {
74  return &ct->head.orig.zone;
75 }
76 
77 static const void *get_attr_repl_zone(const struct nf_conntrack *ct)
78 {
79  return &ct->repl.zone;
80 }
81 
82 static const void *get_attr_icmp_type(const struct nf_conntrack *ct)
83 {
84  return &ct->head.orig.l4dst.icmp.type;
85 }
86 
87 static const void *get_attr_icmp_code(const struct nf_conntrack *ct)
88 {
89  return &ct->head.orig.l4dst.icmp.code;
90 }
91 
92 static const void *get_attr_icmp_id(const struct nf_conntrack *ct)
93 {
94  return &ct->head.orig.l4src.icmp.id;
95 }
96 
97 static const void *get_attr_orig_l3proto(const struct nf_conntrack *ct)
98 {
99  return &ct->head.orig.l3protonum;
100 }
101 
102 static const void *get_attr_repl_l3proto(const struct nf_conntrack *ct)
103 {
104  return &ct->repl.l3protonum;
105 }
106 
107 static const void *get_attr_orig_l4proto(const struct nf_conntrack *ct)
108 {
109  return &ct->head.orig.protonum;
110 }
111 
112 static const void *get_attr_repl_l4proto(const struct nf_conntrack *ct)
113 {
114  return &ct->repl.protonum;
115 }
116 
117 static const void *get_attr_master_ipv4_src(const struct nf_conntrack *ct)
118 {
119  return &ct->master.src.v4;
120 }
121 
122 static const void *get_attr_master_ipv4_dst(const struct nf_conntrack *ct)
123 {
124  return &ct->master.dst.v4;
125 }
126 
127 static const void *get_attr_master_ipv6_src(const struct nf_conntrack *ct)
128 {
129  return &ct->master.src.v6;
130 }
131 
132 static const void *get_attr_master_ipv6_dst(const struct nf_conntrack *ct)
133 {
134  return &ct->master.dst.v6;
135 }
136 
137 static const void *get_attr_master_port_src(const struct nf_conntrack *ct)
138 {
139  return &ct->master.l4src.all;
140 }
141 
142 static const void *get_attr_master_port_dst(const struct nf_conntrack *ct)
143 {
144  return &ct->master.l4dst.all;
145 }
146 
147 static const void *get_attr_master_l3proto(const struct nf_conntrack *ct)
148 {
149  return &ct->master.l3protonum;
150 }
151 
152 static const void *get_attr_master_l4proto(const struct nf_conntrack *ct)
153 {
154  return &ct->master.protonum;
155 }
156 
157 static const void *get_attr_tcp_state(const struct nf_conntrack *ct)
158 {
159  return &ct->protoinfo.tcp.state;
160 }
161 
162 static const void *get_attr_tcp_flags_orig(const struct nf_conntrack *ct)
163 {
164  return &ct->protoinfo.tcp.flags[__DIR_ORIG].value;
165 }
166 
167 static const void *get_attr_tcp_mask_orig(const struct nf_conntrack *ct)
168 {
169  return &ct->protoinfo.tcp.flags[__DIR_ORIG].mask;
170 }
171 
172 static const void *get_attr_tcp_flags_repl(const struct nf_conntrack *ct)
173 {
174  return &ct->protoinfo.tcp.flags[__DIR_REPL].value;
175 }
176 
177 static const void *get_attr_tcp_mask_repl(const struct nf_conntrack *ct)
178 {
179  return &ct->protoinfo.tcp.flags[__DIR_REPL].mask;
180 }
181 
182 static const void *get_attr_tcp_wscale_orig(const struct nf_conntrack *ct)
183 {
184  return &ct->protoinfo.tcp.wscale[__DIR_ORIG];
185 }
186 
187 static const void *get_attr_tcp_wscale_repl(const struct nf_conntrack *ct)
188 {
189  return &ct->protoinfo.tcp.wscale[__DIR_REPL];
190 }
191 
192 static const void *get_attr_sctp_state(const struct nf_conntrack *ct)
193 {
194  return &ct->protoinfo.sctp.state;
195 }
196 
197 static const void *get_attr_sctp_vtag_orig(const struct nf_conntrack *ct)
198 {
199  return &ct->protoinfo.sctp.vtag[__DIR_ORIG];
200 }
201 
202 static const void *get_attr_sctp_vtag_repl(const struct nf_conntrack *ct)
203 {
204  return &ct->protoinfo.sctp.vtag[__DIR_REPL];
205 }
206 
207 static const void *get_attr_snat_ipv4(const struct nf_conntrack *ct)
208 {
209  return &ct->snat.min_ip.v4;
210 }
211 
212 static const void *get_attr_dnat_ipv4(const struct nf_conntrack *ct)
213 {
214  return &ct->dnat.min_ip.v4;
215 }
216 
217 static const void *get_attr_snat_ipv6(const struct nf_conntrack *ct)
218 {
219  return &ct->snat.min_ip.v6;
220 }
221 
222 static const void *get_attr_dnat_ipv6(const struct nf_conntrack *ct)
223 {
224  return &ct->dnat.min_ip.v6;
225 }
226 
227 static const void *get_attr_snat_port(const struct nf_conntrack *ct)
228 {
229  return &ct->snat.l4min.all;
230 }
231 
232 static const void *get_attr_dnat_port(const struct nf_conntrack *ct)
233 {
234  return &ct->dnat.l4min.all;
235 }
236 
237 static const void *get_attr_timeout(const struct nf_conntrack *ct)
238 {
239  return &ct->timeout;
240 }
241 
242 static const void *get_attr_mark(const struct nf_conntrack *ct)
243 {
244  return &ct->mark;
245 }
246 
247 static const void *get_attr_secmark(const struct nf_conntrack *ct)
248 {
249  return &ct->secmark;
250 }
251 
252 static const void *get_attr_orig_counter_packets(const struct nf_conntrack *ct)
253 {
254  return &ct->counters[__DIR_ORIG].packets;
255 }
256 
257 static const void *get_attr_orig_counter_bytes(const struct nf_conntrack *ct)
258 {
259  return &ct->counters[__DIR_ORIG].bytes;
260 }
261 
262 static const void *get_attr_repl_counter_packets(const struct nf_conntrack *ct)
263 {
264  return &ct->counters[__DIR_REPL].packets;
265 }
266 
267 static const void *get_attr_repl_counter_bytes(const struct nf_conntrack *ct)
268 {
269  return &ct->counters[__DIR_REPL].bytes;
270 }
271 
272 static const void *get_attr_status(const struct nf_conntrack *ct)
273 {
274  return &ct->status;
275 }
276 
277 static const void *get_attr_use(const struct nf_conntrack *ct)
278 {
279  return &ct->use;
280 }
281 
282 static const void *get_attr_id(const struct nf_conntrack *ct)
283 {
284  return &ct->id;
285 }
286 
287 static const void *get_attr_orig_cor_pos(const struct nf_conntrack *ct)
288 {
289  return &ct->natseq[__DIR_ORIG].correction_pos;
290 }
291 
292 static const void *get_attr_orig_off_bfr(const struct nf_conntrack *ct)
293 {
294  return &ct->natseq[__DIR_ORIG].offset_before;
295 }
296 
297 static const void *get_attr_orig_off_aft(const struct nf_conntrack *ct)
298 {
299  return &ct->natseq[__DIR_ORIG].offset_after;
300 }
301 
302 static const void *get_attr_repl_cor_pos(const struct nf_conntrack *ct)
303 {
304  return &ct->natseq[__DIR_REPL].correction_pos;
305 }
306 
307 static const void *get_attr_repl_off_bfr(const struct nf_conntrack *ct)
308 {
309  return &ct->natseq[__DIR_REPL].offset_before;
310 }
311 
312 static const void *get_attr_repl_off_aft(const struct nf_conntrack *ct)
313 {
314  return &ct->natseq[__DIR_REPL].offset_after;
315 }
316 
317 static const void *get_attr_helper_name(const struct nf_conntrack *ct)
318 {
319  return ct->helper_name;
320 }
321 
322 static const void *get_attr_dccp_state(const struct nf_conntrack *ct)
323 {
324  return &ct->protoinfo.dccp.state;
325 }
326 
327 static const void *get_attr_dccp_role(const struct nf_conntrack *ct)
328 {
329  return &ct->protoinfo.dccp.role;
330 }
331 
332 static const void *get_attr_dccp_handshake_seq(const struct nf_conntrack *ct)
333 {
334  return &ct->protoinfo.dccp.handshake_seq;
335 }
336 
337 static const void *get_attr_zone(const struct nf_conntrack *ct)
338 {
339  return &ct->zone;
340 }
341 
342 static const void *get_attr_secctx(const struct nf_conntrack *ct)
343 {
344  return ct->secctx;
345 }
346 
347 static const void *get_attr_timestamp_start(const struct nf_conntrack *ct)
348 {
349  return &ct->timestamp.start;
350 }
351 
352 static const void *get_attr_timestamp_stop(const struct nf_conntrack *ct)
353 {
354  return &ct->timestamp.stop;
355 }
356 
357 static const void *get_attr_helper_info(const struct nf_conntrack *ct)
358 {
359  return ct->helper_info;
360 }
361 
362 static const void *get_attr_connlabels(const struct nf_conntrack *ct)
363 {
364  return ct->connlabels;
365 }
366 
367 static const void *get_attr_connlabels_mask(const struct nf_conntrack *ct)
368 {
369  return ct->connlabels_mask;
370 }
371 
372 const get_attr get_attr_array[ATTR_MAX] = {
373  [ATTR_ORIG_IPV4_SRC] = get_attr_orig_ipv4_src,
374  [ATTR_ORIG_IPV4_DST] = get_attr_orig_ipv4_dst,
375  [ATTR_REPL_IPV4_SRC] = get_attr_repl_ipv4_src,
376  [ATTR_REPL_IPV4_DST] = get_attr_repl_ipv4_dst,
377  [ATTR_ORIG_IPV6_SRC] = get_attr_orig_ipv6_src,
378  [ATTR_ORIG_IPV6_DST] = get_attr_orig_ipv6_dst,
379  [ATTR_REPL_IPV6_SRC] = get_attr_repl_ipv6_src,
380  [ATTR_REPL_IPV6_DST] = get_attr_repl_ipv6_dst,
381  [ATTR_ORIG_PORT_SRC] = get_attr_orig_port_src,
382  [ATTR_ORIG_PORT_DST] = get_attr_orig_port_dst,
383  [ATTR_REPL_PORT_SRC] = get_attr_repl_port_src,
384  [ATTR_REPL_PORT_DST] = get_attr_repl_port_dst,
385  [ATTR_ICMP_TYPE] = get_attr_icmp_type,
386  [ATTR_ICMP_CODE] = get_attr_icmp_code,
387  [ATTR_ICMP_ID] = get_attr_icmp_id,
388  [ATTR_ORIG_L3PROTO] = get_attr_orig_l3proto,
389  [ATTR_REPL_L3PROTO] = get_attr_repl_l3proto,
390  [ATTR_ORIG_L4PROTO] = get_attr_orig_l4proto,
391  [ATTR_REPL_L4PROTO] = get_attr_repl_l4proto,
392  [ATTR_TCP_STATE] = get_attr_tcp_state,
393  [ATTR_SNAT_IPV4] = get_attr_snat_ipv4,
394  [ATTR_DNAT_IPV4] = get_attr_dnat_ipv4,
395  [ATTR_SNAT_PORT] = get_attr_snat_port,
396  [ATTR_DNAT_PORT] = get_attr_dnat_port,
397  [ATTR_TIMEOUT] = get_attr_timeout,
398  [ATTR_MARK] = get_attr_mark,
399  [ATTR_ORIG_COUNTER_PACKETS] = get_attr_orig_counter_packets,
400  [ATTR_ORIG_COUNTER_BYTES] = get_attr_orig_counter_bytes,
401  [ATTR_REPL_COUNTER_PACKETS] = get_attr_repl_counter_packets,
402  [ATTR_REPL_COUNTER_BYTES] = get_attr_repl_counter_bytes,
403  [ATTR_USE] = get_attr_use,
404  [ATTR_ID] = get_attr_id,
405  [ATTR_STATUS] = get_attr_status,
406  [ATTR_TCP_FLAGS_ORIG] = get_attr_tcp_flags_orig,
407  [ATTR_TCP_FLAGS_REPL] = get_attr_tcp_flags_repl,
408  [ATTR_TCP_MASK_ORIG] = get_attr_tcp_mask_orig,
409  [ATTR_TCP_MASK_REPL] = get_attr_tcp_mask_repl,
410  [ATTR_MASTER_IPV4_SRC] = get_attr_master_ipv4_src,
411  [ATTR_MASTER_IPV4_DST] = get_attr_master_ipv4_dst,
412  [ATTR_MASTER_IPV6_SRC] = get_attr_master_ipv6_src,
413  [ATTR_MASTER_IPV6_DST] = get_attr_master_ipv6_dst,
414  [ATTR_MASTER_PORT_SRC] = get_attr_master_port_src,
415  [ATTR_MASTER_PORT_DST] = get_attr_master_port_dst,
416  [ATTR_MASTER_L3PROTO] = get_attr_master_l3proto,
417  [ATTR_MASTER_L4PROTO] = get_attr_master_l4proto,
418  [ATTR_SECMARK] = get_attr_secmark,
419  [ATTR_ORIG_NAT_SEQ_CORRECTION_POS] = get_attr_orig_cor_pos,
420  [ATTR_ORIG_NAT_SEQ_OFFSET_BEFORE] = get_attr_orig_off_bfr,
421  [ATTR_ORIG_NAT_SEQ_OFFSET_AFTER] = get_attr_orig_off_aft,
422  [ATTR_REPL_NAT_SEQ_CORRECTION_POS] = get_attr_repl_cor_pos,
423  [ATTR_REPL_NAT_SEQ_OFFSET_BEFORE] = get_attr_repl_off_bfr,
424  [ATTR_REPL_NAT_SEQ_OFFSET_AFTER] = get_attr_repl_off_aft,
425  [ATTR_SCTP_STATE] = get_attr_sctp_state,
426  [ATTR_SCTP_VTAG_ORIG] = get_attr_sctp_vtag_orig,
427  [ATTR_SCTP_VTAG_REPL] = get_attr_sctp_vtag_repl,
428  [ATTR_HELPER_NAME] = get_attr_helper_name,
429  [ATTR_DCCP_STATE] = get_attr_dccp_state,
430  [ATTR_DCCP_ROLE] = get_attr_dccp_role,
431  [ATTR_DCCP_HANDSHAKE_SEQ] = get_attr_dccp_handshake_seq,
432  [ATTR_TCP_WSCALE_ORIG] = get_attr_tcp_wscale_orig,
433  [ATTR_TCP_WSCALE_REPL] = get_attr_tcp_wscale_repl,
434  [ATTR_ZONE] = get_attr_zone,
435  [ATTR_ORIG_ZONE] = get_attr_orig_zone,
436  [ATTR_REPL_ZONE] = get_attr_repl_zone,
437  [ATTR_SECCTX] = get_attr_secctx,
438  [ATTR_TIMESTAMP_START] = get_attr_timestamp_start,
439  [ATTR_TIMESTAMP_STOP] = get_attr_timestamp_stop,
440  [ATTR_HELPER_INFO] = get_attr_helper_info,
441  [ATTR_CONNLABELS] = get_attr_connlabels,
442  [ATTR_CONNLABELS_MASK] = get_attr_connlabels_mask,
443  [ATTR_SNAT_IPV6] = get_attr_snat_ipv6,
444  [ATTR_DNAT_IPV6] = get_attr_dnat_ipv6,
445 };