From 096567100178c1f2d49b0d3e7764e665d547c3fa Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Thu, 26 Apr 2012 16:38:02 +0200 Subject: conntrack: add new ATTR_GRP_[ORIG|REPL]_ADDR_[SRC|DST] attribute This allows you to set and to get the address for both IPv4 and IPV6 using the same interface. This can simplify much redundant code that needs to support both protocols. This relies on some fixed layout union: union nfct_attr_grp_addr { u_int32_t ip; u_int32_t ip6[4]; u_int32_t addr[4]; }; But I don't see this library will support anything different from IPv4 and IPv6 as layer 3 protocol. If that happens and some point, we can add some new attribute group and deprecate this one. Signed-off-by: Pablo Neira Ayuso --- src/conntrack/grp_setter.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/conntrack/grp_setter.c') diff --git a/src/conntrack/grp_setter.c b/src/conntrack/grp_setter.c index 0492a84..b451eef 100644 --- a/src/conntrack/grp_setter.c +++ b/src/conntrack/grp_setter.c @@ -138,6 +138,34 @@ static void set_attr_grp_master_port(struct nf_conntrack *ct, const void *value) ct->master.l4dst.all = this->dport; } +static void +set_attr_grp_orig_addr_src(struct nf_conntrack *ct, const void *value) +{ + const union nfct_attr_grp_addr *this = value; + memcpy(&ct->head.orig.src, &this->addr, sizeof(&ct->head.orig.src)); +} + +static void +set_attr_grp_orig_addr_dst(struct nf_conntrack *ct, const void *value) +{ + const union nfct_attr_grp_addr *this = value; + memcpy(&ct->head.orig.dst, &this->addr, sizeof(&ct->head.orig.src)); +} + +static void +set_attr_grp_repl_addr_src(struct nf_conntrack *ct, const void *value) +{ + const union nfct_attr_grp_addr *this = value; + memcpy(&ct->repl.src, &this->addr, sizeof(&ct->repl.src)); +} + +static void +set_attr_grp_repl_addr_dst(struct nf_conntrack *ct, const void *value) +{ + const union nfct_attr_grp_addr *this = value; + memcpy(&ct->repl.dst, &this->addr, sizeof(&ct->repl.dst)); +} + static void set_attr_grp_do_nothing(struct nf_conntrack *ct, const void *value) { } @@ -155,4 +183,8 @@ const set_attr_grp set_attr_grp_array[ATTR_GRP_MAX] = { [ATTR_GRP_MASTER_PORT] = set_attr_grp_master_port, [ATTR_GRP_ORIG_COUNTERS] = set_attr_grp_do_nothing, [ATTR_GRP_REPL_COUNTERS] = set_attr_grp_do_nothing, + [ATTR_GRP_ORIG_ADDR_SRC] = set_attr_grp_orig_addr_src, + [ATTR_GRP_ORIG_ADDR_DST] = set_attr_grp_orig_addr_dst, + [ATTR_GRP_REPL_ADDR_SRC] = set_attr_grp_repl_addr_src, + [ATTR_GRP_REPL_ADDR_DST] = set_attr_grp_repl_addr_dst, }; -- cgit v1.2.3