summaryrefslogtreecommitdiffstats
path: root/collectors/plugins.d/local_listeners.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-03-09 13:19:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-03-09 13:19:22 +0000
commitc21c3b0befeb46a51b6bf3758ffa30813bea0ff0 (patch)
tree9754ff1ca740f6346cf8483ec915d4054bc5da2d /collectors/plugins.d/local_listeners.c
parentAdding upstream version 1.43.2. (diff)
downloadnetdata-upstream/1.44.3.tar.xz
netdata-upstream/1.44.3.zip
Adding upstream version 1.44.3.upstream/1.44.3
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--collectors/plugins.d/local_listeners.c54
1 files changed, 44 insertions, 10 deletions
diff --git a/collectors/plugins.d/local_listeners.c b/collectors/plugins.d/local_listeners.c
index a39de7974..f2c5e688b 100644
--- a/collectors/plugins.d/local_listeners.c
+++ b/collectors/plugins.d/local_listeners.c
@@ -338,25 +338,59 @@ bool read_proc_net_x(const char *filename, PROC_NET_PROTOCOLS protocol) {
}
// ----------------------------------------------------------------------------
-
-int main(int argc __maybe_unused, char **argv __maybe_unused) {
+typedef struct {
+ bool read_tcp;
+ bool read_tcp6;
+ bool read_udp;
+ bool read_udp6;
+} CommandLineArguments;
+
+int main(int argc, char **argv) {
char path[FILENAME_MAX + 1];
hashTable_key_inode_port_value = createHashTable();
netdata_configured_host_prefix = getenv("NETDATA_HOST_PREFIX");
if(!netdata_configured_host_prefix) netdata_configured_host_prefix = "";
- snprintfz(path, FILENAME_MAX, "%s/proc/net/tcp", netdata_configured_host_prefix);
- read_proc_net_x(path, PROC_NET_PROTOCOL_TCP);
+ CommandLineArguments args = {.read_tcp = false, .read_tcp6 = false, .read_udp = false, .read_udp6 = false};
+
+ for (int i = 1; i < argc; i++) {
+ if (strcmp("tcp", argv[i]) == 0) {
+ args.read_tcp = true;
+ continue;
+ } else if (strcmp("tcp6", argv[i]) == 0) {
+ args.read_tcp6 = true;
+ continue;
+ } else if (strcmp("udp", argv[i]) == 0) {
+ args.read_udp = true;
+ continue;
+ } else if (strcmp("udp6", argv[i]) == 0) {
+ args.read_udp6 = true;
+ continue;
+ }
+ }
+
+ bool read_all_files = (!args.read_tcp && !args.read_tcp6 && !args.read_udp && !args.read_udp6);
- snprintfz(path, FILENAME_MAX, "%s/proc/net/udp", netdata_configured_host_prefix);
- read_proc_net_x(path, PROC_NET_PROTOCOL_UDP);
+ if (read_all_files || args.read_tcp) {
+ snprintfz(path, FILENAME_MAX, "%s/proc/net/tcp", netdata_configured_host_prefix);
+ read_proc_net_x(path, PROC_NET_PROTOCOL_TCP);
+ }
- snprintfz(path, FILENAME_MAX, "%s/proc/net/tcp6", netdata_configured_host_prefix);
- read_proc_net_x(path, PROC_NET_PROTOCOL_TCP6);
+ if (read_all_files || args.read_udp) {
+ snprintfz(path, FILENAME_MAX, "%s/proc/net/udp", netdata_configured_host_prefix);
+ read_proc_net_x(path, PROC_NET_PROTOCOL_UDP);
+ }
- snprintfz(path, FILENAME_MAX, "%s/proc/net/udp6", netdata_configured_host_prefix);
- read_proc_net_x(path, PROC_NET_PROTOCOL_UDP6);
+ if (read_all_files || args.read_tcp6) {
+ snprintfz(path, FILENAME_MAX, "%s/proc/net/tcp6", netdata_configured_host_prefix);
+ read_proc_net_x(path, PROC_NET_PROTOCOL_TCP6);
+ }
+
+ if (read_all_files || args.read_udp6) {
+ snprintfz(path, FILENAME_MAX, "%s/proc/net/udp6", netdata_configured_host_prefix);
+ read_proc_net_x(path, PROC_NET_PROTOCOL_UDP6);
+ }
snprintfz(path, FILENAME_MAX, "%s/proc", netdata_configured_host_prefix);
find_all_sockets_in_proc(path);