diff options
author | /C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org> | 2007-05-06 17:39:00 +0000 |
---|---|---|
committer | /C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org> | 2007-05-06 17:39:00 +0000 |
commit | 84f120b150d14adb1cefec601e28b2522612a620 (patch) | |
tree | cc96e2849a8e7be3ec9a36759b8fe5ad84d0ffa4 /src/expect/build.c | |
parent | 04678e577c875efdefc93a0450688ca60cc93cd8 (diff) |
- add warning note to ctnl_test.c: old API is deprecated
- split expect_api_test.c into small example files expect_*.c
- introduce alias tags for original tuple attributes
- introduce nfexp_sizeof and nfexp_maxsize
- build expectation attributes iif they are set
- fix l3num setting in expect/build.c
Diffstat (limited to 'src/expect/build.c')
-rw-r--r-- | src/expect/build.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/src/expect/build.c b/src/expect/build.c index 501263a..0415621 100644 --- a/src/expect/build.c +++ b/src/expect/build.c @@ -21,35 +21,37 @@ int __build_expect(struct nfnl_subsys_handle *ssh, u_int16_t flags, const struct nf_expect *exp) { - u_int8_t l3num = exp->master.tuple[NFCT_DIR_ORIGINAL].l3protonum; + u_int8_t l3num; - if (!test_bit(ATTR_ORIG_L3PROTO, exp->master.set)) { - errno = EINVAL; - return -1; - } + if (test_bit(ATTR_ORIG_L3PROTO, exp->master.set)) + l3num = exp->master.tuple[NFCT_DIR_ORIGINAL].l3protonum; + else if (test_bit(ATTR_ORIG_L3PROTO, exp->expected.set)) + l3num = exp->expected.tuple[NFCT_DIR_ORIGINAL].l3protonum; memset(req, 0, size); nfnl_fill_hdr(ssh, &req->nlh, 0, l3num, 0, type, flags); - __build_tuple(req, - size, - &exp->expected.tuple[__DIR_ORIG], - CTA_EXPECT_TUPLE); - - /* get and delete only require the expectation tuple */ - if (type == IPCTNL_MSG_EXP_GET || type == IPCTNL_MSG_EXP_DELETE) - return 0; - - __build_tuple(req, - size, - &exp->master.tuple[__DIR_ORIG], - CTA_EXPECT_MASTER); - - __build_tuple(req, - size, - &exp->mask.tuple[__DIR_ORIG], - CTA_EXPECT_MASK); + if (test_bit(ATTR_EXP_EXPECTED, exp->set)) { + __build_tuple(req, + size, + &exp->expected.tuple[__DIR_ORIG], + CTA_EXPECT_TUPLE); + } + + if (test_bit(ATTR_EXP_MASTER, exp->set)) { + __build_tuple(req, + size, + &exp->master.tuple[__DIR_ORIG], + CTA_EXPECT_MASTER); + } + + if (test_bit(ATTR_EXP_MASK, exp->set)) { + __build_tuple(req, + size, + &exp->mask.tuple[__DIR_ORIG], + CTA_EXPECT_MASK); + } if (test_bit(ATTR_EXP_TIMEOUT, exp->set)) __build_timeout(req, size, exp); |