summaryrefslogtreecommitdiffstats
path: root/src/conntrack/getter.c
diff options
context:
space:
mode:
author/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org>2006-12-19 17:41:53 +0000
committer/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org>2006-12-19 17:41:53 +0000
commitb4c3a23c884c24f4e5d941fb928cf49561a9cdf9 (patch)
tree1b171cb10c87258f590650761f020cbcb77ebc97 /src/conntrack/getter.c
parent9cd6994c1d784e55fb009d6ab0ddc5832158a77d (diff)
Introduce the new libnetfilter_conntrack API, features:
- object oriented infrastructure - extensible and configurable output (XML) - low level functions to interact with netlink details - fairly documented Still backward compatible.
Diffstat (limited to 'src/conntrack/getter.c')
-rw-r--r--src/conntrack/getter.c197
1 files changed, 197 insertions, 0 deletions
diff --git a/src/conntrack/getter.c b/src/conntrack/getter.c
new file mode 100644
index 0000000..7e19978
--- /dev/null
+++ b/src/conntrack/getter.c
@@ -0,0 +1,197 @@
+/*
+ * (C) 2006 by Pablo Neira Ayuso <pablo@netfilter.org>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ */
+
+#include "internal.h"
+
+static const void *get_attr_orig_ipv4_src(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].src.v4;
+}
+
+static const void *get_attr_orig_ipv4_dst(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].dst.v4;
+}
+
+static const void *get_attr_repl_ipv4_src(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].src.v4;
+}
+
+static const void *get_attr_repl_ipv4_dst(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].dst.v4;
+}
+
+static const void *get_attr_orig_ipv6_src(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].src.v6;
+}
+
+static const void *get_attr_orig_ipv6_dst(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].dst.v6;
+}
+
+static const void *get_attr_repl_ipv6_src(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].src.v6;
+}
+
+static const void *get_attr_repl_ipv6_dst(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].dst.v6;
+}
+
+static const void *get_attr_orig_port_src(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].l4src.all;
+}
+
+static const void *get_attr_orig_port_dst(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].l4dst.all;
+}
+
+static const void *get_attr_repl_port_src(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].l4src.all;
+}
+
+static const void *get_attr_repl_port_dst(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].l4dst.all;
+}
+
+static const void *get_attr_icmp_type(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].l4dst.icmp.type;
+}
+
+static const void *get_attr_icmp_code(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].l4dst.icmp.code;
+}
+
+static const void *get_attr_icmp_id(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].l4src.icmp.id;
+}
+
+static const void *get_attr_orig_l3proto(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].l3protonum;
+}
+
+static const void *get_attr_repl_l3proto(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].l3protonum;
+}
+
+static const void *get_attr_orig_l4proto(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_ORIG].protonum;
+}
+
+static const void *get_attr_repl_l4proto(const struct nf_conntrack *ct)
+{
+ return &ct->tuple[__DIR_REPL].protonum;
+}
+
+static const void *get_attr_tcp_state(const struct nf_conntrack *ct)
+{
+ return &ct->protoinfo.tcp.state;
+}
+
+static const void *get_attr_snat_ipv4(const struct nf_conntrack *ct)
+{
+ return &ct->snat.min_ip;
+}
+
+static const void *get_attr_dnat_ipv4(const struct nf_conntrack *ct)
+{
+ return &ct->dnat.min_ip;
+}
+
+static const void *get_attr_snat_port(const struct nf_conntrack *ct)
+{
+ return &ct->snat.l4min.all;
+}
+
+static const void *get_attr_dnat_port(const struct nf_conntrack *ct)
+{
+ return &ct->dnat.l4min.all;
+}
+
+static const void *get_attr_timeout(const struct nf_conntrack *ct)
+{
+ return &ct->timeout;
+}
+
+static const void *get_attr_mark(const struct nf_conntrack *ct)
+{
+ return &ct->mark;
+}
+
+static const void *get_attr_orig_counter_packets(const struct nf_conntrack *ct)
+{
+ return &ct->counters[__DIR_ORIG].packets;
+}
+
+static const void *get_attr_orig_counter_bytes(const struct nf_conntrack *ct)
+{
+ return &ct->counters[__DIR_ORIG].bytes;
+}
+
+static const void *get_attr_repl_counter_packets(const struct nf_conntrack *ct)
+{
+ return &ct->counters[__DIR_REPL].packets;
+}
+
+static const void *get_attr_repl_counter_bytes(const struct nf_conntrack *ct)
+{
+ return &ct->counters[__DIR_REPL].bytes;
+}
+
+static const void *get_attr_status(const struct nf_conntrack *ct)
+{
+ return &ct->status;
+}
+
+get_attr get_attr_array[] = {
+ [ATTR_ORIG_IPV4_SRC] = get_attr_orig_ipv4_src,
+ [ATTR_ORIG_IPV4_DST] = get_attr_orig_ipv4_dst,
+ [ATTR_REPL_IPV4_SRC] = get_attr_repl_ipv4_src,
+ [ATTR_REPL_IPV4_DST] = get_attr_repl_ipv4_dst,
+ [ATTR_ORIG_IPV6_SRC] = get_attr_orig_ipv6_src,
+ [ATTR_ORIG_IPV6_DST] = get_attr_orig_ipv6_dst,
+ [ATTR_REPL_IPV6_SRC] = get_attr_repl_ipv6_src,
+ [ATTR_REPL_IPV6_DST] = get_attr_repl_ipv6_dst,
+ [ATTR_ORIG_PORT_SRC] = get_attr_orig_port_src,
+ [ATTR_ORIG_PORT_DST] = get_attr_orig_port_dst,
+ [ATTR_REPL_PORT_SRC] = get_attr_repl_port_src,
+ [ATTR_REPL_PORT_DST] = get_attr_repl_port_dst,
+ [ATTR_ICMP_TYPE] = get_attr_icmp_type,
+ [ATTR_ICMP_CODE] = get_attr_icmp_code,
+ [ATTR_ICMP_ID] = get_attr_icmp_id,
+ [ATTR_ORIG_L3PROTO] = get_attr_orig_l3proto,
+ [ATTR_REPL_L3PROTO] = get_attr_repl_l3proto,
+ [ATTR_ORIG_L4PROTO] = get_attr_orig_l4proto,
+ [ATTR_REPL_L4PROTO] = get_attr_repl_l4proto,
+ [ATTR_TCP_STATE] = get_attr_tcp_state,
+ [ATTR_SNAT_IPV4] = get_attr_snat_ipv4,
+ [ATTR_DNAT_IPV4] = get_attr_dnat_ipv4,
+ [ATTR_SNAT_PORT] = get_attr_snat_port,
+ [ATTR_DNAT_PORT] = get_attr_dnat_port,
+ [ATTR_TIMEOUT] = get_attr_timeout,
+ [ATTR_MARK] = get_attr_mark,
+ [ATTR_ORIG_COUNTER_PACKETS] = get_attr_orig_counter_packets,
+ [ATTR_ORIG_COUNTER_BYTES] = get_attr_orig_counter_bytes,
+ [ATTR_REPL_COUNTER_PACKETS] = get_attr_repl_counter_packets,
+ [ATTR_REPL_COUNTER_BYTES] = get_attr_repl_counter_bytes,
+ [ATTR_STATUS] = get_attr_status,
+};