aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Fabry <ondrej.fabry@pantheon.tech>2018-08-21 15:47:30 +0200
committerOndrej Fabry <ondrej.fabry@pantheon.tech>2018-08-21 15:47:30 +0200
commitc4ccfc75f0698e148cfa37a3a1dda1a46bb29109 (patch)
tree3ccd92aba22ce55e6f8b693025d9cbd6f8def08b
parenta3bb834db727a3ac9a1ffcfeae9265e5dead851f (diff)
Fix perf-bench example
Change-Id: I62a7a27adbb44b9d8070b448c17bb7781b0637fe Signed-off-by: Ondrej Fabry <ondrej.fabry@pantheon.tech>
-rw-r--r--examples/bin_api/vpe.api.json419
-rw-r--r--examples/bin_api/vpe/vpe.ba.go755
-rw-r--r--examples/cmd/perf-bench/perf-bench.go58
3 files changed, 1188 insertions, 44 deletions
diff --git a/examples/bin_api/vpe.api.json b/examples/bin_api/vpe.api.json
new file mode 100644
index 0000000..9f973af
--- /dev/null
+++ b/examples/bin_api/vpe.api.json
@@ -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
index 0000000..f91a164
--- /dev/null
+++ b/examples/bin_api/vpe/vpe.ba.go
@@ -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")
+}
diff --git a/examples/cmd/perf-bench/perf-bench.go b/examples/cmd/perf-bench/perf-bench.go
index b1f4dcf..5b4b17d 100644
--- a/examples/cmd/perf-bench/perf-bench.go
+++ b/examples/cmd/perf-bench/perf-bench.go
@@ -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
- }
}
}