summaryrefslogtreecommitdiff
path: root/igmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'igmp.c')
-rw-r--r--igmp.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/igmp.c b/igmp.c
index 3cabe44..b3d7d2c 100644
--- a/igmp.c
+++ b/igmp.c
@@ -395,7 +395,13 @@ igmp_read_cb(struct cfg *cfg, struct uring_task *task, int res)
if (res < 0 || task->dead)
return;
- igmp_parse(cfg, igmp, res);
+ task->tbuf->len = res;
+
+ if (task->addr.storage.ss_family == AF_PACKET ||
+ task->addr.ll.sll_protocol == htons(ETH_P_IP))
+ igmp_parse(cfg, igmp, res);
+ else
+ fprintf(stderr, "Invalid packet type received\n");
uring_tbuf_read(cfg, &igmp->task, igmp_read_cb);
}
@@ -550,7 +556,8 @@ igmp_init(struct cfg *cfg)
uring_task_init(&igmp->task, "igmp", uring_parent(cfg), igmp_free);
uring_task_set_fd(&igmp->task, sfd);
uring_task_set_buf(&igmp->task, &igmp->tbuf);
- uring_tbuf_read(cfg, &igmp->task, igmp_read_cb);
+ igmp->task.addr.addrlen = sizeof(igmp->task.addr.ll);
+ uring_tbuf_recvmsg(cfg, &igmp->task, igmp_read_cb);
cfg->igmp = igmp;