diff options
-rw-r--r-- | trafgen_proto.c | 46 | ||||
-rw-r--r-- | trafgen_proto.h | 10 |
2 files changed, 56 insertions, 0 deletions
diff --git a/trafgen_proto.c b/trafgen_proto.c index f862592..e2b80d4 100644 --- a/trafgen_proto.c +++ b/trafgen_proto.c @@ -431,6 +431,52 @@ void proto_hdr_field_set_default_dev_ipv6(struct proto_hdr *hdr, uint32_t fid) __proto_hdr_field_set_dev_ipv6(hdr, fid, true); } +void proto_field_set_u8(struct proto_field *field, uint8_t val) +{ + __proto_field_set_bytes(field, &val, false, false); +} + +uint8_t proto_field_get_u8(struct proto_field *field) +{ + uint8_t val = *__proto_field_get_bytes(field); + + return field_unmask_and_unshift(field, val); +} + +void proto_field_set_u16(struct proto_field *field, uint16_t val) +{ + __proto_field_set_bytes(field, (uint8_t *)&val, false, false); +} + +uint16_t proto_field_get_u16(struct proto_field *field) +{ + uint16_t val = *(uint16_t *)__proto_field_get_bytes(field); + + return field_unmask_and_unshift(field, be16_to_cpu(val)); +} + +void proto_field_set_u32(struct proto_field *field, uint32_t val) +{ + __proto_field_set_bytes(field, (uint8_t *)&val, false, false); +} + +uint32_t proto_field_get_u32(struct proto_field *field) +{ + uint32_t val = *(uint32_t *)__proto_field_get_bytes(field); + + return field_unmask_and_unshift(field, be32_to_cpu(val)); +} + +void proto_field_set_be16(struct proto_field *field, uint16_t val) +{ + __proto_field_set_bytes(field, (uint8_t *)&val, false, true); +} + +void proto_field_set_be32(struct proto_field *field, uint32_t val) +{ + __proto_field_set_bytes(field, (uint8_t *)&val, false, true); +} + void protos_init(const char *dev) { ctx.dev = dev; diff --git a/trafgen_proto.h b/trafgen_proto.h index 927fcb1..d4427e6 100644 --- a/trafgen_proto.h +++ b/trafgen_proto.h @@ -147,4 +147,14 @@ extern void proto_hdr_field_func_add(struct proto_hdr *hdr, uint32_t fid, extern struct proto_field *proto_hdr_field_by_id(struct proto_hdr *hdr, uint32_t fid); + +extern void proto_field_set_u8(struct proto_field *field, uint8_t val); +extern uint8_t proto_field_get_u8(struct proto_field *field); +extern void proto_field_set_u16(struct proto_field *field, uint16_t val); +extern uint16_t proto_field_get_u16(struct proto_field *field); +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); + #endif /* TRAFGEN_PROTO_H */ |