Add dynamic proto field function which can generate random value in specified range (default 0 - MAX_UINT32).
Signed-off-by: Vadim Kochan <vadi...@gmail.com> --- trafgen_proto.c | 27 +++++++++++++++++++++++++++ trafgen_proto.h | 1 + 2 files changed, 28 insertions(+) diff --git a/trafgen_proto.c b/trafgen_proto.c index 72dbad3..072cbcd 100644 --- a/trafgen_proto.c +++ b/trafgen_proto.c @@ -466,6 +466,31 @@ static void field_inc_func(struct proto_field *field) } } +static inline unsigned int field_rand(struct proto_field *field) +{ + return field->func.min + (rand() % ((field->func.max - field->func.min) + 1)); +} + +static void field_rnd_func(struct proto_field *field) +{ + if (field->len == 1) { + proto_field_set_u8(field->hdr, field->id, + (uint8_t) field_rand(field)); + } else if (field->len == 2) { + proto_field_set_be16(field->hdr, field->id, + (uint16_t) field_rand(field)); + } else if (field->len == 4) { + proto_field_set_be32(field->hdr, field->id, + (uint32_t) field_rand(field)); + } else if (field->len > 4) { + uint8_t *bytes = __proto_field_get_bytes(field); + uint32_t i; + + for (i = 0; i < field->len; i++) + bytes[i] = (uint8_t) field_rand(field); + } +} + void proto_field_func_add(struct proto_hdr *hdr, uint32_t fid, struct proto_field_func *func) { @@ -494,6 +519,8 @@ void proto_field_func_add(struct proto_hdr *hdr, uint32_t fid, } field->func.update_field = field_inc_func; + } else if (func->type & PROTO_FIELD_FUNC_RND) { + field->func.update_field = field_rnd_func; } } diff --git a/trafgen_proto.h b/trafgen_proto.h index 2b48c68..c7b5909 100644 --- a/trafgen_proto.h +++ b/trafgen_proto.h @@ -33,6 +33,7 @@ struct proto_hdr; enum proto_field_func_t { PROTO_FIELD_FUNC_INC = 1 << 0, PROTO_FIELD_FUNC_MIN = 1 << 1, + PROTO_FIELD_FUNC_RND = 1 << 2, }; struct proto_field_func { -- 2.9.2 -- 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.