summaryrefslogtreecommitdiff
path: root/trafgen_dev.h
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2017-09-13 17:54:52 +0200
committerTobias Klauser <tklauser@distanz.ch>2017-09-15 08:41:02 +0200
commit443d97581b9b715b8f40ae35fdeaf272caa296a4 (patch)
treeb558429433a627ec9c03f348bcdd668fa4568686 /trafgen_dev.h
parent285ac73006e2e4af6e0e4cb0eaa178b13cdcba8f (diff)
trafgen: fix packet socket initialization with multiple CPUs
The commit 78c13b71e196 ("trafgen: Allow to generate packets to output pcap file") introduced a regression when output is a network device and multiple CPU are in use: the packet socket is created before fork() and thus the socket is shared among all the processes: all of them except the first will fail while setting the tx_ring. Fix it splitting the io open() helper in a create() op, called before forking, and the open() op called by each process. Fixes: 78c13b71e196 ("trafgen: Allow to generate packets to output pcap file") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'trafgen_dev.h')
-rw-r--r--trafgen_dev.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/trafgen_dev.h b/trafgen_dev.h
index 80086d7..bcb88f3 100644
--- a/trafgen_dev.h
+++ b/trafgen_dev.h
@@ -24,6 +24,7 @@ struct dev_io {
uint32_t pcap_magic;
bool is_initialized;
enum pcap_mode pcap_mode;
+ enum dev_io_mode_t mode;
size_t buf_len;
uint8_t *buf;
@@ -39,7 +40,8 @@ struct dev_io_ops {
void(*close) (struct dev_io *dev);
};
-extern struct dev_io *dev_io_open(const char *name, enum dev_io_mode_t mode);
+extern struct dev_io *dev_io_create(const char *name, enum dev_io_mode_t mode);
+extern void dev_io_open(struct dev_io *dev);
extern int dev_io_write(struct dev_io *dev, struct packet *pkt);
extern struct packet *dev_io_read(struct dev_io *dev);
extern int dev_io_ifindex_get(struct dev_io *dev);