* [PATCH v2] nftables: Add support for reserved header and addrs for routing header type 0
@ 2017-10-06 7:36 Harsha Sharma
2017-10-11 16:50 ` Harsha Sharma
0 siblings, 1 reply; 2+ messages in thread
From: Harsha Sharma @ 2017-10-06 7:36 UTC (permalink / raw)
To: pablo; +Cc: netfilter-devel, outreachy-kernel, Harsha Sharma
Add support for IPV6 routing header type 0 reserved field and addresses
with corresponding tests
Signed-off-by: Harsha Sharma <harshasharmaiitr@gmail.com>
---
For struct exthdr_rt0, I have specified type to be IPPROTO_ROUTING
due to which when exthdr_init_raw is called in exthdr_find_template
which initialises expr->exthdr.desc to exthdr_protocols[type] and
that will be $exthdr_rt and not &exthdr_rt0, when testing the
testcases this warning comes 'rt0 rserved 2' mismatches 'rt unknown
0x2' and same for the addrs. Fot this one possible way is to define
IPPROTO_ROUTING0 in header file in /usr/include/. Can anyone please
suggest what will be the best way to fix these warnings ?
I'll add more testcases once these warnings are fixed.
Thanks.
Changes in v2:
-Changed log message
-Added tests and removed errors but warning is still there
include/exthdr.h | 2 ++
src/exthdr.c | 4 ++--
src/parser_bison.y | 6 ++----
tests/py/ip6/rt0.t | 4 ++++
tests/py/ip6/rt0.t.payload | 14 ++++++++++++++
5 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/include/exthdr.h b/include/exthdr.h
index 97ccc38..3930108 100644
--- a/include/exthdr.h
+++ b/include/exthdr.h
@@ -14,6 +14,8 @@
struct exthdr_desc {
const char *name;
uint8_t type;
+ unsigned int protocol_key;
+ const struct exthdr_desc *protocols[3];
struct proto_hdr_template templates[10];
};
diff --git a/src/exthdr.c b/src/exthdr.c
index ac3e163..ddd0018 100644
--- a/src/exthdr.c
+++ b/src/exthdr.c
@@ -246,6 +246,8 @@ const struct exthdr_desc exthdr_rt2 = {
HDR_TEMPLATE(__name, __dtype, struct ip6_rthdr0, __member)
const struct exthdr_desc exthdr_rt0 = {
+ .name = "rt0",
+ .type = IPPROTO_ROUTING,
.templates = {
[RT0HDR_RESERVED] = RT0_FIELD("reserved", ip6r0_reserved, &integer_type),
[RT0HDR_ADDR_1] = RT0_FIELD("addr[1]", ip6r0_addr[0], &ip6addr_type),
@@ -260,13 +262,11 @@ const struct exthdr_desc exthdr_rt0 = {
const struct exthdr_desc exthdr_rt = {
.name = "rt",
.type = IPPROTO_ROUTING,
-#if 0
.protocol_key = RTHDR_TYPE,
.protocols = {
[0] = &exthdr_rt0,
[2] = &exthdr_rt2,
},
-#endif
.templates = {
[RTHDR_NEXTHDR] = RT_FIELD("nexthdr", ip6r_nxt, &inet_protocol_type),
[RTHDR_HDRLENGTH] = RT_FIELD("hdrlength", ip6r_len, &integer_type),
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 7016f5b..7c4e775 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -3697,10 +3697,8 @@ rt0_hdr_expr : RT0 rt0_hdr_field
}
;
-rt0_hdr_field : ADDR '[' NUM ']'
- {
- $$ = RT0HDR_ADDR_1 + $3 - 1;
- }
+rt0_hdr_field : ADDR'['NUM']' { $$ = RT0HDR_ADDR_1 + $3 - 1;}
+ | RESERVED { $$ = RT0HDR_RESERVED; }
;
rt2_hdr_expr : RT2 rt2_hdr_field
diff --git a/tests/py/ip6/rt0.t b/tests/py/ip6/rt0.t
index 1d50a89..ebbae75 100644
--- a/tests/py/ip6/rt0.t
+++ b/tests/py/ip6/rt0.t
@@ -4,3 +4,7 @@
rt nexthop 192.168.0.1;fail
rt nexthop fd00::1;ok;rt ip6 nexthop fd00::1
+
+rt0 reserved 2;ok
+rt0 addr [1] 2001:db8:0:1:1:1:1:1;ok
+rt0 addr [2] 2001:db8:0:0:0:0:1:1;ok
diff --git a/tests/py/ip6/rt0.t.payload b/tests/py/ip6/rt0.t.payload
index 464b7f2..69577e7 100644
--- a/tests/py/ip6/rt0.t.payload
+++ b/tests/py/ip6/rt0.t.payload
@@ -3,3 +3,17 @@ ip6 test-ip6 output
[ rt load nexthop6 => reg 1 ]
[ cmp eq reg 1 0x000000fd 0x00000000 0x00000000 0x01000000 ]
+# rt0 reserved 2
+ip6 test-ip6 output
+ [ exthdr load 1b @ 43 + 4 => reg 1 ]
+ [ cmp eq reg 1 0x00000002 ]
+
+# rt0 addr [1] 2001:db8:0:1:1:1:1:1
+ip6 test-ip6 output
+ [ exthdr load 16b @ 43 + 8 => reg 1 ]
+ [ cmp eq reg 1 0xb80d0120 0x01000000 0x01000100 0x01000100 ]
+
+# rt0 addr [2] 2001:db8:0:0:0:0:1:1
+ip6 test-ip6 output
+ [ exthdr load 16b @ 43 + 8 => reg 1 ]
+ [ cmp eq reg 1 0xb80d0120 0x00000000 0x00000000 0x01000100 ]
--
2.11.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] nftables: Add support for reserved header and addrs for routing header type 0
2017-10-06 7:36 [PATCH v2] nftables: Add support for reserved header and addrs for routing header type 0 Harsha Sharma
@ 2017-10-11 16:50 ` Harsha Sharma
0 siblings, 0 replies; 2+ messages in thread
From: Harsha Sharma @ 2017-10-11 16:50 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel, outreachy-kernel, Harsha Sharma
On Fri, Oct 6, 2017 at 1:06 PM, Harsha Sharma
<harshasharmaiitr@gmail.com> wrote:
> Add support for IPV6 routing header type 0 reserved field and addresses
> with corresponding tests
>
> Signed-off-by: Harsha Sharma <harshasharmaiitr@gmail.com>
> ---
> For struct exthdr_rt0, I have specified type to be IPPROTO_ROUTING
> due to which when exthdr_init_raw is called in exthdr_find_template
> which initialises expr->exthdr.desc to exthdr_protocols[type] and
> that will be $exthdr_rt and not &exthdr_rt0, when testing the
> testcases this warning comes 'rt0 rserved 2' mismatches 'rt unknown
> 0x2' and same for the addrs. Fot this one possible way is to define
> IPPROTO_ROUTING0 in header file in /usr/include/. Can anyone please
> suggest what will be the best way to fix these warnings ?
> I'll add more testcases once these warnings are fixed.
> Thanks.
>
> Changes in v2:
> -Changed log message
> -Added tests and removed errors but warning is still there
>
> include/exthdr.h | 2 ++
> src/exthdr.c | 4 ++--
> src/parser_bison.y | 6 ++----
> tests/py/ip6/rt0.t | 4 ++++
> tests/py/ip6/rt0.t.payload | 14 ++++++++++++++
> 5 files changed, 24 insertions(+), 6 deletions(-)
>
> diff --git a/include/exthdr.h b/include/exthdr.h
> index 97ccc38..3930108 100644
> --- a/include/exthdr.h
> +++ b/include/exthdr.h
> @@ -14,6 +14,8 @@
> struct exthdr_desc {
> const char *name;
> uint8_t type;
> + unsigned int protocol_key;
> + const struct exthdr_desc *protocols[3];
> struct proto_hdr_template templates[10];
> };
>
> diff --git a/src/exthdr.c b/src/exthdr.c
> index ac3e163..ddd0018 100644
> --- a/src/exthdr.c
> +++ b/src/exthdr.c
> @@ -246,6 +246,8 @@ const struct exthdr_desc exthdr_rt2 = {
> HDR_TEMPLATE(__name, __dtype, struct ip6_rthdr0, __member)
>
> const struct exthdr_desc exthdr_rt0 = {
> + .name = "rt0",
> + .type = IPPROTO_ROUTING,
> .templates = {
> [RT0HDR_RESERVED] = RT0_FIELD("reserved", ip6r0_reserved, &integer_type),
> [RT0HDR_ADDR_1] = RT0_FIELD("addr[1]", ip6r0_addr[0], &ip6addr_type),
> @@ -260,13 +262,11 @@ const struct exthdr_desc exthdr_rt0 = {
> const struct exthdr_desc exthdr_rt = {
> .name = "rt",
> .type = IPPROTO_ROUTING,
> -#if 0
> .protocol_key = RTHDR_TYPE,
> .protocols = {
> [0] = &exthdr_rt0,
> [2] = &exthdr_rt2,
> },
> -#endif
> .templates = {
> [RTHDR_NEXTHDR] = RT_FIELD("nexthdr", ip6r_nxt, &inet_protocol_type),
> [RTHDR_HDRLENGTH] = RT_FIELD("hdrlength", ip6r_len, &integer_type),
> diff --git a/src/parser_bison.y b/src/parser_bison.y
> index 7016f5b..7c4e775 100644
> --- a/src/parser_bison.y
> +++ b/src/parser_bison.y
> @@ -3697,10 +3697,8 @@ rt0_hdr_expr : RT0 rt0_hdr_field
> }
> ;
>
> -rt0_hdr_field : ADDR '[' NUM ']'
> - {
> - $$ = RT0HDR_ADDR_1 + $3 - 1;
> - }
> +rt0_hdr_field : ADDR'['NUM']' { $$ = RT0HDR_ADDR_1 + $3 - 1;}
> + | RESERVED { $$ = RT0HDR_RESERVED; }
> ;
>
> rt2_hdr_expr : RT2 rt2_hdr_field
> diff --git a/tests/py/ip6/rt0.t b/tests/py/ip6/rt0.t
> index 1d50a89..ebbae75 100644
> --- a/tests/py/ip6/rt0.t
> +++ b/tests/py/ip6/rt0.t
> @@ -4,3 +4,7 @@
>
> rt nexthop 192.168.0.1;fail
> rt nexthop fd00::1;ok;rt ip6 nexthop fd00::1
> +
> +rt0 reserved 2;ok
> +rt0 addr [1] 2001:db8:0:1:1:1:1:1;ok
> +rt0 addr [2] 2001:db8:0:0:0:0:1:1;ok
> diff --git a/tests/py/ip6/rt0.t.payload b/tests/py/ip6/rt0.t.payload
> index 464b7f2..69577e7 100644
> --- a/tests/py/ip6/rt0.t.payload
> +++ b/tests/py/ip6/rt0.t.payload
> @@ -3,3 +3,17 @@ ip6 test-ip6 output
> [ rt load nexthop6 => reg 1 ]
> [ cmp eq reg 1 0x000000fd 0x00000000 0x00000000 0x01000000 ]
>
> +# rt0 reserved 2
> +ip6 test-ip6 output
> + [ exthdr load 1b @ 43 + 4 => reg 1 ]
> + [ cmp eq reg 1 0x00000002 ]
> +
> +# rt0 addr [1] 2001:db8:0:1:1:1:1:1
> +ip6 test-ip6 output
> + [ exthdr load 16b @ 43 + 8 => reg 1 ]
> + [ cmp eq reg 1 0xb80d0120 0x01000000 0x01000100 0x01000100 ]
> +
> +# rt0 addr [2] 2001:db8:0:0:0:0:1:1
> +ip6 test-ip6 output
> + [ exthdr load 16b @ 43 + 8 => reg 1 ]
> + [ cmp eq reg 1 0xb80d0120 0x00000000 0x00000000 0x01000100 ]
Hi,
Any updates on this ?
Thanks for your time.
Regards,
Harsha Sharma
> --
> 2.11.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-10-11 16:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-06 7:36 [PATCH v2] nftables: Add support for reserved header and addrs for routing header type 0 Harsha Sharma
2017-10-11 16:50 ` Harsha Sharma
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).