From nobody Wed Feb 5 19:55:39 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Yp9vc1jWKz5mJJ5; Wed, 05 Feb 2025 19:55:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Yp9vb3Sfqz42Sx; Wed, 05 Feb 2025 19:55:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738785339; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ndPxae4/ycsgOFeiiSzJxiic4zI6EKhpwEr1J2A7dKk=; b=jxXUADI3v6eHXJa5j3RURbPTt5L9D0tU0kgvqkyw0zUa1MWgmn0K9Q5l88h2HOCljyBxO6 Ob4xEj5PT9DJ/VAMya22Y6iX+sOqS0KwDJ6cE530YbTdDuPNA01EfX8Uu3Mhp+BpyhdDw2 4vU62OglbaOtG4LHyWjQY6VbRFza4wWDKPcxpE/IPmliQ7Jny36621qyJk3IWFW2HhiNqf afm6jbfipyeipXx6p71ger3+ukiY59M6s80YYCDvrOkj6MeK8KDl/O3s6H70Fkbz8iN7+v W93xb6GOLKxu013pbvwmvMtb/6iZsf6/S9UqvusuDVsPJvcnM+6PnZ2gI/971Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738785339; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ndPxae4/ycsgOFeiiSzJxiic4zI6EKhpwEr1J2A7dKk=; b=xTY5MQ6e2fDflKUA55Nxt/BdtyUoTxAKglUjn9vNVInFr7uq54R5j0PpbWrAOv23i0K0d9 8P/tF0OxqWp3A1f74A2qc67siTZDjPmHTnYrik87bEvJSqLKqtjJ7SXZ3qt+AWbcAYWwd4 CkW6D+EERU9cBUHNbHlppztO2DuZTmPfH9/VTvbWTIP8zbpfEurd1h1gMuzwbYuQRDpfJF sQXyo2spaFcphQdT9pnOYciGL5sp1WIq5k5ORUiHJ7ZBd8SuQ2RX9HSEmjEmyFWr0BJllf 9SFO8nINtHE7mYvVu1zDnH/Gid0qTFGYJED4rqU9WjXlkO1X9OsjzYzcMDO7RA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738785339; a=rsa-sha256; cv=none; b=mYjqSx5EwASIIdQSOLfMPaZjBY4lFHU/SXQpwJS8O9u+fWnr3vtLz/czjhQViHJyJv3hC9 xTFK7X6oq8xYuN/czytQbN1XJ36xYe3SwfDIxCVhBMB/Iz0pTHYRfbmauScWG4wd6Mvet7 RRd+ojMjzxb8evBTAoSReYn+kJDILYBjZG5NhXuAepNPSAPgwjEZ7y4IE4MBXzHtw9LN1t qYoZ3hLUfN6/7KOe0WZkfDCatAoHeaH9JGvrjlVeYxSdT4U0I15TQziiOLeA4NXKAdp+ZX +LIesfOQeYsfZhTZnVlsbqx2f+Dn9XHSn4qY/nj6Sxv+7SnEekf/B9Gyt/oksQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Yp9vb31j2z15Q4; Wed, 05 Feb 2025 19:55:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 515Jtdu9087848; Wed, 5 Feb 2025 19:55:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 515JtdMR087845; Wed, 5 Feb 2025 19:55:39 GMT (envelope-from git) Date: Wed, 5 Feb 2025 19:55:39 GMT Message-Id: <202502051955.515JtdMR087845@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: aa060232706c - main - ctld: Factor out functions to parse dscp and pcp properties List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: aa060232706cc9355d2585d765989c7459824b99 Auto-Submitted: auto-generated The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=aa060232706cc9355d2585d765989c7459824b99 commit aa060232706cc9355d2585d765989c7459824b99 Author: John Baldwin AuthorDate: 2025-02-05 19:53:35 +0000 Commit: John Baldwin 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; - } } }