summaryrefslogtreecommitdiffstats
path: root/binapi/vhost_user
diff options
context:
space:
mode:
authorOndrej Fabry <ofabry@cisco.com>2020-07-17 10:36:28 +0200
committerOndrej Fabry <ofabry@cisco.com>2020-07-17 11:43:41 +0200
commitd1f24d37bd447b64e402298bb8eb2479681facf9 (patch)
treea3fc21ba730a91d8a402c7a5bf9c614e3677c4fc /binapi/vhost_user
parent1548c7e12531e3d055567d761c580a1c7ff0ac40 (diff)
Improve binapi generator
- simplified Size/Marshal/Unmarshal methods - replace struc in unions with custom marshal/unmarshal - fix imports in generated files - fix mock adapter - generate rpc service using low-level stream API (dumps generate control ping or stream msg..) - move examples/binapi to binapi and generate all API for latest release - add binapigen.Plugin for developing custom generator plugins - optionally generate HTTP handlers (REST API) for RPC services - add govpp program for browsing VPP API Change-Id: I092e9ed2b0c17972b3476463c3d4b14dd76ed42b Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
Diffstat (limited to 'binapi/vhost_user')
-rw-r--r--binapi/vhost_user/vhost_user.ba.go446
-rw-r--r--binapi/vhost_user/vhost_user_rest.ba.go83
-rw-r--r--binapi/vhost_user/vhost_user_rpc.ba.go93
3 files changed, 622 insertions, 0 deletions
diff --git a/binapi/vhost_user/vhost_user.ba.go b/binapi/vhost_user/vhost_user.ba.go
new file mode 100644
index 0000000..ea3d32b
--- /dev/null
+++ b/binapi/vhost_user/vhost_user.ba.go
@@ -0,0 +1,446 @@
+// Code generated by GoVPP's binapi-generator. DO NOT EDIT.
+// versions:
+// binapi-generator: v0.4.0-dev
+// VPP: 20.05-release
+// source: /usr/share/vpp/api/core/vhost_user.api.json
+
+// Package vhost_user contains generated bindings for API file vhost_user.api.
+//
+// Contents:
+// 8 messages
+//
+package vhost_user
+
+import (
+ api "git.fd.io/govpp.git/api"
+ ethernet_types "git.fd.io/govpp.git/binapi/ethernet_types"
+ interface_types "git.fd.io/govpp.git/binapi/interface_types"
+ virtio_types "git.fd.io/govpp.git/binapi/virtio_types"
+ codec "git.fd.io/govpp.git/codec"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the GoVPP api package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// GoVPP api package needs to be updated.
+const _ = api.GoVppAPIPackageIsVersion2
+
+const (
+ APIFile = "vhost_user"
+ APIVersion = "4.0.1"
+ VersionCrc = 0x3df14dfe
+)
+
+// CreateVhostUserIf defines message 'create_vhost_user_if'.
+type CreateVhostUserIf struct {
+ IsServer bool `binapi:"bool,name=is_server" json:"is_server,omitempty"`
+ SockFilename string `binapi:"string[256],name=sock_filename" json:"sock_filename,omitempty"`
+ Renumber bool `binapi:"bool,name=renumber" json:"renumber,omitempty"`
+ DisableMrgRxbuf bool `binapi:"bool,name=disable_mrg_rxbuf" json:"disable_mrg_rxbuf,omitempty"`
+ DisableIndirectDesc bool `binapi:"bool,name=disable_indirect_desc" json:"disable_indirect_desc,omitempty"`
+ EnableGso bool `binapi:"bool,name=enable_gso" json:"enable_gso,omitempty"`
+ EnablePacked bool `binapi:"bool,name=enable_packed" json:"enable_packed,omitempty"`
+ CustomDevInstance uint32 `binapi:"u32,name=custom_dev_instance" json:"custom_dev_instance,omitempty"`
+ UseCustomMac bool `binapi:"bool,name=use_custom_mac" json:"use_custom_mac,omitempty"`
+ MacAddress ethernet_types.MacAddress `binapi:"mac_address,name=mac_address" json:"mac_address,omitempty"`
+ Tag string `binapi:"string[64],name=tag" json:"tag,omitempty"`
+}
+
+func (m *CreateVhostUserIf) Reset() { *m = CreateVhostUserIf{} }
+func (*CreateVhostUserIf) GetMessageName() string { return "create_vhost_user_if" }
+func (*CreateVhostUserIf) GetCrcString() string { return "c785c6fc" }
+func (*CreateVhostUserIf) GetMessageType() api.MessageType {
+ return api.RequestMessage
+}
+
+func (m *CreateVhostUserIf) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 1 // m.IsServer
+ size += 256 // m.SockFilename
+ size += 1 // m.Renumber
+ size += 1 // m.DisableMrgRxbuf
+ size += 1 // m.DisableIndirectDesc
+ size += 1 // m.EnableGso
+ size += 1 // m.EnablePacked
+ size += 4 // m.CustomDevInstance
+ size += 1 // m.UseCustomMac
+ size += 1 * 6 // m.MacAddress
+ size += 64 // m.Tag
+ return size
+}
+func (m *CreateVhostUserIf) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeBool(m.IsServer)
+ buf.EncodeString(m.SockFilename, 256)
+ buf.EncodeBool(m.Renumber)
+ buf.EncodeBool(m.DisableMrgRxbuf)
+ buf.EncodeBool(m.DisableIndirectDesc)
+ buf.EncodeBool(m.EnableGso)
+ buf.EncodeBool(m.EnablePacked)
+ buf.EncodeUint32(uint32(m.CustomDevInstance))
+ buf.EncodeBool(m.UseCustomMac)
+ buf.EncodeBytes(m.MacAddress[:], 6)
+ buf.EncodeString(m.Tag, 64)
+ return buf.Bytes(), nil
+}
+func (m *CreateVhostUserIf) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.IsServer = buf.DecodeBool()
+ m.SockFilename = buf.DecodeString(256)
+ m.Renumber = buf.DecodeBool()
+ m.DisableMrgRxbuf = buf.DecodeBool()
+ m.DisableIndirectDesc = buf.DecodeBool()
+ m.EnableGso = buf.DecodeBool()
+ m.EnablePacked = buf.DecodeBool()
+ m.CustomDevInstance = buf.DecodeUint32()
+ m.UseCustomMac = buf.DecodeBool()
+ copy(m.MacAddress[:], buf.DecodeBytes(6))
+ m.Tag = buf.DecodeString(64)
+ return nil
+}
+
+// CreateVhostUserIfReply defines message 'create_vhost_user_if_reply'.
+type CreateVhostUserIfReply struct {
+ Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+ SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+}
+
+func (m *CreateVhostUserIfReply) Reset() { *m = CreateVhostUserIfReply{} }
+func (*CreateVhostUserIfReply) GetMessageName() string { return "create_vhost_user_if_reply" }
+func (*CreateVhostUserIfReply) GetCrcString() string { return "5383d31f" }
+func (*CreateVhostUserIfReply) GetMessageType() api.MessageType {
+ return api.ReplyMessage
+}
+
+func (m *CreateVhostUserIfReply) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.Retval
+ size += 4 // m.SwIfIndex
+ return size
+}
+func (m *CreateVhostUserIfReply) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.Retval))
+ buf.EncodeUint32(uint32(m.SwIfIndex))
+ return buf.Bytes(), nil
+}
+func (m *CreateVhostUserIfReply) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.Retval = int32(buf.DecodeUint32())
+ m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+ return nil
+}
+
+// DeleteVhostUserIf defines message 'delete_vhost_user_if'.
+type DeleteVhostUserIf struct {
+ SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+}
+
+func (m *DeleteVhostUserIf) Reset() { *m = DeleteVhostUserIf{} }
+func (*DeleteVhostUserIf) GetMessageName() string { return "delete_vhost_user_if" }
+func (*DeleteVhostUserIf) GetCrcString() string { return "f9e6675e" }
+func (*DeleteVhostUserIf) GetMessageType() api.MessageType {
+ return api.RequestMessage
+}
+
+func (m *DeleteVhostUserIf) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.SwIfIndex
+ return size
+}
+func (m *DeleteVhostUserIf) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.SwIfIndex))
+ return buf.Bytes(), nil
+}
+func (m *DeleteVhostUserIf) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+ return nil
+}
+
+// DeleteVhostUserIfReply defines message 'delete_vhost_user_if_reply'.
+type DeleteVhostUserIfReply struct {
+ Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *DeleteVhostUserIfReply) Reset() { *m = DeleteVhostUserIfReply{} }
+func (*DeleteVhostUserIfReply) GetMessageName() string { return "delete_vhost_user_if_reply" }
+func (*DeleteVhostUserIfReply) GetCrcString() string { return "e8d4e804" }
+func (*DeleteVhostUserIfReply) GetMessageType() api.MessageType {
+ return api.ReplyMessage
+}
+
+func (m *DeleteVhostUserIfReply) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.Retval
+ return size
+}
+func (m *DeleteVhostUserIfReply) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.Retval))
+ return buf.Bytes(), nil
+}
+func (m *DeleteVhostUserIfReply) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.Retval = int32(buf.DecodeUint32())
+ return nil
+}
+
+// ModifyVhostUserIf defines message 'modify_vhost_user_if'.
+type ModifyVhostUserIf struct {
+ SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+ IsServer bool `binapi:"bool,name=is_server" json:"is_server,omitempty"`
+ SockFilename string `binapi:"string[256],name=sock_filename" json:"sock_filename,omitempty"`
+ Renumber bool `binapi:"bool,name=renumber" json:"renumber,omitempty"`
+ EnableGso bool `binapi:"bool,name=enable_gso" json:"enable_gso,omitempty"`
+ EnablePacked bool `binapi:"bool,name=enable_packed" json:"enable_packed,omitempty"`
+ CustomDevInstance uint32 `binapi:"u32,name=custom_dev_instance" json:"custom_dev_instance,omitempty"`
+}
+
+func (m *ModifyVhostUserIf) Reset() { *m = ModifyVhostUserIf{} }
+func (*ModifyVhostUserIf) GetMessageName() string { return "modify_vhost_user_if" }
+func (*ModifyVhostUserIf) GetCrcString() string { return "0e71d40b" }
+func (*ModifyVhostUserIf) GetMessageType() api.MessageType {
+ return api.RequestMessage
+}
+
+func (m *ModifyVhostUserIf) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.SwIfIndex
+ size += 1 // m.IsServer
+ size += 256 // m.SockFilename
+ size += 1 // m.Renumber
+ size += 1 // m.EnableGso
+ size += 1 // m.EnablePacked
+ size += 4 // m.CustomDevInstance
+ return size
+}
+func (m *ModifyVhostUserIf) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.SwIfIndex))
+ buf.EncodeBool(m.IsServer)
+ buf.EncodeString(m.SockFilename, 256)
+ buf.EncodeBool(m.Renumber)
+ buf.EncodeBool(m.EnableGso)
+ buf.EncodeBool(m.EnablePacked)
+ buf.EncodeUint32(uint32(m.CustomDevInstance))
+ return buf.Bytes(), nil
+}
+func (m *ModifyVhostUserIf) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+ m.IsServer = buf.DecodeBool()
+ m.SockFilename = buf.DecodeString(256)
+ m.Renumber = buf.DecodeBool()
+ m.EnableGso = buf.DecodeBool()
+ m.EnablePacked = buf.DecodeBool()
+ m.CustomDevInstance = buf.DecodeUint32()
+ return nil
+}
+
+// ModifyVhostUserIfReply defines message 'modify_vhost_user_if_reply'.
+type ModifyVhostUserIfReply struct {
+ Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *ModifyVhostUserIfReply) Reset() { *m = ModifyVhostUserIfReply{} }
+func (*ModifyVhostUserIfReply) GetMessageName() string { return "modify_vhost_user_if_reply" }
+func (*ModifyVhostUserIfReply) GetCrcString() string { return "e8d4e804" }
+func (*ModifyVhostUserIfReply) GetMessageType() api.MessageType {
+ return api.ReplyMessage
+}
+
+func (m *ModifyVhostUserIfReply) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.Retval
+ return size
+}
+func (m *ModifyVhostUserIfReply) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.Retval))
+ return buf.Bytes(), nil
+}
+func (m *ModifyVhostUserIfReply) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.Retval = int32(buf.DecodeUint32())
+ return nil
+}
+
+// SwInterfaceVhostUserDetails defines message 'sw_interface_vhost_user_details'.
+type SwInterfaceVhostUserDetails struct {
+ SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+ InterfaceName string `binapi:"string[64],name=interface_name" json:"interface_name,omitempty"`
+ VirtioNetHdrSz uint32 `binapi:"u32,name=virtio_net_hdr_sz" json:"virtio_net_hdr_sz,omitempty"`
+ FeaturesFirst32 virtio_types.VirtioNetFeaturesFirst32 `binapi:"virtio_net_features_first_32,name=features_first_32" json:"features_first_32,omitempty"`
+ FeaturesLast32 virtio_types.VirtioNetFeaturesLast32 `binapi:"virtio_net_features_last_32,name=features_last_32" json:"features_last_32,omitempty"`
+ IsServer bool `binapi:"bool,name=is_server" json:"is_server,omitempty"`
+ SockFilename string `binapi:"string[256],name=sock_filename" json:"sock_filename,omitempty"`
+ NumRegions uint32 `binapi:"u32,name=num_regions" json:"num_regions,omitempty"`
+ SockErrno int32 `binapi:"i32,name=sock_errno" json:"sock_errno,omitempty"`
+}
+
+func (m *SwInterfaceVhostUserDetails) Reset() { *m = SwInterfaceVhostUserDetails{} }
+func (*SwInterfaceVhostUserDetails) GetMessageName() string { return "sw_interface_vhost_user_details" }
+func (*SwInterfaceVhostUserDetails) GetCrcString() string { return "98530df1" }
+func (*SwInterfaceVhostUserDetails) GetMessageType() api.MessageType {
+ return api.ReplyMessage
+}
+
+func (m *SwInterfaceVhostUserDetails) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.SwIfIndex
+ size += 64 // m.InterfaceName
+ size += 4 // m.VirtioNetHdrSz
+ size += 4 // m.FeaturesFirst32
+ size += 4 // m.FeaturesLast32
+ size += 1 // m.IsServer
+ size += 256 // m.SockFilename
+ size += 4 // m.NumRegions
+ size += 4 // m.SockErrno
+ return size
+}
+func (m *SwInterfaceVhostUserDetails) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.SwIfIndex))
+ buf.EncodeString(m.InterfaceName, 64)
+ buf.EncodeUint32(uint32(m.VirtioNetHdrSz))
+ buf.EncodeUint32(uint32(m.FeaturesFirst32))
+ buf.EncodeUint32(uint32(m.FeaturesLast32))
+ buf.EncodeBool(m.IsServer)
+ buf.EncodeString(m.SockFilename, 256)
+ buf.EncodeUint32(uint32(m.NumRegions))
+ buf.EncodeUint32(uint32(m.SockErrno))
+ return buf.Bytes(), nil
+}
+func (m *SwInterfaceVhostUserDetails) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+ m.InterfaceName = buf.DecodeString(64)
+ m.VirtioNetHdrSz = buf.DecodeUint32()
+ m.FeaturesFirst32 = virtio_types.VirtioNetFeaturesFirst32(buf.DecodeUint32())
+ m.FeaturesLast32 = virtio_types.VirtioNetFeaturesLast32(buf.DecodeUint32())
+ m.IsServer = buf.DecodeBool()
+ m.SockFilename = buf.DecodeString(256)
+ m.NumRegions = buf.DecodeUint32()
+ m.SockErrno = int32(buf.DecodeUint32())
+ return nil
+}
+
+// SwInterfaceVhostUserDump defines message 'sw_interface_vhost_user_dump'.
+type SwInterfaceVhostUserDump struct {
+ SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index,default=%!s(float64=4.294967295e+09)" json:"sw_if_index,omitempty"`
+}
+
+func (m *SwInterfaceVhostUserDump) Reset() { *m = SwInterfaceVhostUserDump{} }
+func (*SwInterfaceVhostUserDump) GetMessageName() string { return "sw_interface_vhost_user_dump" }
+func (*SwInterfaceVhostUserDump) GetCrcString() string { return "f9e6675e" }
+func (*SwInterfaceVhostUserDump) GetMessageType() api.MessageType {
+ return api.RequestMessage
+}
+
+func (m *SwInterfaceVhostUserDump) Size() int {
+ if m == nil {
+ return 0
+ }
+ var size int
+ size += 4 // m.SwIfIndex
+ return size
+}
+func (m *SwInterfaceVhostUserDump) Marshal(b []byte) ([]byte, error) {
+ var buf *codec.Buffer
+ if b == nil {
+ buf = codec.NewBuffer(make([]byte, m.Size()))
+ } else {
+ buf = codec.NewBuffer(b)
+ }
+ buf.EncodeUint32(uint32(m.SwIfIndex))
+ return buf.Bytes(), nil
+}
+func (m *SwInterfaceVhostUserDump) Unmarshal(b []byte) error {
+ buf := codec.NewBuffer(b)
+ m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+ return nil
+}
+
+func init() { file_vhost_user_binapi_init() }
+func file_vhost_user_binapi_init() {
+ api.RegisterMessage((*CreateVhostUserIf)(nil), "create_vhost_user_if_c785c6fc")
+ api.RegisterMessage((*CreateVhostUserIfReply)(nil), "create_vhost_user_if_reply_5383d31f")
+ api.RegisterMessage((*DeleteVhostUserIf)(nil), "delete_vhost_user_if_f9e6675e")
+ api.RegisterMessage((*DeleteVhostUserIfReply)(nil), "delete_vhost_user_if_reply_e8d4e804")
+ api.RegisterMessage((*ModifyVhostUserIf)(nil), "modify_vhost_user_if_0e71d40b")
+ api.RegisterMessage((*ModifyVhostUserIfReply)(nil), "modify_vhost_user_if_reply_e8d4e804")
+ api.RegisterMessage((*SwInterfaceVhostUserDetails)(nil), "sw_interface_vhost_user_details_98530df1")
+ api.RegisterMessage((*SwInterfaceVhostUserDump)(nil), "sw_interface_vhost_user_dump_f9e6675e")
+}
+
+// Messages returns list of all messages in this module.
+func AllMessages() []api.Message {
+ return []api.Message{
+ (*CreateVhostUserIf)(nil),
+ (*CreateVhostUserIfReply)(nil),
+ (*DeleteVhostUserIf)(nil),
+ (*DeleteVhostUserIfReply)(nil),
+ (*ModifyVhostUserIf)(nil),
+ (*ModifyVhostUserIfReply)(nil),
+ (*SwInterfaceVhostUserDetails)(nil),
+ (*SwInterfaceVhostUserDump)(nil),
+ }
+}
diff --git a/binapi/vhost_user/vhost_user_rest.ba.go b/binapi/vhost_user/vhost_user_rest.ba.go
new file mode 100644
index 0000000..c2f687b
--- /dev/null
+++ b/binapi/vhost_user/vhost_user_rest.ba.go
@@ -0,0 +1,83 @@
+// Code generated by GoVPP's binapi-generator. DO NOT EDIT.
+
+package vhost_user
+
+import (
+ "encoding/json"
+ "io/ioutil"
+ "net/http"
+)
+
+func RESTHandler(rpc RPCService) http.Handler {
+ mux := http.NewServeMux()
+ mux.HandleFunc("/create_vhost_user_if", func(w http.ResponseWriter, req *http.Request) {
+ var request = new(CreateVhostUserIf)
+ b, err := ioutil.ReadAll(req.Body)
+ if err != nil {
+ http.Error(w, "read body failed", http.StatusBadRequest)
+ return
+ }
+ if err := json.Unmarshal(b, request); err != nil {
+ http.Error(w, "unmarshal data failed", http.StatusBadRequest)
+ return
+ }
+ reply, err := rpc.CreateVhostUserIf(req.Context(), request)
+ if err != nil {
+ http.Error(w, "request failed: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ rep, err := json.MarshalIndent(reply, "", " ")
+ if err != nil {
+ http.Error(w, "marshal failed: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.Write(rep)
+ })
+ mux.HandleFunc("/delete_vhost_user_if", func(w http.ResponseWriter, req *http.Request) {
+ var request = new(DeleteVhostUserIf)
+ b, err := ioutil.ReadAll(req.Body)
+ if err != nil {
+ http.Error(w, "read body failed", http.StatusBadRequest)
+ return
+ }
+ if err := json.Unmarshal(b, request); err != nil {
+ http.Error(w, "unmarshal data failed", http.StatusBadRequest)
+ return
+ }
+ reply, err := rpc.DeleteVhostUserIf(req.Context(), request)
+ if err != nil {
+ http.Error(w, "request failed: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ rep, err := json.MarshalIndent(reply, "", " ")
+ if err != nil {
+ http.Error(w, "marshal failed: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.Write(rep)
+ })
+ mux.HandleFunc("/modify_vhost_user_if", func(w http.ResponseWriter, req *http.Request) {
+ var request = new(ModifyVhostUserIf)
+ b, err := ioutil.ReadAll(req.Body)
+ if err != nil {
+ http.Error(w, "read body failed", http.StatusBadRequest)
+ return
+ }
+ if err := json.Unmarshal(b, request); err != nil {
+ http.Error(w, "unmarshal data failed", http.StatusBadRequest)
+ return
+ }
+ reply, err := rpc.ModifyVhostUserIf(req.Context(), request)
+ if err != nil {
+ http.Error(w, "request failed: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ rep, err := json.MarshalIndent(reply, "", " ")
+ if err != nil {
+ http.Error(w, "marshal failed: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ w.Write(rep)
+ })
+ return http.HandlerFunc(mux.ServeHTTP)
+}
diff --git a/binapi/vhost_user/vhost_user_rpc.ba.go b/binapi/vhost_user/vhost_user_rpc.ba.go
new file mode 100644
index 0000000..091ed53
--- /dev/null
+++ b/binapi/vhost_user/vhost_user_rpc.ba.go
@@ -0,0 +1,93 @@
+// Code generated by GoVPP's binapi-generator. DO NOT EDIT.
+
+package vhost_user
+
+import (
+ "context"
+ "fmt"
+ api "git.fd.io/govpp.git/api"
+ vpe "git.fd.io/govpp.git/binapi/vpe"
+ "io"
+)
+
+// RPCService defines RPC service vhost_user.
+type RPCService interface {
+ CreateVhostUserIf(ctx context.Context, in *CreateVhostUserIf) (*CreateVhostUserIfReply, error)
+ DeleteVhostUserIf(ctx context.Context, in *DeleteVhostUserIf) (*DeleteVhostUserIfReply, error)
+ ModifyVhostUserIf(ctx context.Context, in *ModifyVhostUserIf) (*ModifyVhostUserIfReply, error)
+ SwInterfaceVhostUserDump(ctx context.Context, in *SwInterfaceVhostUserDump) (RPCService_SwInterfaceVhostUserDumpClient, error)
+}
+
+type serviceClient struct {
+ conn api.Connection
+}
+
+func NewServiceClient(conn api.Connection) RPCService {
+ return &serviceClient{conn}
+}
+
+func (c *serviceClient) CreateVhostUserIf(ctx context.Context, in *CreateVhostUserIf) (*CreateVhostUserIfReply, error) {
+ out := new(CreateVhostUserIfReply)
+ err := c.conn.Invoke(ctx, in, out)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *serviceClient) DeleteVhostUserIf(ctx context.Context, in *DeleteVhostUserIf) (*DeleteVhostUserIfReply, error) {
+ out := new(DeleteVhostUserIfReply)
+ err := c.conn.Invoke(ctx, in, out)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *serviceClient) ModifyVhostUserIf(ctx context.Context, in *ModifyVhostUserIf) (*ModifyVhostUserIfReply, error) {
+ out := new(ModifyVhostUserIfReply)
+ err := c.conn.Invoke(ctx, in, out)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *serviceClient) SwInterfaceVhostUserDump(ctx context.Context, in *SwInterfaceVhostUserDump) (RPCService_SwInterfaceVhostUserDumpClient, error) {
+ stream, err := c.conn.NewStream(ctx)
+ if err != nil {
+ return nil, err
+ }
+ x := &serviceClient_SwInterfaceVhostUserDumpClient{stream}
+ if err := x.Stream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err = x.Stream.SendMsg(&vpe.ControlPing{}); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type RPCService_SwInterfaceVhostUserDumpClient interface {
+ Recv() (*SwInterfaceVhostUserDetails, error)
+ api.Stream
+}
+
+type serviceClient_SwInterfaceVhostUserDumpClient struct {
+ api.Stream
+}
+
+func (c *serviceClient_SwInterfaceVhostUserDumpClient) Recv() (*SwInterfaceVhostUserDetails, error) {
+ msg, err := c.Stream.RecvMsg()
+ if err != nil {
+ return nil, err
+ }
+ switch m := msg.(type) {
+ case *SwInterfaceVhostUserDetails:
+ return m, nil
+ case *vpe.ControlPingReply:
+ return nil, io.EOF
+ default:
+ return nil, fmt.Errorf("unexpected message: %T %v", m, m)
+ }
+}