summaryrefslogtreecommitdiff
path: root/trafgen_dev.h
diff options
context:
space:
mode:
authorVadim Kochan <vadim4j@gmail.com>2017-06-07 22:24:52 +0300
committerTobias Klauser <tklauser@distanz.ch>2017-06-09 15:50:06 +0200
commit78c13b71e196a107eaa4ec00bb40b062929a6a88 (patch)
tree39598c8a9bd49e1a3d13247c288c04ea0778d69d /trafgen_dev.h
parent322deaf9bae5dc87b174c4369e7d00b6bb0bf641 (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.h49
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 */