diff options
Diffstat (limited to 'tools/net/ynl/cli.py')
| -rwxr-xr-x | tools/net/ynl/cli.py | 43 | 
1 files changed, 34 insertions, 9 deletions
diff --git a/tools/net/ynl/cli.py b/tools/net/ynl/cli.py index 2ad9ec0f5545..f131e33ac3ee 100755 --- a/tools/net/ynl/cli.py +++ b/tools/net/ynl/cli.py @@ -6,7 +6,16 @@ import json  import pprint  import time -from lib import YnlFamily, Netlink +from lib import YnlFamily, Netlink, NlError + + +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(): @@ -28,8 +37,17 @@ 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') +    parser.add_argument('--dbg-small-recv', default=0, const=4000, +                        action='store', nargs='?', type=int)      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 = '' @@ -37,7 +55,10 @@ def main():      if args.json_text:          attrs = json.loads(args.json_text) -    ynl = YnlFamily(args.spec, args.schema, args.process_unknown) +    ynl = YnlFamily(args.spec, args.schema, args.process_unknown, +                    recv_size=args.dbg_small_recv) +    if args.dbg_small_recv: +        ynl.set_recv_dbg(True)      if args.ntf:          ynl.ntf_subscribe(args.ntf) @@ -45,16 +66,20 @@ def main():      if args.sleep:          time.sleep(args.sleep) -    if args.do: -        reply = ynl.do(args.do, attrs, args.flags) -        pprint.PrettyPrinter().pprint(reply) -    if args.dump: -        reply = ynl.dump(args.dump, attrs) -        pprint.PrettyPrinter().pprint(reply) +    try: +        if args.do: +            reply = ynl.do(args.do, attrs, args.flags) +            output(reply) +        if args.dump: +            reply = ynl.dump(args.dump, attrs) +            output(reply) +    except NlError as e: +        print(e) +        exit(1)      if args.ntf:          ynl.check_ntf() -        pprint.PrettyPrinter().pprint(ynl.async_msg_queue) +        output(ynl.async_msg_queue)  if __name__ == "__main__":  | 
