From 56829e15bdce24a3eb4f8dfa43355d4b25632c48 Mon Sep 17 00:00:00 2001
From: Amin Ben Romdhane <amin.benromdhane@iopsys.eu>
Date: Fri, 24 May 2024 14:27:24 +0200
Subject: [PATCH] Data Model: Align with new reference APIs

---
 bbf_plugin/qos_bbf.c | 49 ++++++++++----------------------------------
 1 file changed, 11 insertions(+), 38 deletions(-)

diff --git a/bbf_plugin/qos_bbf.c b/bbf_plugin/qos_bbf.c
index 97d07f8..542a38f 100644
--- a/bbf_plugin/qos_bbf.c
+++ b/bbf_plugin/qos_bbf.c
@@ -381,30 +381,15 @@ static int get_QInterface(char *refparam, struct dmctx *ctx, void *data, char *i
 {
 	char *linker = NULL;
 	char buf[4096] = {0};
-	int pos = 0;
 
 	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "ifname", &linker);
 	if (DM_STRLEN(linker) == 0)
 		return 0;
 
-	bbf_get_reference_param("Device.IP.Interface.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	bbf_get_reference_param("Device.PPP.Interface.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	bbf_get_reference_param("Device.Ethernet.Interface.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	bbf_get_reference_param("Device.WiFi.Radio.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	if (pos)
-		buf[pos - 1] = 0;
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.IP.Interface.", "Name", linker, buf, sizeof(buf));
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.PPP.Interface.", "Name", linker, buf, sizeof(buf));
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.Ethernet.Interface.", "Name", linker, buf, sizeof(buf));
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.WiFi.Radio.", "Name", linker, buf, sizeof(buf));
 
 	*value = dmstrdup(buf);
 	return 0;
@@ -420,7 +405,7 @@ static int set_QInterface(char *refparam, struct dmctx *ctx, void *data, char *i
 			NULL};
 	struct dm_reference reference = {0};
 
-	bbf_get_reference_args(value, &reference);
+	bbfdm_get_reference_linker(ctx, value, &reference);
 
 	switch (action)	{
 	case VALUECHECK:
@@ -1734,7 +1719,7 @@ static int get_QoSQueueStats_Queue(char *refparam, struct dmctx *ctx, void *data
 	char *queue_link = NULL;
 
 	dmuci_get_value_by_section_string((struct uci_section *)data, "queue", &queue_link);
-	bbf_get_reference_param("Device.QoS.Queue.", "Alias", queue_link, value);
+	_bbfdm_get_references(ctx, "Device.QoS.Queue.", "Alias", queue_link, value);
 	return 0;
 }
 
@@ -1743,7 +1728,7 @@ static int set_QoSQueueStats_Queue(char *refparam, struct dmctx *ctx, void *data
 	char *allowed_objects[] = {"Device.QoS.Queue.", NULL};
 	struct dm_reference reference = {0};
 
-	bbf_get_reference_args(value, &reference);
+	bbfdm_get_reference_linker(ctx, value, &reference);
 
 	switch (action)	{
 		case VALUECHECK:
@@ -1765,26 +1750,14 @@ static int get_QoSQueueStats_Interface(char *refparam, struct dmctx *ctx, void *
 {
 	char *linker = NULL;
 	char buf[4096] = {0};
-	int pos = 0;
 
 	dmuci_get_value_by_section_string((struct uci_section *)data, "interface", &linker);
 	if (DM_STRLEN(linker) == 0)
 		return 0;
 
-	bbf_get_reference_param("Device.Ethernet.Interface.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	bbf_get_reference_param("Device.IP.Interface.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	bbf_get_reference_param("Device.PPP.Interface.", "Name", linker, value);
-	if (DM_STRLEN(*value))
-		pos += snprintf(&buf[pos], sizeof(buf) - pos, "%s,", *value);
-
-	if (pos)
-		buf[pos - 1] = 0;
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.Ethernet.Interface.", "Name", linker, buf, sizeof(buf));
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.IP.Interface.", "Name", linker, buf, sizeof(buf));
+	bbfdm_get_references(ctx, MATCH_FIRST, "Device.PPP.Interface.", "Name", linker, buf, sizeof(buf));
 
 	*value = dmstrdup(buf);
 	return 0;
@@ -1799,7 +1772,7 @@ static int set_QoSQueueStats_Interface(char *refparam, struct dmctx *ctx, void *
 			NULL};
 	struct dm_reference reference = {0};
 
-	bbf_get_reference_args(value, &reference);
+	bbfdm_get_reference_linker(ctx, value, &reference);
 
 	switch (action)	{
 		case VALUECHECK:
-- 
GitLab