From patchwork Tue Jan 23 16:05:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527742 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C536612FA; Tue, 23 Jan 2024 16:05:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025950; cv=none; b=Qv/dEc9qLSp7UcmDGvnWVepweaj1uRipzllCF5cgbV4TXhqPKccV6FHmwwG/Uu0yh5D+PByuaLREfxwCd0bDGz7wglkjbqOAX7DuZWM99cZtQx5etYLfLAyI2ja34CIPvPCtq8kyYD5onf4W4Bj2VTmqN2frS0toRZdUV4QTjas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025950; c=relaxed/simple; bh=yWpCLzZbzVzuWXL/mj6oIkzz72O4S3+Cmw8etxhgQ84=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oB221v677y7d4UR1MXld06XAy2z6iwal2ENOTfeuWyHWiDQYNQoVCm+Uf4TKIEXrJ2oiX8zPRqnDdKOGjnBlysOraJPkcGXsu1HY7E9WV3TDnXrhvRWQKQ8h+mED7VMh9kft3GtKGkE8DM4YdliJboqXHPXgto0I85t3ysJOQW0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=E+YQB/a+; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="E+YQB/a+" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-337b8da1f49so3991880f8f.0; Tue, 23 Jan 2024 08:05:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025946; x=1706630746; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7YrGD4aatZXX/E7lPRaB1ID2sz5ALtn3xMWSx/R9VMo=; b=E+YQB/a+BrNsiDGk71d5KU2rHc/hKRDWUax45oyxz7YB5VIYgf+yhoRUYEcWft8yW+ z8Qgw2aBDA3G5cZ7v+QbNCu7oYMFpgraH5uVpw3nO4H3mG/6ZeQ6I/cUvXiXllqYRYAP RilZSshzKMdbc2q6ciCIPKU0wRl4MkruA9x9GHITCrS9Vuj6OHUqWGn+jr8h8fLHm+mV PEQAIkuOEcicWFE1Zpgw0AKwS82StYXMrCdsPAkh6cNUgRqBIPw1NUtlK0+lJ9oZAZep glBCOFb5kWBCDe7jXKXs2F2AFyPeQ6PmYOyxDCsK95HmQotAhrf7mEu+7ekSZbQwS1q8 HNBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025946; x=1706630746; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7YrGD4aatZXX/E7lPRaB1ID2sz5ALtn3xMWSx/R9VMo=; b=Kb7soSwG7UUCIPXT4e2985MwNbv4MQHpo11xZPfqazxqhzNTHXOWdZgAvoctMsULtz Yii8yR88//fXhp7IrRB6psTSbFaWTX1W2aIKJvt+wJ1+6Anq7OAbfrPsHSMWLfCyU7WP 02DWWevTb1ycZuEyO8bDEJYJLlScUFrcYjvVUMvl8yDAQ8E/dUsvvTVSoIhluMzgZN5Z ioaELWabk5/uzpAAdfDuqu2ZYrDe7rO1V/STRnWLEe+HUg1vh748Q5+bNRqFLVw8neln 8yxnmi0pIvK6imltAn7T9dtb3Ug4V6dg3jqbUSLT3u8kXFkoKEQ2LyTaD8ELWSg5+Ml7 Hu6w== X-Gm-Message-State: AOJu0Yw4SX+K8rd95vAH2ap5xZ47lz6H43tdKZg1/5eyOnPJO1GPS0T8 hxaj1JKwUiJaujJDG+MiXl0pnlE36bL26gIO7OHvTqivDbyBAhl2k/kO6OFLQD6VFgR8 X-Google-Smtp-Source: AGHT+IFZJAYE5pDo1GTKT1FjL4gsHuQUK3EIJblx8pyM1wEVLN1In2WTJPOE5R7NScPk74A2XLxqXA== X-Received: by 2002:adf:a39b:0:b0:337:c031:76fc with SMTP id l27-20020adfa39b000000b00337c03176fcmr2617859wrb.137.1706025945722; Tue, 23 Jan 2024 08:05:45 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:43 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 01/12] tools/net/ynl: Add --output-json arg to ynl cli Date: Tue, 23 Jan 2024 16:05:27 +0000 Message-ID: <20240123160538.172-2-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The ynl cli currently emits python pretty printed structures which is hard to consume. Add a new --output-json argument to emit JSON. Signed-off-by: Donald Hunter Reviewed-by: Breno Leitao --- tools/net/ynl/cli.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tools/net/ynl/cli.py b/tools/net/ynl/cli.py index 2ad9ec0f5545..0f8239979670 100755 --- a/tools/net/ynl/cli.py +++ b/tools/net/ynl/cli.py @@ -9,6 +9,15 @@ import time from lib import YnlFamily, Netlink +class YnlEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, bytes): + return bytes.hex(obj) + if isinstance(obj, set): + return list(obj) + return json.JSONEncoder.default(self, obj) + + def main(): parser = argparse.ArgumentParser(description='YNL CLI sample') parser.add_argument('--spec', dest='spec', type=str, required=True) @@ -28,8 +37,15 @@ def main(): parser.add_argument('--append', dest='flags', action='append_const', const=Netlink.NLM_F_APPEND) parser.add_argument('--process-unknown', action=argparse.BooleanOptionalAction) + parser.add_argument('--output-json', action='store_true') args = parser.parse_args() + def output(msg): + if args.output_json: + print(json.dumps(msg, cls=YnlEncoder)) + else: + pprint.PrettyPrinter().pprint(msg) + if args.no_schema: args.schema = '' @@ -47,14 +63,14 @@ def main(): if args.do: reply = ynl.do(args.do, attrs, args.flags) - pprint.PrettyPrinter().pprint(reply) + output(reply) if args.dump: reply = ynl.dump(args.dump, attrs) - pprint.PrettyPrinter().pprint(reply) + output(reply) if args.ntf: ynl.check_ntf() - pprint.PrettyPrinter().pprint(ynl.async_msg_queue) + output(ynl.async_msg_queue) if __name__ == "__main__": From patchwork Tue Jan 23 16:05:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527743 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CDF561665; Tue, 23 Jan 2024 16:05:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025952; cv=none; b=mvm9VZzHU75c2pScjGcsqSbaJOEIUUaM3xU21xQlUZPyeuDDN9vFTVlw9EHlBGt0Ad3VRVXFqCh2Rt/3lbZtbcBRn0Zg4DWXFYZny3BzKpgnl8hvgVM+V6ziwkbx5lOMVWqix8B1iEoznfLInMnjF/6w6GQ9CJnrY/eZGLJoW04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025952; c=relaxed/simple; bh=wGQ2wXJhQOmb+5CEhiazfvQGcY5+AUc3utMAHnbGSDo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N/a8sxP7CQLpPFSnXWBoN+POKMVirRxof0edxBgziUAOyuJqiMOizt3pLnbRZa93564UM1hejTwRVRlxQLdSzgVyFPM6emPabtuL6RWE619N64YN1MYR44N/yJ7YAnpLysgWoJXasJO1Qd3HLFJ2qrbtwj4hQLkOGPmyZwGD+l4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UhDNatIc; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UhDNatIc" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-40ec3535225so2082475e9.2; Tue, 23 Jan 2024 08:05:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025948; x=1706630748; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ryo8HRjGnljrClxgJ6alqFUbKEiQl5mSg8DOiMtGabA=; b=UhDNatIcrosQRudbRn+3SWDdvdbsSf6gh4R/nMbx68rs4heRXPNGAl07b6HgzNiy1Q G4k3nHI/V7g5Jf2EXmUs1KXdYn6yxxdSvmKFpBU41bOPTBmMdJn66L7KH8asMDwO6VUm 8hO+NssqRfZV0Rxv+/sTySTyVI7s3OnAQYP7vchH1/UF1aX9hrYYrpK10+MfFK9rCTZT rPgJnjRA2SqzN/8HzV6YCpBfbBBiRtKLc9D2emIXN9PAX6fhtvEC6ArVhCG4aTsrdu7s sYuJQLm699bq+KU5NWM8PA53nQlezocghFsUQwBGiphZM6gBsSVQwlmhuNBXTBHPgQ9h /Oqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025948; x=1706630748; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ryo8HRjGnljrClxgJ6alqFUbKEiQl5mSg8DOiMtGabA=; b=I+FBkZwun7HO9LNtVpoztEVklO7vRnxWqbyzTz/Upb5Y4xZvoBquzhLJJqFh3wyfVP TN0bZ1ksGRBknXSA6Tz7RBUQlhagj5Cy1G89CJ1qndKdrQkQ4TbKQS8DEL24gSOmHrfZ 6Ha453dBzty1nxjyGm5FtILJx48vaM3r57zAwdNDWcx5l6K6lpw34ljgwI/wVihLaIcm bV0Ufrkkhmq+P7kj6+cP6gWE1UODdvXlUbWfAFSp7KKTGY/A2E4TVy6EN5cDpKLAjarN H8xPccaWDybVaWAK7Ifd7CudYNR4L0vbzLmC3jTw45YA6ECpBZhH8ipdHcwiEPI2kJea p5TA== X-Gm-Message-State: AOJu0YzNzC59iw5ylApH+G5Hj5Bj2z7XXPSM/jPACsI+CBMc3DIx85sO AO+8DGBB1ObbMeU1WgioWsJyShD91qD3YG8u9lNhYsT+9XJk9aYcwcYpEjV+WvCh0Dry X-Google-Smtp-Source: AGHT+IFb6wjAXVE63pR4TcjrddfzxSW/TyWAnily9aK+fHwnkXOCPpNqBbqDhvk1YOQmaqaY+hTPfg== X-Received: by 2002:a05:600c:33aa:b0:40e:4f69:323d with SMTP id o42-20020a05600c33aa00b0040e4f69323dmr362117wmp.248.1706025948360; Tue, 23 Jan 2024 08:05:48 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:46 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 02/12] tools/net/ynl: Support sub-messages in nested attribute spaces Date: Tue, 23 Jan 2024 16:05:28 +0000 Message-ID: <20240123160538.172-3-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Sub-message selectors could only be resolved using values from the current nest level. Enable value lookup in outer scopes by using collections.ChainMap to implement an ordered lookup from nested to outer scopes. Signed-off-by: Donald Hunter --- tools/net/ynl/lib/ynl.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index 1e10512b2117..b00cde5d29e5 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause -from collections import namedtuple +from collections import namedtuple, ChainMap import functools import os import random @@ -564,8 +564,8 @@ class YnlFamily(SpecFamily): spec = sub_msg_spec.formats[value] return spec - def _decode_sub_msg(self, attr, attr_spec, rsp): - msg_format = self._resolve_selector(attr_spec, rsp) + def _decode_sub_msg(self, attr, attr_spec, vals): + msg_format = self._resolve_selector(attr_spec, vals) decoded = {} offset = 0 if msg_format.fixed_header: @@ -579,10 +579,11 @@ class YnlFamily(SpecFamily): raise Exception(f"Unknown attribute-set '{attr_space}' when decoding '{attr_spec.name}'") return decoded - def _decode(self, attrs, space): + def _decode(self, attrs, space, outer_vals = ChainMap()): if space: attr_space = self.attr_sets[space] rsp = dict() + vals = ChainMap(rsp, outer_vals) for attr in attrs: try: attr_spec = attr_space.attrs_by_val[attr.type] @@ -594,7 +595,7 @@ class YnlFamily(SpecFamily): continue if attr_spec["type"] == 'nest': - subdict = self._decode(NlAttrs(attr.raw), attr_spec['nested-attributes']) + subdict = self._decode(NlAttrs(attr.raw), attr_spec['nested-attributes'], vals) decoded = subdict elif attr_spec["type"] == 'string': decoded = attr.as_strz() @@ -617,7 +618,7 @@ class YnlFamily(SpecFamily): selector = self._decode_enum(selector, attr_spec) decoded = {"value": value, "selector": selector} elif attr_spec["type"] == 'sub-message': - decoded = self._decode_sub_msg(attr, attr_spec, rsp) + decoded = self._decode_sub_msg(attr, attr_spec, vals) else: if not self.process_unknown: raise Exception(f'Unknown {attr_spec["type"]} with name {attr_spec["name"]}') From patchwork Tue Jan 23 16:05:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527744 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 671C163519; Tue, 23 Jan 2024 16:05:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025955; cv=none; b=fJPbNHCEu74CQnYqj8oTFLDK68+5gAHn93KYKpsoGdvusPgzEpwJp4ya/jsdKrEo/0CZypuWhJfBPtEwy5N//6SffH5tZfh3AbMOcy9XNpcDrlv7+xi3JkJKRLAd9HA5uCgzpKeXY6drafyMHISfDn/jCCbdYqKFoDxyVcsb1r4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025955; c=relaxed/simple; bh=UAyF8X7QSWT7mXbILRIB+tuM8vms7O+Ylss9/Xo4KPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZSAiz/447MFWEm9RWJR0Udo24x5yDBdYev7056qRbo6zu6tpYX/gkn7TrnTsj9RkpAcj59pjM7UsBm0mt1u7GWMzykTzNEk5PwS6eAn0LBMGWYwlRZuKoMiZlVZyiS3mNnBvMmIeSBgmx42U7kUhZIoLtr8+9NMOuaG92Ha62rk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GKi8/LaU; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GKi8/LaU" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-40e87d07c07so56936055e9.1; Tue, 23 Jan 2024 08:05:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025951; x=1706630751; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8nu3GBbweqqLjVKM1I/MvCjJ4k7t4quChK5YPaJt0ls=; b=GKi8/LaUbqn7y6h6VAx7VX51yKm/2vZt9v1qYUlIsIdPP1pELA5S7cmD+Zc3xBc4Uj 6OV8rigcNkhqZizmApiudsk5q1ZUP9D1pZ6cMBSeQciyvPPIAVFus0GeRc+351EjlukY uwLHnZZzUOuoJDDdbTCM1d1OX/h+Kd98kIiQPBxaxSHe8C+S+MNVdLFX5yP1BuYsZCrp vp7bV5KtP0jbb8qAL/LMySmdJBvzlJHdRfQSt4qoCkUPRtW0dbBszEFjZmYr3zmZuYUi jT7h5srXWwJFpmXAuUq+lZz5QJ+VxJzmGbKT0K3IwL9fiR43NWvCQT2wKbp/dze+BtI1 b8kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025951; x=1706630751; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8nu3GBbweqqLjVKM1I/MvCjJ4k7t4quChK5YPaJt0ls=; b=baDSn6IQliXB6utqpfafEiusS/aztWAJldDxNmgll7dkecCFRg5B7/Cz0KHVWQFbIx wwrarW5wSe5Q9eKJZkOIU4oQ9/GKAN4+zXlUP039/Dk5+W/szd4/u+TdM2vraEslxgT7 gIYLNoE6YUxXsO7R29Bp9sYq7ogDYN9TqV3e8qHX3O1rYjQX4527nfT35Jg6uDdkAwG7 BuaSmt9g+IKguFS97+M/CVjKDJsU+zMdNAYFusaXb9tLKuWWIwKyn3zs65kLF+pedvei jTu3h/Ewe8d3mp5qXL19XPREgDmtAR8fmQk+YJKXxDxPF5t5+KSRkvPAb8KbJ2rYd9hg Fbgw== X-Gm-Message-State: AOJu0Ywptd8w36u0dvQHMCaVWH8qQFKbz2TQc7t/iCLH2Nd9wwwnDYe+ F3AVv2ecsov47QSWqqg/HCCzCnr48aRb6cs2fGMFtOhDGWc3STMRowfvzjuBObO1riYZ X-Google-Smtp-Source: AGHT+IHKgu0iJ8YgSFPKKDbtdjE8Pu9GBIuAmpDvtgIr/BpB2CHjl2lOsCZfwxKWdODVkDg3a84npg== X-Received: by 2002:a05:600c:540b:b0:40e:4800:c91f with SMTP id he11-20020a05600c540b00b0040e4800c91fmr301710wmb.9.1706025950651; Tue, 23 Jan 2024 08:05:50 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:48 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 03/12] tools/net/ynl: Refactor fixed header encoding into separate method Date: Tue, 23 Jan 2024 16:05:29 +0000 Message-ID: <20240123160538.172-4-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Refactor the fixed header encoding into a separate _encode_struct method so that it can be reused for fixed headers in sub-messages and for encoding structs. Signed-off-by: Donald Hunter --- tools/net/ynl/lib/ynl.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index b00cde5d29e5..dd54205f866f 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -701,6 +701,20 @@ class YnlFamily(SpecFamily): fixed_header_attrs[m.name] = value return fixed_header_attrs + def _encode_struct(self, name, vals): + members = self.consts[name].members + attr_payload = b'' + for m in members: + value = vals.pop(m.name) if m.name in vals else 0 + if m.type == 'pad': + attr_payload += bytearray(m.len) + elif m.type == 'binary': + attr_payload += bytes.fromhex(value) + else: + format = NlAttr.get_format(m.type, m.byte_order) + attr_payload += format.pack(value) + return attr_payload + def handle_ntf(self, decoded): msg = dict() if self.include_raw: @@ -760,18 +774,8 @@ class YnlFamily(SpecFamily): req_seq = random.randint(1024, 65535) msg = self.nlproto.message(nl_flags, op.req_value, 1, req_seq) - fixed_header_members = [] if op.fixed_header: - fixed_header_members = self.consts[op.fixed_header].members - for m in fixed_header_members: - value = vals.pop(m.name) if m.name in vals else 0 - if m.type == 'pad': - msg += bytearray(m.len) - elif m.type == 'binary': - msg += bytes.fromhex(value) - else: - format = NlAttr.get_format(m.type, m.byte_order) - msg += format.pack(value) + msg += self._encode_struct(op.fixed_header, vals) for name, value in vals.items(): msg += self._add_attr(op.attr_set.name, name, value) msg = _genl_msg_finalize(msg) From patchwork Tue Jan 23 16:05:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527745 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9AAD664A89; Tue, 23 Jan 2024 16:05:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025957; cv=none; b=nAuzX0ugssQ5vKDOA9oAgkhNiTK4KYe4naXYYKO0TkjGAIYgtde3SmYxfrjVF90F3j09Ch7dMKcWpw/fPJ03z7f7j8fH7bK092wOl8NghQRc0T2y+zbfQLapVlMHJ9gCBPgzs2aduUcD/WwuuhPI/tMtcYXzNtsu1epjxd7GpEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025957; c=relaxed/simple; bh=mlIrTgzwyP094bcSNKK/Wi82s2TnOYwwyJfgh2GO+b4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pjx3EVyDeeN6iPMfF1+c78/tXNEuM9exPTUCWe959YC1EBF6rqHkwgdqEK+ZTmsl/pbgRFvUxEAt0UyFeYHPO7y0j0MosRyH8mfZGjQ08MXde2BEYBh1GR0KHEr6pQxRFGQWeBtJuqkpXZTi4vQVM5SMABPUetqF80QQze5NPEo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MXLPA0LO; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MXLPA0LO" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-40e9d4ab5f3so48638715e9.2; Tue, 23 Jan 2024 08:05:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025953; x=1706630753; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YmRjBSuIOt9of23+aywKWiGP5DZrvI5CG2rVGVa0CCM=; b=MXLPA0LOzQzQIQxARWwliTOQPoHhc/B1wRfKa7Et6hEUK7zfS+X2/d5HHtHTxBnbXK 8zleHftAUmCTNwLsOiFLBKJA5NcZxIClgo/89vUpEyoLh/ZmqJPEBs15TkqgzZdoYXKE x8M7DhSIODP021Re9J9uMMusZjmKleWgr17BbRgAAXLbqmGQ0wDCuF+MNYooI4FqyOg7 bLK2BIzJz3f/djqAJsWkGSzjEAqbT/9Prf3awb01feaCJk97eRRhAH3AzFQCakccsVkL awGNzFDqcfdZqaRE57fOYe/zFwg2HSvolpZbtT5ctuT3vtusHjFo9j6Fu2HtqDIq+KjV Ah6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025953; x=1706630753; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YmRjBSuIOt9of23+aywKWiGP5DZrvI5CG2rVGVa0CCM=; b=WOi6wIsdDCIw1poxdZI6epksihsyvYn1H4nOuo9DcdRAwY9g5W1A6soKsm7W0IzDYI Cgxz+uwWC7YJE+d0g4jie0IFS4t2vMD7GcXdhG4qEhlN8Xyh3CUwqd1tm2HVNDfro5un +suTJCmN1rNDH66++qV20aC+w4kkbFv/8Ef17sBjwtH06NwuhvvxWsnlFLGDd4uLiSpa 4ilQ3wV2gWWvQD9wKqWcZdTG7fEbl8gLKJ9LpPPurQ7USRtYUVpYXBb40ryNggHoaGNj GjO7DjS6Q6dJn88KJSE9Y70BEWYtJkBz4HFRmfW4fTdoxrsnJcY3979Ft1H1T4faWpRa 0IVw== X-Gm-Message-State: AOJu0YzdKh+HedXe4PIFd3OV1/HdnT4NFlraLXUF0yyIJEUO7mZ1qdA7 6ihmE4uK74O55VuFsnaP3qRHHTExxQYAhnjNY0LN+UU0GBPSmAEif9x+q/OYnJgH6Ei5 X-Google-Smtp-Source: AGHT+IHIdmBFPUkjjawXnAaSg0gRMBmxJGXPieqLCocuQZ9Yg7Aq0eVudzXGg5+4GVHC56o4tW+MSQ== X-Received: by 2002:a7b:c3d2:0:b0:40e:6d77:85f2 with SMTP id t18-20020a7bc3d2000000b0040e6d7785f2mr243665wmj.173.1706025952903; Tue, 23 Jan 2024 08:05:52 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:51 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 04/12] tools/net/ynl: Add support for encoding sub-messages Date: Tue, 23 Jan 2024 16:05:30 +0000 Message-ID: <20240123160538.172-5-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Add sub-message encoding to ynl. This makes it possible to create tc qdiscs and other polymorphic netlink objects. Signed-off-by: Donald Hunter --- tools/net/ynl/lib/ynl.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index dd54205f866f..d1005e662d52 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -449,7 +449,7 @@ class YnlFamily(SpecFamily): self.sock.setsockopt(Netlink.SOL_NETLINK, Netlink.NETLINK_ADD_MEMBERSHIP, mcast_id) - def _add_attr(self, space, name, value): + def _add_attr(self, space, name, value, vals): try: attr = self.attr_sets[space][name] except KeyError: @@ -458,8 +458,10 @@ class YnlFamily(SpecFamily): if attr["type"] == 'nest': nl_type |= Netlink.NLA_F_NESTED attr_payload = b'' + subvals = ChainMap(value, vals) for subname, subvalue in value.items(): - attr_payload += self._add_attr(attr['nested-attributes'], subname, subvalue) + attr_payload += self._add_attr(attr['nested-attributes'], + subname, subvalue, subvals) elif attr["type"] == 'flag': attr_payload = b'' elif attr["type"] == 'string': @@ -469,6 +471,8 @@ class YnlFamily(SpecFamily): attr_payload = value elif isinstance(value, str): attr_payload = bytes.fromhex(value) + elif isinstance(value, dict) and attr.struct_name: + attr_payload = self._encode_struct(attr.struct_name, value) else: raise Exception(f'Unknown type for binary attribute, value: {value}') elif attr.is_auto_scalar: @@ -481,6 +485,20 @@ class YnlFamily(SpecFamily): attr_payload = format.pack(int(value)) elif attr['type'] in "bitfield32": attr_payload = struct.pack("II", int(value["value"]), int(value["selector"])) + elif attr['type'] == 'sub-message': + msg_format = self._resolve_selector(attr, vals) + attr_payload = b'' + if msg_format.fixed_header: + attr_payload += self._encode_struct(msg_format.fixed_header, value) + if msg_format.attr_set: + if msg_format.attr_set in self.attr_sets: + nl_type |= Netlink.NLA_F_NESTED + subvals = ChainMap(value, vals) + for subname, subvalue in value.items(): + attr_payload += self._add_attr(msg_format.attr_set, + subname, subvalue, subvals) + else: + raise Exception(f"Unknown attribute-set '{msg_format.attr_set}'") else: raise Exception(f'Unknown type at {space} {name} {value} {attr["type"]}') @@ -777,7 +795,7 @@ class YnlFamily(SpecFamily): if op.fixed_header: msg += self._encode_struct(op.fixed_header, vals) for name, value in vals.items(): - msg += self._add_attr(op.attr_set.name, name, value) + msg += self._add_attr(op.attr_set.name, name, value, vals) msg = _genl_msg_finalize(msg) self.sock.send(msg, 0) From patchwork Tue Jan 23 16:05:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527746 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C5A0664C5; Tue, 23 Jan 2024 16:05:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025959; cv=none; b=se/lHXRMYV7Ak7Q18hUKunk1juHd0trNHfYlfBMaWAbjwrlqancW607ZUAx5+ow3OtNxnPfZlk4LOCdHPZQ9hgxUbnn/dNtjFN5RfJky6BFSUPqWotv05gjIewjGmAsR3+EBv9KtnN36ljlxByao+jhRMZfBbmisQZDh/iCBfzg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025959; c=relaxed/simple; bh=WWlzWq4ogMbA5Bv/ttRCAgp137pwlwv7TucnOnjb4fk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jwjs1dll15oY8Akkz47fbgUhUunHpJb3Y/rbA/aaE7A2yXfAUJcAkbAjdDeiRfFmLt00EtW1VCPyA9U4HDsoMB9yXPjFkit2oYpRK+oxYY6Q2VDxya3IcqltiYg+aciQEcV1Lo9Fm/bZkLzDgeUqpa9RZBa/q4Z6xjrb2bywzJo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nO6dnfc5; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nO6dnfc5" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-40ec34160baso2190165e9.1; Tue, 23 Jan 2024 08:05:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025955; x=1706630755; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nPCt3LCuPfxhjiLPFiqNs15NK/ZpR78NNqvYkTrubSs=; b=nO6dnfc5x6h+IWJC0RlQxW4QLcOdkJF7apd7U1wAluTxBuxxYWaAjChEsp45soosQ9 FSzy/Mi/Rq0aB6/p14rCJ35ad7xstJvsPF0o3PHIZvLQGHlyqsBwjxw5OCG/iSenNb27 UXhcxx9/KB1vMoPn+Ltq7Dn3xcfsf0boyILXDKGQ2RGqsdlo4nz68LIFsrKM5EXgwikT c4qPHqlD2CRiNISBZJrx4zdnmqhxmvgb/opfz6OIqAtpqqWQmKRy6DzkrehMmRAscyM+ Jm9cmHnZMm1Ea/ZFGDsA96is0h0QHaBNaBi6eKv3+5e9wpIj5Go0Pu/4KNm9v1iLCVtB rDMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025955; x=1706630755; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nPCt3LCuPfxhjiLPFiqNs15NK/ZpR78NNqvYkTrubSs=; b=ZEOoog+Zomu4ZQEUQnMVkpIg//JXeBBD9kqQgBA62VVwhPl0kPGmeYL7mxEmoR8iAD p9JtVsyLdZkL51+8KjaY7zXpg7kRl7MGDzywOJBctcuGm8TgUGLJclaVCeQ1Q7TFczyU Y4EO9zKMeC1989LGsgqhfLomwwzPavJz/mcdbDUlLMYLWXtgOBpYj16cRzMawu7hG7s+ tCrf5N4OOpyUGqKjAXQ6fPU9w5wQcCd/LUrddc+wT5GREYIoXxzpbrIFiPkXuDZf0Adx hy3IyTpzY/uO2UKb9AXpPWYISWJY/24lf+GD/kx3f2eDPEnbdrdW8AaWnioD8h2qmpPZ 61Ew== X-Gm-Message-State: AOJu0YzR9DGM6opYT5delLXmoox+JSWf8mhqv0Xtb2in/tAYa8FP3y3n A/My0ZXRKdUityuZhnE7EvRAnI7zGEBh9KpWaYfOP0AOAsC1mxN8lpAc72irLlqKJjsG X-Google-Smtp-Source: AGHT+IGNF1CcHGzMWJ6BVF4PRWOPMgIcgB8Wb3pb4TGBKFY2U8//vkH6JV+3BsmY2EYg7lbBEtFEjw== X-Received: by 2002:a05:600c:4fd0:b0:40e:b981:db9a with SMTP id o16-20020a05600c4fd000b0040eb981db9amr797766wmq.7.1706025954895; Tue, 23 Jan 2024 08:05:54 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:53 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 05/12] tools/net/ynl: Encode default values for binary blobs Date: Tue, 23 Jan 2024 16:05:31 +0000 Message-ID: <20240123160538.172-6-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Add support for defaulting binary byte arrays to all zeros as well as defaulting scalar values to 0 when encoding input parameters. Signed-off-by: Donald Hunter --- tools/net/ynl/lib/ynl.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index d1005e662d52..ea4638c56802 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -723,12 +723,17 @@ class YnlFamily(SpecFamily): members = self.consts[name].members attr_payload = b'' for m in members: - value = vals.pop(m.name) if m.name in vals else 0 + value = vals.pop(m.name) if m.name in vals else None if m.type == 'pad': attr_payload += bytearray(m.len) elif m.type == 'binary': - attr_payload += bytes.fromhex(value) + if value is None: + attr_payload += bytearray(m.len) + else: + attr_payload += bytes.fromhex(value) else: + if value is None: + value = 0 format = NlAttr.get_format(m.type, m.byte_order) attr_payload += format.pack(value) return attr_payload From patchwork Tue Jan 23 16:05:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527747 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1349664D8; Tue, 23 Jan 2024 16:05:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025961; cv=none; b=cjwaG6Ni8EjJb8FMMFKgLMLab4LR0HfWqQpVApstasb9PrTWq25t6NwabzWQFP4BNrv4owzlpUhQ/v0zrEVeRneieJwQGUyJRDqAapxzOZ8U36TO0j3ka/BudZRL3Kk5TNYikesZSHT5z4bqtVjIjPcTHQwtnB327oLNXe+D6aE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025961; c=relaxed/simple; bh=tIgGv0KnVH34ruV1fjg9Mtf0x/61cO/Fe0Eyu66IMTE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LA+5KvZRRcDOWnSjTvWKEjokYC6N4e2d89LJmyZTtoMAS5uIvn9ycRabf3cGu4cunk73On0tXbioTeQiqHvliTc5mdkWCp07AgzvVNlPXpDuyrErCrCt20VdzjY/6MiVcRYWmeWMdcq7m6mHFr+ZI00fr4KFKHTIOVgaqx83xyg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BMsccCWd; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BMsccCWd" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-40d6b4e2945so53693925e9.0; Tue, 23 Jan 2024 08:05:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025957; x=1706630757; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aCehdhBo3wRBwnltXd+8d4qQNNR8hWcRbU494BI0zoQ=; b=BMsccCWd73U7hcmh9OGi5H3T8txc98rCX2+Udn0/QkBIdBIl/qiXzsZW8uLjUbe8EF YN+LCFzjpCvZYn3JUnzLH8LK5GH/CCmpp4sXy6uqeMtSfkDQJTs4ti44192MT2D3alkP VopAHugkXaNDfNFBJhW/7MdquoC7mMWBZoLToTqh5/zSajicsNF4yq3jYcat+4XvGDzb mQdi1ojbjosRzKj7K7F4L4hdfk+55INDVwmb1K642VVhPM2uu/Z5v0FW8fZQisXIcTPL 3lL6IT8uxL/ipSt2Wb06FoAUI7G36tzLq40RCtrrvoZ21D49XIsSKz0kHDxXTCJm4jax 3QAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025957; x=1706630757; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aCehdhBo3wRBwnltXd+8d4qQNNR8hWcRbU494BI0zoQ=; b=OcDFy2Zn5iNVdNe3dlJpVqZ+C+b6GoO5/ft7vB/tUE308olEw7gU+AnmG+LD8ypZDX wjKY4EkVQcOpX38kGYbhjIPpDll6XE1uPg8NOVqCAG4msaEsLVqcdInTVF1iNZFN0caQ hIJ9LqQG+k7gCacx6G477dqVQAHP11jZA6AK2N5n6UAdQw8jPrA0hFxeiMNBAoXu7Bb+ vNe003sjw7V1nbOjR11eMT7xmwXcantbb7ogbNFhtfWPZL0zEaK8iE7A6R3SbmdSzFYF rpCsAxCU8CtygJBQYMIKCvyfjxd/XtgOj4G8gjUi0HZw8YYpEvafuPLEUn/JEXm154fT gFRA== X-Gm-Message-State: AOJu0Yy8qF061OqJDlO/PldI28yhVdEZh2+OFv2oEhuBeCuhIAc1ijSe xHJ0MTSlOdl3+31wNa4jKZSyOVFFbgbOFV86CcxpjkME2bTpj5Dse1dZAVRzc6QQfqcd X-Google-Smtp-Source: AGHT+IFMdkztQgn4VQ/FB7qB6rWQNCRu91RHvCEahY2eeE+9mvpuqq/3dtRyZU/l5V7RlWEGNVi7yw== X-Received: by 2002:a1c:7318:0:b0:40e:448a:b4d9 with SMTP id d24-20020a1c7318000000b0040e448ab4d9mr194974wmb.257.1706025956696; Tue, 23 Jan 2024 08:05:56 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:55 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 06/12] tools/net/ynl: Combine struct decoding logic in ynl Date: Tue, 23 Jan 2024 16:05:32 +0000 Message-ID: <20240123160538.172-7-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org _decode_fixed_header() and NlAttr.as_struct() both implemented struct decoding logic. Deduplicate the code into newly named _decode_struct() method. Signed-off-by: Donald Hunter --- tools/net/ynl/lib/ynl.py | 47 ++++++++++++---------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index ea4638c56802..cc1106cbe8a6 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -148,23 +148,6 @@ class NlAttr: format = self.get_format(type) return [ x[0] for x in format.iter_unpack(self.raw) ] - def as_struct(self, members): - value = dict() - offset = 0 - for m in members: - # TODO: handle non-scalar members - if m.type == 'binary': - decoded = self.raw[offset : offset + m['len']] - offset += m['len'] - elif m.type in NlAttr.type_formats: - format = self.get_format(m.type, m.byte_order) - [ decoded ] = format.unpack_from(self.raw, offset) - offset += format.size - if m.display_hint: - decoded = self.formatted_string(decoded, m.display_hint) - value[m.name] = decoded - return value - def __repr__(self): return f"[type:{self.type} len:{self._len}] {self.raw}" @@ -521,11 +504,7 @@ class YnlFamily(SpecFamily): def _decode_binary(self, attr, attr_spec): if attr_spec.struct_name: - members = self.consts[attr_spec.struct_name] - decoded = attr.as_struct(members) - for m in members: - if m.enum: - decoded[m.name] = self._decode_enum(decoded[m.name], m) + decoded = self._decode_struct(attr.raw, attr_spec.struct_name) elif attr_spec.sub_type: decoded = attr.as_c_array(attr_spec.sub_type) else: @@ -587,7 +566,7 @@ class YnlFamily(SpecFamily): decoded = {} offset = 0 if msg_format.fixed_header: - decoded.update(self._decode_fixed_header(attr, msg_format.fixed_header)); + decoded.update(self._decode_struct(attr.raw, msg_format.fixed_header)); offset = self._fixed_header_size(msg_format.fixed_header) if msg_format.attr_set: if msg_format.attr_set in self.attr_sets: @@ -698,26 +677,28 @@ class YnlFamily(SpecFamily): else: return 0 - def _decode_fixed_header(self, msg, name): - fixed_header_members = self.consts[name].members - fixed_header_attrs = dict() + def _decode_struct(self, data, name): + members = self.consts[name].members + attrs = dict() offset = 0 - for m in fixed_header_members: + for m in members: value = None if m.type == 'pad': offset += m.len elif m.type == 'binary': - value = msg.raw[offset : offset + m.len] + value = data[offset : offset + m.len] offset += m.len else: format = NlAttr.get_format(m.type, m.byte_order) - [ value ] = format.unpack_from(msg.raw, offset) + [ value ] = format.unpack_from(data, offset) offset += format.size if value is not None: if m.enum: value = self._decode_enum(value, m) - fixed_header_attrs[m.name] = value - return fixed_header_attrs + elif m.display_hint: + value = NlAttr.formatted_string(value, m.display_hint) + attrs[m.name] = value + return attrs def _encode_struct(self, name, vals): members = self.consts[name].members @@ -745,7 +726,7 @@ class YnlFamily(SpecFamily): op = self.rsp_by_value[decoded.cmd()] attrs = self._decode(decoded.raw_attrs, op.attr_set.name) if op.fixed_header: - attrs.update(self._decode_fixed_header(decoded, op.fixed_header)) + attrs.update(self._decode_struct(decoded.raw, op.fixed_header)) msg['name'] = op['name'] msg['msg'] = attrs @@ -836,7 +817,7 @@ class YnlFamily(SpecFamily): rsp_msg = self._decode(decoded.raw_attrs, op.attr_set.name) if op.fixed_header: - rsp_msg.update(self._decode_fixed_header(decoded, op.fixed_header)) + rsp_msg.update(self._decode_struct(decoded.raw, op.fixed_header)) rsp.append(rsp_msg) if not rsp: From patchwork Tue Jan 23 16:05:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527748 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0369566B21; Tue, 23 Jan 2024 16:06:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025963; cv=none; b=oXVqzBNvuQ6BJ/x4JvFZwI8MS4gJLsAgcPQcY3hxcICXCJsVx4ZSN2+zTbgKAhEoIWL4KEq0Jrj2kOTA7Zx83JtZ0W5XLB4Tb9P+vaZusGf+cF5Hp5rOibpNQGOZJU9/h2EU2zRgoBVKxjyVp8VXbx22lxFmT4mVjhytlXykRcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025963; c=relaxed/simple; bh=7gK+Q7PJqTYLD8G3xf+tj76K/kc5XxyHzKCT6s9ZmQo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PfcFDdCT3HL8QnYfB8q2wsGwaFcRc8vv0DO5g0dJFXt67/bGvCH3RN1R7/kdwN2+nIjtBTftKqAhcfSuc82UQfuZFWg7rD9JT/oReu5RBTkqo1B1ycpP25tDejwhqyoVGcp2gIqIcIjis+VPu6Tg/I/35Az+oCCIyhYtfHWkhH8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HvVbxmeJ; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HvVbxmeJ" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-3392b15ca41so1866708f8f.0; Tue, 23 Jan 2024 08:06:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025959; x=1706630759; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Hfxc9N8ws6M4r8t8UAKHptiCOpz6LlWHgmCSp34OYJM=; b=HvVbxmeJf/+KDPZ64nP8T498rrKCD1NAK/4ZBQzthbQVz1ujYKO+JKUHWpST4STglF gdqcun/PiTT4fGgVVSKt9zZUzqt33/ypabdk7VocVzMQsd2N/21zdUi7cHBCWQJ9Jx7c byZHYK5QGCfIp/7OaGkgTve40toiCTbHmyjM21HZCoW7E9DtZUGGbYVZ5gD3rzEyuSLD RQITUhioLjSmdxxmfnNCJU2cYUQ5NfmyY7kj8doCbuYqCwQBsWnArT3/cMmZl4m+0BUw nhUu05KVokY5iGvTLl7odK25IkZJpIBilCiGpFIMCZETKUNUJcSUBjw6UhZbriSzCCJU 1BCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025959; x=1706630759; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Hfxc9N8ws6M4r8t8UAKHptiCOpz6LlWHgmCSp34OYJM=; b=RBNQPf3dmA3i/EdQ0eRhCzq57WlXgwky5+IWCxaFJzsoX3x/G9gSbjIpYGA8lruLrq 2GAI4w9RDfhk2+vwaonk5lo3qyJyBlfbpsN1oxDERilWVJM+bLD5RryHzNcltdrRTfH9 ghpToznH9Uo0MJAiW2ghLWIarBa58HVjGTPL+OhZHNDcNu/12smYoGsZTiy+g5yVHBGI R80oqIZblAGO6dtSrUOpyyCI1VdkJYk7L3KYsko9pPiPJY9eygjxxXPAxSHeW36rsRlQ gebPsjfiHLCnxG4nuzjUBbygCaT0+Fr41xbPtLdjAPK4UZiOcwHJvU0X1NCf5zImwtrw M2gA== X-Gm-Message-State: AOJu0YxdZTxdb4RBi2eAd9QhXhkpzET8F274kUcHHEzgn2nfi+cnNyu5 pce45b7WlldTuVrEuWqL3g+qiD/KzUQrrTxa7xXqo45Nib25WsyjKOl2bLYiPgTZ2e1E X-Google-Smtp-Source: AGHT+IFU5Cmk/msFDcYNznpmjs29Z7xryMf7P5aWPMPLowlDeWvOjMni6wiSycnoD9BGT91xgQNBkg== X-Received: by 2002:adf:a119:0:b0:337:c3ef:8c8d with SMTP id o25-20020adfa119000000b00337c3ef8c8dmr3240326wro.40.1706025959027; Tue, 23 Jan 2024 08:05:59 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:57 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 07/12] tools/net/ynl: Rename _fixed_header_size() to _struct_size() Date: Tue, 23 Jan 2024 16:05:33 +0000 Message-ID: <20240123160538.172-8-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Refactor the _fixed_header_size() method to be _struct_size() so that naming is consistent with _encode_struct() and _decode_struct(). Signed-off-by: Donald Hunter --- tools/net/ynl/lib/ynl.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index cc1106cbe8a6..f040c8a2a575 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -353,7 +353,7 @@ class NetlinkProtocol: fixed_header_size = 0 if ynl: op = ynl.rsp_by_value[msg.cmd()] - fixed_header_size = ynl._fixed_header_size(op.fixed_header) + fixed_header_size = ynl._struct_size(op.fixed_header) msg.raw_attrs = NlAttrs(msg.raw, fixed_header_size) return msg @@ -567,7 +567,7 @@ class YnlFamily(SpecFamily): offset = 0 if msg_format.fixed_header: decoded.update(self._decode_struct(attr.raw, msg_format.fixed_header)); - offset = self._fixed_header_size(msg_format.fixed_header) + offset = self._struct_size(msg_format.fixed_header) if msg_format.attr_set: if msg_format.attr_set in self.attr_sets: subdict = self._decode(NlAttrs(attr.raw, offset), msg_format.attr_set) @@ -656,18 +656,18 @@ class YnlFamily(SpecFamily): return msg = self.nlproto.decode(self, NlMsg(request, 0, op.attr_set)) - offset = 20 + self._fixed_header_size(op.fixed_header) + offset = 20 + self._struct_size(op.fixed_header) path = self._decode_extack_path(msg.raw_attrs, op.attr_set, offset, extack['bad-attr-offs']) if path: del extack['bad-attr-offs'] extack['bad-attr'] = path - def _fixed_header_size(self, name): + def _struct_size(self, name): if name: - fixed_header_members = self.consts[name].members + members = self.consts[name].members size = 0 - for m in fixed_header_members: + for m in members: if m.type in ['pad', 'binary']: size += m.len else: From patchwork Tue Jan 23 16:05:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527749 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B0E666B2D; Tue, 23 Jan 2024 16:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025965; cv=none; b=daE2165przretvvr+EHD+eywO65hHLJ9alXjBVVjV52zd4QM5KpCzSFHYBbpFJmm+UIszcCYQGXM/m/CLy6aOIdV4hxIubr5B1Lsv5HrpmVoFZKEDj5xk25xvIPil5eRauPO5Z5tClD0Y2Nqq/MOU8pDBBA2dnKSFES49xhOxe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025965; c=relaxed/simple; bh=gYpSoNVwYSUHAQ4vAEn0J0gwqp4tMtngpsxCMyrgN2Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CRL7SsKBjiSFB3/35U+U+wvqp07LXzsNaINHBmSfz4+r22OZniC0vNRSVtymBNyv/k7y5RPdHBgbOrw7wnIsyISszgpW03CuBOg3he1aMz5/+FdMKZG9rEaKAM05fWsXZ9XRF3W9Xjn5rmmj998Ov/pJABMscP/SAO9irbym3Y8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QEsypYZy; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QEsypYZy" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-339237092dcso3235363f8f.3; Tue, 23 Jan 2024 08:06:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025961; x=1706630761; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Iq26HBINM2nU3+AvRmdY5V2S4741Z9krycPhNrWN7d4=; b=QEsypYZybh37YTnPNvLWZ0GPqjqTIyh5xWljSet+Two0NVgitUkwwP+0XAPrYGTOxt 5/LIXyACfeyXoex/4qf1ny9pekakMcmLHE7ejBGPfhSc/t8I5lU7j2AJO0A5OrHzHGbX uaPUU6o9feT/xIHmt4tiOX0frj9Hx0I2iYlE1L0tkam7m8ceLNZX3qFdsYcVIVUOzJP0 HFreTGS3Fk7ZOTEq22GmxcxgJMHmxkvgc0k1Jc7844nMrB9F1R086eDE402aO7rn67nh f4L1lnATHa3mQFeDBFMfFSh2uS9/BgHVAb17TNSplqaAc7IpPRSptLeWDJhHyjwow4hk xxiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025961; x=1706630761; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Iq26HBINM2nU3+AvRmdY5V2S4741Z9krycPhNrWN7d4=; b=nKzgjm5XFxF0Lj1w1QHZrVKzdWe9lc15ZLimKGiGEt1Sna0csehEn6AQMgLTDEqfeF biZ4leGvHrlK9XssZEUI1IhsddtV/BcqleiJPlYy2q7zVvEc8FtBP4xVbVfheD+5z8Dq fAp6PSoqy1NYtc4eT9Zr12agLKZlkNblWiE55zqeh8ZiuVHQlnV/psfrRftoEqPi/87W QWCNqmwWN+p536573CEEdAZGwOQNxF1+jjNQVN1/iQ+ol0TRlgQbljGfGKsL2lrUvs9b o6xO8eZjEAPZvc/PwpuQt6HrU45W873nSM0f3dVw/QQtdP/zGHUrAiSMH1fm5EXNhTH5 181A== X-Gm-Message-State: AOJu0YyLQ1j/FqcP191iPKqdDFWQwr8S+WT9Au3mpiknX7qiP/paW/sk fX3vt134yycTiG4qY8PCcdeX73RXAX2AuftrhOUY1HPFwFZr2SFIeybaGVDphQMeJRpv X-Google-Smtp-Source: AGHT+IH3nSlrRChsNweeRViM9IA7fRAxb+PXaNuYkXAD2g6UukKIkD0ln6ADhImZtu/Mh5ikOx129g== X-Received: by 2002:adf:e58f:0:b0:337:b56f:caf0 with SMTP id l15-20020adfe58f000000b00337b56fcaf0mr3689217wrm.47.1706025961395; Tue, 23 Jan 2024 08:06:01 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.05.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:05:59 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 08/12] tools/net/ynl: Move formatted_string method out of NlAttr Date: Tue, 23 Jan 2024 16:05:34 +0000 Message-ID: <20240123160538.172-9-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The formatted_string() class method was in NlAttr so that it could be accessed by NlAttr.as_struct(). Now that as_struct() has been removed, move formatted_string() to YnlFamily as an internal helper method. Signed-off-by: Donald Hunter Reviewed-by: Breno Leitao --- tools/net/ynl/lib/ynl.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index f040c8a2a575..c9c5b1fcc6f4 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -113,20 +113,6 @@ class NlAttr: else format.little return format.native - @classmethod - def formatted_string(cls, raw, display_hint): - if display_hint == 'mac': - formatted = ':'.join('%02x' % b for b in raw) - elif display_hint == 'hex': - formatted = bytes.hex(raw, ' ') - elif display_hint in [ 'ipv4', 'ipv6' ]: - formatted = format(ipaddress.ip_address(raw)) - elif display_hint == 'uuid': - formatted = str(uuid.UUID(bytes=raw)) - else: - formatted = raw - return formatted - def as_scalar(self, attr_type, byte_order=None): format = self.get_format(attr_type, byte_order) return format.unpack(self.raw)[0] @@ -510,7 +496,7 @@ class YnlFamily(SpecFamily): else: decoded = attr.as_bin() if attr_spec.display_hint: - decoded = NlAttr.formatted_string(decoded, attr_spec.display_hint) + decoded = self._formatted_string(decoded, attr_spec.display_hint) return decoded def _decode_array_nest(self, attr, attr_spec): @@ -696,7 +682,7 @@ class YnlFamily(SpecFamily): if m.enum: value = self._decode_enum(value, m) elif m.display_hint: - value = NlAttr.formatted_string(value, m.display_hint) + value = self._formatted_string(value, m.display_hint) attrs[m.name] = value return attrs @@ -719,6 +705,19 @@ class YnlFamily(SpecFamily): attr_payload += format.pack(value) return attr_payload + def _formatted_string(self, raw, display_hint): + if display_hint == 'mac': + formatted = ':'.join('%02x' % b for b in raw) + elif display_hint == 'hex': + formatted = bytes.hex(raw, ' ') + elif display_hint in [ 'ipv4', 'ipv6' ]: + formatted = format(ipaddress.ip_address(raw)) + elif display_hint == 'uuid': + formatted = str(uuid.UUID(bytes=raw)) + else: + formatted = raw + return formatted + def handle_ntf(self, decoded): msg = dict() if self.include_raw: From patchwork Tue Jan 23 16:05:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527750 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CC4C66B35; Tue, 23 Jan 2024 16:06:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025967; cv=none; b=GraBB6Ah2pREV7sdRqX9sex44onJ60dHaPYrxVFWfkVfci45F3NxOl3/rsBt5J/+vUDKzxUG0kXdFTmAXiDaHA650w0xZ1N52//JwoW8cMtWM6Lu5bo2YII7zlbMd7UlDxuhuYgL2j0bNi9niE1j6EShK4O1iStkYeso1Nl0NGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025967; c=relaxed/simple; bh=0bTLvkXDxr5VVuJAW5EXhbjgNPIt/0wSadxHQ9aB7qw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ucGxXSpdhDHpXxC6Owx2T1+tSp6aWu6IdVCtNBxat7Dx0NHTfWHf0ufTumUkf/1gMq7nZLiAhKpSwRI7mXekQMJxsX6Q18CiZEKPvt3aWSoR4cIkBmLMe5676EIGyzXliPdalAJvdvLBf5c4YksLGjVhoE62O2LqSPRfk021v5Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Xd+clmEk; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Xd+clmEk" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-33937dd1b43so1585267f8f.3; Tue, 23 Jan 2024 08:06:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025963; x=1706630763; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jOml7HfM1hqqj4E7N3j4rQCmumlp/z9U0ns2sKtNDRo=; b=Xd+clmEkfMDnE+yJik9jDY5ZzhD4gAC/mvCZGaHl1QNfvRXoRJh78JnqES6zor9c82 CBlBeNbGJalDXqoryrb21shPVdQAkqouAFaREmnW2kAMzea40Dxx21mN4iqG9/owLXEz Fp2PaqrETPOvpwy9Qrd8uLFFLihUfY6pF9RJ2ErEeV2j3hw39NVDUvfj5cJASMBSc3CX JSKHG7WGRyofmtsSJGWmy+zFJoNF/pNcSHllIdgGOUI2DCZaCEl87eg4Zm/isNlMrHuL bUZ1O8Rm0I0wD9qNs+aPWHvR3Xek9c8MZa3UETHE/S7xXC2p98vaj6dxXG6+zxP2BPRa 4LIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025963; x=1706630763; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jOml7HfM1hqqj4E7N3j4rQCmumlp/z9U0ns2sKtNDRo=; b=S664m7XQFeh5Ywu4vVVA3Fulrd2xK25cQQdd7S6n5j5PrsnawH1wZqa2qdJFMS0XVp uhtiXcvsftR+2v1PLMN3B33DYBeHlw3g8SXJIOeFpgsGc9B46SEDWgN/osPk4maL9d+I YrBm4T+d3WefVF9roJ0SCCEuhkJjE42weOy43lta03E2rkGY6THVPVUMLIMv8uNdxVyZ nTpR10adjPvoncUWIvrg1kPIhQp9dhjM3Xbw8hr29ED0fnf9r5dtYupuzzeNA6Ki6qK3 m8M+uhhZ3xpCb7adi4Jhs/3YFZM+xM8pCiyyAVh/1VXOrLF/FrTp0H4ooQYYSrAh+psu 5jew== X-Gm-Message-State: AOJu0YxckDkgLZCNHLKnHkoFyZ9P1Cc+hRBkFKkeJAEOv1wmel/k8MqT qVT5az/0ugQejEMJ9KeX6Vx/PbwobK3wPbpzLyhzsN7dU5ayxld8U2jQjWowLfQGVzGH X-Google-Smtp-Source: AGHT+IGrtFgaNVl/QyUpfZ1V2i+C88GPGgNv/mMOiOzPPKDl2/ngg2GLfdTBZGxbFmzKMwmGPDhBcA== X-Received: by 2002:a5d:5f53:0:b0:337:bc8e:2ae4 with SMTP id cm19-20020a5d5f53000000b00337bc8e2ae4mr4366164wrb.130.1706025963598; Tue, 23 Jan 2024 08:06:03 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.06.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:06:02 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 09/12] tools/net/ynl: Add support for nested structs Date: Tue, 23 Jan 2024 16:05:35 +0000 Message-ID: <20240123160538.172-10-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Make it possible for struct definitions to reference other struct definitions ofr binary members. For example, the tbf qdisc uses this struct definition for its parms attribute: - name: tc-tbf-qopt type: struct members: - name: rate type: binary struct: tc-ratespec - name: peakrate type: binary struct: tc-ratespec - name: limit type: u32 - name: buffer type: u32 - name: mtu type: u32 This adds the necessary schema changes and adds nested struct encoding and decoding to ynl. Signed-off-by: Donald Hunter --- Documentation/netlink/netlink-raw.yaml | 15 ++++++++++++--- tools/net/ynl/lib/nlspec.py | 2 ++ tools/net/ynl/lib/ynl.py | 26 ++++++++++++++++++++------ 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Documentation/netlink/netlink-raw.yaml b/Documentation/netlink/netlink-raw.yaml index 04b92f1a5cd6..ac4e05415f2f 100644 --- a/Documentation/netlink/netlink-raw.yaml +++ b/Documentation/netlink/netlink-raw.yaml @@ -152,14 +152,23 @@ properties: the right formatting mechanism when displaying values of this type. enum: [ hex, mac, fddi, ipv4, ipv6, uuid ] + struct: + description: Name of the nested struct type. + type: string if: properties: type: - oneOf: - - const: binary - - const: pad + const: pad then: required: [ len ] + if: + properties: + type: + const: binary + then: + oneOf: + - required: [ len ] + - required: [ struct ] # End genetlink-legacy attribute-sets: diff --git a/tools/net/ynl/lib/nlspec.py b/tools/net/ynl/lib/nlspec.py index 44f13e383e8a..5d197a12ab8d 100644 --- a/tools/net/ynl/lib/nlspec.py +++ b/tools/net/ynl/lib/nlspec.py @@ -248,6 +248,7 @@ class SpecStructMember(SpecElement): len integer, optional byte length of binary types display_hint string, hint to help choose format specifier when displaying the value + struct string, name of nested struct type """ def __init__(self, family, yaml): super().__init__(family, yaml) @@ -256,6 +257,7 @@ class SpecStructMember(SpecElement): self.enum = yaml.get('enum') self.len = yaml.get('len') self.display_hint = yaml.get('display-hint') + self.struct = yaml.get('struct') class SpecStruct(SpecElement): diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py index c9c5b1fcc6f4..dff2c042e6c3 100644 --- a/tools/net/ynl/lib/ynl.py +++ b/tools/net/ynl/lib/ynl.py @@ -655,7 +655,10 @@ class YnlFamily(SpecFamily): size = 0 for m in members: if m.type in ['pad', 'binary']: - size += m.len + if m.struct: + size += self._struct_size(m.struct) + else: + size += m.len else: format = NlAttr.get_format(m.type, m.byte_order) size += format.size @@ -672,8 +675,14 @@ class YnlFamily(SpecFamily): if m.type == 'pad': offset += m.len elif m.type == 'binary': - value = data[offset : offset + m.len] - offset += m.len + if m.struct: + len = self._struct_size(m.struct) + value = self._decode_struct(data[offset : offset + len], + m.struct) + offset += len + else: + value = data[offset : offset + m.len] + offset += m.len else: format = NlAttr.get_format(m.type, m.byte_order) [ value ] = format.unpack_from(data, offset) @@ -694,10 +703,15 @@ class YnlFamily(SpecFamily): if m.type == 'pad': attr_payload += bytearray(m.len) elif m.type == 'binary': - if value is None: - attr_payload += bytearray(m.len) + if m.struct: + if value is None: + value = dict() + attr_payload += self._encode_struct(m.struct, value) else: - attr_payload += bytes.fromhex(value) + if value is None: + attr_payload += bytearray(m.len) + else: + attr_payload += bytes.fromhex(value) else: if value is None: value = 0 From patchwork Tue Jan 23 16:05:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527751 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E6D66A34B; Tue, 23 Jan 2024 16:06:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025970; cv=none; b=coqG44skJxTUAjSfj4iO/lNDjUezyfD/x5b+yCzASu7kRla8M0EzHHIZTcxDlauND+u/9Pt00qyZeiFv0Z7Gn4lSZboYcvuSs7B1Zs6ZO090BP529SW4GBFb8mUcdFF4mSWd9DoGCBeyPJf5WMwXtm0de6PwH/R11xJ1FiaM/jM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025970; c=relaxed/simple; bh=V3+5S4rk6FEBta28/vmz1BVv0vhjbWZ588SlkhoF+6M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V4i/pJbGoUgOwia6LPxFohRN2Y0lsejH4LKFpDx74xu8XUFoqL6mMb0N3yNAkd6vVjjS1VLMjP3pE6qwQO+LufNwvJLr5wESNpptvZJfPhwXFHV0vQhBje/39VoBZN2a3sWsa9+axit4g3qxcj9bc01WJzi/It17Jtr5GNztc2Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EYYYrec5; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EYYYrec5" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-336c8ab0b20so4574205f8f.1; Tue, 23 Jan 2024 08:06:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025965; x=1706630765; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1/XVIEYy5evfGmhxOHljdtJwUAo3rOHzIbpX1J17qo0=; b=EYYYrec5Pf04goJaWf1YfBUbfC34Hxd2YkHqrCmfosCQvEa7jlg0HpyPON8bzJ+V+I P/ZhA2WISI8RUwelshWePcqHeq+8COCHjEANy6h7jJ8a5hcDhefRtBwVaS6e6EcyUidG w7mkMl52rgvlDM3cemm9ieduSIlbIK7NSnciSdngGPNd/9axeqdryt7Q81NUgyE+H4z5 EJeR7Zc9KWOWW0uvXWHMRw1y/4yhOnWVFfav/KKA65G1fF9120OaV+lbzuHeQzxSY2Tt fw7x1hAGCLnUPXY7Rn/HFjtWWVqZ1/6E8ixi/dt5ovnBUaSDB1T8oG0H0t0KE1SkMAGp krdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025965; x=1706630765; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1/XVIEYy5evfGmhxOHljdtJwUAo3rOHzIbpX1J17qo0=; b=fAcoEaEG8MZBv7t1O4q6hbW9s1uj/B5Cf0SatJkY6+a0NaadMhXW8GpPIiXICkrF3b sIQr5ii+CFE7l/noutqnFCmoxJnJwtCRzI11jWZavO2X9r8oTei3cUafyQRixZ+KtZjm 0vNXZX8EcTYvpwuQBJWbXmXkRhKB7JvNgYm6DUVAI7q+pB93HrRH7L8F6J+BmQN2gFBY MiyjYg4vBxaItzpAqe+Ged9FLAkc1pXSTr0hmCNX0KSHPjZhmDMRsFMQmAutVfUtyHO0 ksS8Qsr2VjKqbzEG2IxR3gYouMlIErH/8X3XgAXTJq9ZA5XiIqSwpJRjy+MOjn1NwynJ sHTQ== X-Gm-Message-State: AOJu0YzoZpfdIsLweZAsGQB06XQjBtFSztpOZtqurBV8lt4pwBcePTBY oJOz75izKyvlbBSCxiUfCpsQnlPt2FaImH6ZA2E3VHF4umYfN4aY6iu/sCKQPfi12d95 X-Google-Smtp-Source: AGHT+IF5UGjohAJ5ro+4uehknauclV6WuTP5b/sa7lqenf2WFhAI1b/1VHNlZKVhAOfXM9HblCL0fA== X-Received: by 2002:a5d:40c4:0:b0:339:48da:a15 with SMTP id b4-20020a5d40c4000000b0033948da0a15mr464228wrq.76.1706025965516; Tue, 23 Jan 2024 08:06:05 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.06.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:06:04 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 10/12] doc/netlink: Describe nested structs in netlink raw docs Date: Tue, 23 Jan 2024 16:05:36 +0000 Message-ID: <20240123160538.172-11-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Add a description and example of nested struct definitions to the netlink raw documentation. Signed-off-by: Donald Hunter --- .../userspace-api/netlink/netlink-raw.rst | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Documentation/userspace-api/netlink/netlink-raw.rst b/Documentation/userspace-api/netlink/netlink-raw.rst index 1e14f5f22b8e..ecf04c91f70e 100644 --- a/Documentation/userspace-api/netlink/netlink-raw.rst +++ b/Documentation/userspace-api/netlink/netlink-raw.rst @@ -150,3 +150,37 @@ attributes from an ``attribute-set``. For example the following Note that a selector attribute must appear in a netlink message before any sub-message attributes that depend on it. + +Nested struct definitions +------------------------- + +Many raw netlink families such as :doc:`tc<../../networking/netlink_spec/tc>` +make use of nested struct definitions. The ``netlink-raw`` schema makes it +possible to embed a struct within a struct definition using the ``struct`` +property. For example, the following struct definition embeds the +``tc-ratespec`` struct definition for both the ``rate`` and the ``peakrate`` +members of ``struct tc-tbf-qopt``. + +.. code-block:: yaml + + - + name: tc-tbf-qopt + type: struct + members: + - + name: rate + type: binary + struct: tc-ratespec + - + name: peakrate + type: binary + struct: tc-ratespec + - + name: limit + type: u32 + - + name: buffer + type: u32 + - + name: mtu + type: u32 From patchwork Tue Jan 23 16:05:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527752 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66B0F6BB37; Tue, 23 Jan 2024 16:06:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025975; cv=none; b=UZwG59J5P94OSY3YO9O/yMYXkVmcSphvcN4YFO/OpwU8r1wDy9MR9nZI1VTEZGrV8ZV0/Tf78wU9gdpUcArhsW28OTS7kQV/1j4MztpqIMmq3SH5r74zEVq/Sh2R6z3TZzHGPCvbiDJk1krKBGtH7Q6LOJr6pv78XJLnFXJ/pME= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025975; c=relaxed/simple; bh=gCCFkbQi3h7pB/H0SVmDbXDwzfcTplJjQwGfdvt6208=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lzBk0D7zR876ieYpBpMoQm9kvu8U4Rs/CHCBdiKxWSnPBjPNSFRetPUiWdfFnLuq+7JKBWIEgLsiyaT1k42PFA2lYy6wnH4NkCuAAsyvhT9Nk0WdRbsmDbizfjdR1sa1w8z8NmHKMfZb8iR433EPMpVJjEN+LbCKmGNwebZjUuE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mt3DdVAl; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mt3DdVAl" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-3392b15ca41so1866839f8f.0; Tue, 23 Jan 2024 08:06:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025968; x=1706630768; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wLxo4L/OXpdRV2DRbWL0FX0uXQ9Q3iAQOyTEhytQtW8=; b=mt3DdVAl4pErRtNtKQlv1jt8PXm8/tpmXbYHtFLtkuUt6IzWi06LzsBEFkWdjv0cJI qXTsgO1CtPzBhdmaKR60eNGG0/hvX+lVWXmXhX+FAsvbV83+LTVC7++YO5xY87UBZdkz mCY5koMReaMgLKBNesgJe2bdYBzUY46Drzn/bd5PKT3r4Vb4v7UZBYfcXZrqK1K6v9g0 XMypvQqCDe2mU1sr1tF35QaXfeOWRwtxl8kcBtvKQqWofPqMQ1YXXiw6R8fInqRq8/9o 6nnltVBFJOBycv6RBvdGsy9935V3MTOOxeknA+vLG9DDgyuw/9E5YnNZ9uSKpdl1K9FF ZkcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025968; x=1706630768; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wLxo4L/OXpdRV2DRbWL0FX0uXQ9Q3iAQOyTEhytQtW8=; b=qdNk4VMKj8PvnzHkGW1hNxAVJrdzd+ncFQLIVxSC9Hm8DQdy/7UagijD17Qn3LZLnR hPzw8brVwfRY+rZBeVqFQxYXwLBeK1BxUf3f/W0Q3xJRTFDnaNsNqs3bAaypAdDbgPxL 2W8pQD99Pnm1/HpbPepEewAFYQ9OaVClez8CCe0U8JcfZV1ZRc6Y/3cXSGmDk3fOyiQX d8PzOIVNXnXPSgDCVoKfFoTi1Zw1q4/4B3x+gJt3hx9QfUKVspnuAkdlFS2zlc9SZMwW gMCVPLyidHExEvUU8RGbGLy9xKVHv2qsyjgKcBxa54pIpqMnBuolkfPkIiKKMa+o2dHU XLdA== X-Gm-Message-State: AOJu0Yx0Uqwo1Ibya9Ja8oLPppojJRiuDxAEislIeM5RRelsaMz4BNnw bebhPmGFlXteq1fAsCzxMTZc2aNqONI7y9Rr1LMAQE4rj7CY4fuXKRnJzCKUthL5RLmp X-Google-Smtp-Source: AGHT+IG8+SgBWRMFHu9bObYhTM0IW5C15Gr6W9kN/UKPB0m0aiz1jLa87D/sFPlBagWEEo9uEy/N/g== X-Received: by 2002:adf:f641:0:b0:337:b36d:72a4 with SMTP id x1-20020adff641000000b00337b36d72a4mr3112401wrp.36.1706025967916; Tue, 23 Jan 2024 08:06:07 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.06.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:06:06 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 11/12] tools/net/ynl: Add type info to struct members in generated docs Date: Tue, 23 Jan 2024 16:05:37 +0000 Message-ID: <20240123160538.172-12-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Extend the ynl doc generator to include type information for struct members, ignoring the pad type. Signed-off-by: Donald Hunter --- tools/net/ynl/ynl-gen-rst.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/net/ynl/ynl-gen-rst.py b/tools/net/ynl/ynl-gen-rst.py index 262d88f88696..75c969d36b6a 100755 --- a/tools/net/ynl/ynl-gen-rst.py +++ b/tools/net/ynl/ynl-gen-rst.py @@ -189,12 +189,20 @@ def parse_operations(operations: List[Dict[str, Any]]) -> str: def parse_entries(entries: List[Dict[str, Any]], level: int) -> str: """Parse a list of entries""" + ignored = ["pad"] lines = [] for entry in entries: if isinstance(entry, dict): # entries could be a list or a dictionary + field_name = entry.get("name", "") + if field_name in ignored: + continue + type_ = entry.get("type") + struct_ = entry.get("struct") + if type_: + field_name += f" ({inline(type_)})" lines.append( - rst_fields(entry.get("name", ""), sanitize(entry.get("doc", "")), level) + rst_fields(field_name, sanitize(entry.get("doc", "")), level) ) elif isinstance(entry, list): lines.append(rst_list_inline(entry, level)) From patchwork Tue Jan 23 16:05:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Donald Hunter X-Patchwork-Id: 13527753 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCB9261667; Tue, 23 Jan 2024 16:06:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025979; cv=none; b=lF0AcIlhln87qr/fKKvRmmKktPEHOc8CsW4e8QiNfIok79F9JPoEIflGykCM4biymsCmgwZtdGiuMZVImAUoDmqLRFuLEji51wP6xSPxOROWpaHZgtpFekZyKb+TCP8dP8r5V2M2ckKSDYDvtcuGU6qBIErW8x85w0uGGwa7RtY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706025979; c=relaxed/simple; bh=8098iyevRZmq8WUQ6q/OsqtuWNClMOQs4E4MOL4qOWw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sLG4E8XRBRMPBgOxwlej2/pktkwTI5LD4CfxdVdoxNqjqU349p5R+yxVQzOVwmFgKF9Z8NUUzNqjq+e78aVG7wzpVRo8OrSxjaDf4+eZoh0p0WU/8XNQBLkKG2xUx902opA7xZImRzimD9kWGOsrYUS1TpRvP8X8FD/XNuq4OjQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aVco0d5c; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aVco0d5c" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3368abe1093so3812925f8f.2; Tue, 23 Jan 2024 08:06:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706025971; x=1706630771; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TBzt6nKGUUhQiFpCbWAozRASE/SVErwuAmCVEdz/fDE=; b=aVco0d5cmT9sdjUvi1zZU2tAAQvL3a7sprX85vUc0UAZjD0w6o/odaHZMWEeCxjRfu WWoUdi/+Ao2VSyBReSr5A9NAPn35wXCj0cViMdKbbOY9zovpfsJdOHFwzwk+iQmzm3D1 HOyxiOJ4dUCL5sS4mz3FKLaWbeNefjrAgHIsXptwoYnAwqRXnHcHis91BJUJDeQ965ho m8nnYnTXtVzQ45CI2bZsdtvu7wLZ9UF7hCaYMIW0S0WG+Cv8ieMVu980HoAtJPFGYXPJ eCzBsp8dqPHKks0xR76ISFjJjfi+d82iOMpZ3q34sLIjobp3xkQ7eK88CS+Txl5Vd7pt RKZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706025971; x=1706630771; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TBzt6nKGUUhQiFpCbWAozRASE/SVErwuAmCVEdz/fDE=; b=ZpmDKjz7kN3SubOGaETLg7+KRKaruNZE1cdDw9fNDVkEZo3uOHEwwDUs+Qkbknqt5E VS+BoQoROIODyI0T4BnsWLiWFZa6iaB2AEyH/5XT/F2xNXHWsZFPi6TXVinnrVrB32IB 3mxC7lwoN5oehFU9QC62MwrH9W+IgijMgCGQweO8b/44b5O9zJriGckuw++RT0VBli5y pfNhDgXRe48+6mp3cQ1xD/Uh+O7/lXo9/pfdY51IBqMzCF0I6lrqp5frv+/cD/8ItDGk xNVLvCyHMdMvf+Rf6hM9pY2ZD7khmZptDNJZvhkRoTEuCXm3OfLejsfh0TqujUAR2TY3 8B3w== X-Gm-Message-State: AOJu0YwaKaynTyLFs5+eBFkZb64cXIoKVu3+5h5q7EI7Z50zWLz49noY JVWWZWv+fjYatBQ6UIhP8PtrLllR0z8+SLCEi3bUOWKwtPOF4/G6W3wT1dwdL0i0vn4B X-Google-Smtp-Source: AGHT+IHEBVu0pCJGG9a+V/40jCsrySLGhVzO7b6qL9Siil+AP37wKbFpkTjHuwlEkM0FaytuIGu4Yw== X-Received: by 2002:adf:e501:0:b0:337:c55f:66f3 with SMTP id j1-20020adfe501000000b00337c55f66f3mr3774058wrm.84.1706025970589; Tue, 23 Jan 2024 08:06:10 -0800 (PST) Received: from imac.fritz.box ([2a02:8010:60a0:0:b949:92c4:6118:e3b1]) by smtp.gmail.com with ESMTPSA id t4-20020a5d42c4000000b003392c3141absm8123830wrr.1.2024.01.23.08.06.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Jan 2024 08:06:09 -0800 (PST) From: Donald Hunter To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Jonathan Corbet , linux-doc@vger.kernel.org, Jacob Keller , Breno Leitao , Jiri Pirko , Alessandro Marcolini Cc: donald.hunter@redhat.com, Donald Hunter Subject: [PATCH net-next v1 12/12] doc/netlink/specs: Update the tc spec Date: Tue, 23 Jan 2024 16:05:38 +0000 Message-ID: <20240123160538.172-13-donald.hunter@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240123160538.172-1-donald.hunter@gmail.com> References: <20240123160538.172-1-donald.hunter@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Fill in many of the gaps in the tc netlink spec, including stats attrs, classes and actions. Many documentation strings have also been added. This is still a work in progress, albeit fairly complete: - there are still many attributes left as binary blobs. - actions have not had much testing Signed-off-by: Donald Hunter --- Documentation/netlink/specs/tc.yaml | 2218 +++++++++++++++++++++++++-- 1 file changed, 2067 insertions(+), 151 deletions(-) diff --git a/Documentation/netlink/specs/tc.yaml b/Documentation/netlink/specs/tc.yaml index 4346fa402fc9..4b21b00dbebe 100644 --- a/Documentation/netlink/specs/tc.yaml +++ b/Documentation/netlink/specs/tc.yaml @@ -48,21 +48,28 @@ definitions: - name: bytes type: u64 + doc: Number of enqueued bytes - name: packets type: u32 + doc: Number of enqueued packets - name: drops type: u32 + doc: Packets dropped because of lack of resources - name: overlimits type: u32 + doc: | + Number of throttle events when this flow goes out of allocated bandwidth - name: bps type: u32 + doc: Current flow byte rate - name: pps type: u32 + doc: Current flow packet rate - name: qlen type: u32 @@ -112,6 +119,7 @@ definitions: - name: limit type: u32 + doc: Queue length; bytes for bfifo, packets for pfifo - name: tc-htb-opt type: struct @@ -119,11 +127,11 @@ definitions: - name: rate type: binary - len: 12 + struct: tc-ratespec - name: ceil type: binary - len: 12 + struct: tc-ratespec - name: buffer type: u32 @@ -149,15 +157,19 @@ definitions: - name: rate2quantum type: u32 + doc: bps->quantum divisor - name: defcls type: u32 + doc: Default class number - name: debug type: u32 + doc: Debug flags - name: direct-pkts type: u32 + doc: Count of non shaped packets - name: tc-gred-qopt type: struct @@ -165,15 +177,19 @@ definitions: - name: limit type: u32 + doc: HARD maximal queue length in bytes - name: qth-min type: u32 + doc: Min average length threshold in bytes - name: qth-max type: u32 + doc: Max average length threshold in bytes - name: DP type: u32 + doc: Up to 2^32 DPs - name: backlog type: u32 @@ -195,15 +211,19 @@ definitions: - name: Wlog type: u8 + doc: log(W) - name: Plog type: u8 + doc: log(P_max / (qth-max - qth-min)) - name: Scell_log type: u8 + doc: cell size for idle damping - name: prio type: u8 + doc: Priority of this VQ - name: packets type: u32 @@ -266,9 +286,11 @@ definitions: - name: bands type: u16 + doc: Number of bands - name: max-bands type: u16 + doc: Maximum number of queues - name: tc-netem-qopt type: struct @@ -276,21 +298,138 @@ definitions: - name: latency type: u32 + doc: Added delay in microseconds - name: limit type: u32 + doc: Fifo limit in packets - name: loss type: u32 + doc: Random packet loss (0=none, ~0=100%) - name: gap type: u32 + doc: Re-ordering gap (0 for none) - name: duplicate type: u32 + doc: Random packet duplication (0=none, ~0=100%) - name: jitter type: u32 + doc: Random jitter latency in microseconds + - + name: tc-netem-gimodel + doc: State transition probabilities for 4 state model + type: struct + members: + - + name: p13 + type: u32 + - + name: p31 + type: u32 + - + name: p32 + type: u32 + - + name: p14 + type: u32 + - + name: p23 + type: u32 + - + name: tc-netem-gemodel + doc: Gilbert-Elliot models + type: struct + members: + - + name: p + type: u32 + - + name: r + type: u32 + - + name: h + type: u32 + - + name: k1 + type: u32 + - + name: tc-netem-corr + type: struct + members: + - + name: delay-corr + type: u32 + doc: Delay correlation + - + name: loss-corr + type: u32 + doc: Packet loss correlation + - + name: dup-corr + type: u32 + doc: Duplicate correlation + - + name: tc-netem-reorder + type: struct + members: + - + name: probability + type: u32 + - + name: correlation + type: u32 + - + name: tc-netem-corrupt + type: struct + members: + - + name: probability + type: u32 + - + name: correlation + type: u32 + - + name: tc-netem-rate + type: struct + members: + - + name: rate + type: u32 + - + name: packet-overhead + type: s32 + - + name: cell-size + type: u32 + - + name: cell-overhead + type: s32 + - + name: tc-netem-slot + type: struct + members: + - + name: min-delay + type: s64 + - + name: max-delay + type: s64 + - + name: max-packets + type: s32 + - + name: max-bytes + type: s32 + - + name: dist-delay + type: s64 + - + name: dist-jitter + type: s64 - name: tc-plug-qopt type: struct @@ -307,11 +446,13 @@ definitions: members: - name: bands - type: u16 + type: u32 + doc: Number of bands - name: priomap type: binary len: 16 + doc: Map of logical priority -> PRIO band - name: tc-red-qopt type: struct @@ -319,21 +460,27 @@ definitions: - name: limit type: u32 + doc: Hard queue length in packets - name: qth-min type: u32 + doc: Min average threshold in packets - name: qth-max type: u32 + doc: Max average threshold in packets - name: Wlog type: u8 + doc: log(W) - name: Plog type: u8 + doc: log(P_max / (qth-max - qth-min)) - name: Scell-log type: u8 + doc: Cell size for idle damping - name: flags type: u8 @@ -369,71 +516,128 @@ definitions: name: penalty-burst type: u32 - - name: tc-sfq-qopt-v1 # TODO nested structs + name: tc-sfq-qopt type: struct members: - name: quantum type: u32 + doc: Bytes per round allocated to flow - name: perturb-period type: s32 + doc: Period of hash perturbation - name: limit type: u32 + doc: Maximal packets in queue - name: divisor type: u32 + doc: Hash divisor - name: flows type: u32 + doc: Maximal number of flows + - + name: tc-sfqred-stats + type: struct + members: + - + name: prob-drop + type: u32 + doc: Early drops, below max threshold + - + name: forced-drop + type: u32 + doc: Early drops, after max threshold + - + name: prob-mark + type: u32 + doc: Marked packets, below max threshold + - + name: forced-mark + type: u32 + doc: Marked packets, after max threshold + - + name: prob-mark-head + type: u32 + doc: Marked packets, below max threshold + - + name: forced-mark-head + type: u32 + doc: Marked packets, after max threshold + - + name: tc-sfq-qopt-v1 + type: struct + members: + - + name: v0 + type: binary + struct: tc-sfq-qopt - name: depth type: u32 + doc: Maximum number of packets per flow - name: headdrop type: u32 - name: limit type: u32 + doc: HARD maximal flow queue length in bytes - name: qth-min type: u32 + doc: Min average length threshold in bytes - - name: qth-mac + name: qth-max type: u32 + doc: Max average length threshold in bytes - name: Wlog type: u8 + doc: log(W) - name: Plog type: u8 + doc: log(P_max / (qth-max - qth-min)) - name: Scell-log type: u8 + doc: Cell size for idle damping - name: flags type: u8 - name: max-P type: u32 + doc: probabilty, high resolution - - name: prob-drop - type: u32 + name: stats + type: binary + struct: tc-sfqred-stats + - + name: tc-ratespec + type: struct + members: - - name: forced-drop - type: u32 + name: cell-log + type: u8 - - name: prob-mark - type: u32 + name: linklayer + type: u8 - - name: forced-mark - type: u32 + name: overhead + type: u8 - - name: prob-mark-head - type: u32 + name: cell-align + type: u8 - - name: forced-mark-head + name: mpu + type: u8 + - + name: rate type: u32 - name: tc-tbf-qopt @@ -441,12 +645,12 @@ definitions: members: - name: rate - type: binary # TODO nested struct tc_ratespec - len: 12 + type: binary + struct: tc-ratespec - name: peakrate - type: binary # TODO nested struct tc_ratespec - len: 12 + type: binary + struct: tc-ratespec - name: limit type: u32 @@ -491,67 +695,1299 @@ definitions: - name: interval type: s8 + doc: Sampling period - name: ewma-log type: u8 -attribute-sets: + doc: The log() of measurement window weight - - name: tc-attrs + name: tc-choke-xstats + type: struct + members: + - + name: early + type: u32 + doc: Early drops + - + name: pdrop + type: u32 + doc: Drops due to queue limits + - + name: other + type: u32 + doc: Drops due to drop() calls + - + name: marked + type: u32 + doc: Marked packets + - + name: matched + type: u32 + doc: Drops due to flow match + - + name: tc-codel-xstats + type: struct + members: + - + name: maxpacket + type: u32 + doc: Largest packet we've seen so far + - + name: count + type: u32 + doc: How many drops we've done since the last time we entered dropping state + - + name: lastcount + type: u32 + doc: Count at entry to dropping state + - + name: ldelay + type: u32 + doc: in-queue delay seen by most recently dequeued packet + - + name: drop-next + type: s32 + doc: Time to drop next packet + - + name: drop-overlimit + type: u32 + doc: Number of times max qdisc packet limit was hit + - + name: ecn-mark + type: u32 + doc: Number of packets we've ECN marked instead of dropped + - + name: dropping + type: u32 + doc: Are we in a dropping state? + - + name: ce-mark + type: u32 + doc: Number of CE marked packets because of ce-threshold + - + name: tc-fq-codel-xstats + type: struct + members: + - + name: type + type: u32 + - + name: maxpacket + type: u32 + doc: Largest packet we've seen so far + - + name: drop-overlimit + type: u32 + doc: Number of times max qdisc packet limit was hit + - + name: ecn-mark + type: u32 + doc: Number of packets we ECN marked instead of being dropped + - + name: new-flow-count + type: u32 + doc: Number of times packets created a new flow + - + name: new-flows-len + type: u32 + doc: Count of flows in new list + - + name: old-flows-len + type: u32 + doc: Count of flows in old list + - + name: ce-mark + type: u32 + doc: Packets above ce-threshold + - + name: memory-usage + type: u32 + doc: Memory usage in bytes + - + name: drop-overmemory + type: u32 + - + name: tc-fq-pie-xstats + type: struct + members: + - + name: packets-in + type: u32 + doc: Total number of packets enqueued + - + name: dropped + type: u32 + doc: Packets dropped due to fq_pie_action + - + name: overlimit + type: u32 + doc: Dropped due to lack of space in queue + - + name: overmemory + type: u32 + doc: Dropped due to lack of memory in queue + - + name: ecn-mark + type: u32 + doc: Packets marked with ecn + - + name: new-flow-count + type: u32 + doc: Count of new flows created by packets + - + name: new-flows-len + type: u32 + doc: Count of flows in new list + - + name: old-flows-len + type: u32 + doc: Count of flows in old list + - + name: memory-usage + type: u32 + doc: Total memory across all queues + - + name: tc-fq-qd-stats + type: struct + members: + - + name: gc-flows + type: u64 + - + name: highprio-packets + type: u64 + doc: obsolete + - + name: tcp-retrans + type: u64 + doc: obsolete + - + name: throttled + type: u64 + - + name: flows-plimit + type: u64 + - + name: pkts-too-long + type: u64 + - + name: allocation-errors + type: u64 + - + name: time-next-delayed-flow + type: s64 + - + name: flows + type: u32 + - + name: inactive-flows + type: u32 + - + name: throttled-flows + type: u32 + - + name: unthrottle-latency-ns + type: u32 + - + name: ce-mark + type: u64 + doc: Packets above ce-threshold + - + name: horizon-drops + type: u64 + - + name: horizon-caps + type: u64 + - + name: fastpath-packets + type: u64 + - + name: band-drops + type: binary + len: 24 + - + name: band-pkt-count + type: binary + len: 12 + - + name: pad + type: pad + len: 4 + - + name: tc-hhf-xstats + type: struct + members: + - + name: drop-overlimit + type: u32 + doc: Number of times max qdisc packet limit was hit + - + name: hh-overlimit + type: u32 + doc: Number of times max heavy-hitters was hit + - + name: hh-tot-count + type: u32 + doc: Number of captured heavy-hitters so far + - + name: hh-cur-count + type: u32 + doc: Number of current heavy-hitters + - + name: tc-pie-xstats + type: struct + members: + - + name: prob + type: u64 + doc: Current probability + - + name: delay + type: u32 + doc: Current delay in ms + - + name: avg-dq-rate + type: u32 + doc: Current average dq rate in bits/pie-time + - + name: dq-rate-estimating + type: u32 + doc: Is avg-dq-rate being calculated? + - + name: packets-in + type: u32 + doc: Total number of packets enqueued + - + name: dropped + type: u32 + doc: Packets dropped due to pie action + - + name: overlimit + type: u32 + doc: Dropped due to lack of space in queue + - + name: maxq + type: u32 + doc: Maximum queue size + - + name: ecn-mark + type: u32 + doc: Packets marked with ecn + - + name: tc-red-xstats + type: struct + members: + - + name: early + type: u32 + doc: Early drops + - + name: pdrop + type: u32 + doc: Drops due to queue limits + - + name: other + type: u32 + doc: Drops due to drop() calls + - + name: marked + type: u32 + doc: Marked packets + - + name: tc-sfb-xstats + type: struct + members: + - + name: earlydrop + type: u32 + - + name: penaltydrop + type: u32 + - + name: bucketdrop + type: u32 + - + name: queuedrop + type: u32 + - + name: childdrop + type: u32 + doc: drops in child qdisc + - + name: marked + type: u32 + - + name: maxqlen + type: u32 + - + name: maxprob + type: u32 + - + name: avgprob + type: u32 + - + name: tc-sfq-xstats + type: struct + members: + - + name: allot + type: s32 + - + name: gnet-stats-basic + type: struct + members: + - + name: bytes + type: u64 + - + name: packets + type: u32 + - + name: gnet-stats-rate-est + type: struct + members: + - + name: bps + type: u32 + - + name: pps + type: u32 + - + name: gnet-stats-rate-est64 + type: struct + members: + - + name: bps + type: u64 + - + name: pps + type: u64 + - + name: gnet-stats-queue + type: struct + members: + - + name: qlen + type: u32 + - + name: backlog + type: u32 + - + name: drops + type: u32 + - + name: requeues + type: u32 + - + name: overlimits + type: u32 + - + name: tc-u32-key + type: struct + members: + - + name: mask + type: u32 + byte-order: big-endian + - + name: val + type: u32 + byte-order: big-endian + - + name: "off" + type: s32 + - + name: offmask + type: s32 + - + name: tc-u32-sel + type: struct + members: + - + name: flags + type: u8 + - + name: offshift + type: u8 + - + name: nkeys + type: u8 + - + name: offmask + type: u16 + byte-order: big-endian + - + name: "off" + type: u16 + - + name: offoff + type: s16 + - + name: hoff + type: s16 + - + name: hmask + type: u32 + byte-order: big-endian + - + name: keys + type: binary + struct: tc-u32-key # TODO: array + - + name: tc-u32-pcnt + type: struct + members: + - + name: rcnt + type: u64 + - + name: rhit + type: u64 + - + name: kcnts + type: u64 # TODO: array + - + name: tcf-t + type: struct + members: + - + name: install + type: u64 + - + name: lastuse + type: u64 + - + name: expires + type: u64 + - + name: firstuse + type: u64 + - + name: tc-gen + type: struct + members: + - + name: index + type: u32 + - + name: capab + type: u32 + - + name: action + type: s32 + - + name: refcnt + type: s32 + - + name: bindcnt + type: s32 + - + name: tc-gact-p + type: struct + members: + - + name: ptype + type: u16 + - + name: pval + type: u16 + - + name: paction + type: s32 + - + name: tcf-ematch-tree-hdr + type: struct + members: + - + name: nmatches + type: u16 + - + name: progid + type: u16 + - + name: tc-basic-pcnt + type: struct + members: + - + name: rcnt + type: u64 + - + name: rhit + type: u64 + - + name: tc-matchall-pcnt + type: struct + members: + - + name: rhit + type: u64 + - + name: tc-mpls + type: struct + members: + - + name: index + type: u32 + - + name: capab + type: u32 + - + name: action + type: s32 + - + name: refcnt + type: s32 + - + name: bindcnt + type: s32 + - + name: m-action + type: s32 + - + name: tc-police + type: struct + members: + - + name: index + type: u32 + - + name: action + type: s32 + - + name: limit + type: u32 + - + name: burst + type: u32 + - + name: mtu + type: u32 + - + name: rate + type: binary + struct: tc-ratespec + - + name: peakrate + type: binary + struct: tc-ratespec + - + name: refcnt + type: s32 + - + name: bindcnt + type: s32 + - + name: capab + type: u32 + - + name: tc-pedit-sel + type: struct + members: + - + name: index + type: u32 + - + name: capab + type: u32 + - + name: action + type: s32 + - + name: refcnt + type: s32 + - + name: bindcnt + type: s32 + - + name: nkeys + type: u8 + - + name: flags + type: u8 + - + name: keys + type: binary + struct: tc-pedit-key # TODO: array + - + name: tc-pedit-key + type: struct + members: + - + name: mask + type: u32 + - + name: val + type: u32 + - + name: "off" + type: u32 + - + name: at + type: u32 + - + name: offmask + type: u32 + - + name: shift + type: u32 + - + name: tc-vlan + type: struct + members: + - + name: index + type: u32 + - + name: capab + type: u32 + - + name: action + type: s32 + - + name: refcnt + type: s32 + - + name: bindcnt + type: s32 + - + name: v-action + type: s32 +attribute-sets: + - + name: tc-attrs + attributes: + - + name: kind + type: string + - + name: options + type: sub-message + sub-message: tc-options-msg + selector: kind + - + name: stats + type: binary + struct: tc-stats + - + name: xstats + type: sub-message + sub-message: tca-stats-app-msg + selector: kind + - + name: rate + type: binary + struct: gnet-estimator + - + name: fcnt + type: u32 + - + name: stats2 + type: nest + nested-attributes: tca-stats-attrs + - + name: stab + type: nest + nested-attributes: tca-stab-attrs + - + name: pad + type: pad + - + name: dump-invisible + type: flag + - + name: chain + type: u32 + - + name: hw-offload + type: u8 + - + name: ingress-block + type: u32 + - + name: egress-block + type: u32 + - + name: dump-flags + type: bitfield32 + - + name: ext-warn-msg + type: string + - + name: tc-act-attrs + attributes: + - + name: kind + type: string + - + name: options + type: sub-message + sub-message: tc-act-options-msg + selector: kind + - + name: index + type: u32 + - + name: stats + type: nest + nested-attributes: tc-act-stats-attrs + - + name: pad + type: pad + - + name: cookie + type: binary + - + name: flags + type: bitfield32 + - + name: hw-stats + type: bitfield32 + - + name: used-hw-stats + type: bitfield32 + - + name: in-hw-count + type: u32 + - + name: tc-act-stats-attrs + attributes: + - + name: basic + type: binary + struct: gnet-stats-basic + - + name: rate-est + type: binary + struct: gnet-stats-rate-est + - + name: queue + type: binary + struct: gnet-stats-queue + - + name: app + type: binary + - + name: rate-est64 + type: binary + struct: gnet-stats-rate-est64 + - + name: pad + type: pad + - + name: basic-hw + type: binary + struct: gnet-stats-basic + - + name: pkt64 + type: u64 + - + name: tc-act-bpf-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: ops-len + type: u16 + - + name: ops + type: binary + - + name: fd + type: u32 + - + name: name + type: string + - + name: pad + type: pad + - + name: tag + type: binary + - + name: id + type: binary + - + name: tc-act-connmark-attrs + attributes: + - + name: parms + type: binary + - + name: tm + type: binary + struct: tcf-t + - + name: pad + type: pad + - + name: tc-act-csum-attrs + attributes: + - + name: parms + type: binary + - + name: tm + type: binary + struct: tcf-t + - + name: pad + type: pad + - + name: tc-act-ct-attrs + attributes: + - + name: parms + type: binary + - + name: tm + type: binary + struct: tcf-t + - + name: action + type: u16 + - + name: zone + type: u16 + - + name: mark + type: u32 + - + name: mark-mask + type: u32 + - + name: labels + type: binary + - + name: labels-mask + type: binary + - + name: nat-ipv4-min + type: u32 + byte-order: big-endian + - + name: nat-ipv4-max + type: u32 + byte-order: big-endian + - + name: nat-ipv6-min + type: binary + - + name: nat-ipv6-max + type: binary + - + name: nat-port-min + type: u16 + byte-order: big-endian + - + name: nat-port-max + type: u16 + byte-order: big-endian + - + name: pad + type: pad + - + name: helper-name + type: string + - + name: helper-family + type: u8 + - + name: helper-proto + type: u8 + - + name: tc-act-ctinfo-attrs + attributes: + - + name: pad + type: pad + - + name: tm + type: binary + struct: tcf-t + - + name: act + type: binary + - + name: zone + type: u16 + - + name: parms-dscp-mask + type: u32 + - + name: parms-dscp-statemask + type: u32 + - + name: parms-cpmark-mask + type: u32 + - + name: stats-dscp-set + type: u64 + - + name: stats-dscp-error + type: u64 + - + name: stats-cpmark-set + type: u64 + - + name: tc-act-gate-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: pad + type: pad + - + name: priority + type: s32 + - + name: entry-list + type: binary + - + name: base-time + type: u64 + - + name: cycle-time + type: u64 + - + name: cycle-time-ext + type: u64 + - + name: flags + type: u32 + - + name: clockid + type: s32 + - + name: tc-act-ife-attrs + attributes: + - + name: parms + type: binary + - + name: tm + type: binary + struct: tcf-t + - + name: dmac + type: binary + - + name: smac + type: binary + - + name: type + type: u16 + - + name: metalst + type: binary + - + name: pad + type: pad + - + name: tc-act-mirred-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: pad + type: pad + - + name: blockid + type: binary + - + name: tc-act-mpls-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + struct: tc-mpls + - + name: pad + type: pad + - + name: proto + type: u16 + byte-order: big-endian + - + name: label + type: u32 + - + name: tc + type: u8 + - + name: ttl + type: u8 + - + name: bos + type: u8 + - + name: tc-act-nat-attrs + attributes: + - + name: parms + type: binary + - + name: tm + type: binary + struct: tcf-t + - + name: pad + type: pad + - + name: tc-act-pedit-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + struct: tc-pedit-sel + - + name: pad + type: pad + - + name: parms-ex + type: binary + - + name: keys-ex + type: binary + - + name: key-ex + type: binary + - + name: tc-act-simple-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: data + type: binary + - + name: pad + type: pad + - + name: tc-act-skbedit-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: priority + type: u32 + - + name: queue-mapping + type: u16 + - + name: mark + type: u32 + - + name: pad + type: pad + - + name: ptype + type: u16 + - + name: mask + type: u32 + - + name: flags + type: u64 + - + name: queue-mapping-max + type: u16 + - + name: tc-act-skbmod-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: dmac + type: binary + - + name: smac + type: binary + - + name: etype + type: binary + - + name: pad + type: pad + - + name: tc-act-tunnel-key-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + - + name: enc-ipv4-src + type: u32 + byte-order: big-endian + - + name: enc-ipv4-dst + type: u32 + byte-order: big-endian + - + name: enc-ipv6-src + type: binary + - + name: enc-ipv6-dst + type: binary + - + name: enc-key-id + type: u64 + byte-order: big-endian + - + name: pad + type: pad + - + name: enc-dst-port + type: u16 + byte-order: big-endian + - + name: no-csum + type: u8 + - + name: enc-opts + type: binary + - + name: enc-tos + type: u8 + - + name: enc-ttl + type: u8 + - + name: no-frag + type: flag + - + name: tc-act-vlan-attrs attributes: - - name: kind - type: string - - - name: options - type: sub-message - sub-message: tc-options-msg - selector: kind + name: tm + type: binary + struct: tcf-t - - name: stats + name: parms type: binary - struct: tc-stats + struct: tc-vlan - - name: xstats + name: push-vlan-id + type: u16 + - + name: push-vlan-protocol + type: u16 + - + name: pad + type: pad + - + name: push-vlan-priority + type: u8 + - + name: push-eth-dst type: binary - - name: rate + name: push-eth-src type: binary - struct: gnet-estimator + - + name: tc-basic-attrs + attributes: - - name: fcnt + name: classid type: u32 - - name: stats2 + name: ematches type: nest - nested-attributes: tca-stats-attrs + nested-attributes: tc-ematch-attrs - - name: stab + name: act + type: array-nest + nested-attributes: tc-act-attrs + - + name: police type: nest - nested-attributes: tca-stab-attrs + nested-attributes: tc-police-attrs + - + name: pcnt + type: binary + struct: tc-basic-pcnt - name: pad type: pad + - + name: tc-bpf-attrs + attributes: - - name: dump-invisible - type: flag + name: act + type: nest + nested-attributes: tc-act-attrs - - name: chain + name: police + type: nest + nested-attributes: tc-police-attrs + - + name: classid type: u32 - - name: hw-offload - type: u8 + name: ops-len + type: u16 - - name: ingress-block + name: ops + type: binary + - + name: fd type: u32 - - name: egress-block + name: name + type: string + - + name: flags type: u32 - - name: dump-flags - type: bitfield32 + name: flags-gen + type: u32 - - name: ext-warn-msg - type: string + name: tag + type: binary + - + name: id + type: u32 - name: tc-cake-attrs attributes: @@ -641,7 +2077,8 @@ attribute-sets: type: u32 - name: tin-stats - type: binary + type: array-nest + nested-attributes: tc-cake-tin-stats-attrs - name: deficit type: s32 @@ -660,6 +2097,84 @@ attribute-sets: - name: blue-timer-us type: s32 + - + name: tc-cake-tin-stats-attrs + attributes: + - + name: pad + type: pad + - + name: sent-packets + type: u32 + - + name: sent-bytes64 + type: u64 + - + name: dropped-packets + type: u32 + - + name: dropped-bytes64 + type: u64 + - + name: acks-dropped-packets + type: u32 + - + name: acks-dropped-bytes64 + type: u64 + - + name: ecn-marked-packets + type: u32 + - + name: ecn-marked-bytes64 + type: u64 + - + name: backlog-packets + type: u32 + - + name: backlog-bytes + type: u32 + - + name: threshold-rate64 + type: u64 + - + name: target-us + type: u32 + - + name: interval-us + type: u32 + - + name: way-indirect-hits + type: u32 + - + name: way-misses + type: u32 + - + name: way-collisions + type: u32 + - + name: peak-delay-us + type: u32 + - + name: avg-delay-us + type: u32 + - + name: base-delay-us + type: u32 + - + name: sparse-flows + type: u32 + - + name: bulk-flows + type: u32 + - + name: unresponsive-flows + type: u32 + - + name: max-skblen + type: u32 + - + name: flow-quantum + type: u32 - name: tc-cbs-attrs attributes: @@ -667,6 +2182,20 @@ attribute-sets: name: parms type: binary struct: tc-cbs-qopt + - + name: tc-cgroup-attrs + attributes: + - + name: act + type: nest + nested-attributes: tc-act-attrs + - + name: police + type: nest + nested-attributes: tc-police-attrs + - + name: ematches + type: binary - name: tc-choke-attrs attributes: @@ -677,6 +2206,9 @@ attribute-sets: - name: stab type: binary + checks: + min-len: 256 + max-len: 256 - name: max-p type: u32 @@ -704,6 +2236,56 @@ attribute-sets: - name: quantum type: u32 + - + name: tc-ematch-attrs + attributes: + - + name: tree-hdr + type: binary + struct: tcf-ematch-tree-hdr + - + name: tree-list + type: binary + - + name: tc-flow-attrs + attributes: + - + name: keys + type: u32 + - + name: mode + type: u32 + - + name: baseclass + type: u32 + - + name: rshift + type: u32 + - + name: addend + type: u32 + - + name: mask + type: u32 + - + name: xor + type: u32 + - + name: divisor + type: u32 + - + name: act + type: binary + - + name: police + type: nest + nested-attributes: tc-police-attrs + - + name: ematches + type: binary + - + name: perturb + type: u32 - name: tc-flower-attrs attributes: @@ -953,15 +2535,19 @@ attribute-sets: - name: key-arp-sha type: binary + display-hint: mac - name: key-arp-sha-mask type: binary + display-hint: mac - name: key-arp-tha type: binary + display-hint: mac - name: key-arp-tha-mask type: binary + display-hint: mac - name: key-mpls-ttl type: u8 @@ -1020,10 +2606,12 @@ attribute-sets: type: u8 - name: key-enc-opts - type: binary + type: nest + nested-attributes: tc-flower-key-enc-opts-attrs - name: key-enc-opts-mask - type: binary + type: nest + nested-attributes: tc-flower-key-enc-opts-attrs - name: in-hw-count type: u32 @@ -1056,41 +2644,165 @@ attribute-sets: name: key-ct-zone-mask type: u16 - - name: key-ct-mark - type: u32 + name: key-ct-mark + type: u32 + - + name: key-ct-mark-mask + type: u32 + - + name: key-ct-labels + type: binary + - + name: key-ct-labels-mask + type: binary + - + name: key-mpls-opts + type: nest + nested-attributes: tc-flower-key-mpls-opt-attrs + - + name: key-hash + type: u32 + - + name: key-hash-mask + type: u32 + - + name: key-num-of-vlans + type: u8 + - + name: key-pppoe-sid + type: u16 + byte-order: big-endian + - + name: key-ppp-proto + type: u16 + byte-order: big-endian + - + name: key-l2-tpv3-sid + type: u32 + byte-order: big-endian + - + name: l2-miss + type: u8 + - + name: key-cfm + type: nest + nested-attributes: tc-flower-key-cfm-attrs + - + name: key-spi + type: u32 + byte-order: big-endian + - + name: key-spi-mask + type: u32 + byte-order: big-endian + - + name: tc-flower-key-enc-opts-attrs + attributes: + - + name: geneve + type: nest + nested-attributes: tc-flower-key-enc-opt-geneve-attrs + - + name: vxlan + type: nest + nested-attributes: tc-flower-key-enc-opt-vxlan-attrs + - + name: erspan + type: nest + nested-attributes: tc-flower-key-enc-opt-erspan-attrs + - + name: gtp + type: nest + nested-attributes: tc-flower-key-enc-opt-gtp-attrs + - + name: tc-flower-key-enc-opt-geneve-attrs + attributes: + - + name: class + type: u16 + - + name: type + type: u8 + - + name: data + type: binary + - + name: tc-flower-key-enc-opt-vxlan-attrs + attributes: + - + name: gbp + type: u32 + - + name: tc-flower-key-enc-opt-erspan-attrs + attributes: + - + name: ver + type: u8 + - + name: index + type: u32 + - + name: dir + type: u8 + - + name: hwid + type: u8 + - + name: tc-flower-key-enc-opt-gtp-attrs + attributes: + - + name: pdu-type + type: u8 - - name: key-ct-mark-mask - type: u32 + name: qfi + type: u8 + - + name: tc-flower-key-mpls-opt-attrs + attributes: - - name: key-ct-labels - type: binary + name: lse-depth + type: u8 - - name: key-ct-labels-mask - type: binary + name: lse-ttl + type: u8 - - name: key-mpls-opts - type: binary + name: lse-bos + type: u8 - - name: key-hash - type: u32 + name: lse-tc + type: u8 - - name: key-hash-mask + name: lse-label type: u32 + - + name: tc-flower-key-cfm-attrs + attributes: - - name: key-num-of-vlans + name: md-level type: u8 - - name: key-pppoe-sid - type: u16 - byte-order: big-endian + name: opcode + type: u8 + - + name: tc-fw-attrs + attributes: - - name: key-ppp-proto - type: u16 - byte-order: big-endian + name: classid + type: u32 - - name: key-l2-tpv3-sid + name: police + type: nest + nested-attributes: tc-police-attrs + - + name: indev + type: string + - + name: act + type: array-nest + nested-attributes: tc-act-attrs + - + name: mask type: u32 - byte-order: big-endian - name: tc-gred-attrs attributes: @@ -1135,7 +2847,7 @@ attribute-sets: type: u32 - name: stat-bytes - type: u32 + type: u64 - name: stat-packets type: u32 @@ -1232,40 +2944,25 @@ attribute-sets: name: offload type: flag - - name: tc-act-attrs + name: tc-matchall-attrs attributes: - - name: kind - type: string + name: classid + type: u32 - - name: options - type: sub-message - sub-message: tc-act-options-msg - selector: kind + name: act + type: array-nest + nested-attributes: tc-act-attrs - - name: index + name: flags type: u32 - - name: stats + name: pcnt type: binary + struct: tc-matchall-pcnt - name: pad type: pad - - - name: cookie - type: binary - - - name: flags - type: bitfield32 - - - name: hw-stats - type: bitfield32 - - - name: used-hw-stats - type: bitfield32 - - - name: in-hw-count - type: u32 - name: tc-etf-attrs attributes: @@ -1304,48 +3001,71 @@ attribute-sets: - name: plimit type: u32 + doc: Limit of total number of packets in queue - name: flow-plimit type: u32 + doc: Limit of packets per flow - name: quantum type: u32 + doc: RR quantum - name: initial-quantum type: u32 + doc: RR quantum for new flow - name: rate-enable type: u32 + doc: Enable / disable rate limiting - name: flow-default-rate type: u32 + doc: Obsolete, do not use - name: flow-max-rate type: u32 + doc: Per flow max rate - name: buckets-log type: u32 + doc: log2(number of buckets) - name: flow-refill-delay type: u32 + doc: Flow credit refill delay in usec - name: orphan-mask type: u32 + doc: Mask applied to orphaned skb hashes - name: low-rate-threshold type: u32 + doc: Per packet delay under this rate - name: ce-threshold type: u32 + doc: DCTCP-like CE marking threshold - name: timer-slack type: u32 - name: horizon type: u32 + doc: Time horizon in usec - name: horizon-drop type: u8 + doc: Drop packets beyond horizon, or cap their EDT + - + name: priomap + type: binary + struct: tc-prio-qopt + - + name: weights + type: binary + sub-type: s32 + doc: Weights for each band - name: tc-fq-codel-attrs attributes: @@ -1427,6 +3147,7 @@ attribute-sets: - name: corr type: binary + struct: tc-netem-corr - name: delay-dist type: binary @@ -1434,15 +3155,19 @@ attribute-sets: - name: reorder type: binary + struct: tc-netem-reorder - name: corrupt type: binary + struct: tc-netem-corrupt - name: loss - type: binary + type: nest + nested-attributes: tc-netem-loss-attrs - name: rate type: binary + struct: tc-netem-rate - name: ecn type: u32 @@ -1461,10 +3186,27 @@ attribute-sets: - name: slot type: binary + struct: tc-netem-slot - name: slot-dist type: binary sub-type: s16 + - + name: prng-seed + type: u64 + - + name: tc-netem-loss-attrs + attributes: + - + name: gi + type: binary + doc: General Intuitive - 4 state model + struct: tc-netem-gimodel + - + name: ge + type: binary + doc: Gilbert Elliot models + struct: tc-netem-gemodel - name: tc-pie-attrs attributes: @@ -1492,6 +3234,44 @@ attribute-sets: - name: dq-rate-estimator type: u32 + - + name: tc-police-attrs + attributes: + - + name: tbf + type: binary + struct: tc-police + - + name: rate + type: binary + - + name: peakrate + type: binary + - + name: avrate + type: u32 + - + name: result + type: u32 + - + name: tm + type: binary + struct: tcf-t + - + name: pad + type: pad + - + name: rate64 + type: u64 + - + name: peakrate64 + type: u64 + - + name: pktrate64 + type: u64 + - + name: pktburst64 + type: u64 - name: tc-qfq-attrs attributes: @@ -1516,13 +3296,36 @@ attribute-sets: type: u32 - name: flags - type: binary + type: bitfield32 - name: early-drop-block type: u32 - name: mark-block type: u32 + - + name: tc-route-attrs + attributes: + - + name: classid + type: u32 + - + name: to + type: u32 + - + name: from + type: u32 + - + name: iif + type: u32 + - + name: police + type: nest + nested-attributes: tc-police-attrs + - + name: act + type: array-nest + nested-attributes: tc-act-attrs - name: tc-taprio-attrs attributes: @@ -1629,17 +3432,43 @@ attribute-sets: name: pad type: pad - - name: tca-gact-attrs + name: tc-act-sample-attrs + attributes: + - + name: tm + type: binary + struct: tcf-t + - + name: parms + type: binary + struct: tc-gen + - + name: rate + type: u32 + - + name: trunc-size + type: u32 + - + name: psample-group + type: u32 + - + name: pad + type: pad + - + name: tc-act-gact-attrs attributes: - name: tm type: binary + struct: tcf-t - name: parms type: binary + struct: tc-gen - name: prob type: binary + struct: tc-gact-p - name: pad type: pad @@ -1659,34 +3488,89 @@ attribute-sets: - name: basic type: binary + struct: gnet-stats-basic - name: rate-est type: binary + struct: gnet-stats-rate-est - name: queue type: binary + struct: gnet-stats-queue - name: app - type: binary # TODO sub-message needs 2+ level deep lookup + type: sub-message sub-message: tca-stats-app-msg selector: kind - name: rate-est64 type: binary + struct: gnet-stats-rate-est64 - name: pad type: pad - name: basic-hw type: binary + struct: gnet-stats-basic - name: pkt64 + type: u64 + - + name: tc-u32-attrs + attributes: + - + name: classid + type: u32 + - + name: hash + type: u32 + - + name: link + type: u32 + - + name: divisor + type: u32 + - + name: sel + type: binary + struct: tc-u32-sel + - + name: police + type: nest + nested-attributes: tc-police-attrs + - + name: act + type: array-nest + nested-attributes: tc-act-attrs + - + name: indev + type: string + - + name: pcnt + type: binary + struct: tc-u32-pcnt + - + name: mark type: binary + struct: tc-u32-mark + - + name: flags + type: u32 + - + name: pad + type: pad sub-messages: - name: tc-options-msg formats: + - + value: basic + attribute-set: tc-basic-attrs + - + value: bpf + attribute-set: tc-bpf-attrs - value: bfifo fixed-header: tc-fifo-qopt @@ -1696,6 +3580,9 @@ sub-messages: - value: cbs attribute-set: tc-cbs-attrs + - + value: cgroup + attribute-set: tc-cgroup-attrs - value: choke attribute-set: tc-choke-attrs @@ -1713,6 +3600,12 @@ sub-messages: - value: ets attribute-set: tc-ets-attrs + - + value: flow + attribute-set: tc-flow-attrs + - + value: flower + attribute-set: tc-flower-attrs - value: fq attribute-set: tc-fq-attrs @@ -1723,8 +3616,8 @@ sub-messages: value: fq_pie attribute-set: tc-fq-pie-attrs - - value: flower - attribute-set: tc-flower-attrs + value: fw + attribute-set: tc-fw-attrs - value: gred attribute-set: tc-gred-attrs @@ -1739,6 +3632,9 @@ sub-messages: attribute-set: tc-htb-attrs - value: ingress # no content + - + value: matchall + attribute-set: tc-matchall-attrs - value: mq # no content - @@ -1775,6 +3671,9 @@ sub-messages: - value: red attribute-set: tc-red-attrs + - + value: route + attribute-set: tc-route-attrs - value: sfb fixed-header: tc-sfb-qopt @@ -1787,88 +3686,105 @@ sub-messages: - value: tbf attribute-set: tc-tbf-attrs - - - name: tc-act-options-msg - formats: - - value: gact - attribute-set: tca-gact-attrs + value: u32 + attribute-set: tc-u32-attrs - - name: tca-stats-app-msg + name: tc-act-options-msg formats: - - value: bfifo - - - value: blackhole + value: bpf + attribute-set: tc-act-bpf-attrs - - value: cake - attribute-set: tc-cake-stats-attrs + value: connmark + attribute-set: tc-act-connmark-attrs - - value: cbs + value: csum + attribute-set: tc-act-csum-attrs - - value: choke + value: ct + attribute-set: tc-act-ct-attrs - - value: clsact + value: ctinfo + attribute-set: tc-act-ctinfo-attrs - - value: codel + value: gact + attribute-set: tc-act-gact-attrs - - value: drr + value: gate + attribute-set: tc-act-gate-attrs - - value: etf + value: ife + attribute-set: tc-act-ife-attrs - - value: ets + value: mirred + attribute-set: tc-act-mirred-attrs - - value: fq + value: mpls + attribute-set: tc-act-mpls-attrs - - value: fq_codel + value: nat + attribute-set: tc-act-nat-attrs - - value: fq_pie + value: pedit + attribute-set: tc-act-pedit-attrs - - value: flower + value: police + attribute-set: tc-act-police-attrs - - value: gred + value: sample + attribute-set: tc-act-sample-attrs - - value: hfsc + value: simple + attribute-set: tc-act-simple-attrs - - value: hhf + value: skbedit + attribute-set: tc-act-skbedit-attrs - - value: htb + value: skbmod + attribute-set: tc-act-skbmod-attrs - - value: ingress + value: tunnel_key + attribute-set: tc-act-tunnel-key-attrs - - value: mq + value: vlan + attribute-set: tc-act-vlan-attrs + - + name: tca-stats-app-msg + formats: - - value: mqprio + value: cake + attribute-set: tc-cake-stats-attrs - - value: multiq + value: choke + fixed-header: tc-choke-xstats - - value: netem + value: codel + fixed-header: tc-codel-xstats - - value: noqueue + value: fq + fixed-header: tc-fq-qd-stats - - value: pfifo + value: fq_codel + fixed-header: tc-fq-codel-xstats - - value: pfifo_fast + value: fq_pie + fixed-header: tc-fq-pie-xstats - - value: pfifo_head_drop + value: hhf + fixed-header: tc-hhf-xstats - value: pie - - - value: plug - - - value: prio - - - value: qfq + fixed-header: tc-pie-xstats - value: red + fixed-header: tc-red-xstats - value: sfb + fixed-header: tc-sfb-xstats - value: sfq - - - value: taprio - - - value: tbf + fixed-header: tc-sfq-xstats operations: enum-model: directional