Use proto_field_set_xxx(field, ...) instead of proto_hdr_field_set_xxx(hdr, fid, ...) to be more generic and do not depent on 'hdr' variable.
Signed-off-by: Vadim Kochan <vadi...@gmail.com> --- trafgen_parser.y | 13 ++++++------- trafgen_proto.c | 5 +++++ trafgen_proto.h | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/trafgen_parser.y b/trafgen_parser.y index 8e1884e..4abf778 100644 --- a/trafgen_parser.y +++ b/trafgen_parser.y @@ -427,20 +427,19 @@ static void proto_field_expr_eval(void) if (field_expr.type & FIELD_EXPR_NUMB) { if (field->len == 1) - proto_hdr_field_set_u8(hdr, field->id, field_expr.val.number); + proto_field_set_u8(field, field_expr.val.number); else if (field->len == 2) - proto_hdr_field_set_be16(hdr, field->id, field_expr.val.number); + proto_field_set_be16(field, field_expr.val.number); else if (field->len == 4) - proto_hdr_field_set_be32(hdr, field->id, field_expr.val.number); + proto_field_set_be32(field, field_expr.val.number); else panic("Invalid value length %zu, can be 1,2 or 4\n", field->len); } else if (field_expr.type & FIELD_EXPR_MAC) { - proto_hdr_field_set_bytes(hdr, field->id, field_expr.val.mac, 6); + proto_field_set_bytes(field, field_expr.val.mac, 6); } else if (field_expr.type & FIELD_EXPR_IP4_ADDR) { - proto_hdr_field_set_u32(hdr, field->id, field_expr.val.ip4_addr.s_addr); + proto_field_set_u32(field, field_expr.val.ip4_addr.s_addr); } else if (field_expr.type & FIELD_EXPR_IP6_ADDR) { - proto_hdr_field_set_bytes(hdr, field->id, - (uint8_t *)&field_expr.val.ip6_addr.s6_addr, 16); + proto_field_set_bytes(field, (uint8_t *)&field_expr.val.ip6_addr.s6_addr, 16); } else if ((field_expr.type & FIELD_EXPR_INC) || (field_expr.type & FIELD_EXPR_RND)) { diff --git a/trafgen_proto.c b/trafgen_proto.c index 83a6a7e..e300e7f 100644 --- a/trafgen_proto.c +++ b/trafgen_proto.c @@ -527,6 +527,11 @@ void proto_field_set_be32(struct proto_field *field, uint32_t val) __proto_field_set_bytes(field, (uint8_t *)&val, 4, false, true); } +void proto_field_set_bytes(struct proto_field *field, const uint8_t *bytes, size_t len) +{ + __proto_field_set_bytes(field, bytes, len, false, false); +} + void protos_init(const char *dev) { ctx.dev = dev; diff --git a/trafgen_proto.h b/trafgen_proto.h index fa41d3b..d9a6a24 100644 --- a/trafgen_proto.h +++ b/trafgen_proto.h @@ -155,6 +155,7 @@ extern void proto_field_set_u32(struct proto_field *field, uint32_t val); extern uint32_t proto_field_get_u32(struct proto_field *field); extern void proto_field_set_be16(struct proto_field *field, uint16_t val); extern void proto_field_set_be32(struct proto_field *field, uint32_t val); +extern void proto_field_set_bytes(struct proto_field *field, const uint8_t *bytes, size_t len); extern void proto_field_func_add(struct proto_field *field, struct proto_field_func *func); -- 2.11.0 -- 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.