From 539c23695a086fd3d628da7b0f0de764726cfa09 Mon Sep 17 00:00:00 2001
From: Vivek Kumar Dutta <vivek.dutta@iopsys.eu>
Date: Thu, 28 Nov 2024 18:14:50 +0530
Subject: [PATCH] Updated logic for IP Interface status
---
src/ip.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/ip.c b/src/ip.c
index 40953fb..49defbe 100644
--- a/src/ip.c
+++ b/src/ip.c
@@ -1257,10 +1257,34 @@ static int set_IPInterface_ULAEnable(char *refparam, struct dmctx *ctx, void *da
return 0;
}
+// ifstatus = Down and devstatus = Down => Status=Down
+// ifstatus = Down and devstatus = Up => Status=Dormant
+// ifstatus = Up and devstatus = Up => Status=Up
+// ifstatus not available => Status=Unknown
+// devstatus != Up => Status=LowerLayerDown
static int get_IPInterface_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
- char *device = get_device(section_name(((struct dm_data *)data)->config_section));
- return get_net_device_status(device, value);
+ json_object *res = NULL;
+ char *if_name = section_name(((struct dm_data *)data)->config_section);
+ char *device = get_device(if_name);
+ char *devstatus = NULL;
+ bool ifstatus = false;
+
+ dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", if_name, String}}, 1, &res);
+ DM_ASSERT(res, *value = dmstrdup("Unknown"));
+ string_to_bool(dmjson_get_value(res, 1, "up"), &ifstatus);
+
+ get_net_device_status(device, &devstatus);
+
+ if ((ifstatus == false) && (DM_STRNCMP(devstatus, "Up", 2) == 0)) {
+ *value = dmstrdup("Dormant");
+ } else if (DM_STRNCMP(devstatus, "Up", 2) != 0) {
+ *value = dmstrdup("LowerLayerDown");
+ } else {
+ *value = devstatus;
+ }
+
+ return 0;
}
/*#Device.IP.Interface.{i}.Alias!UCI:dmmap_network/interface,@i-1/ip_int_alias*/
--
GitLab