From 50e1a2cf9bd4ac91096091284dec40a71d084f06 Mon Sep 17 00:00:00 2001 From: Nicholas Berlin Date: Wed, 2 Jul 2025 16:21:42 -0400 Subject: [PATCH 1/3] Only attempt to probe ipv6 if present --- bpf_queue.c | 9 ++++++--- quark.c | 9 ++++++--- quark.h | 1 + qutil.c | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/bpf_queue.c b/bpf_queue.c index 05788c53..1ddc9f90 100644 --- a/bpf_queue.c +++ b/bpf_queue.c @@ -650,14 +650,17 @@ bpf_queue_open1(struct quark_queue *qq, int use_fentry) if (use_fentry) { bpf_program__set_autoload(p->progs.fexit__inet_csk_accept, 1); bpf_program__set_autoload(p->progs.fexit__tcp_v4_connect, 1); - bpf_program__set_autoload(p->progs.fexit__tcp_v6_connect, 1); + if (ipv6_supported()) + bpf_program__set_autoload(p->progs.fexit__tcp_v6_connect, 1); bpf_program__set_autoload(p->progs.fentry__tcp_close, 1); } else { bpf_program__set_autoload(p->progs.kretprobe__inet_csk_accept, 1); bpf_program__set_autoload(p->progs.kprobe__tcp_v4_connect, 1); bpf_program__set_autoload(p->progs.kretprobe__tcp_v4_connect, 1); - bpf_program__set_autoload(p->progs.kprobe__tcp_v6_connect, 1); - bpf_program__set_autoload(p->progs.kretprobe__tcp_v6_connect, 1); + if (ipv6_supported()) { + bpf_program__set_autoload(p->progs.kprobe__tcp_v6_connect, 1); + bpf_program__set_autoload(p->progs.kretprobe__tcp_v6_connect, 1); + } bpf_program__set_autoload(p->progs.kprobe__tcp_close, 1); } diff --git a/quark.c b/quark.c index 09803973..b8528844 100644 --- a/quark.c +++ b/quark.c @@ -2065,9 +2065,12 @@ sproc_scrape(struct quark_queue *qq) r = sproc_net_tcp(qq, AF_INET, &socket_tmp_tree); if (r == -1) goto done; - r = sproc_net_tcp(qq, AF_INET6, &socket_tmp_tree); - if (r == -1) - goto done; + if (ipv6_supported()) + { + r = sproc_net_tcp(qq, AF_INET6, &socket_tmp_tree); + if (r == -1) + goto done; + } by_inode = &socket_tmp_tree; } diff --git a/quark.h b/quark.h index 0d5b1fcb..ffaf5129 100644 --- a/quark.h +++ b/quark.h @@ -113,6 +113,7 @@ int strtou64(u64 *, const char *, int); char *find_line(FILE *, const char *); char *find_line_p(const char *, const char *); char *load_file_nostat(int, size_t *); +int ipv6_supported(void); enum quark_verbosity_levels { QUARK_VL_SILENT, diff --git a/qutil.c b/qutil.c index 960aa9ab..1df5e42b 100644 --- a/qutil.c +++ b/qutil.c @@ -215,6 +215,21 @@ load_file_nostat(int fd, size_t *total) return (buf); } +int +ipv6_supported(void) +{ + FILE *fp; + int enabled = 0; + + fp = fopen("/proc/sys/net/ipv6", "r"); + if (fp != NULL) { + enabled = 1; + fclose(fp); + } + + return enabled; +} + void qlog_func(int pri, int do_errno, const char *func, int lineno, const char *fmt, ...) From 5d430dcdd547e44d0c43e48545bbdb328bf24f77 Mon Sep 17 00:00:00 2001 From: Nicholas Berlin Date: Mon, 7 Jul 2025 13:09:49 -0400 Subject: [PATCH 2/3] Code review updates Fix format Rework ipv6 detection to be more direct --- quark.c | 3 +-- qutil.c | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/quark.c b/quark.c index b8528844..74fb9510 100644 --- a/quark.c +++ b/quark.c @@ -2065,8 +2065,7 @@ sproc_scrape(struct quark_queue *qq) r = sproc_net_tcp(qq, AF_INET, &socket_tmp_tree); if (r == -1) goto done; - if (ipv6_supported()) - { + if (ipv6_supported()) { r = sproc_net_tcp(qq, AF_INET6, &socket_tmp_tree); if (r == -1) goto done; diff --git a/qutil.c b/qutil.c index 1df5e42b..9b68ce48 100644 --- a/qutil.c +++ b/qutil.c @@ -218,13 +218,12 @@ load_file_nostat(int fd, size_t *total) int ipv6_supported(void) { - FILE *fp; + int fd; int enabled = 0; - fp = fopen("/proc/sys/net/ipv6", "r"); - if (fp != NULL) { + if ((fd = socket(AF_INET6, SOCK_STREAM, 0)) != -1) { enabled = 1; - fclose(fp); + close(fd); } return enabled; From db3a883438a29cbb711d9e12e57515d0b690762b Mon Sep 17 00:00:00 2001 From: Christiano Haesbaert Date: Mon, 21 Jul 2025 22:12:14 +0200 Subject: [PATCH 3/3] whitespace --- quark.h | 2 +- qutil.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/quark.h b/quark.h index 2f8758f0..467392be 100644 --- a/quark.h +++ b/quark.h @@ -105,7 +105,7 @@ int strtou64(u64 *, const char *, int); char *find_line(FILE *, const char *); char *find_line_p(const char *, const char *); char *load_file_nostat(int, size_t *); -int ipv6_supported(void); +int ipv6_supported(void); enum quark_verbosity_levels { QUARK_VL_SILENT, diff --git a/qutil.c b/qutil.c index 9b68ce48..338a55b2 100644 --- a/qutil.c +++ b/qutil.c @@ -218,15 +218,15 @@ load_file_nostat(int fd, size_t *total) int ipv6_supported(void) { - int fd; - int enabled = 0; + int fd; + int enabled = 0; if ((fd = socket(AF_INET6, SOCK_STREAM, 0)) != -1) { enabled = 1; close(fd); } - return enabled; + return (enabled); } void