summaryrefslogtreecommitdiff
path: root/trafgen_dev.h
diff options
context:
space:
mode:
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 */