1981cbcb0SJakub Kicinski#!/usr/bin/env python3 237d9df22SJakub Kicinski# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 34e4480e8SJakub Kicinski 44e4480e8SJakub Kicinskiimport argparse 54e4480e8SJakub Kicinskiimport json 64e4480e8SJakub Kicinskiimport pprint 74e4480e8SJakub Kicinskiimport time 84e4480e8SJakub Kicinski 9*1768d8a7SDonald Hunterfrom lib import YnlFamily, Netlink 104e4480e8SJakub Kicinski 114e4480e8SJakub Kicinski 124e4480e8SJakub Kicinskidef main(): 134e4480e8SJakub Kicinski parser = argparse.ArgumentParser(description='YNL CLI sample') 144e4480e8SJakub Kicinski parser.add_argument('--spec', dest='spec', type=str, required=True) 154e4480e8SJakub Kicinski parser.add_argument('--schema', dest='schema', type=str) 165c6674f6SJakub Kicinski parser.add_argument('--no-schema', action='store_true') 174e4480e8SJakub Kicinski parser.add_argument('--json', dest='json_text', type=str) 184e4480e8SJakub Kicinski parser.add_argument('--do', dest='do', type=str) 194e4480e8SJakub Kicinski parser.add_argument('--dump', dest='dump', type=str) 204e4480e8SJakub Kicinski parser.add_argument('--sleep', dest='sleep', type=int) 214e4480e8SJakub Kicinski parser.add_argument('--subscribe', dest='ntf', type=str) 22*1768d8a7SDonald Hunter parser.add_argument('--replace', dest='flags', action='append_const', 23*1768d8a7SDonald Hunter const=Netlink.NLM_F_REPLACE) 24*1768d8a7SDonald Hunter parser.add_argument('--excl', dest='flags', action='append_const', 25*1768d8a7SDonald Hunter const=Netlink.NLM_F_EXCL) 26*1768d8a7SDonald Hunter parser.add_argument('--create', dest='flags', action='append_const', 27*1768d8a7SDonald Hunter const=Netlink.NLM_F_CREATE) 28*1768d8a7SDonald Hunter parser.add_argument('--append', dest='flags', action='append_const', 29*1768d8a7SDonald Hunter const=Netlink.NLM_F_APPEND) 304e4480e8SJakub Kicinski args = parser.parse_args() 314e4480e8SJakub Kicinski 325c6674f6SJakub Kicinski if args.no_schema: 335c6674f6SJakub Kicinski args.schema = '' 345c6674f6SJakub Kicinski 354e4480e8SJakub Kicinski attrs = {} 364e4480e8SJakub Kicinski if args.json_text: 374e4480e8SJakub Kicinski attrs = json.loads(args.json_text) 384e4480e8SJakub Kicinski 394e4480e8SJakub Kicinski ynl = YnlFamily(args.spec, args.schema) 404e4480e8SJakub Kicinski 414e4480e8SJakub Kicinski if args.ntf: 424e4480e8SJakub Kicinski ynl.ntf_subscribe(args.ntf) 434e4480e8SJakub Kicinski 444e4480e8SJakub Kicinski if args.sleep: 454e4480e8SJakub Kicinski time.sleep(args.sleep) 464e4480e8SJakub Kicinski 478dfec0a8SJakub Kicinski if args.do: 48*1768d8a7SDonald Hunter reply = ynl.do(args.do, attrs, args.flags) 498dfec0a8SJakub Kicinski pprint.PrettyPrinter().pprint(reply) 508dfec0a8SJakub Kicinski if args.dump: 518dfec0a8SJakub Kicinski reply = ynl.dump(args.dump, attrs) 524e4480e8SJakub Kicinski pprint.PrettyPrinter().pprint(reply) 534e4480e8SJakub Kicinski 544e4480e8SJakub Kicinski if args.ntf: 554e4480e8SJakub Kicinski ynl.check_ntf() 564e4480e8SJakub Kicinski pprint.PrettyPrinter().pprint(ynl.async_msg_queue) 574e4480e8SJakub Kicinski 584e4480e8SJakub Kicinski 594e4480e8SJakub Kicinskiif __name__ == "__main__": 604e4480e8SJakub Kicinski main() 61