Add helper function for easy set device's MAC address to proto field which may be used by Ethernet & ARP protos generation.
Signed-off-by: Vadim Kochan <vadi...@gmail.com> --- trafgen_proto.c | 31 +++++++++++++++++++++++++++++++ trafgen_proto.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/trafgen_proto.c b/trafgen_proto.c index 787da7a..69579fa 100644 --- a/trafgen_proto.c +++ b/trafgen_proto.c @@ -5,7 +5,9 @@ #include <stddef.h> #include <string.h> +#include <linux/if_ether.h> +#include "dev.h" #include "xmalloc.h" #include "trafgen_conf.h" #include "trafgen_proto.h" @@ -294,6 +296,35 @@ void proto_field_set_default_be32(struct proto_hdr *hdr, uint32_t fid, uint32_t __proto_field_set_bytes(hdr, fid, (uint8_t *)&val, true, true); } +static void __proto_field_set_dev_mac(struct proto_hdr *hdr, uint32_t fid, + bool is_default) +{ + uint8_t mac[ETH_ALEN]; + int ret; + + if (proto_field_is_set(hdr, fid)) + return; + + if (!hdr->ctx->dev) + panic("Device is not specified\n"); + + ret = device_hw_address(hdr->ctx->dev, mac); + if (ret < 0) + panic("Could not get device hw adress\n"); + + __proto_field_set_bytes(hdr, fid, mac, is_default, false); +} + +void proto_field_set_dev_mac(struct proto_hdr *hdr, uint32_t fid) +{ + __proto_field_set_dev_mac(hdr, fid, false); +} + +void proto_field_set_default_dev_mac(struct proto_hdr *hdr, uint32_t fid) +{ + __proto_field_set_dev_mac(hdr, fid, true); +} + void protos_init(char *dev) { struct proto_hdr *p; diff --git a/trafgen_proto.h b/trafgen_proto.h index c727b61..4041c27 100644 --- a/trafgen_proto.h +++ b/trafgen_proto.h @@ -93,4 +93,7 @@ extern void proto_field_set_default_be16(struct proto_hdr *hdr, uint32_t fid, extern void proto_field_set_default_be32(struct proto_hdr *hdr, uint32_t fid, uint32_t val); +extern void proto_field_set_dev_mac(struct proto_hdr *hdr, uint32_t fid); +extern void proto_field_set_default_dev_mac(struct proto_hdr *hdr, uint32_t fid); + #endif /* TRAFGEN_PROTO_I_H */ -- 2.6.3 -- 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.