From 156d22654003635621248a15031ccefb39bfaffa Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Mon, 2 Jan 2023 15:36:39 +0100 Subject: src: add geneve matching support Add support for GENEVE vni and (ether) type header field. Signed-off-by: Pablo Neira Ayuso --- src/parser_bison.y | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'src/parser_bison.y') diff --git a/src/parser_bison.y b/src/parser_bison.y index b2973995..10270f12 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -444,6 +444,8 @@ int nft_lex(void *, void *, void *); %token GRE "gre" +%token GENEVE "geneve" + %token SCTP "sctp" %token CHUNK "chunk" %token DATA "data" @@ -904,9 +906,12 @@ int nft_lex(void *, void *, void *); %type tcpopt_field_maxseg tcpopt_field_mptcp tcpopt_field_sack tcpopt_field_tsopt tcpopt_field_window %type tcp_hdr_option_kind_and_field -%type inner_eth_expr inner_inet_expr inner_expr vxlan_hdr_expr gre_hdr_expr -%destructor { expr_free($$); } inner_eth_expr inner_inet_expr inner_expr vxlan_hdr_expr gre_hdr_expr -%type vxlan_hdr_field gre_hdr_field +%type inner_eth_expr inner_inet_expr inner_expr +%destructor { expr_free($$); } inner_eth_expr inner_inet_expr inner_expr + +%type vxlan_hdr_expr geneve_hdr_expr gre_hdr_expr +%destructor { expr_free($$); } vxlan_hdr_expr geneve_hdr_expr gre_hdr_expr +%type vxlan_hdr_field geneve_hdr_field gre_hdr_field %type optstrip_stmt %destructor { stmt_free($$); } optstrip_stmt @@ -5347,6 +5352,7 @@ payload_expr : payload_raw_expr | sctp_hdr_expr | th_hdr_expr | vxlan_hdr_expr + | geneve_hdr_expr | gre_hdr_expr ; @@ -5644,6 +5650,26 @@ vxlan_hdr_field : VNI { $$ = VXLANHDR_VNI; } | FLAGS { $$ = VXLANHDR_FLAGS; } ; +geneve_hdr_expr : GENEVE geneve_hdr_field + { + struct expr *expr; + + expr = payload_expr_alloc(&@$, &proto_geneve, $2); + expr->payload.inner_desc = &proto_geneve; + $$ = expr; + } + | GENEVE inner_expr + { + $$ = $2; + $$->location = @$; + $$->payload.inner_desc = &proto_geneve; + } + ; + +geneve_hdr_field : VNI { $$ = GNVHDR_VNI; } + | TYPE { $$ = GNVHDR_TYPE; } + ; + gre_hdr_expr : GRE gre_hdr_field close_scope_gre { $$ = payload_expr_alloc(&@$, &proto_gre, $2); -- cgit v1.2.3