Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tools/net/ynl: Add support for create flags

Add support for using NLM_F_REPLACE, _EXCL, _CREATE and _APPEND flags
in requests.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://lore.kernel.org/r/20230825122756.7603-10-donald.hunter@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Donald Hunter and committed by
Jakub Kicinski
1768d8a7 0493e56d

+22 -8
+10 -2
tools/net/ynl/cli.py
··· 6 6 import pprint 7 7 import time 8 8 9 - from lib import YnlFamily 9 + from lib import YnlFamily, Netlink 10 10 11 11 12 12 def main(): ··· 19 19 parser.add_argument('--dump', dest='dump', type=str) 20 20 parser.add_argument('--sleep', dest='sleep', type=int) 21 21 parser.add_argument('--subscribe', dest='ntf', type=str) 22 + parser.add_argument('--replace', dest='flags', action='append_const', 23 + const=Netlink.NLM_F_REPLACE) 24 + parser.add_argument('--excl', dest='flags', action='append_const', 25 + const=Netlink.NLM_F_EXCL) 26 + parser.add_argument('--create', dest='flags', action='append_const', 27 + const=Netlink.NLM_F_CREATE) 28 + parser.add_argument('--append', dest='flags', action='append_const', 29 + const=Netlink.NLM_F_APPEND) 22 30 args = parser.parse_args() 23 31 24 32 if args.no_schema: ··· 45 37 time.sleep(args.sleep) 46 38 47 39 if args.do: 48 - reply = ynl.do(args.do, attrs) 40 + reply = ynl.do(args.do, attrs, args.flags) 49 41 pprint.PrettyPrinter().pprint(reply) 50 42 if args.dump: 51 43 reply = ynl.dump(args.dump, attrs)
+2 -2
tools/net/ynl/lib/__init__.py
··· 2 2 3 3 from .nlspec import SpecAttr, SpecAttrSet, SpecEnumEntry, SpecEnumSet, \ 4 4 SpecFamily, SpecOperation 5 - from .ynl import YnlFamily 5 + from .ynl import YnlFamily, Netlink 6 6 7 7 __all__ = ["SpecAttr", "SpecAttrSet", "SpecEnumEntry", "SpecEnumSet", 8 - "SpecFamily", "SpecOperation", "YnlFamily"] 8 + "SpecFamily", "SpecOperation", "YnlFamily", "Netlink"]
+10 -4
tools/net/ynl/lib/ynl.py
··· 35 35 NLM_F_ACK = 4 36 36 NLM_F_ROOT = 0x100 37 37 NLM_F_MATCH = 0x200 38 + 39 + NLM_F_REPLACE = 0x100 40 + NLM_F_EXCL = 0x200 41 + NLM_F_CREATE = 0x400 38 42 NLM_F_APPEND = 0x800 39 43 40 44 NLM_F_CAPPED = 0x100 ··· 658 654 659 655 return op['do']['request']['attributes'].copy() 660 656 661 - def _op(self, method, vals, dump=False): 657 + def _op(self, method, vals, flags, dump=False): 662 658 op = self.ops[method] 663 659 664 660 nl_flags = Netlink.NLM_F_REQUEST | Netlink.NLM_F_ACK 661 + for flag in flags or []: 662 + nl_flags |= flag 665 663 if dump: 666 664 nl_flags |= Netlink.NLM_F_DUMP 667 665 ··· 722 716 return rsp[0] 723 717 return rsp 724 718 725 - def do(self, method, vals): 726 - return self._op(method, vals) 719 + def do(self, method, vals, flags): 720 + return self._op(method, vals, flags) 727 721 728 722 def dump(self, method, vals): 729 - return self._op(method, vals, dump=True) 723 + return self._op(method, vals, [], dump=True)