summaryrefslogtreecommitdiffstats
path: root/collectors/plugins.d/local_listeners.c
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/plugins.d/local_listeners.c')
-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);