Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Feb 2025 19:55:39 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: aa060232706c - main - ctld: Factor out functions to parse dscp and pcp properties
Message-ID:  <202502051955.515JtdMR087845@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=aa060232706cc9355d2585d765989c7459824b99

commit aa060232706cc9355d2585d765989c7459824b99
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2025-02-05 19:53:35 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-02-05 19:55:16 +0000

    ctld: Factor out functions to parse dscp and pcp properties
    
    Reviewed by:    asomers
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D48769
---
 usr.sbin/ctld/uclparse.c | 157 +++++++++++++++++++++++++++--------------------
 1 file changed, 89 insertions(+), 68 deletions(-)

diff --git a/usr.sbin/ctld/uclparse.c b/usr.sbin/ctld/uclparse.c
index 69efba823cc5..6ddbb83b6a12 100644
--- a/usr.sbin/ctld/uclparse.c
+++ b/usr.sbin/ctld/uclparse.c
@@ -492,6 +492,93 @@ uclparse_auth_group(const char *name, const ucl_object_t *top)
 	return (true);
 }
 
+static bool
+uclparse_dscp(const char *group_type, struct portal_group *portal_group,
+    const ucl_object_t *obj)
+{
+	const char *key;
+
+	if ((obj->type != UCL_STRING) && (obj->type != UCL_INT)) {
+		log_warnx("\"dscp\" property of %s group \"%s\" is not a "
+		    "string or integer", group_type, portal_group->pg_name);
+		return (false);
+	}
+	if (obj->type == UCL_INT)
+		portal_group->pg_dscp = ucl_object_toint(obj);
+	else {
+		key = ucl_object_tostring(obj);
+		if (strcmp(key, "0x") == 0)
+			portal_group->pg_dscp = strtol(key + 2, NULL, 16);
+		else if (strcmp(key, "be") || strcmp(key, "cs0"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2;
+		else if (strcmp(key, "ef"))
+			portal_group->pg_dscp = IPTOS_DSCP_EF >> 2;
+		else if (strcmp(key, "cs0"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2;
+		else if (strcmp(key, "cs1"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS1 >> 2;
+		else if (strcmp(key, "cs2"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS2 >> 2;
+		else if (strcmp(key, "cs3"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS3 >> 2;
+		else if (strcmp(key, "cs4"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS4 >> 2;
+		else if (strcmp(key, "cs5"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS5 >> 2;
+		else if (strcmp(key, "cs6"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS6 >> 2;
+		else if (strcmp(key, "cs7"))
+			portal_group->pg_dscp = IPTOS_DSCP_CS7 >> 2;
+		else if (strcmp(key, "af11"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF11 >> 2;
+		else if (strcmp(key, "af12"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF12 >> 2;
+		else if (strcmp(key, "af13"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF13 >> 2;
+		else if (strcmp(key, "af21"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF21 >> 2;
+		else if (strcmp(key, "af22"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF22 >> 2;
+		else if (strcmp(key, "af23"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF23 >> 2;
+		else if (strcmp(key, "af31"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF31 >> 2;
+		else if (strcmp(key, "af32"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF32 >> 2;
+		else if (strcmp(key, "af33"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF33 >> 2;
+		else if (strcmp(key, "af41"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF41 >> 2;
+		else if (strcmp(key, "af42"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF42 >> 2;
+		else if (strcmp(key, "af43"))
+			portal_group->pg_dscp = IPTOS_DSCP_AF43 >> 2;
+		else {
+			log_warnx("\"dscp\" property value is not a supported textual value");
+			return (false);
+		}
+	}
+	return (true);
+}
+
+static bool
+uclparse_pcp(const char *group_type, struct portal_group *portal_group,
+    const ucl_object_t *obj)
+{
+	if (obj->type != UCL_INT) {
+		log_warnx("\"pcp\" property of %s group \"%s\" is not an "
+		    "integer", group_type, portal_group->pg_name);
+		return (false);
+	}
+	portal_group->pg_pcp = ucl_object_toint(obj);
+	if (!((portal_group->pg_pcp >= 0) && (portal_group->pg_pcp <= 7))) {
+		log_warnx("invalid \"pcp\" value %d, using default",
+		    portal_group->pg_pcp);
+		portal_group->pg_pcp = -1;
+	}
+	return (true);
+}
+
 static bool
 uclparse_portal_group(const char *name, const ucl_object_t *top)
 {
@@ -613,79 +700,13 @@ uclparse_portal_group(const char *name, const ucl_object_t *top)
 		}
 
 		if (!strcmp(key, "dscp")) {
-			if ((obj->type != UCL_STRING) && (obj->type != UCL_INT)) {
-				log_warnx("\"dscp\" property of portal group "
-				    "\"%s\" is not a string or integer", portal_group->pg_name);
+			if (!uclparse_dscp("portal", portal_group, obj))
 				return (false);
-			}
-			if (obj->type == UCL_INT)
-				portal_group->pg_dscp = ucl_object_toint(obj);
-			else {
-				key = ucl_object_tostring(obj);
-				if (strcmp(key, "0x") == 0)
-					portal_group->pg_dscp = strtol(key + 2, NULL, 16);
-				else if (strcmp(key, "be") || strcmp(key, "cs0"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2;
-				else if (strcmp(key, "ef"))
-					portal_group->pg_dscp = IPTOS_DSCP_EF >> 2;
-				else if (strcmp(key, "cs0"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2;
-				else if (strcmp(key, "cs1"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS1 >> 2;
-				else if (strcmp(key, "cs2"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS2 >> 2;
-				else if (strcmp(key, "cs3"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS3 >> 2;
-				else if (strcmp(key, "cs4"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS4 >> 2;
-				else if (strcmp(key, "cs5"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS5 >> 2;
-				else if (strcmp(key, "cs6"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS6 >> 2;
-				else if (strcmp(key, "cs7"))
-					portal_group->pg_dscp = IPTOS_DSCP_CS7 >> 2;
-				else if (strcmp(key, "af11"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF11 >> 2;
-				else if (strcmp(key, "af12"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF12 >> 2;
-				else if (strcmp(key, "af13"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF13 >> 2;
-				else if (strcmp(key, "af21"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF21 >> 2;
-				else if (strcmp(key, "af22"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF22 >> 2;
-				else if (strcmp(key, "af23"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF23 >> 2;
-				else if (strcmp(key, "af31"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF31 >> 2;
-				else if (strcmp(key, "af32"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF32 >> 2;
-				else if (strcmp(key, "af33"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF33 >> 2;
-				else if (strcmp(key, "af41"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF41 >> 2;
-				else if (strcmp(key, "af42"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF42 >> 2;
-				else if (strcmp(key, "af43"))
-					portal_group->pg_dscp = IPTOS_DSCP_AF43 >> 2;
-				else {
-					log_warnx("\"dscp\" property value is not a supported textual value");
-					return (false);
-				}
-			}
 		}
 
 		if (!strcmp(key, "pcp")) {
-			if (obj->type != UCL_INT) {
-				log_warnx("\"pcp\" property of portal group "
-				    "\"%s\" is not an integer", portal_group->pg_name);
+			if (!uclparse_pcp("portal", portal_group, obj))
 				return (false);
-			}
-			portal_group->pg_pcp = ucl_object_toint(obj);
-			if (!((portal_group->pg_pcp >= 0) && (portal_group->pg_pcp <= 7))) {
-				log_warnx("invalid \"pcp\" value %d, using default", portal_group->pg_pcp);
-				portal_group->pg_pcp = -1;
-			}
 		}
 	}
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202502051955.515JtdMR087845>