summaryrefslogtreecommitdiff
path: root/igmp.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-22 10:50:15 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-22 10:50:15 +0200
commit31afd2aaaeb76a12e232eab0fb6a550b73948737 (patch)
tree7125a54d09904eef6c558a682cff0a7976529fad /igmp.c
parent41dc97f5d0dbcfe4399656c9aabb597f6366ca23 (diff)
Make struct cfg global and make the corresponding changes throughout
Diffstat (limited to 'igmp.c')
-rw-r--r--igmp.c45
1 files changed, 20 insertions, 25 deletions
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;