summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ouroboros/fqueue.h10
-rw-r--r--src/ipcpd/eth/eth.c3
-rw-r--r--src/ipcpd/local/main.c3
-rw-r--r--src/ipcpd/udp/main.c4
4 files changed, 15 insertions, 5 deletions
diff --git a/include/ouroboros/fqueue.h b/include/ouroboros/fqueue.h
index 793ff250..797e3af6 100644
--- a/include/ouroboros/fqueue.h
+++ b/include/ouroboros/fqueue.h
@@ -29,11 +29,11 @@
#include <time.h>
enum fqtype {
- FLOW_PKT = 0,
- FLOW_DOWN,
- FLOW_UP,
- FLOW_ALLOC,
- FLOW_DEALLOC
+ FLOW_PKT = (1 << 0),
+ FLOW_DOWN = (1 << 1),
+ FLOW_UP = (1 << 2),
+ FLOW_ALLOC = (1 << 3),
+ FLOW_DEALLOC = (1 << 4)
};
struct flow_set;
diff --git a/src/ipcpd/eth/eth.c b/src/ipcpd/eth/eth.c
index 9cc11848..daeb9be2 100644
--- a/src/ipcpd/eth/eth.c
+++ b/src/ipcpd/eth/eth.c
@@ -1035,6 +1035,9 @@ static void * eth_ipcp_packet_writer(void * o)
while (true) {
fevent(eth_data.np1_flows, fq, NULL);
while ((fd = fqueue_next(fq)) >= 0) {
+ if (fqueue_type(fq) != FLOW_PKT)
+ continue
+;
if (ipcp_flow_read(fd, &sdb)) {
log_dbg("Bad read from fd %d.", fd);
continue;
diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c
index 28a7c32b..009a3fde 100644
--- a/src/ipcpd/local/main.c
+++ b/src/ipcpd/local/main.c
@@ -110,6 +110,9 @@ static void * ipcp_local_packet_loop(void * o)
fevent(local_data.flows, local_data.fq, NULL);
while ((fd = fqueue_next(local_data.fq)) >= 0) {
+ if (fqueue_type(local_data.fq) != FLOW_PKT)
+ continue;
+
idx = local_flow_read(fd);
if (idx < 0)
continue;
diff --git a/src/ipcpd/udp/main.c b/src/ipcpd/udp/main.c
index a444e956..1f0bebf0 100644
--- a/src/ipcpd/udp/main.c
+++ b/src/ipcpd/udp/main.c
@@ -520,6 +520,10 @@ static void * ipcp_udp_packet_writer(void * o)
struct shm_du_buff * sdb;
uint8_t * buf;
uint16_t len;
+
+ if (fqueue_type(fq) != FLOW_PKT)
+ continue;
+
if (ipcp_flow_read(fd, &sdb)) {
log_dbg("Bad read from fd %d.", fd);
continue;