From b24f4ac006dcc3f2c6a904af2f3eb02bd4d16ea2 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Thu, 7 Oct 2010 17:43:41 +0200 Subject: expect: add CTA_EXPECT_ZONE support We also remove the reference to CTA_EXPECT_QUEUENR with was not ever pushed into Linux kernel mainline. Signed-off-by: Pablo Neira Ayuso --- include/internal/object.h | 2 +- include/libnetfilter_conntrack/libnetfilter_conntrack.h | 1 + include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h | 2 +- src/expect/build.c | 9 +++++++++ src/expect/getter.c | 8 +++++++- src/expect/parse.c | 6 ++++++ src/expect/setter.c | 8 +++++++- src/expect/snprintf_default.c | 5 +++++ 8 files changed, 37 insertions(+), 4 deletions(-) diff --git a/include/internal/object.h b/include/internal/object.h index dda999a..a0c2b4e 100644 --- a/include/internal/object.h +++ b/include/internal/object.h @@ -257,7 +257,7 @@ struct nf_expect { struct nf_conntrack mask; u_int32_t timeout; u_int32_t id; - u_int16_t expectfn_queue_id; + u_int16_t zone; u_int32_t set[1]; }; diff --git a/include/libnetfilter_conntrack/libnetfilter_conntrack.h b/include/libnetfilter_conntrack/libnetfilter_conntrack.h index f5c4273..710362c 100644 --- a/include/libnetfilter_conntrack/libnetfilter_conntrack.h +++ b/include/libnetfilter_conntrack/libnetfilter_conntrack.h @@ -495,6 +495,7 @@ enum nf_expect_attr { ATTR_EXP_EXPECTED, /* pointer to conntrack object */ ATTR_EXP_MASK, /* pointer to conntrack object */ ATTR_EXP_TIMEOUT, /* u32 bits */ + ATTR_EXP_ZONE, /* u16 bits */ ATTR_EXP_MAX }; diff --git a/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h b/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h index 022b706..e17e0c5 100644 --- a/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h +++ b/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h @@ -164,7 +164,7 @@ enum ctattr_expect { CTA_EXPECT_TIMEOUT, CTA_EXPECT_ID, CTA_EXPECT_HELP_NAME, - CTA_EXPECT_QUEUENR, + CTA_EXPECT_ZONE, __CTA_EXPECT_MAX }; #define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1) diff --git a/src/expect/build.c b/src/expect/build.c index cb9071d..e7f547f 100644 --- a/src/expect/build.c +++ b/src/expect/build.c @@ -14,6 +14,12 @@ static void __build_timeout(struct nfnlhdr *req, nfnl_addattr32(&req->nlh, size, CTA_EXPECT_TIMEOUT,htonl(exp->timeout)); } +static void __build_zone(struct nfnlhdr *req, size_t size, + const struct nf_expect *exp) +{ + nfnl_addattr16(&req->nlh, size, CTA_EXPECT_ZONE, htons(exp->zone)); +} + int __build_expect(struct nfnl_subsys_handle *ssh, struct nfnlhdr *req, size_t size, @@ -58,5 +64,8 @@ int __build_expect(struct nfnl_subsys_handle *ssh, if (test_bit(ATTR_EXP_TIMEOUT, exp->set)) __build_timeout(req, size, exp); + if (test_bit(ATTR_EXP_ZONE, exp->set)) + __build_zone(req, size, exp); + return 0; } diff --git a/src/expect/getter.c b/src/expect/getter.c index 2a622af..d655c92 100644 --- a/src/expect/getter.c +++ b/src/expect/getter.c @@ -27,9 +27,15 @@ static const void *get_exp_attr_timeout(const struct nf_expect *exp) return &exp->timeout; } -get_exp_attr get_exp_attr_array[] = { +static const void *get_exp_attr_zone(const struct nf_expect *exp) +{ + return &exp->zone; +} + +get_exp_attr get_exp_attr_array[ATTR_EXP_MAX] = { [ATTR_EXP_MASTER] = get_exp_attr_master, [ATTR_EXP_EXPECTED] = get_exp_attr_expected, [ATTR_EXP_MASK] = get_exp_attr_mask, [ATTR_EXP_TIMEOUT] = get_exp_attr_timeout, + [ATTR_EXP_ZONE] = get_exp_attr_zone, }; diff --git a/src/expect/parse.c b/src/expect/parse.c index fb7a021..f274497 100644 --- a/src/expect/parse.c +++ b/src/expect/parse.c @@ -54,4 +54,10 @@ void __parse_expect(const struct nlmsghdr *nlh, ntohl(*(u_int32_t *)NFA_DATA(cda[CTA_EXPECT_TIMEOUT-1])); set_bit(ATTR_EXP_TIMEOUT, exp->set); } + + if (cda[CTA_EXPECT_ZONE-1]) { + exp->zone = + ntohs(*(u_int16_t *)NFA_DATA(cda[CTA_EXPECT_ZONE-1])); + set_bit(ATTR_EXP_ZONE, exp->set); + } } diff --git a/src/expect/setter.c b/src/expect/setter.c index c962bb5..dbdad0b 100644 --- a/src/expect/setter.c +++ b/src/expect/setter.c @@ -27,9 +27,15 @@ static void set_exp_attr_timeout(struct nf_expect *exp, const void *value) exp->timeout = *((u_int32_t *) value); } -set_exp_attr set_exp_attr_array[] = { +static void set_exp_attr_zone(struct nf_expect *exp, const void *value) +{ + exp->zone = *((u_int16_t *) value); +} + +set_exp_attr set_exp_attr_array[ATTR_EXP_MAX] = { [ATTR_EXP_MASTER] = set_exp_attr_master, [ATTR_EXP_EXPECTED] = set_exp_attr_expected, [ATTR_EXP_MASK] = set_exp_attr_mask, [ATTR_EXP_TIMEOUT] = set_exp_attr_timeout, + [ATTR_EXP_ZONE] = set_exp_attr_zone, }; diff --git a/src/expect/snprintf_default.c b/src/expect/snprintf_default.c index fec1586..e780bf1 100644 --- a/src/expect/snprintf_default.c +++ b/src/expect/snprintf_default.c @@ -43,6 +43,11 @@ int __snprintf_expect_default(char *buf, ret = __snprintf_proto(buf+offset, len, &exp->expected.tuple[__DIR_ORIG]); BUFFER_SIZE(ret, size, len, offset); + if (test_bit(ATTR_EXP_ZONE, exp->set)) { + ret = snprintf(buf+offset, len, "zone=%u ", exp->zone); + BUFFER_SIZE(ret, size, len, offset); + } + /* Delete the last blank space */ size--; -- cgit v1.2.3