~ [ 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-4.13.16)


  1 #!/usr/bin/env python3                            
  2 # SPDX-License-Identifier: GPL-2.0 OR BSD-3-Cl    
  3                                                   
  4 import argparse                                   
  5 import json                                       
  6 import pprint                                     
  7 import time                                       
  8                                                   
  9 from lib import YnlFamily, Netlink, NlError       
 10                                                   
 11                                                   
 12 class YnlEncoder(json.JSONEncoder):               
 13     def default(self, obj):                       
 14         if isinstance(obj, bytes):                
 15             return bytes.hex(obj)                 
 16         if isinstance(obj, set):                  
 17             return list(obj)                      
 18         return json.JSONEncoder.default(self,     
 19                                                   
 20                                                   
 21 def main():                                       
 22     description = """                             
 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',    
 34     parser.add_argument('--schema', dest='sche    
 35     parser.add_argument('--no-schema', action=    
 36     parser.add_argument('--json', dest='json_t    
 37                                                   
 38     group = parser.add_mutually_exclusive_grou    
 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    
 47     parser.add_argument('--subscribe', dest='n    
 48     parser.add_argument('--replace', dest='fla    
 49                         const=Netlink.NLM_F_RE    
 50     parser.add_argument('--excl', dest='flags'    
 51                         const=Netlink.NLM_F_EX    
 52     parser.add_argument('--create', dest='flag    
 53                         const=Netlink.NLM_F_CR    
 54     parser.add_argument('--append', dest='flag    
 55                         const=Netlink.NLM_F_AP    
 56     parser.add_argument('--process-unknown', a    
 57     parser.add_argument('--output-json', actio    
 58     parser.add_argument('--dbg-small-recv', de    
 59                         action='store', nargs=    
 60     args = parser.parse_args()                    
 61                                                   
 62     def output(msg):                              
 63         if args.output_json:                      
 64             print(json.dumps(msg, cls=YnlEncod    
 65         else:                                     
 66             pprint.PrettyPrinter().pprint(msg)    
 67                                                   
 68     if args.no_schema:                            
 69         args.schema = ''                          
 70                                                   
 71     attrs = {}                                    
 72     if args.json_text:                            
 73         attrs = json.loads(args.json_text)        
 74                                                   
 75     ynl = YnlFamily(args.spec, args.schema, ar    
 76                     recv_size=args.dbg_small_r    
 77     if args.dbg_small_recv:                       
 78         ynl.set_recv_dbg(True)                    
 79                                                   
 80     if args.ntf:                                  
 81         ynl.ntf_subscribe(args.ntf)               
 82                                                   
 83     if args.sleep:                                
 84         time.sleep(args.sleep)                    
 85                                                   
 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:                                          
 94         if args.do:                               
 95             reply = ynl.do(args.do, attrs, arg    
 96             output(reply)                         
 97         if args.dump:                             
 98             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)                         
104     except NlError as e:                          
105         print(e)                                  
106         exit(1)                                   
107                                                   
108     if args.ntf:                                  
109         ynl.check_ntf()                           
110         output(ynl.async_msg_queue)               
111                                                   
112                                                   
113 if __name__ == "__main__":                        
114     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