summaryrefslogtreecommitdiff
path: root/trafgen_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'trafgen_dev.c')
-rw-r--r--trafgen_dev.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/trafgen_dev.c b/trafgen_dev.c
index f65442f..489da98 100644
--- a/trafgen_dev.c
+++ b/trafgen_dev.c
@@ -242,10 +242,11 @@ static const struct dev_io_ops dev_cfg_ops = {
.close = dev_cfg_close,
};
-struct dev_io *dev_io_open(const char *name, enum dev_io_mode_t mode)
+struct dev_io *dev_io_create(const char *name, enum dev_io_mode_t mode)
{
struct dev_io *dev = xzmalloc(sizeof(struct dev_io));
+ dev->mode = mode;
if (strstr(name, ".pcap")) {
dev->name = xstrdup(name);
dev->ops = &dev_pcap_ops;
@@ -260,16 +261,20 @@ struct dev_io *dev_io_open(const char *name, enum dev_io_mode_t mode)
return NULL;
}
- if (dev->ops->open) {
- if (dev->ops->open(dev, name, mode)) {
- xfree(dev);
- return NULL;
- }
- }
-
return dev;
};
+extern void dev_io_open(struct dev_io *dev)
+{
+ bug_on(!dev);
+ bug_on(!dev->ops);
+
+ if (dev->ops->open)
+ if (dev->ops->open(dev, dev->name, dev->mode))
+ panic("Cannot open io %s mode %d\n", dev->name,
+ dev->mode);
+}
+
int dev_io_write(struct dev_io *dev, struct packet *pkt)
{
bug_on(!dev);