summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/internal/object.h2
-rw-r--r--include/libnetfilter_conntrack/libnetfilter_conntrack.h1
-rw-r--r--include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h2
-rw-r--r--src/expect/build.c9
-rw-r--r--src/expect/getter.c8
-rw-r--r--src/expect/parse.c6
-rw-r--r--src/expect/setter.c8
-rw-r--r--src/expect/snprintf_default.c5
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--;