Added trafgen syntax to set UDP header fields:

    { udp(sport=111, dport=222) }

Signed-off-by: Vadim Kochan <vadi...@gmail.com>
---
 trafgen_lexer.l  |  4 ++++
 trafgen_parser.y | 29 +++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/trafgen_lexer.l b/trafgen_lexer.l
index e6007f7..f040a83 100644
--- a/trafgen_lexer.l
+++ b/trafgen_lexer.l
@@ -133,9 +133,13 @@ ip_addr            ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
 "df"           { return K_DF; }
 "mf"           { return K_MF; }
 
+"sp"|"sport"   { return K_SPORT; }
+"dp"|"dport"   { return K_DPORT; }
+
 "eth"          { return K_ETH; }
 "arp"          { return K_ARP; }
 "ip4"|"ipv4"   { return K_IP4; }
+"udp"          { return K_UDP; }
 
 [ ]*"-"[ ]*    { return '-'; }
 [ ]*"+"[ ]*    { return '+'; }
diff --git a/trafgen_parser.y b/trafgen_parser.y
index ebc4054..9ec09b1 100644
--- a/trafgen_parser.y
+++ b/trafgen_parser.y
@@ -26,6 +26,7 @@
 #include "trafgen_proto.h"
 #include "trafgen_l2.h"
 #include "trafgen_l3.h"
+#include "trafgen_l4.h"
 #include "built_in.h"
 #include "die.h"
 #include "str.h"
@@ -352,10 +353,12 @@ static void proto_add(enum proto_id pid)
 %token K_DADDR K_SADDR K_PROT
 %token K_OPER K_SHA K_SPA K_THA K_TPA K_REQUEST K_REPLY K_PTYPE K_HTYPE
 %token K_TTL K_DSCP K_ECN K_TOS K_LEN K_ID K_FLAGS K_FRAG K_IHL K_VER K_CSUM 
K_DF K_MF
+%token K_SPORT K_DPORT
 
 %token K_ETH
 %token K_ARP
 %token K_IP4
+%token K_UDP
 
 %token ',' '{' '}' '(' ')' '[' ']' ':' '-' '+' '*' '/' '%' '&' '|' '<' '>' '^'
 
@@ -578,6 +581,7 @@ proto
        : eth_proto { }
        | arp_proto { }
        | ip4_proto { }
+       | udp_proto { }
        ;
 
 eth_proto
@@ -688,6 +692,31 @@ ip4
        : K_IP4 { proto_add(PROTO_IP4); }
        ;
 
+udp_proto
+       : udp '(' udp_param_list ')' { }
+       ;
+
+udp_param_list
+       : { }
+       | udp_field { }
+       | udp_field delimiter udp_param_list { }
+       ;
+
+udp_field
+       : K_SPORT  skip_white '=' skip_white number
+               { proto_field_set_be16(hdr, UDP_SPORT, $5); }
+       | K_DPORT  skip_white '=' skip_white number
+               { proto_field_set_be16(hdr, UDP_DPORT, $5); }
+       | K_LEN skip_white '=' skip_white number
+               { proto_field_set_be16(hdr, UDP_LEN, $5); }
+       | K_CSUM skip_white '=' skip_white number
+               { proto_field_set_be16(hdr, UDP_CSUM, $5); }
+       ;
+
+udp
+       : K_UDP { proto_add(PROTO_UDP); }
+       ;
+
 %%
 
 static void finalize_packet(void)
-- 
2.6.3

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to