diff options
-rw-r--r-- | include/ouroboros/fqueue.h | 10 | ||||
-rw-r--r-- | src/ipcpd/eth/eth.c | 3 | ||||
-rw-r--r-- | src/ipcpd/local/main.c | 3 | ||||
-rw-r--r-- | src/ipcpd/udp/main.c | 4 |
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; |