xref: /openbmc/linux/tools/net/ynl/cli.py (revision 1768d8a7)
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