Fix perf-bench example 98/14398/1
authorOndrej Fabry <ondrej.fabry@pantheon.tech>
Tue, 21 Aug 2018 13:47:30 +0000 (15:47 +0200)
committerOndrej Fabry <ondrej.fabry@pantheon.tech>
Tue, 21 Aug 2018 13:47:30 +0000 (15:47 +0200)
Change-Id: I62a7a27adbb44b9d8070b448c17bb7781b0637fe
Signed-off-by: Ondrej Fabry <ondrej.fabry@pantheon.tech>
examples/bin_api/vpe.api.json [new file with mode: 0644]
examples/bin_api/vpe/vpe.ba.go [new file with mode: 0644]
examples/cmd/perf-bench/perf-bench.go

diff --git a/examples/bin_api/vpe.api.json b/examples/bin_api/vpe.api.json
new file mode 100644 (file)
index 0000000..9f973af
--- /dev/null
@@ -0,0 +1,419 @@
+{
+    "messages": [
+        [
+            "control_ping",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "control_ping_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "vpe_pid"
+            ],
+            {
+                "crc": "0xf6b0b8ca"
+            }
+        ],
+        [
+            "cli",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u64",
+                "cmd_in_shmem"
+            ],
+            {
+                "crc": "0x23bfbfff"
+            }
+        ],
+        [
+            "cli_inband",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "length"
+            ],
+            [
+                "u8",
+                "cmd",
+                0,
+                "length"
+            ],
+            {
+                "crc": "0x74e00a49"
+            }
+        ],
+        [
+            "cli_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u64",
+                "reply_in_shmem"
+            ],
+            {
+                "crc": "0x06d68297"
+            }
+        ],
+        [
+            "cli_inband_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "length"
+            ],
+            [
+                "u8",
+                "reply",
+                0,
+                "length"
+            ],
+            {
+                "crc": "0x1f22bbb8"
+            }
+        ],
+        [
+            "get_node_index",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u8",
+                "node_name",
+                64
+            ],
+            {
+                "crc": "0x6c9a495d"
+            }
+        ],
+        [
+            "get_node_index_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "node_index"
+            ],
+            {
+                "crc": "0xa8600b89"
+            }
+        ],
+        [
+            "add_node_next",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u8",
+                "node_name",
+                64
+            ],
+            [
+                "u8",
+                "next_name",
+                64
+            ],
+            {
+                "crc": "0x9ab92f7a"
+            }
+        ],
+        [
+            "add_node_next_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "next_index"
+            ],
+            {
+                "crc": "0x2ed75f32"
+            }
+        ],
+        [
+            "show_version",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "show_version_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u8",
+                "program",
+                32
+            ],
+            [
+                "u8",
+                "version",
+                32
+            ],
+            [
+                "u8",
+                "build_date",
+                32
+            ],
+            [
+                "u8",
+                "build_directory",
+                256
+            ],
+            {
+                "crc": "0x8b5a13b4"
+            }
+        ],
+        [
+            "get_node_graph",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "get_node_graph_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u64",
+                "reply_in_shmem"
+            ],
+            {
+                "crc": "0x06d68297"
+            }
+        ],
+        [
+            "get_next_index",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u8",
+                "node_name",
+                64
+            ],
+            [
+                "u8",
+                "next_name",
+                64
+            ],
+            {
+                "crc": "0x9ab92f7a"
+            }
+        ],
+        [
+            "get_next_index_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "next_index"
+            ],
+            {
+                "crc": "0x2ed75f32"
+            }
+        ]
+    ],
+    "vl_api_version": "0x9a1baa50",
+    "unions": [],
+    "services": {
+        "cli_inband": {
+            "reply": "cli_inband_reply"
+        },
+        "get_node_index": {
+            "reply": "get_node_index_reply"
+        },
+        "cli": {
+            "reply": "cli_reply"
+        },
+        "show_version": {
+            "reply": "show_version_reply"
+        },
+        "get_node_graph": {
+            "reply": "get_node_graph_reply"
+        },
+        "get_next_index": {
+            "reply": "get_next_index_reply"
+        },
+        "add_node_next": {
+            "reply": "add_node_next_reply"
+        },
+        "control_ping": {
+            "reply": "control_ping_reply"
+        }
+    },
+    "enums": [],
+    "types": []
+}
diff --git a/examples/bin_api/vpe/vpe.ba.go b/examples/bin_api/vpe/vpe.ba.go
new file mode 100644 (file)
index 0000000..f91a164
--- /dev/null
@@ -0,0 +1,755 @@
+// Code generated by GoVPP binapi-generator. DO NOT EDIT.
+// source: vpe.api.json
+
+/*
+Package vpe is a generated VPP binary API of the 'vpe' VPP module.
+
+It is generated from this file:
+       vpe.api.json
+
+It contains these VPP binary API objects:
+       16 messages
+       8 services
+*/
+package vpe
+
+import "git.fd.io/govpp.git/api"
+import "github.com/lunixbochs/struc"
+import "bytes"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = struc.Pack
+var _ = bytes.NewBuffer
+
+/* Messages */
+
+// ControlPing represents the VPP binary API message 'control_ping'.
+// Generated from 'vpe.api.json', line 4:
+//
+//            "control_ping",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            {
+//                "crc": "0x51077d14"
+//            }
+//
+type ControlPing struct{}
+
+func (*ControlPing) GetMessageName() string {
+       return "control_ping"
+}
+func (*ControlPing) GetCrcString() string {
+       return "51077d14"
+}
+func (*ControlPing) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewControlPing() api.Message {
+       return &ControlPing{}
+}
+
+// ControlPingReply represents the VPP binary API message 'control_ping_reply'.
+// Generated from 'vpe.api.json', line 22:
+//
+//            "control_ping_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "vpe_pid"
+//            ],
+//            {
+//                "crc": "0xf6b0b8ca"
+//            }
+//
+type ControlPingReply struct {
+       Retval      int32
+       ClientIndex uint32
+       VpePID      uint32
+}
+
+func (*ControlPingReply) GetMessageName() string {
+       return "control_ping_reply"
+}
+func (*ControlPingReply) GetCrcString() string {
+       return "f6b0b8ca"
+}
+func (*ControlPingReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewControlPingReply() api.Message {
+       return &ControlPingReply{}
+}
+
+// Cli represents the VPP binary API message 'cli'.
+// Generated from 'vpe.api.json', line 48:
+//
+//            "cli",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "u64",
+//                "cmd_in_shmem"
+//            ],
+//            {
+//                "crc": "0x23bfbfff"
+//            }
+//
+type Cli struct {
+       CmdInShmem uint64
+}
+
+func (*Cli) GetMessageName() string {
+       return "cli"
+}
+func (*Cli) GetCrcString() string {
+       return "23bfbfff"
+}
+func (*Cli) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewCli() api.Message {
+       return &Cli{}
+}
+
+// CliInband represents the VPP binary API message 'cli_inband'.
+// Generated from 'vpe.api.json', line 70:
+//
+//            "cli_inband",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "u32",
+//                "length"
+//            ],
+//            [
+//                "u8",
+//                "cmd",
+//                0,
+//                "length"
+//            ],
+//            {
+//                "crc": "0x74e00a49"
+//            }
+//
+type CliInband struct {
+       Length uint32 `struc:"sizeof=Cmd"`
+       Cmd    []byte
+}
+
+func (*CliInband) GetMessageName() string {
+       return "cli_inband"
+}
+func (*CliInband) GetCrcString() string {
+       return "74e00a49"
+}
+func (*CliInband) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewCliInband() api.Message {
+       return &CliInband{}
+}
+
+// CliReply represents the VPP binary API message 'cli_reply'.
+// Generated from 'vpe.api.json', line 98:
+//
+//            "cli_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u64",
+//                "reply_in_shmem"
+//            ],
+//            {
+//                "crc": "0x06d68297"
+//            }
+//
+type CliReply struct {
+       Retval       int32
+       ReplyInShmem uint64
+}
+
+func (*CliReply) GetMessageName() string {
+       return "cli_reply"
+}
+func (*CliReply) GetCrcString() string {
+       return "06d68297"
+}
+func (*CliReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewCliReply() api.Message {
+       return &CliReply{}
+}
+
+// CliInbandReply represents the VPP binary API message 'cli_inband_reply'.
+// Generated from 'vpe.api.json', line 120:
+//
+//            "cli_inband_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u32",
+//                "length"
+//            ],
+//            [
+//                "u8",
+//                "reply",
+//                0,
+//                "length"
+//            ],
+//            {
+//                "crc": "0x1f22bbb8"
+//            }
+//
+type CliInbandReply struct {
+       Retval int32
+       Length uint32 `struc:"sizeof=Reply"`
+       Reply  []byte
+}
+
+func (*CliInbandReply) GetMessageName() string {
+       return "cli_inband_reply"
+}
+func (*CliInbandReply) GetCrcString() string {
+       return "1f22bbb8"
+}
+func (*CliInbandReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewCliInbandReply() api.Message {
+       return &CliInbandReply{}
+}
+
+// GetNodeIndex represents the VPP binary API message 'get_node_index'.
+// Generated from 'vpe.api.json', line 148:
+//
+//            "get_node_index",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "u8",
+//                "node_name",
+//                64
+//            ],
+//            {
+//                "crc": "0x6c9a495d"
+//            }
+//
+type GetNodeIndex struct {
+       NodeName []byte `struc:"[64]byte"`
+}
+
+func (*GetNodeIndex) GetMessageName() string {
+       return "get_node_index"
+}
+func (*GetNodeIndex) GetCrcString() string {
+       return "6c9a495d"
+}
+func (*GetNodeIndex) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewGetNodeIndex() api.Message {
+       return &GetNodeIndex{}
+}
+
+// GetNodeIndexReply represents the VPP binary API message 'get_node_index_reply'.
+// Generated from 'vpe.api.json', line 171:
+//
+//            "get_node_index_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u32",
+//                "node_index"
+//            ],
+//            {
+//                "crc": "0xa8600b89"
+//            }
+//
+type GetNodeIndexReply struct {
+       Retval    int32
+       NodeIndex uint32
+}
+
+func (*GetNodeIndexReply) GetMessageName() string {
+       return "get_node_index_reply"
+}
+func (*GetNodeIndexReply) GetCrcString() string {
+       return "a8600b89"
+}
+func (*GetNodeIndexReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewGetNodeIndexReply() api.Message {
+       return &GetNodeIndexReply{}
+}
+
+// AddNodeNext represents the VPP binary API message 'add_node_next'.
+// Generated from 'vpe.api.json', line 193:
+//
+//            "add_node_next",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "u8",
+//                "node_name",
+//                64
+//            ],
+//            [
+//                "u8",
+//                "next_name",
+//                64
+//            ],
+//            {
+//                "crc": "0x9ab92f7a"
+//            }
+//
+type AddNodeNext struct {
+       NodeName []byte `struc:"[64]byte"`
+       NextName []byte `struc:"[64]byte"`
+}
+
+func (*AddNodeNext) GetMessageName() string {
+       return "add_node_next"
+}
+func (*AddNodeNext) GetCrcString() string {
+       return "9ab92f7a"
+}
+func (*AddNodeNext) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewAddNodeNext() api.Message {
+       return &AddNodeNext{}
+}
+
+// AddNodeNextReply represents the VPP binary API message 'add_node_next_reply'.
+// Generated from 'vpe.api.json', line 221:
+//
+//            "add_node_next_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u32",
+//                "next_index"
+//            ],
+//            {
+//                "crc": "0x2ed75f32"
+//            }
+//
+type AddNodeNextReply struct {
+       Retval    int32
+       NextIndex uint32
+}
+
+func (*AddNodeNextReply) GetMessageName() string {
+       return "add_node_next_reply"
+}
+func (*AddNodeNextReply) GetCrcString() string {
+       return "2ed75f32"
+}
+func (*AddNodeNextReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewAddNodeNextReply() api.Message {
+       return &AddNodeNextReply{}
+}
+
+// ShowVersion represents the VPP binary API message 'show_version'.
+// Generated from 'vpe.api.json', line 243:
+//
+//            "show_version",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            {
+//                "crc": "0x51077d14"
+//            }
+//
+type ShowVersion struct{}
+
+func (*ShowVersion) GetMessageName() string {
+       return "show_version"
+}
+func (*ShowVersion) GetCrcString() string {
+       return "51077d14"
+}
+func (*ShowVersion) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewShowVersion() api.Message {
+       return &ShowVersion{}
+}
+
+// ShowVersionReply represents the VPP binary API message 'show_version_reply'.
+// Generated from 'vpe.api.json', line 261:
+//
+//            "show_version_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u8",
+//                "program",
+//                32
+//            ],
+//            [
+//                "u8",
+//                "version",
+//                32
+//            ],
+//            [
+//                "u8",
+//                "build_date",
+//                32
+//            ],
+//            [
+//                "u8",
+//                "build_directory",
+//                256
+//            ],
+//            {
+//                "crc": "0x8b5a13b4"
+//            }
+//
+type ShowVersionReply struct {
+       Retval         int32
+       Program        []byte `struc:"[32]byte"`
+       Version        []byte `struc:"[32]byte"`
+       BuildDate      []byte `struc:"[32]byte"`
+       BuildDirectory []byte `struc:"[256]byte"`
+}
+
+func (*ShowVersionReply) GetMessageName() string {
+       return "show_version_reply"
+}
+func (*ShowVersionReply) GetCrcString() string {
+       return "8b5a13b4"
+}
+func (*ShowVersionReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewShowVersionReply() api.Message {
+       return &ShowVersionReply{}
+}
+
+// GetNodeGraph represents the VPP binary API message 'get_node_graph'.
+// Generated from 'vpe.api.json', line 299:
+//
+//            "get_node_graph",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            {
+//                "crc": "0x51077d14"
+//            }
+//
+type GetNodeGraph struct{}
+
+func (*GetNodeGraph) GetMessageName() string {
+       return "get_node_graph"
+}
+func (*GetNodeGraph) GetCrcString() string {
+       return "51077d14"
+}
+func (*GetNodeGraph) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewGetNodeGraph() api.Message {
+       return &GetNodeGraph{}
+}
+
+// GetNodeGraphReply represents the VPP binary API message 'get_node_graph_reply'.
+// Generated from 'vpe.api.json', line 317:
+//
+//            "get_node_graph_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u64",
+//                "reply_in_shmem"
+//            ],
+//            {
+//                "crc": "0x06d68297"
+//            }
+//
+type GetNodeGraphReply struct {
+       Retval       int32
+       ReplyInShmem uint64
+}
+
+func (*GetNodeGraphReply) GetMessageName() string {
+       return "get_node_graph_reply"
+}
+func (*GetNodeGraphReply) GetCrcString() string {
+       return "06d68297"
+}
+func (*GetNodeGraphReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewGetNodeGraphReply() api.Message {
+       return &GetNodeGraphReply{}
+}
+
+// GetNextIndex represents the VPP binary API message 'get_next_index'.
+// Generated from 'vpe.api.json', line 339:
+//
+//            "get_next_index",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "client_index"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "u8",
+//                "node_name",
+//                64
+//            ],
+//            [
+//                "u8",
+//                "next_name",
+//                64
+//            ],
+//            {
+//                "crc": "0x9ab92f7a"
+//            }
+//
+type GetNextIndex struct {
+       NodeName []byte `struc:"[64]byte"`
+       NextName []byte `struc:"[64]byte"`
+}
+
+func (*GetNextIndex) GetMessageName() string {
+       return "get_next_index"
+}
+func (*GetNextIndex) GetCrcString() string {
+       return "9ab92f7a"
+}
+func (*GetNextIndex) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+func NewGetNextIndex() api.Message {
+       return &GetNextIndex{}
+}
+
+// GetNextIndexReply represents the VPP binary API message 'get_next_index_reply'.
+// Generated from 'vpe.api.json', line 367:
+//
+//            "get_next_index_reply",
+//            [
+//                "u16",
+//                "_vl_msg_id"
+//            ],
+//            [
+//                "u32",
+//                "context"
+//            ],
+//            [
+//                "i32",
+//                "retval"
+//            ],
+//            [
+//                "u32",
+//                "next_index"
+//            ],
+//            {
+//                "crc": "0x2ed75f32"
+//            }
+//
+type GetNextIndexReply struct {
+       Retval    int32
+       NextIndex uint32
+}
+
+func (*GetNextIndexReply) GetMessageName() string {
+       return "get_next_index_reply"
+}
+func (*GetNextIndexReply) GetCrcString() string {
+       return "2ed75f32"
+}
+func (*GetNextIndexReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+func NewGetNextIndexReply() api.Message {
+       return &GetNextIndexReply{}
+}
+
+/* Services */
+
+type Services interface {
+       AddNodeNext(*AddNodeNext) (*AddNodeNextReply, error)
+       Cli(*Cli) (*CliReply, error)
+       CliInband(*CliInband) (*CliInbandReply, error)
+       ControlPing(*ControlPing) (*ControlPingReply, error)
+       GetNextIndex(*GetNextIndex) (*GetNextIndexReply, error)
+       GetNodeGraph(*GetNodeGraph) (*GetNodeGraphReply, error)
+       GetNodeIndex(*GetNodeIndex) (*GetNodeIndexReply, error)
+       ShowVersion(*ShowVersion) (*ShowVersionReply, error)
+}
+
+func init() {
+       api.RegisterMessage((*ControlPing)(nil), "vpe.ControlPing")
+       api.RegisterMessage((*ControlPingReply)(nil), "vpe.ControlPingReply")
+       api.RegisterMessage((*Cli)(nil), "vpe.Cli")
+       api.RegisterMessage((*CliInband)(nil), "vpe.CliInband")
+       api.RegisterMessage((*CliReply)(nil), "vpe.CliReply")
+       api.RegisterMessage((*CliInbandReply)(nil), "vpe.CliInbandReply")
+       api.RegisterMessage((*GetNodeIndex)(nil), "vpe.GetNodeIndex")
+       api.RegisterMessage((*GetNodeIndexReply)(nil), "vpe.GetNodeIndexReply")
+       api.RegisterMessage((*AddNodeNext)(nil), "vpe.AddNodeNext")
+       api.RegisterMessage((*AddNodeNextReply)(nil), "vpe.AddNodeNextReply")
+       api.RegisterMessage((*ShowVersion)(nil), "vpe.ShowVersion")
+       api.RegisterMessage((*ShowVersionReply)(nil), "vpe.ShowVersionReply")
+       api.RegisterMessage((*GetNodeGraph)(nil), "vpe.GetNodeGraph")
+       api.RegisterMessage((*GetNodeGraphReply)(nil), "vpe.GetNodeGraphReply")
+       api.RegisterMessage((*GetNextIndex)(nil), "vpe.GetNextIndex")
+       api.RegisterMessage((*GetNextIndexReply)(nil), "vpe.GetNextIndexReply")
+}
index b1f4dcf..5b4b17d 100644 (file)
@@ -21,7 +21,6 @@ import (
        "fmt"
        "log"
        "os"
-       "sync"
        "time"
 
        "github.com/pkg/profile"
@@ -30,12 +29,12 @@ import (
        "git.fd.io/govpp.git"
        "git.fd.io/govpp.git/api"
        "git.fd.io/govpp.git/core"
-       "git.fd.io/govpp.git/core/bin_api/vpe"
+       "git.fd.io/govpp.git/examples/bin_api/vpe"
 )
 
 const (
        defaultSyncRequestCount  = 1000
-       defaultAsyncRequestCount = 1000000
+       defaultAsyncRequestCount = 10000
 )
 
 func main() {
@@ -43,7 +42,7 @@ func main() {
        var sync, prof bool
        var cnt int
        flag.BoolVar(&sync, "sync", false, "run synchronous perf test")
-       flag.IntVar(&cnt, "cnt", 0, "count of requests to be sent to VPP")
+       flag.IntVar(&cnt, "count", 0, "count of requests to be sent to VPP")
        flag.BoolVar(&prof, "prof", false, "generate profile data")
        flag.Parse()
 
@@ -113,50 +112,21 @@ func syncTest(ch api.Channel, cnt int) {
 func asyncTest(ch api.Channel, cnt int) {
        fmt.Printf("Running asynchronous perf test with %d requests...\n", cnt)
 
-       // start a new go routine that reads the replies
-       var wg sync.WaitGroup
-       wg.Add(1)
-       go readAsyncReplies(ch, cnt, &wg)
+       ctxChan := make(chan api.RequestCtx, cnt)
 
-       // send asynchronous requests
-       sendAsyncRequests(ch, cnt)
-
-       // wait until all replies are recieved
-       wg.Wait()
-}
-
-func sendAsyncRequests(ch api.Channel, cnt int) {
-       for i := 0; i < cnt; i++ {
-               ch.GetRequestChannel() <- &api.VppRequest{
-                       Message: &vpe.ControlPing{},
-               }
-       }
-}
-
-func readAsyncReplies(ch api.Channel, expectedCnt int, wg *sync.WaitGroup) {
-       cnt := 0
-
-       for {
-               // receive a reply
-               reply := <-ch.GetReplyChannel()
-               if reply.Error != nil {
-                       log.Println("Error in reply:", reply.Error)
-                       os.Exit(1)
+       go func() {
+               for i := 0; i < cnt; i++ {
+                       ctxChan <- ch.SendRequest(&vpe.ControlPing{})
                }
+               close(ctxChan)
+               fmt.Printf("Sending asynchronous requests finished\n")
+       }()
 
-               // decode the message
-               msg := &vpe.ControlPingReply{}
-               err := ch.GetMessageDecoder().DecodeMsg(reply.Data, msg)
-               if reply.Error != nil {
-                       log.Println("Error by decoding:", err)
+       for ctx := range ctxChan {
+               reply := &vpe.ControlPingReply{}
+               if err := ctx.ReceiveReply(reply); err != nil {
+                       log.Println("Error in reply:", err)
                        os.Exit(1)
                }
-
-               // count and return if done
-               cnt++
-               if cnt >= expectedCnt {
-                       wg.Done()
-                       return
-               }
        }
 }