10#include "internal/internal.h"
12static void set_attr_grp_orig_ipv4(
struct nf_conntrack *ct,
const void *value)
15 ct->head.orig.src.v4 = this->src;
16 ct->head.orig.dst.v4 = this->dst;
17 ct->head.orig.l3protonum = AF_INET;
20static void set_attr_grp_repl_ipv4(
struct nf_conntrack *ct,
const void *value)
23 ct->repl.src.v4 = this->src;
24 ct->repl.dst.v4 = this->dst;
25 ct->repl.l3protonum = AF_INET;
28static void set_attr_grp_orig_ipv6(
struct nf_conntrack *ct,
const void *value)
31 memcpy(&ct->head.orig.src.v6, this->src,
sizeof(uint32_t)*4);
32 memcpy(&ct->head.orig.dst.v6, this->dst,
sizeof(uint32_t)*4);
33 ct->head.orig.l3protonum = AF_INET6;
36static void set_attr_grp_repl_ipv6(
struct nf_conntrack *ct,
const void *value)
39 memcpy(&ct->repl.src.v6, this->src,
sizeof(uint32_t)*4);
40 memcpy(&ct->repl.dst.v6, this->dst,
sizeof(uint32_t)*4);
41 ct->repl.l3protonum = AF_INET6;
44static void set_attr_grp_orig_port(
struct nf_conntrack *ct,
const void *value)
47 ct->head.orig.l4src.all = this->sport;
48 ct->head.orig.l4dst.all = this->dport;
51static void set_attr_grp_repl_port(
struct nf_conntrack *ct,
const void *value)
54 ct->repl.l4src.all = this->sport;
55 ct->repl.l4dst.all = this->dport;
58static void set_attr_grp_icmp(
struct nf_conntrack *ct,
const void *value)
63 ct->head.orig.l4dst.icmp.type = this->type;
65 switch(ct->head.orig.l3protonum) {
67 rtype = __icmp_reply_type(this->type);
71 rtype = __icmpv6_reply_type(this->type);
79 ct->repl.l4dst.icmp.type = rtype - 1;
81 ct->repl.l4dst.icmp.type = 255;
83 ct->head.orig.l4dst.icmp.code = this->code;
84 ct->repl.l4dst.icmp.code = this->code;
86 ct->head.orig.l4src.icmp.id = this->id;
87 ct->repl.l4src.icmp.id = this->id;
90static void set_attr_grp_master_ipv4(
struct nf_conntrack *ct,
const void *value)
93 ct->master.src.v4 = this->src;
94 ct->master.dst.v4 = this->dst;
95 ct->master.l3protonum = AF_INET;
98static void set_attr_grp_master_ipv6(
struct nf_conntrack *ct,
const void *value)
101 memcpy(&ct->master.src.v6, this->src,
sizeof(uint32_t)*4);
102 memcpy(&ct->master.dst.v6, this->dst,
sizeof(uint32_t)*4);
103 ct->master.l3protonum = AF_INET6;
106static void set_attr_grp_master_port(
struct nf_conntrack *ct,
const void *value)
109 ct->master.l4src.all = this->sport;
110 ct->master.l4dst.all = this->dport;
113static void set_attr_grp_do_nothing(
struct nf_conntrack *ct,
const void *value)
117const set_attr_grp set_attr_grp_array[ATTR_GRP_MAX] = {
118 [ATTR_GRP_ORIG_IPV4] = set_attr_grp_orig_ipv4,
119 [ATTR_GRP_REPL_IPV4] = set_attr_grp_repl_ipv4,
120 [ATTR_GRP_ORIG_IPV6] = set_attr_grp_orig_ipv6,
121 [ATTR_GRP_REPL_IPV6] = set_attr_grp_repl_ipv6,
122 [ATTR_GRP_ORIG_PORT] = set_attr_grp_orig_port,
123 [ATTR_GRP_REPL_PORT] = set_attr_grp_repl_port,
124 [ATTR_GRP_ICMP] = set_attr_grp_icmp,
125 [ATTR_GRP_MASTER_IPV4] = set_attr_grp_master_ipv4,
126 [ATTR_GRP_MASTER_IPV6] = set_attr_grp_master_ipv6,
127 [ATTR_GRP_MASTER_PORT] = set_attr_grp_master_port,
128 [ATTR_GRP_ORIG_COUNTERS] = set_attr_grp_do_nothing,
129 [ATTR_GRP_REPL_COUNTERS] = set_attr_grp_do_nothing,
130 [ATTR_GRP_ORIG_ADDR_SRC] = set_attr_grp_do_nothing,
131 [ATTR_GRP_ORIG_ADDR_DST] = set_attr_grp_do_nothing,
132 [ATTR_GRP_REPL_ADDR_SRC] = set_attr_grp_do_nothing,
133 [ATTR_GRP_REPL_ADDR_DST] = set_attr_grp_do_nothing,