diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2017-06-07 22:24:52 +0300 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2017-06-09 15:50:06 +0200 |
commit | 78c13b71e196a107eaa4ec00bb40b062929a6a88 (patch) | |
tree | 39598c8a9bd49e1a3d13247c288c04ea0778d69d /trafgen_dev.h | |
parent | 322deaf9bae5dc87b174c4369e7d00b6bb0bf641 (diff) |
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 <vadim4j@gmail.com>
[tklauser: fix whitespace issues]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'trafgen_dev.h')
-rw-r--r-- | trafgen_dev.h | 49 |
1 files changed, 49 insertions, 0 deletions
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 <stdbool.h> +#include <inttypes.h> + +#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 */ |