From 906cb247a831e37665a19e2c6b41b7cfd4c6621b Mon Sep 17 00:00:00 2001 From: Vadim Kochan Date: Thu, 1 Jun 2017 13:12:26 +0300 Subject: trafgen: proto: Allow to set field with variable length It is quite tricky to set field value with a variable length (i.e. DNS query name), to make it possible the field needs to be added to header with 'len=0' in that case there will be no any payload allocation, but only while setting the field value the packet will be appended with a real length bytes and after the field needs to be relocated to the right place. Also add 'len' parameter to *_set_bytes(...) functoins to have better control over it. Signed-off-by: Vadim Kochan Signed-off-by: Tobias Klauser --- trafgen_l2.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'trafgen_l2.c') diff --git a/trafgen_l2.c b/trafgen_l2.c index 5fc0a0d..427ff9b 100644 --- a/trafgen_l2.c +++ b/trafgen_l2.c @@ -69,7 +69,7 @@ static void pause_header_init(struct proto_hdr *hdr) struct proto_hdr *lower; lower = proto_lower_default_add(hdr, PROTO_ETH); - proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, eth_dst); + proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, eth_dst, 6); proto_header_fields_add(hdr, pause_fields, array_size(pause_fields)); proto_hdr_field_set_default_be16(hdr, PAUSE_OPCODE, 0x1); @@ -109,7 +109,7 @@ static void pfc_header_init(struct proto_hdr *hdr) struct proto_hdr *lower; lower = proto_lower_default_add(hdr, PROTO_ETH); - proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, eth_dst); + proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, eth_dst, 6); proto_header_fields_add(hdr, pfc_fields, array_size(pfc_fields)); proto_hdr_field_set_default_be16(hdr, PFC_OPCODE, 0x0101); @@ -180,7 +180,7 @@ static void arp_header_init(struct proto_hdr *hdr) if (lower->ops->id == PROTO_ETH) { const uint8_t bcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, bcast); + proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, bcast, 6); } proto_header_fields_add(hdr, arp_fields, array_size(arp_fields)); -- cgit v1.2.3-54-g00ecf