diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-16 10:36:09 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-16 10:36:09 +0200 |
commit | 1ec5e43c9aef58e134f570946e280956db4ef189 (patch) | |
tree | 484d14d3ea4b4470bf847f0c34bcc18dca22b064 /igmp.c | |
parent | e5d833027f7fcdef4d77d26b31b5907873331d0e (diff) |
Implement and use recvmsg in igmp
Diffstat (limited to 'igmp.c')
-rw-r--r-- | igmp.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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; |