From 31b37c09e4fe1e360e1f4d136d37e79d8af5ce91 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Tue, 16 Jun 2020 23:42:32 +0200 Subject: Some more debugmsg cleanups --- igmp.c | 54 ++++++++++++++++++++++++++++++------------------------ main.c | 8 ++++---- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/igmp.c b/igmp.c index 784ed2f..3795060 100644 --- a/igmp.c +++ b/igmp.c @@ -4,11 +4,13 @@ #include #include #include +#include #include #include #include #include #include +#include /* Remove later */ #include @@ -491,6 +493,11 @@ igmp_init(struct cfg *cfg) int sfd; int opt; + if (!cfg->do_igmp) { + debug(DBG_IGMP, "igmp snooping disabled\n"); + return; + } + igmp = zmalloc(sizeof(*igmp)); if (!igmp) return; @@ -502,44 +509,42 @@ igmp_init(struct cfg *cfg) sfd = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC, htons(ETH_P_ALL)); if (sfd < 0) { if (errno == EACCES || errno == EPERM) - verbose("permission denied\n"); + error("permission denied\n"); else - error("socket: %m (%i)\n", errno); + error("%m\n"); goto out_free; } if (setsockopt(sfd, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog)) < 0) - perrordie("igmp setsockopt(SO_ATTACH_FILTER): %m"); + die("setsockopt(SO_ATTACH_FILTER): %m"); if (setsockopt(sfd, SOL_SOCKET, SO_LOCK_FILTER, &opt, sizeof(opt)) < 0) - perrordie("igmp setsockopt(SO_LOCK_FILTER): %m"); + die("setsockopt(SO_LOCK_FILTER): %m"); - /* - struct ifreq ifreq = { - .ifr_name = "enp8s0", - .ifr_ifindex = 0, - }; + if (cfg->igmp_iface) { + struct ifreq ifreq; + int r; - strcpy(ifreq.ifr_name, "enp8s0"); + r = snprintf(ifreq.ifr_name, sizeof(ifreq.ifr_name), + "%s", cfg->igmp_iface); + if (r < 0 || r >= sizeof(ifreq.ifr_name)) + die("invalid interface name"); - if (ioctl(sfd, SIOCGIFINDEX, &ifreq) < 0) { - perror("ioctl"); - exit(EXIT_FAILURE); - } + if (ioctl(sfd, SIOCGIFINDEX, &ifreq) < 0) + perrordie("ioctl"); - fprintf(stderr, "Ifindex = %i\n", ifreq.ifr_ifindex); + debug(DBG_IGMP, "using interface %s (%i)\n", + cfg->igmp_iface, ifreq.ifr_ifindex); - struct packet_mreq mreq = { - .mr_ifindex = ifreq.ifr_ifindex, - .mr_type = PACKET_MR_ALLMULTI - }; + struct packet_mreq mreq = { + .mr_ifindex = ifreq.ifr_ifindex, + .mr_type = PACKET_MR_ALLMULTI + }; - r = setsockopt(sfd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); - if (r < 0) { - perror("setsockopt"); - exit(EXIT_FAILURE); + if (setsockopt(sfd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, + &mreq, sizeof(mreq)) < 0) + die("setsockopt(PACKET_ADD_MEMBERSHIP): %m"); } - */ /* can't set .sll_protocol to htons(ETH_P_IP), see comment above */ if (bind(sfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { @@ -547,6 +552,7 @@ igmp_init(struct cfg *cfg) goto out_fd; } + debug(DBG_IGMP, "init successful, using fd %i\n", sfd); 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); diff --git a/main.c b/main.c index 9915cf2..0620476 100644 --- a/main.c +++ b/main.c @@ -354,11 +354,11 @@ signalfd_read(struct cfg *cfg, struct uring_task *task, int res) die("error in signalfd (%i)", res); if (sev->buf < 1000) { - info("Got a signal to quit\n"); + verbose("got a signal to quit\n"); sd_notifyf(0, "STOPPING=1\nSTATUS=Received signal, exiting"); exit(EXIT_SUCCESS); } else { - info("Got a signal to dump tree\n"); + verbose("got a signal to dump tree\n"); sd_notifyf(0, "STOPPING=1\nSTATUS=Received signal, exiting"); dump_tree(cfg); uring_task_put(cfg, &sev->task); @@ -495,8 +495,8 @@ main(int argc, char **argv) server_count, (unsigned long)getpid()); - info("%s: started, %u server configurations loaded\n", - argv[0], server_count); + info("mcproxy started, %u server configurations loaded\n", + server_count); uring_event_loop(cfg); -- cgit v1.2.3