From 78c13b71e196a107eaa4ec00bb40b062929a6a88 Mon Sep 17 00:00:00 2001 From: Vadim Kochan Date: Wed, 7 Jun 2017 22:24:52 +0300 Subject: trafgen: Allow to generate packets to output pcap file Add trafgen_dev.c module which provides generic way of reading and writing packets to/from networking device or a pcap file. Also allow to handle output pcap file via '-o, --out, --dev' option. It might be useful in future for testing some link protocols which is not easy to capture (e.g. wlan packets) w/o having some special setup. Signed-off-by: Vadim Kochan [tklauser: fix whitespace issues] Signed-off-by: Tobias Klauser --- trafgen_dev.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 trafgen_dev.h (limited to 'trafgen_dev.h') diff --git a/trafgen_dev.h b/trafgen_dev.h new file mode 100644 index 0000000..720c630 --- /dev/null +++ b/trafgen_dev.h @@ -0,0 +1,49 @@ +#ifndef TRAFGEN_DEV_H +#define TRAFGEN_DEV_H + +#include +#include + +#include "pcap_io.h" + +enum dev_io_mode_t { + DEV_IO_IN = 1 << 0, + DEV_IO_OUT = 1 << 1, +}; + +struct dev_io_ops; + +struct dev_io { + int fd; + char *name; + int ifindex; + int dev_type; + uint32_t link_type; + uint32_t pcap_magic; + bool is_initialized; + enum pcap_mode pcap_mode; + + const struct pcap_file_ops *pcap_ops; + const struct dev_io_ops *ops; +}; + +struct dev_io_ops { + int(*open) (struct dev_io *dev, const char *name, enum dev_io_mode_t mode); + int(*write) (struct dev_io *dev, const uint8_t *buf, size_t len); + int(*read) (struct dev_io *dev, uint8_t *buf, size_t len, struct timespec *tstamp); + void(*close) (struct dev_io *dev); +}; + +extern struct dev_io *dev_io_open(const char *name, enum dev_io_mode_t mode); +extern int dev_io_write(struct dev_io *dev, const uint8_t *buf, size_t len); +extern int dev_io_read(struct dev_io *dev, uint8_t *buf, size_t len, + struct timespec *tstamp); +extern int dev_io_ifindex_get(struct dev_io *dev); +extern int dev_io_fd_get(struct dev_io *dev); +extern const char *dev_io_name_get(struct dev_io *dev); +extern void dev_io_link_type_set(struct dev_io *dev, int link_type); +extern bool dev_io_is_netdev(struct dev_io *dev); +extern bool dev_io_is_pcap(struct dev_io *dev); +extern void dev_io_close(struct dev_io *dev); + +#endif /* TRAFGEN_DEV_H */ -- cgit v1.2.3-54-g00ecf