summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trafgen.84
-rw-r--r--trafgen_l2.c4
-rw-r--r--trafgen_l2.h2
-rw-r--r--trafgen_l3.c3
-rw-r--r--trafgen_lexer.l9
-rw-r--r--trafgen_parser.y8
6 files changed, 18 insertions, 12 deletions
diff --git a/trafgen.8 b/trafgen.8
index cd52854..48a252c 100644
--- a/trafgen.8
+++ b/trafgen.8
@@ -294,7 +294,7 @@ Supported protocol headers:
.sp
.I Ethernet
:
-.B eth(da=<mac>, sa=<mac>, prot=<number>)
+.B eth(da=<mac>, sa=<mac>, type=<number>)
.sp
.in +4
.B da|daddr
@@ -303,7 +303,7 @@ Supported protocol headers:
.B sa|saddr
- Source MAC address (default: device MAC address)
.sp
-.B prot|proto
+.B etype|type|prot|proto
- Ethernet type (default: 0)
.in -4
diff --git a/trafgen_l2.c b/trafgen_l2.c
index 4bbeea1..e881b06 100644
--- a/trafgen_l2.c
+++ b/trafgen_l2.c
@@ -13,7 +13,7 @@
struct proto_field eth_fields[] = {
{ .id = ETH_DST_ADDR, .len = 6, },
{ .id = ETH_SRC_ADDR, .len = 6, .offset = 6 },
- { .id = ETH_PROTO_ID, .len = 2, .offset = 12 },
+ { .id = ETH_TYPE, .len = 2, .offset = 12 },
};
static void eth_header_init(struct proto_hdr *hdr)
@@ -53,7 +53,7 @@ static void arp_header_init(struct proto_hdr *hdr)
uint8_t bcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
proto_field_set_default_bytes(lower, ETH_DST_ADDR, bcast);
- proto_field_set_default_be16(lower, ETH_PROTO_ID, ETH_P_ARP);
+ proto_field_set_default_be16(lower, ETH_TYPE, ETH_P_ARP);
}
proto_header_fields_add(hdr, arp_fields, array_size(arp_fields));
diff --git a/trafgen_l2.h b/trafgen_l2.h
index 7643bc3..38727ec 100644
--- a/trafgen_l2.h
+++ b/trafgen_l2.h
@@ -4,7 +4,7 @@
enum eth_field {
ETH_DST_ADDR,
ETH_SRC_ADDR,
- ETH_PROTO_ID,
+ ETH_TYPE,
};
enum arp_field {
diff --git a/trafgen_l3.c b/trafgen_l3.c
index dd45395..1771908 100644
--- a/trafgen_l3.c
+++ b/trafgen_l3.c
@@ -38,9 +38,8 @@ static void ipv4_header_init(struct proto_hdr *hdr)
proto_lower_default_add(PROTO_ETH);
lower = proto_current_header();
-
if (lower->id == PROTO_ETH)
- proto_field_set_default_be16(lower, ETH_PROTO_ID, ETH_P_IP);
+ proto_field_set_default_be16(lower, ETH_TYPE, ETH_P_IP);
else if (lower->id == PROTO_IP4)
proto_field_set_default_u8(lower, IP4_PROTO, IPPROTO_IPIP);
diff --git a/trafgen_lexer.l b/trafgen_lexer.l
index 56011a3..a661922 100644
--- a/trafgen_lexer.l
+++ b/trafgen_lexer.l
@@ -105,10 +105,15 @@ ip_addr ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
"const32"|"c32" { return K_CONST32; }
"const64"|"c64" { return K_CONST64; }
+ /* IPv4 proto field (must be before more specific rule for K_ETYPE) */
+"prot"[o]? { return K_PROT; }
+
+ /* Ethernet */
"daddr"|"da" { return K_DADDR; }
"saddr"|"sa" { return K_SADDR; }
-"prot"[o]? { return K_PROT; }
+[e]?"type"|"prot"[o]? { return K_ETYPE; }
+ /* ARP */
"sha"|"smac" { return K_SHA; }
"spa"|"sip" { return K_SPA; }
"tha"|"tmac" { return K_THA; }
@@ -119,6 +124,7 @@ ip_addr ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
"htype" { return K_HTYPE; }
"ptype" { return K_PTYPE; }
+ /* IPv4 */
"ihl" { return K_IHL; }
"ver"|"version" { return K_VER; }
"ttl" { return K_TTL; }
@@ -133,6 +139,7 @@ ip_addr ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
"df" { return K_DF; }
"mf" { return K_MF; }
+ /* UDP */
"sp"|"sport" { return K_SPORT; }
"dp"|"dport" { return K_DPORT; }
diff --git a/trafgen_parser.y b/trafgen_parser.y
index 9ec09b1..71f88d8 100644
--- a/trafgen_parser.y
+++ b/trafgen_parser.y
@@ -350,9 +350,9 @@ static void proto_add(enum proto_id pid)
%token K_COMMENT K_FILL K_RND K_SEQINC K_SEQDEC K_DRND K_DINC K_DDEC K_WHITE
%token K_CPU K_CSUMIP K_CSUMUDP K_CSUMTCP K_CSUMUDP6 K_CSUMTCP6 K_CONST8 K_CONST16 K_CONST32 K_CONST64
-%token K_DADDR K_SADDR K_PROT
+%token K_DADDR K_SADDR K_ETYPE
%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_PROT 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
@@ -603,8 +603,8 @@ eth_field
{ proto_field_set_bytes(hdr, ETH_DST_ADDR, $5); }
| K_SADDR skip_white '=' skip_white mac
{ proto_field_set_bytes(hdr, ETH_SRC_ADDR, $5); }
- | K_PROT skip_white '=' skip_white number
- { proto_field_set_be16(hdr, ETH_PROTO_ID, $5); }
+ | K_ETYPE skip_white '=' skip_white number
+ { proto_field_set_be16(hdr, ETH_TYPE, $5); }
;
arp_proto