From cc1c8b3853fdab23a2a9a0001a94d7908edb6a41 Mon Sep 17 00:00:00 2001 From: Amin Ben Romdhane <amin.benromdhane@iopsys.eu> Date: Thu, 29 Aug 2024 14:58:23 +0200 Subject: [PATCH] IP.ActivePort: Stop browsing when a specific instance is required --- src/ip.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ip.c b/src/ip.c index 565ae98..2be80d5 100644 --- a/src/ip.c +++ b/src/ip.c @@ -68,14 +68,16 @@ static void parse_tcp_line(const char* line, int is_ipv6, ActivePort* port) port->state = state; } -static void browse_ip_port(struct dmctx *dmctx, DMNODE *parent_node, bool is_ipv6, const char *proc_path, int *id, char *inst) +static bool browse_ip_port(struct dmctx *dmctx, DMNODE *parent_node, bool is_ipv6, const char *proc_path, int *id) { + bool is_instance = false; + if (proc_path == NULL || DM_STRLEN(proc_path) == 0) - return; + return is_instance; FILE* fp = fopen(proc_path, "r"); if (fp == NULL) { - return; + return is_instance; } char line[256] = {0}; @@ -93,13 +95,17 @@ static void browse_ip_port(struct dmctx *dmctx, DMNODE *parent_node, bool is_ipv continue; curr_data.additional_data = (void *)(&port); - inst = handle_instance_without_section(dmctx, parent_node, ++(*id)); + char *inst = handle_instance_without_section(dmctx, parent_node, ++(*id)); - if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_data, inst) == DM_STOP) + if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_data, inst) == DM_STOP) { + is_instance = true; break; + } } fclose(fp); + + return is_instance; } static int init_interface_ip_args(struct dm_data *args, struct uci_section *iface_sec, struct uci_section *dmmap_sec, json_object *json_obj) @@ -899,11 +905,14 @@ end: static int browseIPActivePortInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) { - char *inst = NULL; + bool is_instance = false; int id = 0; - browse_ip_port(dmctx, parent_node, 0, "/proc/net/tcp", &id, inst); - browse_ip_port(dmctx, parent_node, 1, "/proc/net/tcp6", &id, inst); + is_instance = browse_ip_port(dmctx, parent_node, 0, "/proc/net/tcp", &id); + if (is_instance) + return 0; + + browse_ip_port(dmctx, parent_node, 1, "/proc/net/tcp6", &id); return 0; } -- GitLab