~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/net/ynl/cli.py

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/net/ynl/cli.py (Version linux-6.12-rc7) and /tools/net/ynl/cli.py (Version linux-6.9.12)


  1 #!/usr/bin/env python3                              1 #!/usr/bin/env python3
  2 # SPDX-License-Identifier: GPL-2.0 OR BSD-3-Cl      2 # SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
  3                                                     3 
  4 import argparse                                     4 import argparse
  5 import json                                         5 import json
  6 import pprint                                       6 import pprint
  7 import time                                         7 import time
  8                                                     8 
  9 from lib import YnlFamily, Netlink, NlError         9 from lib import YnlFamily, Netlink, NlError
 10                                                    10 
 11                                                    11 
 12 class YnlEncoder(json.JSONEncoder):                12 class YnlEncoder(json.JSONEncoder):
 13     def default(self, obj):                        13     def default(self, obj):
 14         if isinstance(obj, bytes):                 14         if isinstance(obj, bytes):
 15             return bytes.hex(obj)                  15             return bytes.hex(obj)
 16         if isinstance(obj, set):                   16         if isinstance(obj, set):
 17             return list(obj)                       17             return list(obj)
 18         return json.JSONEncoder.default(self,      18         return json.JSONEncoder.default(self, obj)
 19                                                    19 
 20                                                    20 
 21 def main():                                        21 def main():
 22     description = """                          !!  22     parser = argparse.ArgumentParser(description='YNL CLI sample')
 23     YNL CLI utility - a general purpose netlin << 
 24     specs to drive protocol encoding and decod << 
 25     """                                        << 
 26     epilog = """                               << 
 27     The --multi option can be repeated to incl << 
 28     in the same netlink payload.               << 
 29     """                                        << 
 30                                                << 
 31     parser = argparse.ArgumentParser(descripti << 
 32                                      epilog=ep << 
 33     parser.add_argument('--spec', dest='spec',     23     parser.add_argument('--spec', dest='spec', type=str, required=True)
 34     parser.add_argument('--schema', dest='sche     24     parser.add_argument('--schema', dest='schema', type=str)
 35     parser.add_argument('--no-schema', action=     25     parser.add_argument('--no-schema', action='store_true')
 36     parser.add_argument('--json', dest='json_t     26     parser.add_argument('--json', dest='json_text', type=str)
 37                                                !!  27     parser.add_argument('--do', dest='do', type=str)
 38     group = parser.add_mutually_exclusive_grou !!  28     parser.add_argument('--dump', dest='dump', type=str)
 39     group.add_argument('--do', dest='do', meta << 
 40     group.add_argument('--multi', dest='multi' << 
 41                        metavar=('DO-OPERATION' << 
 42     group.add_argument('--dump', dest='dump',  << 
 43     group.add_argument('--list-ops', action='s << 
 44     group.add_argument('--list-msgs', action=' << 
 45                                                << 
 46     parser.add_argument('--sleep', dest='sleep     29     parser.add_argument('--sleep', dest='sleep', type=int)
 47     parser.add_argument('--subscribe', dest='n     30     parser.add_argument('--subscribe', dest='ntf', type=str)
 48     parser.add_argument('--replace', dest='fla     31     parser.add_argument('--replace', dest='flags', action='append_const',
 49                         const=Netlink.NLM_F_RE     32                         const=Netlink.NLM_F_REPLACE)
 50     parser.add_argument('--excl', dest='flags'     33     parser.add_argument('--excl', dest='flags', action='append_const',
 51                         const=Netlink.NLM_F_EX     34                         const=Netlink.NLM_F_EXCL)
 52     parser.add_argument('--create', dest='flag     35     parser.add_argument('--create', dest='flags', action='append_const',
 53                         const=Netlink.NLM_F_CR     36                         const=Netlink.NLM_F_CREATE)
 54     parser.add_argument('--append', dest='flag     37     parser.add_argument('--append', dest='flags', action='append_const',
 55                         const=Netlink.NLM_F_AP     38                         const=Netlink.NLM_F_APPEND)
 56     parser.add_argument('--process-unknown', a     39     parser.add_argument('--process-unknown', action=argparse.BooleanOptionalAction)
 57     parser.add_argument('--output-json', actio     40     parser.add_argument('--output-json', action='store_true')
 58     parser.add_argument('--dbg-small-recv', de     41     parser.add_argument('--dbg-small-recv', default=0, const=4000,
 59                         action='store', nargs=     42                         action='store', nargs='?', type=int)
 60     args = parser.parse_args()                     43     args = parser.parse_args()
 61                                                    44 
 62     def output(msg):                               45     def output(msg):
 63         if args.output_json:                       46         if args.output_json:
 64             print(json.dumps(msg, cls=YnlEncod     47             print(json.dumps(msg, cls=YnlEncoder))
 65         else:                                      48         else:
 66             pprint.PrettyPrinter().pprint(msg)     49             pprint.PrettyPrinter().pprint(msg)
 67                                                    50 
 68     if args.no_schema:                             51     if args.no_schema:
 69         args.schema = ''                           52         args.schema = ''
 70                                                    53 
 71     attrs = {}                                     54     attrs = {}
 72     if args.json_text:                             55     if args.json_text:
 73         attrs = json.loads(args.json_text)         56         attrs = json.loads(args.json_text)
 74                                                    57 
 75     ynl = YnlFamily(args.spec, args.schema, ar     58     ynl = YnlFamily(args.spec, args.schema, args.process_unknown,
 76                     recv_size=args.dbg_small_r     59                     recv_size=args.dbg_small_recv)
 77     if args.dbg_small_recv:                        60     if args.dbg_small_recv:
 78         ynl.set_recv_dbg(True)                     61         ynl.set_recv_dbg(True)
 79                                                    62 
 80     if args.ntf:                                   63     if args.ntf:
 81         ynl.ntf_subscribe(args.ntf)                64         ynl.ntf_subscribe(args.ntf)
 82                                                    65 
 83     if args.sleep:                                 66     if args.sleep:
 84         time.sleep(args.sleep)                     67         time.sleep(args.sleep)
 85                                                    68 
 86     if args.list_ops:                          << 
 87         for op_name, op in ynl.ops.items():    << 
 88             print(op_name, " [", ", ".join(op. << 
 89     if args.list_msgs:                         << 
 90         for op_name, op in ynl.msgs.items():   << 
 91             print(op_name, " [", ", ".join(op. << 
 92                                                << 
 93     try:                                           69     try:
 94         if args.do:                                70         if args.do:
 95             reply = ynl.do(args.do, attrs, arg     71             reply = ynl.do(args.do, attrs, args.flags)
 96             output(reply)                          72             output(reply)
 97         if args.dump:                              73         if args.dump:
 98             reply = ynl.dump(args.dump, attrs)     74             reply = ynl.dump(args.dump, attrs)
 99             output(reply)                      << 
100         if args.multi:                         << 
101             ops = [ (item[0], json.loads(item[ << 
102             reply = ynl.do_multi(ops)          << 
103             output(reply)                          75             output(reply)
104     except NlError as e:                           76     except NlError as e:
105         print(e)                                   77         print(e)
106         exit(1)                                    78         exit(1)
107                                                    79 
108     if args.ntf:                                   80     if args.ntf:
109         ynl.check_ntf()                            81         ynl.check_ntf()
110         output(ynl.async_msg_queue)                82         output(ynl.async_msg_queue)
111                                                    83 
112                                                    84 
113 if __name__ == "__main__":                         85 if __name__ == "__main__":
114     main()                                         86     main()
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php