summaryrefslogtreecommitdiff
path: root/src/ipcpd
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2020-01-25 12:38:38 +0100
committerSander Vrijders <sander@ouroboros.rocks>2020-01-25 16:02:21 +0100
commit524445d9c625b05334818e2d900cf79d1ced5aba (patch)
tree5f71ebb4a2f9c984a5bf07c5b592528a55464460 /src/ipcpd
parenta3e14d1c76d15cf150db4442c3d2fecc604d5e8e (diff)
downloadouroboros-524445d9c625b05334818e2d900cf79d1ced5aba.zip
ouroboros-524445d9c625b05334818e2d900cf79d1ced5aba.tar.gz
ipcpd: Filter fqueue events in packet handlers
The eth, udp and local IPCPs were not filtering out the event types from the flow, causing some reads when there are no packets in the queue. The types are now also organized as flags so they can be filtered more quickly if needed. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd')
-rw-r--r--src/ipcpd/eth/eth.c3
-rw-r--r--src/ipcpd/local/main.c3
-rw-r--r--src/ipcpd/udp/main.c4
3 files changed, 10 insertions, 0 deletions
diff --git a/src/ipcpd/eth/eth.c b/src/ipcpd/eth/eth.c
index 9cc1184..daeb9be 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 28a7c32..009a3fd 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 a444e95..1f0bebf 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;