From a7e02fe7984a721ae1240c415ec7d1e73ccc5dbd Mon Sep 17 00:00:00 2001 From: Ahmed Abdelsalam Date: Tue, 27 Feb 2018 11:04:14 +0100 Subject: src: Adding support for segment routing header 'srh' Segment Routing Header "SRH" is new type of IPv6 Routing extension header (type 4). SRH contains a list of segments (each is represented as an IPv6 address) to be visited by packets during the journey from source to destination. The SRH specification are defined in the below IETF SRH draft. https://tools.ietf.org/html/draft-ietf-6man-segment-routing-header-07 Signed-off-by: Ahmed Abdelsalam Signed-off-by: Pablo Neira Ayuso --- src/parser_bison.y | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src/parser_bison.y') diff --git a/src/parser_bison.y b/src/parser_bison.y index 2ccaf9ab..5f84d794 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -364,8 +364,12 @@ int nft_lex(void *, void *, void *); %token RT "rt" %token RT0 "rt0" %token RT2 "rt2" +%token RT4 "srh" %token SEG_LEFT "seg-left" %token ADDR "addr" +%token LAST_ENT "last-entry" +%token TAG "tag" +%token SID "sid" %token HBH "hbh" @@ -674,9 +678,9 @@ int nft_lex(void *, void *, void *); %type hbh_hdr_expr frag_hdr_expr dst_hdr_expr %destructor { expr_free($$); } hbh_hdr_expr frag_hdr_expr dst_hdr_expr %type hbh_hdr_field frag_hdr_field dst_hdr_field -%type rt_hdr_expr rt0_hdr_expr rt2_hdr_expr -%destructor { expr_free($$); } rt_hdr_expr rt0_hdr_expr rt2_hdr_expr -%type rt_hdr_field rt0_hdr_field rt2_hdr_field +%type rt_hdr_expr rt0_hdr_expr rt2_hdr_expr rt4_hdr_expr +%destructor { expr_free($$); } rt_hdr_expr rt0_hdr_expr rt2_hdr_expr rt4_hdr_expr +%type rt_hdr_field rt0_hdr_field rt2_hdr_field rt4_hdr_field %type mh_hdr_expr %destructor { expr_free($$); } mh_hdr_expr %type mh_hdr_field @@ -3921,6 +3925,7 @@ exthdr_expr : hbh_hdr_expr | rt_hdr_expr | rt0_hdr_expr | rt2_hdr_expr + | rt4_hdr_expr | frag_hdr_expr | dst_hdr_expr | mh_hdr_expr @@ -3969,6 +3974,21 @@ rt2_hdr_expr : RT2 rt2_hdr_field rt2_hdr_field : ADDR { $$ = RT2HDR_ADDR; } ; +rt4_hdr_expr : RT4 rt4_hdr_field + { + $$ = exthdr_expr_alloc(&@$, &exthdr_rt4, $2); + } + ; + +rt4_hdr_field : LAST_ENT { $$ = RT4HDR_LASTENT; } + | FLAGS { $$ = RT4HDR_FLAGS; } + | TAG { $$ = RT4HDR_TAG; } + | SID '[' NUM ']' + { + $$ = RT4HDR_SID_1 + $3 - 1; + } + ; + frag_hdr_expr : FRAG frag_hdr_field { $$ = exthdr_expr_alloc(&@$, &exthdr_frag, $2); -- cgit v1.2.3