diff options
Diffstat (limited to 'docs/interfacing/go/add_plugin_goapi.rst')
-rw-r--r-- | docs/interfacing/go/add_plugin_goapi.rst | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/docs/interfacing/go/add_plugin_goapi.rst b/docs/interfacing/go/add_plugin_goapi.rst deleted file mode 100644 index dce35b8f0a2..00000000000 --- a/docs/interfacing/go/add_plugin_goapi.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. _add_plugin_goapi: - -Add a plugin's GO API -===================== - -In order to use your plugin's API with GO, you will need to use -a GO client and GO definitions of the API messages that you defined -in ``myplugin.api`` (go bindings). - -These two things can be found in `govpp <https://github.com/FDio/govpp>`_ - -* The API client lives in `./core` -* The api-generator lives in `./binapigen` -* A sample of its output (the go bindings) for VPP's latest version lives in `./binapi` - -To generate the go bindings for your plugin. Assuming : -* ``/home/vpp`` is a VPP clone with your plugin in it. -* ``/home/controlplane`` is a go controlplane repo - -.. code-block:: console - - $ mkdir /home/controlplane/vpp-go-bindings - $ git clone https://github.com/FDio/govpp> - $ cd govpp - $ BINAPI_DIR=/home/controlplane/vpp-go-bindings VPP_DIR=/home/vpp make gen-binapi-from-code - -This will generate the go-bindings in ``/home/controlplane/vpp-go-bindings`` -For example ``vpp-go-bindings/myplugin/myplugin.ba.go`` will contain : - -.. code-block:: go - - // MypluginEnableDisable defines message 'myplugin_enable_disable'. - type MypluginEnableDisable struct { - EnableDisable bool `binapi:"bool,name=enable_disable" json:"enable_disable,omitempty"` - SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"` - } - - -You can then use the generated go bindings in your go code like this : - -.. code-block:: go - - package main - - import ( - "fmt" - "git.fd.io/govpp.git" - "git.fd.io/govpp.git/binapi/interfaces" - "git.fd.io/govpp.git/binapi/vpe" - - "myplugin.io/controlplane/vpp-go-bindings/myplugin/myplugin" - ) - - func main() { - // Connect to VPP - conn, _ := govpp.Connect("/run/vpp/api.sock") - defer conn.Disconnect() - - // Open channel - ch, _ := conn.NewAPIChannel() - defer ch.Close() - - request := &vpe.MypluginEnableDisable{ - EnableDisable: true, - } - reply := &vpe.MypluginEnableDisableReply{} - - err := ch.SendRequest(request).ReceiveReply(reply) - if err != nil { - fmt.Errorf("SendRequest: %w\n", err) - } - } - -As you will need to import (or ``go get "git.fd.io/govpp.git"``) to leverage the API -client in your code, you might want to use the api-generator directly from the -clone ``go build`` fetches for you. You can do this with : - -.. code-block:: console - - $ export GOVPP_DIR=$(go list -f '{{.Dir}}' -m git.fd.io/govpp.git) - $ cd $GOVPP_DIR && go build -o /some/bin/dir ./cmd/binapi-generator - $ # instead of make gen-binapi-from-code you can rewrite the code to target - $ # your version ./binapi-generator |