gnmiのプログラムを書いてみる

何でもかんでもOpenConfigで操作できたらよいじゃないですか。 というわけでFRRoutingがOepnConfigに対応したらよいのにと思ったりもしてみてOpenConfigdとかも少し見てみたのですが、イマイチ使い方がわからない。 なので自分で勉強がてらプログラムを書いてみるかと思いました。というわけでGW中に取り組んだ内容です。 さて、OpenConfigのyangデータモデルをもとにプログラミング言語のひな型を作ろうと思うとOpenConfig純正のygotを使うのが良いかなということでygotを使います。goyangでもいいんですが、より複雑なことをしたければygotって書いてあるのでいきなりygotを使います。 今回はprotocol bufferといいますか、grpcベースでOpenConfigの変数を操作できることを目標に作業始めました。 https://github.com/openconfig/ygot/blob/master/docs/protobuf_getting_started.md を参考にしていきましょう。 ygotのprotogeneraotrを入れる サンプルが go run $GOPATH/src/github.com/openconfig/ygot/proto_generator/protogenerator.go となっていたので、~/go/src/github.com/openconfig/ygotにgit cloneした後、 ~/go/src/github.com/openconfig/ygot/proto_generator/でgo installしました。~/go/bin/proto_generatorが作られていればOKです。 protocol bufferを生成する 今回パッケージ名はocdcとしています。OpenConfig Data Converterの意図だったのですが、実際今できていることはOpenConfig Data Storeという感じでしょうか。 元々FRRoutingがOpenConfigで設定できたらよいなと思ったので、OpenConfigのBGPやOSPFのデータモデルを扱いたいと思ったのでですが、それらBGPやOSPFはすべてnetwork-instanceに内包されている(network-instanceからuseで呼び出されている)ので、openconfig-network-instance.yangから生成しようとすると、依存関係が足りないエラーを延々出され、最終的に、以下のyangを呼び出さないといけないことになりました。 なおpublilcは https://github.com/openconfig/public/ をcloneしたディレクトリです。 https://github.com/golang-standards/project-layout に従って、protobufをapiディレクトリ以下に作るようにしました。 proto_generator -generate_fakeroot \ -base_import_path="go_src_dir/ocdc/api" \ --go_package_base="go_src_dir/ocdc/api" \ -path=public/release/models/ -output_dir=api \ -package_name=ocdc \ -exclude_modules=ietf-interfaces \ public/release/models/network-instance/openconfig-network-instance.yang \ public/release/models/openconfig-extensions.yang \ public/release/models/interfaces/openconfig-interfaces.yang \ public/third_party/ietf/ietf-interfaces.yang \ public/release/models/types/openconfig-yang-types.yang \ public/release/models/optical-transport/openconfig-transport-types.yang \ public/release/models/bgp/openconfig-bgp-types.yang \ public/release/models/platform/openconfig-platform-types.yang \ public/release/models/policy/openconfig-policy-types.yang \ public/release/models/local-routing/openconfig-local-routing.yang \ public/release/models/bfd/openconfig-bfd.yang \ public/release/models/rib/openconfig-rib-bgp.yang \ public/release/models/segment-routing/openconfig-segment-routing-types.yang \ public/release/models/mpls/openconfig-mpls....

May 13, 2023