From 31afd2aaaeb76a12e232eab0fb6a550b73948737 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Mon, 22 Jun 2020 10:50:15 +0200 Subject: Make struct cfg global and make the corresponding changes throughout --- igmp.c | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) (limited to 'igmp.c') diff --git a/igmp.c b/igmp.c index 01a4dc4..cebab40 100644 --- a/igmp.c +++ b/igmp.c @@ -183,7 +183,7 @@ igmp_match() } static void -igmp_parse(struct cfg *cfg, struct igmp *igmp) +igmp_parse(struct igmp *igmp) { char *buf; size_t len; @@ -191,7 +191,7 @@ igmp_parse(struct cfg *cfg, struct igmp *igmp) size_t body_len; union igmp_msg *igmp_msg; - assert_return(cfg && igmp); + assert_return(igmp); buf = igmp->task.tbuf->buf; len = igmp->task.tbuf->len; @@ -396,11 +396,11 @@ igmp_parse(struct cfg *cfg, struct igmp *igmp) } static void -igmp_read_cb(struct cfg *cfg, struct uring_task *task, int res) +igmp_read_cb(struct uring_task *task, int res) { struct igmp *igmp = container_of(task, struct igmp, task); - assert_return(cfg && task); + assert_return(task); assert_task_alive(DBG_IGMP, task); debug(DBG_IGMP, "task %p, igmp %p, res %i", task, igmp, res); @@ -413,11 +413,11 @@ igmp_read_cb(struct cfg *cfg, struct uring_task *task, int res) if (task->saddr.storage.ss_family == AF_PACKET || task->saddr.ll.sll_protocol == htons(ETH_P_IP)) - igmp_parse(cfg, igmp); + igmp_parse(igmp); else debug(DBG_IGMP, "invalid packet type received"); - uring_tbuf_read(cfg, &igmp->task, igmp_read_cb); + uring_tbuf_read(&igmp->task, igmp_read_cb); } static void @@ -431,26 +431,25 @@ igmp_free(struct uring_task *task) } void -igmp_refdump(struct igmp *igmp) +igmp_refdump() { - assert_return_silent(igmp); + assert_return_silent(cfg->igmp); - uring_task_refdump(&igmp->task); + uring_task_refdump(&cfg->igmp->task); } void -igmp_delete(struct cfg *cfg) +igmp_delete() { - assert_return(cfg); assert_return_silent(cfg->igmp); debug(DBG_IGMP, "closing fd %i", cfg->igmp->task.fd); - uring_task_destroy(cfg, &cfg->igmp->task); + uring_task_destroy(&cfg->igmp->task); cfg->igmp = NULL; } void -igmp_init(struct cfg *cfg) +igmp_init() { static const struct sock_filter filter[] = { BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0), /* A <- packet length */ @@ -506,13 +505,13 @@ igmp_init(struct cfg *cfg) int sfd; int opt; - assert_return(cfg); - if (!cfg->do_igmp) { debug(DBG_IGMP, "igmp snooping disabled"); return; } + assert_return(!cfg->igmp); + igmp = zmalloc(sizeof(*igmp)); if (!igmp) return; @@ -546,15 +545,11 @@ igmp_init(struct cfg *cfg) r = snprintf(ifreq.ifr_name, sizeof(ifreq.ifr_name), "%s", cfg->igmp_iface); - if (r < 0 || r >= sizeof(ifreq.ifr_name)) { - error("invalid interface name"); - goto error; - } + if (r < 0 || r >= sizeof(ifreq.ifr_name)) + die("invalid interface name: %s", cfg->igmp_iface); - if (ioctl(sfd, SIOCGIFINDEX, &ifreq) < 0) { - error("ioctl: %m"); - goto error; - } + if (ioctl(sfd, SIOCGIFINDEX, &ifreq) < 0) + die("ioctl: %m"); debug(DBG_IGMP, "using interface %s (%i)", cfg->igmp_iface, ifreq.ifr_ifindex); @@ -578,11 +573,11 @@ igmp_init(struct cfg *cfg) } debug(DBG_IGMP, "init successful, using fd %i", sfd); - uring_task_init(cfg, &igmp->task, "igmp", uring_parent(cfg), igmp_free); + uring_task_init(&igmp->task, "igmp", uring_parent(), igmp_free); uring_task_set_fd(&igmp->task, sfd); uring_task_set_buf(&igmp->task, &igmp->tbuf); igmp->task.saddr.addrlen = sizeof(igmp->task.saddr.ll); - uring_tbuf_recvmsg(cfg, &igmp->task, igmp_read_cb); + uring_tbuf_recvmsg(&igmp->task, igmp_read_cb); cfg->igmp = igmp; -- cgit v1.2.3