From 58da9ac6e691a8c660eb8ca838a154e11da0db68 Mon Sep 17 00:00:00 2001
From: Ondrej Fabry <ofabry@cisco.com>
Date: Wed, 22 Jul 2020 04:40:55 +0200
Subject: Fix binapigen decoding and minor improvements

- fixed allocating byte slices before copying decoded data
- simplified encoding functions
- several minor improvements

Change-Id: I6669424b89eb86333805cb1b57e4551169980cc2
Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
---
 internal/testbinapi/binapi2001/vpe/vpe.ba.go     | 1745 ++++++++--------------
 internal/testbinapi/binapi2001/vpe/vpe_rpc.ba.go |  108 +-
 2 files changed, 643 insertions(+), 1210 deletions(-)

(limited to 'internal/testbinapi/binapi2001/vpe')

diff --git a/internal/testbinapi/binapi2001/vpe/vpe.ba.go b/internal/testbinapi/binapi2001/vpe/vpe.ba.go
index e12bca4..f970104 100644
--- a/internal/testbinapi/binapi2001/vpe/vpe.ba.go
+++ b/internal/testbinapi/binapi2001/vpe/vpe.ba.go
@@ -1,49 +1,38 @@
 // Code generated by GoVPP's binapi-generator. DO NOT EDIT.
 // versions:
 //  binapi-generator: v0.4.0-dev
-//  VPP:              20.01-45~g7a071e370~b63
-// source: /usr/share/vpp/api/core/vpe.api.json
-
-/*
-Package vpe contains generated code for VPP binary API defined by vpe.api (version 1.6.0).
-
-It consists of:
-	  2 aliases
-	  1 enum
-	 26 messages
-	  2 types
-*/
+//  VPP:              20.01
+// source: .vppapi/core/vpe.api.json
+
+// Package vpe contains generated bindings for API file vpe.api.
+//
+// Contents:
+//   2 aliases
+//   1 enum
+//   2 structs
+//  26 messages
+//
 package vpe
 
 import (
-	"bytes"
-	"context"
-	"encoding/binary"
-	"io"
-	"math"
-	"strconv"
-
 	api "git.fd.io/govpp.git/api"
 	codec "git.fd.io/govpp.git/codec"
-	struc "github.com/lunixbochs/struc"
+	"strconv"
 )
 
 // 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 // please upgrade the GoVPP api package
+const _ = api.GoVppAPIPackageIsVersion2
 
 const (
-	// ModuleName is the name of this module.
-	ModuleName = "vpe"
-	// APIVersion is the API version of this module.
+	APIFile    = "vpe"
 	APIVersion = "1.6.0"
-	// VersionCrc is the CRC of this module.
 	VersionCrc = 0xc6c0bcf6
 )
 
-// LogLevel represents VPP binary API enum 'log_level'.
+// LogLevel defines enum 'log_level'.
 type LogLevel uint32
 
 const (
@@ -91,1570 +80,1017 @@ func (x LogLevel) String() string {
 	return "LogLevel(" + strconv.Itoa(int(x)) + ")"
 }
 
-// Timedelta represents VPP binary API alias 'timedelta'.
+// Timedelta defines alias 'timedelta'.
 type Timedelta float64
 
-// Timestamp represents VPP binary API alias 'timestamp'.
+// Timestamp defines alias 'timestamp'.
 type Timestamp float64
 
-// ThreadData represents VPP binary API type 'thread_data'.
+// ThreadData defines type 'thread_data'.
 type ThreadData struct {
 	ID        uint32 `binapi:"u32,name=id" json:"id,omitempty"`
-	Name      []byte `binapi:"u8[64],name=name" json:"name,omitempty" struc:"[64]byte"`
-	Type      []byte `binapi:"u8[64],name=type" json:"type,omitempty" struc:"[64]byte"`
+	Name      []byte `binapi:"u8[64],name=name" json:"name,omitempty"`
+	Type      []byte `binapi:"u8[64],name=type" json:"type,omitempty"`
 	PID       uint32 `binapi:"u32,name=pid" json:"pid,omitempty"`
 	CPUID     uint32 `binapi:"u32,name=cpu_id" json:"cpu_id,omitempty"`
 	Core      uint32 `binapi:"u32,name=core" json:"core,omitempty"`
 	CPUSocket uint32 `binapi:"u32,name=cpu_socket" json:"cpu_socket,omitempty"`
 }
 
-func (*ThreadData) GetTypeName() string { return "thread_data" }
-
-// Version represents VPP binary API type 'version'.
+// Version defines type 'version'.
 type Version struct {
 	Major         uint32 `binapi:"u32,name=major" json:"major,omitempty"`
 	Minor         uint32 `binapi:"u32,name=minor" json:"minor,omitempty"`
 	Patch         uint32 `binapi:"u32,name=patch" json:"patch,omitempty"`
-	PreRelease    []byte `binapi:"u8[17],name=pre_release" json:"pre_release,omitempty" struc:"[17]byte"`
-	BuildMetadata []byte `binapi:"u8[17],name=build_metadata" json:"build_metadata,omitempty" struc:"[17]byte"`
+	PreRelease    []byte `binapi:"u8[17],name=pre_release" json:"pre_release,omitempty"`
+	BuildMetadata []byte `binapi:"u8[17],name=build_metadata" json:"build_metadata,omitempty"`
 }
 
-func (*Version) GetTypeName() string { return "version" }
-
-// AddNodeNext represents VPP binary API message 'add_node_next'.
+// AddNodeNext defines message 'add_node_next'.
 type AddNodeNext struct {
-	NodeName []byte `binapi:"u8[64],name=node_name" json:"node_name,omitempty" struc:"[64]byte"`
-	NextName []byte `binapi:"u8[64],name=next_name" json:"next_name,omitempty" struc:"[64]byte"`
+	NodeName []byte `binapi:"u8[64],name=node_name" json:"node_name,omitempty"`
+	NextName []byte `binapi:"u8[64],name=next_name" json:"next_name,omitempty"`
 }
 
-func (m *AddNodeNext) Reset()                        { *m = AddNodeNext{} }
-func (*AddNodeNext) GetMessageName() string          { return "add_node_next" }
-func (*AddNodeNext) GetCrcString() string            { return "9ab92f7a" }
-func (*AddNodeNext) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *AddNodeNext) Reset()               { *m = AddNodeNext{} }
+func (*AddNodeNext) GetMessageName() string { return "add_node_next" }
+func (*AddNodeNext) GetCrcString() string   { return "9ab92f7a" }
+func (*AddNodeNext) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *AddNodeNext) Size() int {
+func (m *AddNodeNext) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.NodeName
-	size += 64
-	// field[1] m.NextName
-	size += 64
+	size += 1 * 64 // m.NodeName
+	size += 1 * 64 // m.NextName
 	return size
 }
 func (m *AddNodeNext) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.NodeName
-	for i := 0; i < 64; i++ {
-		var x uint8
-		if i < len(m.NodeName) {
-			x = uint8(m.NodeName[i])
-		}
-		buf[pos] = uint8(x)
-		pos += 1
-	}
-	// field[1] m.NextName
-	for i := 0; i < 64; i++ {
-		var x uint8
-		if i < len(m.NextName) {
-			x = uint8(m.NextName[i])
-		}
-		buf[pos] = uint8(x)
-		pos += 1
-	}
-	return buf, nil
-}
-func (m *AddNodeNext) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.NodeName
-	m.NodeName = make([]uint8, 64)
-	for i := 0; i < len(m.NodeName); i++ {
-		m.NodeName[i] = uint8(tmp[pos])
-		pos += 1
-	}
-	// field[1] m.NextName
-	m.NextName = make([]uint8, 64)
-	for i := 0; i < len(m.NextName); i++ {
-		m.NextName[i] = uint8(tmp[pos])
-		pos += 1
-	}
+		b = make([]byte, m.Size())
+	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeBytes(m.NodeName, 64)
+	buf.EncodeBytes(m.NextName, 64)
+	return buf.Bytes(), nil
+}
+func (m *AddNodeNext) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.NodeName = make([]byte, 64)
+	copy(m.NodeName, buf.DecodeBytes(len(m.NodeName)))
+	m.NextName = make([]byte, 64)
+	copy(m.NextName, buf.DecodeBytes(len(m.NextName)))
 	return nil
 }
 
-// AddNodeNextReply represents VPP binary API message 'add_node_next_reply'.
+// AddNodeNextReply defines message 'add_node_next_reply'.
 type AddNodeNextReply struct {
 	Retval    int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 	NextIndex uint32 `binapi:"u32,name=next_index" json:"next_index,omitempty"`
 }
 
-func (m *AddNodeNextReply) Reset()                        { *m = AddNodeNextReply{} }
-func (*AddNodeNextReply) GetMessageName() string          { return "add_node_next_reply" }
-func (*AddNodeNextReply) GetCrcString() string            { return "2ed75f32" }
-func (*AddNodeNextReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *AddNodeNextReply) Reset()               { *m = AddNodeNextReply{} }
+func (*AddNodeNextReply) GetMessageName() string { return "add_node_next_reply" }
+func (*AddNodeNextReply) GetCrcString() string   { return "2ed75f32" }
+func (*AddNodeNextReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *AddNodeNextReply) Size() int {
+func (m *AddNodeNextReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.NextIndex
-	size += 4
+	size += 4 // m.Retval
+	size += 4 // m.NextIndex
 	return size
 }
 func (m *AddNodeNextReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.NextIndex
-	o.PutUint32(buf[pos:pos+4], uint32(m.NextIndex))
-	pos += 4
-	return buf, nil
-}
-func (m *AddNodeNextReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.NextIndex
-	m.NextIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint32(m.NextIndex)
+	return buf.Bytes(), nil
+}
+func (m *AddNodeNextReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.NextIndex = buf.DecodeUint32()
 	return nil
 }
 
-// Cli represents VPP binary API message 'cli'.
+// Cli defines message 'cli'.
 type Cli struct {
 	CmdInShmem uint64 `binapi:"u64,name=cmd_in_shmem" json:"cmd_in_shmem,omitempty"`
 }
 
-func (m *Cli) Reset()                        { *m = Cli{} }
-func (*Cli) GetMessageName() string          { return "cli" }
-func (*Cli) GetCrcString() string            { return "23bfbfff" }
-func (*Cli) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *Cli) Reset()               { *m = Cli{} }
+func (*Cli) GetMessageName() string { return "cli" }
+func (*Cli) GetCrcString() string   { return "23bfbfff" }
+func (*Cli) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *Cli) Size() int {
+func (m *Cli) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.CmdInShmem
-	size += 8
+	size += 8 // m.CmdInShmem
 	return size
 }
 func (m *Cli) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.CmdInShmem
-	o.PutUint64(buf[pos:pos+8], uint64(m.CmdInShmem))
-	pos += 8
-	return buf, nil
-}
-func (m *Cli) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.CmdInShmem
-	m.CmdInShmem = uint64(o.Uint64(tmp[pos : pos+8]))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeUint64(m.CmdInShmem)
+	return buf.Bytes(), nil
+}
+func (m *Cli) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.CmdInShmem = buf.DecodeUint64()
 	return nil
 }
 
-// CliInband represents VPP binary API message 'cli_inband'.
+// CliInband defines message 'cli_inband'.
 type CliInband struct {
-	XXX_CmdLen uint32 `struc:"sizeof=Cmd"`
-	Cmd        string `json:"cmd,omitempty"`
+	Cmd string `binapi:"string[],name=cmd" json:"cmd,omitempty"`
 }
 
-func (m *CliInband) Reset()                        { *m = CliInband{} }
-func (*CliInband) GetMessageName() string          { return "cli_inband" }
-func (*CliInband) GetCrcString() string            { return "f8377302" }
-func (*CliInband) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *CliInband) Reset()               { *m = CliInband{} }
+func (*CliInband) GetMessageName() string { return "cli_inband" }
+func (*CliInband) GetCrcString() string   { return "f8377302" }
+func (*CliInband) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *CliInband) Size() int {
+func (m *CliInband) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Cmd
-	size += 4 + len(m.Cmd)
+	size += 4 + len(m.Cmd) // m.Cmd
 	return size
 }
 func (m *CliInband) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.Cmd
-	o.PutUint32(buf[pos:pos+4], uint32(len(m.Cmd)))
-	pos += 4
-	copy(buf[pos:pos+len(m.Cmd)], m.Cmd[:])
-	pos += len(m.Cmd)
-	return buf, nil
-}
-func (m *CliInband) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Cmd
-	{
-		siz := o.Uint32(tmp[pos : pos+4])
-		pos += 4
-		m.Cmd = codec.DecodeString(tmp[pos : pos+int(siz)])
-		pos += len(m.Cmd)
+		b = make([]byte, m.Size())
 	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeString(m.Cmd, 0)
+	return buf.Bytes(), nil
+}
+func (m *CliInband) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Cmd = buf.DecodeString(0)
 	return nil
 }
 
-// CliInbandReply represents VPP binary API message 'cli_inband_reply'.
+// CliInbandReply defines message 'cli_inband_reply'.
 type CliInbandReply struct {
-	Retval       int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
-	XXX_ReplyLen uint32 `struc:"sizeof=Reply"`
-	Reply        string `json:"reply,omitempty"`
+	Retval int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
+	Reply  string `binapi:"string[],name=reply" json:"reply,omitempty"`
 }
 
-func (m *CliInbandReply) Reset()                        { *m = CliInbandReply{} }
-func (*CliInbandReply) GetMessageName() string          { return "cli_inband_reply" }
-func (*CliInbandReply) GetCrcString() string            { return "05879051" }
-func (*CliInbandReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *CliInbandReply) Reset()               { *m = CliInbandReply{} }
+func (*CliInbandReply) GetMessageName() string { return "cli_inband_reply" }
+func (*CliInbandReply) GetCrcString() string   { return "05879051" }
+func (*CliInbandReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *CliInbandReply) Size() int {
+func (m *CliInbandReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.Reply
-	size += 4 + len(m.Reply)
+	size += 4                // m.Retval
+	size += 4 + len(m.Reply) // m.Reply
 	return size
 }
 func (m *CliInbandReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.Reply
-	o.PutUint32(buf[pos:pos+4], uint32(len(m.Reply)))
-	pos += 4
-	copy(buf[pos:pos+len(m.Reply)], m.Reply[:])
-	pos += len(m.Reply)
-	return buf, nil
-}
-func (m *CliInbandReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.Reply
-	{
-		siz := o.Uint32(tmp[pos : pos+4])
-		pos += 4
-		m.Reply = codec.DecodeString(tmp[pos : pos+int(siz)])
-		pos += len(m.Reply)
+		b = make([]byte, m.Size())
 	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeString(m.Reply, 0)
+	return buf.Bytes(), nil
+}
+func (m *CliInbandReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.Reply = buf.DecodeString(0)
 	return nil
 }
 
-// CliReply represents VPP binary API message 'cli_reply'.
+// CliReply defines message 'cli_reply'.
 type CliReply struct {
 	Retval       int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 	ReplyInShmem uint64 `binapi:"u64,name=reply_in_shmem" json:"reply_in_shmem,omitempty"`
 }
 
-func (m *CliReply) Reset()                        { *m = CliReply{} }
-func (*CliReply) GetMessageName() string          { return "cli_reply" }
-func (*CliReply) GetCrcString() string            { return "06d68297" }
-func (*CliReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *CliReply) Reset()               { *m = CliReply{} }
+func (*CliReply) GetMessageName() string { return "cli_reply" }
+func (*CliReply) GetCrcString() string   { return "06d68297" }
+func (*CliReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *CliReply) Size() int {
+func (m *CliReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.ReplyInShmem
-	size += 8
+	size += 4 // m.Retval
+	size += 8 // m.ReplyInShmem
 	return size
 }
 func (m *CliReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.ReplyInShmem
-	o.PutUint64(buf[pos:pos+8], uint64(m.ReplyInShmem))
-	pos += 8
-	return buf, nil
-}
-func (m *CliReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.ReplyInShmem
-	m.ReplyInShmem = uint64(o.Uint64(tmp[pos : pos+8]))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint64(m.ReplyInShmem)
+	return buf.Bytes(), nil
+}
+func (m *CliReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.ReplyInShmem = buf.DecodeUint64()
 	return nil
 }
 
-// ControlPing represents VPP binary API message 'control_ping'.
+// ControlPing defines message 'control_ping'.
 type ControlPing struct{}
 
-func (m *ControlPing) Reset()                        { *m = ControlPing{} }
-func (*ControlPing) GetMessageName() string          { return "control_ping" }
-func (*ControlPing) GetCrcString() string            { return "51077d14" }
-func (*ControlPing) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *ControlPing) Reset()               { *m = ControlPing{} }
+func (*ControlPing) GetMessageName() string { return "control_ping" }
+func (*ControlPing) GetCrcString() string   { return "51077d14" }
+func (*ControlPing) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *ControlPing) Size() int {
+func (m *ControlPing) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
 	return size
 }
 func (m *ControlPing) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	return buf, nil
+	buf := codec.NewBuffer(b)
+	return buf.Bytes(), nil
 }
-func (m *ControlPing) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
+func (m *ControlPing) Unmarshal(b []byte) error {
 	return nil
 }
 
-// ControlPingReply represents VPP binary API message 'control_ping_reply'.
+// ControlPingReply defines message 'control_ping_reply'.
 type ControlPingReply struct {
 	Retval      int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 	ClientIndex uint32 `binapi:"u32,name=client_index" json:"client_index,omitempty"`
 	VpePID      uint32 `binapi:"u32,name=vpe_pid" json:"vpe_pid,omitempty"`
 }
 
-func (m *ControlPingReply) Reset()                        { *m = ControlPingReply{} }
-func (*ControlPingReply) GetMessageName() string          { return "control_ping_reply" }
-func (*ControlPingReply) GetCrcString() string            { return "f6b0b8ca" }
-func (*ControlPingReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *ControlPingReply) Reset()               { *m = ControlPingReply{} }
+func (*ControlPingReply) GetMessageName() string { return "control_ping_reply" }
+func (*ControlPingReply) GetCrcString() string   { return "f6b0b8ca" }
+func (*ControlPingReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *ControlPingReply) Size() int {
+func (m *ControlPingReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.ClientIndex
-	size += 4
-	// field[1] m.VpePID
-	size += 4
+	size += 4 // m.Retval
+	size += 4 // m.ClientIndex
+	size += 4 // m.VpePID
 	return size
 }
 func (m *ControlPingReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.ClientIndex
-	o.PutUint32(buf[pos:pos+4], uint32(m.ClientIndex))
-	pos += 4
-	// field[1] m.VpePID
-	o.PutUint32(buf[pos:pos+4], uint32(m.VpePID))
-	pos += 4
-	return buf, nil
-}
-func (m *ControlPingReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.ClientIndex
-	m.ClientIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.VpePID
-	m.VpePID = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
+		b = make([]byte, m.Size())
+	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint32(m.ClientIndex)
+	buf.EncodeUint32(m.VpePID)
+	return buf.Bytes(), nil
+}
+func (m *ControlPingReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.ClientIndex = buf.DecodeUint32()
+	m.VpePID = buf.DecodeUint32()
 	return nil
 }
 
-// GetF64EndianValue represents VPP binary API message 'get_f64_endian_value'.
+// GetF64EndianValue defines message 'get_f64_endian_value'.
 type GetF64EndianValue struct {
 	F64One float64 `binapi:"f64,name=f64_one,default=1" json:"f64_one,omitempty"`
 }
 
-func (m *GetF64EndianValue) Reset()                        { *m = GetF64EndianValue{} }
-func (*GetF64EndianValue) GetMessageName() string          { return "get_f64_endian_value" }
-func (*GetF64EndianValue) GetCrcString() string            { return "809fcd44" }
-func (*GetF64EndianValue) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *GetF64EndianValue) Reset()               { *m = GetF64EndianValue{} }
+func (*GetF64EndianValue) GetMessageName() string { return "get_f64_endian_value" }
+func (*GetF64EndianValue) GetCrcString() string   { return "809fcd44" }
+func (*GetF64EndianValue) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *GetF64EndianValue) Size() int {
+func (m *GetF64EndianValue) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.F64One
-	size += 8
+	size += 8 // m.F64One
 	return size
 }
 func (m *GetF64EndianValue) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.F64One
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.F64One)))
-	pos += 8
-	return buf, nil
-}
-func (m *GetF64EndianValue) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.F64One
-	m.F64One = float64(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeFloat64(m.F64One)
+	return buf.Bytes(), nil
+}
+func (m *GetF64EndianValue) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.F64One = buf.DecodeFloat64()
 	return nil
 }
 
-// GetF64EndianValueReply represents VPP binary API message 'get_f64_endian_value_reply'.
+// GetF64EndianValueReply defines message 'get_f64_endian_value_reply'.
 type GetF64EndianValueReply struct {
 	Retval       uint32  `binapi:"u32,name=retval" json:"retval,omitempty"`
 	F64OneResult float64 `binapi:"f64,name=f64_one_result" json:"f64_one_result,omitempty"`
 }
 
-func (m *GetF64EndianValueReply) Reset()                        { *m = GetF64EndianValueReply{} }
-func (*GetF64EndianValueReply) GetMessageName() string          { return "get_f64_endian_value_reply" }
-func (*GetF64EndianValueReply) GetCrcString() string            { return "7e02e404" }
-func (*GetF64EndianValueReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *GetF64EndianValueReply) Reset()               { *m = GetF64EndianValueReply{} }
+func (*GetF64EndianValueReply) GetMessageName() string { return "get_f64_endian_value_reply" }
+func (*GetF64EndianValueReply) GetCrcString() string   { return "7e02e404" }
+func (*GetF64EndianValueReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *GetF64EndianValueReply) Size() int {
+func (m *GetF64EndianValueReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.F64OneResult
-	size += 8
+	size += 4 // m.Retval
+	size += 8 // m.F64OneResult
 	return size
 }
 func (m *GetF64EndianValueReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.F64OneResult
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.F64OneResult)))
-	pos += 8
-	return buf, nil
-}
-func (m *GetF64EndianValueReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.F64OneResult
-	m.F64OneResult = float64(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeUint32(m.Retval)
+	buf.EncodeFloat64(m.F64OneResult)
+	return buf.Bytes(), nil
+}
+func (m *GetF64EndianValueReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeUint32()
+	m.F64OneResult = buf.DecodeFloat64()
 	return nil
 }
 
-// GetF64IncrementByOne represents VPP binary API message 'get_f64_increment_by_one'.
+// GetF64IncrementByOne defines message 'get_f64_increment_by_one'.
 type GetF64IncrementByOne struct {
 	F64Value float64 `binapi:"f64,name=f64_value,default=1" json:"f64_value,omitempty"`
 }
 
-func (m *GetF64IncrementByOne) Reset()                        { *m = GetF64IncrementByOne{} }
-func (*GetF64IncrementByOne) GetMessageName() string          { return "get_f64_increment_by_one" }
-func (*GetF64IncrementByOne) GetCrcString() string            { return "b64f027e" }
-func (*GetF64IncrementByOne) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *GetF64IncrementByOne) Reset()               { *m = GetF64IncrementByOne{} }
+func (*GetF64IncrementByOne) GetMessageName() string { return "get_f64_increment_by_one" }
+func (*GetF64IncrementByOne) GetCrcString() string   { return "b64f027e" }
+func (*GetF64IncrementByOne) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *GetF64IncrementByOne) Size() int {
+func (m *GetF64IncrementByOne) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.F64Value
-	size += 8
+	size += 8 // m.F64Value
 	return size
 }
 func (m *GetF64IncrementByOne) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.F64Value
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.F64Value)))
-	pos += 8
-	return buf, nil
-}
-func (m *GetF64IncrementByOne) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.F64Value
-	m.F64Value = float64(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeFloat64(m.F64Value)
+	return buf.Bytes(), nil
+}
+func (m *GetF64IncrementByOne) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.F64Value = buf.DecodeFloat64()
 	return nil
 }
 
-// GetF64IncrementByOneReply represents VPP binary API message 'get_f64_increment_by_one_reply'.
+// GetF64IncrementByOneReply defines message 'get_f64_increment_by_one_reply'.
 type GetF64IncrementByOneReply struct {
 	Retval   uint32  `binapi:"u32,name=retval" json:"retval,omitempty"`
 	F64Value float64 `binapi:"f64,name=f64_value" json:"f64_value,omitempty"`
 }
 
-func (m *GetF64IncrementByOneReply) Reset()                        { *m = GetF64IncrementByOneReply{} }
-func (*GetF64IncrementByOneReply) GetMessageName() string          { return "get_f64_increment_by_one_reply" }
-func (*GetF64IncrementByOneReply) GetCrcString() string            { return "d25dbaa3" }
-func (*GetF64IncrementByOneReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *GetF64IncrementByOneReply) Reset()               { *m = GetF64IncrementByOneReply{} }
+func (*GetF64IncrementByOneReply) GetMessageName() string { return "get_f64_increment_by_one_reply" }
+func (*GetF64IncrementByOneReply) GetCrcString() string   { return "d25dbaa3" }
+func (*GetF64IncrementByOneReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *GetF64IncrementByOneReply) Size() int {
+func (m *GetF64IncrementByOneReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.F64Value
-	size += 8
+	size += 4 // m.Retval
+	size += 8 // m.F64Value
 	return size
 }
 func (m *GetF64IncrementByOneReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.F64Value
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.F64Value)))
-	pos += 8
-	return buf, nil
-}
-func (m *GetF64IncrementByOneReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.F64Value
-	m.F64Value = float64(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeUint32(m.Retval)
+	buf.EncodeFloat64(m.F64Value)
+	return buf.Bytes(), nil
+}
+func (m *GetF64IncrementByOneReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeUint32()
+	m.F64Value = buf.DecodeFloat64()
 	return nil
 }
 
-// GetNextIndex represents VPP binary API message 'get_next_index'.
+// GetNextIndex defines message 'get_next_index'.
 type GetNextIndex struct {
-	NodeName []byte `binapi:"u8[64],name=node_name" json:"node_name,omitempty" struc:"[64]byte"`
-	NextName []byte `binapi:"u8[64],name=next_name" json:"next_name,omitempty" struc:"[64]byte"`
+	NodeName []byte `binapi:"u8[64],name=node_name" json:"node_name,omitempty"`
+	NextName []byte `binapi:"u8[64],name=next_name" json:"next_name,omitempty"`
 }
 
-func (m *GetNextIndex) Reset()                        { *m = GetNextIndex{} }
-func (*GetNextIndex) GetMessageName() string          { return "get_next_index" }
-func (*GetNextIndex) GetCrcString() string            { return "9ab92f7a" }
-func (*GetNextIndex) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *GetNextIndex) Reset()               { *m = GetNextIndex{} }
+func (*GetNextIndex) GetMessageName() string { return "get_next_index" }
+func (*GetNextIndex) GetCrcString() string   { return "9ab92f7a" }
+func (*GetNextIndex) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *GetNextIndex) Size() int {
+func (m *GetNextIndex) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.NodeName
-	size += 64
-	// field[1] m.NextName
-	size += 64
+	size += 1 * 64 // m.NodeName
+	size += 1 * 64 // m.NextName
 	return size
 }
 func (m *GetNextIndex) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.NodeName
-	for i := 0; i < 64; i++ {
-		var x uint8
-		if i < len(m.NodeName) {
-			x = uint8(m.NodeName[i])
-		}
-		buf[pos] = uint8(x)
-		pos += 1
-	}
-	// field[1] m.NextName
-	for i := 0; i < 64; i++ {
-		var x uint8
-		if i < len(m.NextName) {
-			x = uint8(m.NextName[i])
-		}
-		buf[pos] = uint8(x)
-		pos += 1
-	}
-	return buf, nil
-}
-func (m *GetNextIndex) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.NodeName
-	m.NodeName = make([]uint8, 64)
-	for i := 0; i < len(m.NodeName); i++ {
-		m.NodeName[i] = uint8(tmp[pos])
-		pos += 1
-	}
-	// field[1] m.NextName
-	m.NextName = make([]uint8, 64)
-	for i := 0; i < len(m.NextName); i++ {
-		m.NextName[i] = uint8(tmp[pos])
-		pos += 1
-	}
+		b = make([]byte, m.Size())
+	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeBytes(m.NodeName, 64)
+	buf.EncodeBytes(m.NextName, 64)
+	return buf.Bytes(), nil
+}
+func (m *GetNextIndex) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.NodeName = make([]byte, 64)
+	copy(m.NodeName, buf.DecodeBytes(len(m.NodeName)))
+	m.NextName = make([]byte, 64)
+	copy(m.NextName, buf.DecodeBytes(len(m.NextName)))
 	return nil
 }
 
-// GetNextIndexReply represents VPP binary API message 'get_next_index_reply'.
+// GetNextIndexReply defines message 'get_next_index_reply'.
 type GetNextIndexReply struct {
 	Retval    int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 	NextIndex uint32 `binapi:"u32,name=next_index" json:"next_index,omitempty"`
 }
 
-func (m *GetNextIndexReply) Reset()                        { *m = GetNextIndexReply{} }
-func (*GetNextIndexReply) GetMessageName() string          { return "get_next_index_reply" }
-func (*GetNextIndexReply) GetCrcString() string            { return "2ed75f32" }
-func (*GetNextIndexReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *GetNextIndexReply) Reset()               { *m = GetNextIndexReply{} }
+func (*GetNextIndexReply) GetMessageName() string { return "get_next_index_reply" }
+func (*GetNextIndexReply) GetCrcString() string   { return "2ed75f32" }
+func (*GetNextIndexReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *GetNextIndexReply) Size() int {
+func (m *GetNextIndexReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.NextIndex
-	size += 4
+	size += 4 // m.Retval
+	size += 4 // m.NextIndex
 	return size
 }
 func (m *GetNextIndexReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.NextIndex
-	o.PutUint32(buf[pos:pos+4], uint32(m.NextIndex))
-	pos += 4
-	return buf, nil
-}
-func (m *GetNextIndexReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.NextIndex
-	m.NextIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint32(m.NextIndex)
+	return buf.Bytes(), nil
+}
+func (m *GetNextIndexReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.NextIndex = buf.DecodeUint32()
 	return nil
 }
 
-// GetNodeGraph represents VPP binary API message 'get_node_graph'.
+// GetNodeGraph defines message 'get_node_graph'.
 type GetNodeGraph struct{}
 
-func (m *GetNodeGraph) Reset()                        { *m = GetNodeGraph{} }
-func (*GetNodeGraph) GetMessageName() string          { return "get_node_graph" }
-func (*GetNodeGraph) GetCrcString() string            { return "51077d14" }
-func (*GetNodeGraph) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *GetNodeGraph) Reset()               { *m = GetNodeGraph{} }
+func (*GetNodeGraph) GetMessageName() string { return "get_node_graph" }
+func (*GetNodeGraph) GetCrcString() string   { return "51077d14" }
+func (*GetNodeGraph) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *GetNodeGraph) Size() int {
+func (m *GetNodeGraph) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
 	return size
 }
 func (m *GetNodeGraph) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	return buf, nil
+	buf := codec.NewBuffer(b)
+	return buf.Bytes(), nil
 }
-func (m *GetNodeGraph) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
+func (m *GetNodeGraph) Unmarshal(b []byte) error {
 	return nil
 }
 
-// GetNodeGraphReply represents VPP binary API message 'get_node_graph_reply'.
+// GetNodeGraphReply defines message 'get_node_graph_reply'.
 type GetNodeGraphReply struct {
 	Retval       int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 	ReplyInShmem uint64 `binapi:"u64,name=reply_in_shmem" json:"reply_in_shmem,omitempty"`
 }
 
-func (m *GetNodeGraphReply) Reset()                        { *m = GetNodeGraphReply{} }
-func (*GetNodeGraphReply) GetMessageName() string          { return "get_node_graph_reply" }
-func (*GetNodeGraphReply) GetCrcString() string            { return "06d68297" }
-func (*GetNodeGraphReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *GetNodeGraphReply) Reset()               { *m = GetNodeGraphReply{} }
+func (*GetNodeGraphReply) GetMessageName() string { return "get_node_graph_reply" }
+func (*GetNodeGraphReply) GetCrcString() string   { return "06d68297" }
+func (*GetNodeGraphReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *GetNodeGraphReply) Size() int {
+func (m *GetNodeGraphReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.ReplyInShmem
-	size += 8
+	size += 4 // m.Retval
+	size += 8 // m.ReplyInShmem
 	return size
 }
 func (m *GetNodeGraphReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.ReplyInShmem
-	o.PutUint64(buf[pos:pos+8], uint64(m.ReplyInShmem))
-	pos += 8
-	return buf, nil
-}
-func (m *GetNodeGraphReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.ReplyInShmem
-	m.ReplyInShmem = uint64(o.Uint64(tmp[pos : pos+8]))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint64(m.ReplyInShmem)
+	return buf.Bytes(), nil
+}
+func (m *GetNodeGraphReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.ReplyInShmem = buf.DecodeUint64()
 	return nil
 }
 
-// GetNodeIndex represents VPP binary API message 'get_node_index'.
+// GetNodeIndex defines message 'get_node_index'.
 type GetNodeIndex struct {
-	NodeName []byte `binapi:"u8[64],name=node_name" json:"node_name,omitempty" struc:"[64]byte"`
+	NodeName []byte `binapi:"u8[64],name=node_name" json:"node_name,omitempty"`
 }
 
-func (m *GetNodeIndex) Reset()                        { *m = GetNodeIndex{} }
-func (*GetNodeIndex) GetMessageName() string          { return "get_node_index" }
-func (*GetNodeIndex) GetCrcString() string            { return "6c9a495d" }
-func (*GetNodeIndex) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *GetNodeIndex) Reset()               { *m = GetNodeIndex{} }
+func (*GetNodeIndex) GetMessageName() string { return "get_node_index" }
+func (*GetNodeIndex) GetCrcString() string   { return "6c9a495d" }
+func (*GetNodeIndex) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *GetNodeIndex) Size() int {
+func (m *GetNodeIndex) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.NodeName
-	size += 64
+	size += 1 * 64 // m.NodeName
 	return size
 }
 func (m *GetNodeIndex) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.NodeName
-	for i := 0; i < 64; i++ {
-		var x uint8
-		if i < len(m.NodeName) {
-			x = uint8(m.NodeName[i])
-		}
-		buf[pos] = uint8(x)
-		pos += 1
-	}
-	return buf, nil
-}
-func (m *GetNodeIndex) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.NodeName
-	m.NodeName = make([]uint8, 64)
-	for i := 0; i < len(m.NodeName); i++ {
-		m.NodeName[i] = uint8(tmp[pos])
-		pos += 1
+		b = make([]byte, m.Size())
 	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeBytes(m.NodeName, 64)
+	return buf.Bytes(), nil
+}
+func (m *GetNodeIndex) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.NodeName = make([]byte, 64)
+	copy(m.NodeName, buf.DecodeBytes(len(m.NodeName)))
 	return nil
 }
 
-// GetNodeIndexReply represents VPP binary API message 'get_node_index_reply'.
+// GetNodeIndexReply defines message 'get_node_index_reply'.
 type GetNodeIndexReply struct {
 	Retval    int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 	NodeIndex uint32 `binapi:"u32,name=node_index" json:"node_index,omitempty"`
 }
 
-func (m *GetNodeIndexReply) Reset()                        { *m = GetNodeIndexReply{} }
-func (*GetNodeIndexReply) GetMessageName() string          { return "get_node_index_reply" }
-func (*GetNodeIndexReply) GetCrcString() string            { return "a8600b89" }
-func (*GetNodeIndexReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *GetNodeIndexReply) Reset()               { *m = GetNodeIndexReply{} }
+func (*GetNodeIndexReply) GetMessageName() string { return "get_node_index_reply" }
+func (*GetNodeIndexReply) GetCrcString() string   { return "a8600b89" }
+func (*GetNodeIndexReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *GetNodeIndexReply) Size() int {
+func (m *GetNodeIndexReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.NodeIndex
-	size += 4
+	size += 4 // m.Retval
+	size += 4 // m.NodeIndex
 	return size
 }
 func (m *GetNodeIndexReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.NodeIndex
-	o.PutUint32(buf[pos:pos+4], uint32(m.NodeIndex))
-	pos += 4
-	return buf, nil
-}
-func (m *GetNodeIndexReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.NodeIndex
-	m.NodeIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint32(m.NodeIndex)
+	return buf.Bytes(), nil
+}
+func (m *GetNodeIndexReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.NodeIndex = buf.DecodeUint32()
 	return nil
 }
 
-// LogDetails represents VPP binary API message 'log_details'.
+// LogDetails defines message 'log_details'.
 type LogDetails struct {
 	Timestamp Timestamp `binapi:"timestamp,name=timestamp" json:"timestamp,omitempty"`
 	Level     LogLevel  `binapi:"log_level,name=level" json:"level,omitempty"`
-	MsgClass  string    `binapi:"string[32],name=msg_class" json:"msg_class,omitempty" struc:"[32]byte"`
-	Message   string    `binapi:"string[256],name=message" json:"message,omitempty" struc:"[256]byte"`
+	MsgClass  string    `binapi:"string[32],name=msg_class" json:"msg_class,omitempty"`
+	Message   string    `binapi:"string[256],name=message" json:"message,omitempty"`
 }
 
-func (m *LogDetails) Reset()                        { *m = LogDetails{} }
-func (*LogDetails) GetMessageName() string          { return "log_details" }
-func (*LogDetails) GetCrcString() string            { return "255827a1" }
-func (*LogDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *LogDetails) Reset()               { *m = LogDetails{} }
+func (*LogDetails) GetMessageName() string { return "log_details" }
+func (*LogDetails) GetCrcString() string   { return "255827a1" }
+func (*LogDetails) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *LogDetails) Size() int {
+func (m *LogDetails) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Timestamp
-	size += 8
-	// field[1] m.Level
-	size += 4
-	// field[1] m.MsgClass
-	size += 32
-	// field[1] m.Message
-	size += 256
+	size += 8   // m.Timestamp
+	size += 4   // m.Level
+	size += 32  // m.MsgClass
+	size += 256 // m.Message
 	return size
 }
 func (m *LogDetails) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.Timestamp
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.Timestamp)))
-	pos += 8
-	// field[1] m.Level
-	o.PutUint32(buf[pos:pos+4], uint32(m.Level))
-	pos += 4
-	// field[1] m.MsgClass
-	copy(buf[pos:pos+32], m.MsgClass)
-	pos += 32
-	// field[1] m.Message
-	copy(buf[pos:pos+256], m.Message)
-	pos += 256
-	return buf, nil
-}
-func (m *LogDetails) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Timestamp
-	m.Timestamp = Timestamp(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
-	// field[1] m.Level
-	m.Level = LogLevel(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.MsgClass
-	{
-		nul := bytes.Index(tmp[pos:pos+32], []byte{0x00})
-		m.MsgClass = codec.DecodeString(tmp[pos : pos+nul])
-		pos += 32
-	}
-	// field[1] m.Message
-	{
-		nul := bytes.Index(tmp[pos:pos+256], []byte{0x00})
-		m.Message = codec.DecodeString(tmp[pos : pos+nul])
-		pos += 256
-	}
+		b = make([]byte, m.Size())
+	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeFloat64(float64(m.Timestamp))
+	buf.EncodeUint32(uint32(m.Level))
+	buf.EncodeString(m.MsgClass, 32)
+	buf.EncodeString(m.Message, 256)
+	return buf.Bytes(), nil
+}
+func (m *LogDetails) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Timestamp = Timestamp(buf.DecodeFloat64())
+	m.Level = LogLevel(buf.DecodeUint32())
+	m.MsgClass = buf.DecodeString(32)
+	m.Message = buf.DecodeString(256)
 	return nil
 }
 
-// LogDump represents VPP binary API message 'log_dump'.
+// LogDump defines message 'log_dump'.
 type LogDump struct {
 	StartTimestamp Timestamp `binapi:"timestamp,name=start_timestamp" json:"start_timestamp,omitempty"`
 }
 
-func (m *LogDump) Reset()                        { *m = LogDump{} }
-func (*LogDump) GetMessageName() string          { return "log_dump" }
-func (*LogDump) GetCrcString() string            { return "6ab31753" }
-func (*LogDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *LogDump) Reset()               { *m = LogDump{} }
+func (*LogDump) GetMessageName() string { return "log_dump" }
+func (*LogDump) GetCrcString() string   { return "6ab31753" }
+func (*LogDump) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *LogDump) Size() int {
+func (m *LogDump) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.StartTimestamp
-	size += 8
+	size += 8 // m.StartTimestamp
 	return size
 }
 func (m *LogDump) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.StartTimestamp
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.StartTimestamp)))
-	pos += 8
-	return buf, nil
-}
-func (m *LogDump) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.StartTimestamp
-	m.StartTimestamp = Timestamp(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeFloat64(float64(m.StartTimestamp))
+	return buf.Bytes(), nil
+}
+func (m *LogDump) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.StartTimestamp = Timestamp(buf.DecodeFloat64())
 	return nil
 }
 
-// ShowThreads represents VPP binary API message 'show_threads'.
+// ShowThreads defines message 'show_threads'.
 type ShowThreads struct{}
 
-func (m *ShowThreads) Reset()                        { *m = ShowThreads{} }
-func (*ShowThreads) GetMessageName() string          { return "show_threads" }
-func (*ShowThreads) GetCrcString() string            { return "51077d14" }
-func (*ShowThreads) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *ShowThreads) Reset()               { *m = ShowThreads{} }
+func (*ShowThreads) GetMessageName() string { return "show_threads" }
+func (*ShowThreads) GetCrcString() string   { return "51077d14" }
+func (*ShowThreads) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *ShowThreads) Size() int {
+func (m *ShowThreads) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
 	return size
 }
 func (m *ShowThreads) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	return buf, nil
+	buf := codec.NewBuffer(b)
+	return buf.Bytes(), nil
 }
-func (m *ShowThreads) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
+func (m *ShowThreads) Unmarshal(b []byte) error {
 	return nil
 }
 
-// ShowThreadsReply represents VPP binary API message 'show_threads_reply'.
+// ShowThreadsReply defines message 'show_threads_reply'.
 type ShowThreadsReply struct {
 	Retval     int32        `binapi:"i32,name=retval" json:"retval,omitempty"`
-	Count      uint32       `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=ThreadData"`
+	Count      uint32       `binapi:"u32,name=count" json:"-"`
 	ThreadData []ThreadData `binapi:"thread_data[count],name=thread_data" json:"thread_data,omitempty"`
 }
 
-func (m *ShowThreadsReply) Reset()                        { *m = ShowThreadsReply{} }
-func (*ShowThreadsReply) GetMessageName() string          { return "show_threads_reply" }
-func (*ShowThreadsReply) GetCrcString() string            { return "f5e0b66f" }
-func (*ShowThreadsReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *ShowThreadsReply) Reset()               { *m = ShowThreadsReply{} }
+func (*ShowThreadsReply) GetMessageName() string { return "show_threads_reply" }
+func (*ShowThreadsReply) GetCrcString() string   { return "f5e0b66f" }
+func (*ShowThreadsReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *ShowThreadsReply) Size() int {
+func (m *ShowThreadsReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.Count
-	size += 4
-	// field[1] m.ThreadData
+	size += 4 // m.Retval
+	size += 4 // m.Count
 	for j1 := 0; j1 < len(m.ThreadData); j1++ {
 		var s1 ThreadData
 		_ = s1
 		if j1 < len(m.ThreadData) {
 			s1 = m.ThreadData[j1]
 		}
-		// field[2] s1.ID
-		size += 4
-		// field[2] s1.Name
-		size += 64
-		// field[2] s1.Type
-		size += 64
-		// field[2] s1.PID
-		size += 4
-		// field[2] s1.CPUID
-		size += 4
-		// field[2] s1.Core
-		size += 4
-		// field[2] s1.CPUSocket
-		size += 4
+		size += 4      // s1.ID
+		size += 1 * 64 // s1.Name
+		size += 1 * 64 // s1.Type
+		size += 4      // s1.PID
+		size += 4      // s1.CPUID
+		size += 4      // s1.Core
+		size += 4      // s1.CPUSocket
 	}
 	return size
 }
 func (m *ShowThreadsReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.Count
-	o.PutUint32(buf[pos:pos+4], uint32(len(m.ThreadData)))
-	pos += 4
-	// field[1] m.ThreadData
-	for j1 := 0; j1 < len(m.ThreadData); j1++ {
-		var v1 ThreadData
-		if j1 < len(m.ThreadData) {
-			v1 = m.ThreadData[j1]
-		}
-		// field[2] v1.ID
-		o.PutUint32(buf[pos:pos+4], uint32(v1.ID))
-		pos += 4
-		// field[2] v1.Name
-		for i := 0; i < 64; i++ {
-			var x uint8
-			if i < len(v1.Name) {
-				x = uint8(v1.Name[i])
-			}
-			buf[pos] = uint8(x)
-			pos += 1
+		b = make([]byte, m.Size())
+	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeUint32(uint32(len(m.ThreadData)))
+	for j0 := 0; j0 < len(m.ThreadData); j0++ {
+		var v0 ThreadData // ThreadData
+		if j0 < len(m.ThreadData) {
+			v0 = m.ThreadData[j0]
 		}
-		// field[2] v1.Type
-		for i := 0; i < 64; i++ {
-			var x uint8
-			if i < len(v1.Type) {
-				x = uint8(v1.Type[i])
-			}
-			buf[pos] = uint8(x)
-			pos += 1
-		}
-		// field[2] v1.PID
-		o.PutUint32(buf[pos:pos+4], uint32(v1.PID))
-		pos += 4
-		// field[2] v1.CPUID
-		o.PutUint32(buf[pos:pos+4], uint32(v1.CPUID))
-		pos += 4
-		// field[2] v1.Core
-		o.PutUint32(buf[pos:pos+4], uint32(v1.Core))
-		pos += 4
-		// field[2] v1.CPUSocket
-		o.PutUint32(buf[pos:pos+4], uint32(v1.CPUSocket))
-		pos += 4
-	}
-	return buf, nil
-}
-func (m *ShowThreadsReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.Count
-	m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.ThreadData
-	m.ThreadData = make([]ThreadData, int(m.Count))
-	for j1 := 0; j1 < int(m.Count); j1++ {
-		// field[2] m.ThreadData[j1].ID
-		m.ThreadData[j1].ID = uint32(o.Uint32(tmp[pos : pos+4]))
-		pos += 4
-		// field[2] m.ThreadData[j1].Name
-		m.ThreadData[j1].Name = make([]uint8, 64)
-		for i := 0; i < len(m.ThreadData[j1].Name); i++ {
-			m.ThreadData[j1].Name[i] = uint8(tmp[pos])
-			pos += 1
-		}
-		// field[2] m.ThreadData[j1].Type
-		m.ThreadData[j1].Type = make([]uint8, 64)
-		for i := 0; i < len(m.ThreadData[j1].Type); i++ {
-			m.ThreadData[j1].Type[i] = uint8(tmp[pos])
-			pos += 1
-		}
-		// field[2] m.ThreadData[j1].PID
-		m.ThreadData[j1].PID = uint32(o.Uint32(tmp[pos : pos+4]))
-		pos += 4
-		// field[2] m.ThreadData[j1].CPUID
-		m.ThreadData[j1].CPUID = uint32(o.Uint32(tmp[pos : pos+4]))
-		pos += 4
-		// field[2] m.ThreadData[j1].Core
-		m.ThreadData[j1].Core = uint32(o.Uint32(tmp[pos : pos+4]))
-		pos += 4
-		// field[2] m.ThreadData[j1].CPUSocket
-		m.ThreadData[j1].CPUSocket = uint32(o.Uint32(tmp[pos : pos+4]))
-		pos += 4
+		buf.EncodeUint32(v0.ID)
+		buf.EncodeBytes(v0.Name, 64)
+		buf.EncodeBytes(v0.Type, 64)
+		buf.EncodeUint32(v0.PID)
+		buf.EncodeUint32(v0.CPUID)
+		buf.EncodeUint32(v0.Core)
+		buf.EncodeUint32(v0.CPUSocket)
+	}
+	return buf.Bytes(), nil
+}
+func (m *ShowThreadsReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.Count = buf.DecodeUint32()
+	m.ThreadData = make([]ThreadData, m.Count)
+	for j0 := 0; j0 < len(m.ThreadData); j0++ {
+		m.ThreadData[j0].ID = buf.DecodeUint32()
+		m.ThreadData[j0].Name = make([]byte, 64)
+		copy(m.ThreadData[j0].Name, buf.DecodeBytes(len(m.ThreadData[j0].Name)))
+		m.ThreadData[j0].Type = make([]byte, 64)
+		copy(m.ThreadData[j0].Type, buf.DecodeBytes(len(m.ThreadData[j0].Type)))
+		m.ThreadData[j0].PID = buf.DecodeUint32()
+		m.ThreadData[j0].CPUID = buf.DecodeUint32()
+		m.ThreadData[j0].Core = buf.DecodeUint32()
+		m.ThreadData[j0].CPUSocket = buf.DecodeUint32()
 	}
 	return nil
 }
 
-// ShowVersion represents VPP binary API message 'show_version'.
+// ShowVersion defines message 'show_version'.
 type ShowVersion struct{}
 
-func (m *ShowVersion) Reset()                        { *m = ShowVersion{} }
-func (*ShowVersion) GetMessageName() string          { return "show_version" }
-func (*ShowVersion) GetCrcString() string            { return "51077d14" }
-func (*ShowVersion) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *ShowVersion) Reset()               { *m = ShowVersion{} }
+func (*ShowVersion) GetMessageName() string { return "show_version" }
+func (*ShowVersion) GetCrcString() string   { return "51077d14" }
+func (*ShowVersion) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *ShowVersion) Size() int {
+func (m *ShowVersion) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
 	return size
 }
 func (m *ShowVersion) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	return buf, nil
+	buf := codec.NewBuffer(b)
+	return buf.Bytes(), nil
 }
-func (m *ShowVersion) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
+func (m *ShowVersion) Unmarshal(b []byte) error {
 	return nil
 }
 
-// ShowVersionReply represents VPP binary API message 'show_version_reply'.
+// ShowVersionReply defines message 'show_version_reply'.
 type ShowVersionReply struct {
 	Retval         int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
-	Program        string `binapi:"string[32],name=program" json:"program,omitempty" struc:"[32]byte"`
-	Version        string `binapi:"string[32],name=version" json:"version,omitempty" struc:"[32]byte"`
-	BuildDate      string `binapi:"string[32],name=build_date" json:"build_date,omitempty" struc:"[32]byte"`
-	BuildDirectory string `binapi:"string[256],name=build_directory" json:"build_directory,omitempty" struc:"[256]byte"`
+	Program        string `binapi:"string[32],name=program" json:"program,omitempty"`
+	Version        string `binapi:"string[32],name=version" json:"version,omitempty"`
+	BuildDate      string `binapi:"string[32],name=build_date" json:"build_date,omitempty"`
+	BuildDirectory string `binapi:"string[256],name=build_directory" json:"build_directory,omitempty"`
 }
 
-func (m *ShowVersionReply) Reset()                        { *m = ShowVersionReply{} }
-func (*ShowVersionReply) GetMessageName() string          { return "show_version_reply" }
-func (*ShowVersionReply) GetCrcString() string            { return "c919bde1" }
-func (*ShowVersionReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *ShowVersionReply) Reset()               { *m = ShowVersionReply{} }
+func (*ShowVersionReply) GetMessageName() string { return "show_version_reply" }
+func (*ShowVersionReply) GetCrcString() string   { return "c919bde1" }
+func (*ShowVersionReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *ShowVersionReply) Size() int {
+func (m *ShowVersionReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.Program
-	size += 32
-	// field[1] m.Version
-	size += 32
-	// field[1] m.BuildDate
-	size += 32
-	// field[1] m.BuildDirectory
-	size += 256
+	size += 4   // m.Retval
+	size += 32  // m.Program
+	size += 32  // m.Version
+	size += 32  // m.BuildDate
+	size += 256 // m.BuildDirectory
 	return size
 }
 func (m *ShowVersionReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
-	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.Program
-	copy(buf[pos:pos+32], m.Program)
-	pos += 32
-	// field[1] m.Version
-	copy(buf[pos:pos+32], m.Version)
-	pos += 32
-	// field[1] m.BuildDate
-	copy(buf[pos:pos+32], m.BuildDate)
-	pos += 32
-	// field[1] m.BuildDirectory
-	copy(buf[pos:pos+256], m.BuildDirectory)
-	pos += 256
-	return buf, nil
-}
-func (m *ShowVersionReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.Program
-	{
-		nul := bytes.Index(tmp[pos:pos+32], []byte{0x00})
-		m.Program = codec.DecodeString(tmp[pos : pos+nul])
-		pos += 32
-	}
-	// field[1] m.Version
-	{
-		nul := bytes.Index(tmp[pos:pos+32], []byte{0x00})
-		m.Version = codec.DecodeString(tmp[pos : pos+nul])
-		pos += 32
-	}
-	// field[1] m.BuildDate
-	{
-		nul := bytes.Index(tmp[pos:pos+32], []byte{0x00})
-		m.BuildDate = codec.DecodeString(tmp[pos : pos+nul])
-		pos += 32
-	}
-	// field[1] m.BuildDirectory
-	{
-		nul := bytes.Index(tmp[pos:pos+256], []byte{0x00})
-		m.BuildDirectory = codec.DecodeString(tmp[pos : pos+nul])
-		pos += 256
-	}
+		b = make([]byte, m.Size())
+	}
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeString(m.Program, 32)
+	buf.EncodeString(m.Version, 32)
+	buf.EncodeString(m.BuildDate, 32)
+	buf.EncodeString(m.BuildDirectory, 256)
+	return buf.Bytes(), nil
+}
+func (m *ShowVersionReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.Program = buf.DecodeString(32)
+	m.Version = buf.DecodeString(32)
+	m.BuildDate = buf.DecodeString(32)
+	m.BuildDirectory = buf.DecodeString(256)
 	return nil
 }
 
-// ShowVpeSystemTime represents VPP binary API message 'show_vpe_system_time'.
+// ShowVpeSystemTime defines message 'show_vpe_system_time'.
 type ShowVpeSystemTime struct{}
 
-func (m *ShowVpeSystemTime) Reset()                        { *m = ShowVpeSystemTime{} }
-func (*ShowVpeSystemTime) GetMessageName() string          { return "show_vpe_system_time" }
-func (*ShowVpeSystemTime) GetCrcString() string            { return "51077d14" }
-func (*ShowVpeSystemTime) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *ShowVpeSystemTime) Reset()               { *m = ShowVpeSystemTime{} }
+func (*ShowVpeSystemTime) GetMessageName() string { return "show_vpe_system_time" }
+func (*ShowVpeSystemTime) GetCrcString() string   { return "51077d14" }
+func (*ShowVpeSystemTime) GetMessageType() api.MessageType {
+	return api.RequestMessage
+}
 
-func (m *ShowVpeSystemTime) Size() int {
+func (m *ShowVpeSystemTime) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
 	return size
 }
 func (m *ShowVpeSystemTime) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	return buf, nil
+	buf := codec.NewBuffer(b)
+	return buf.Bytes(), nil
 }
-func (m *ShowVpeSystemTime) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
+func (m *ShowVpeSystemTime) Unmarshal(b []byte) error {
 	return nil
 }
 
-// ShowVpeSystemTimeReply represents VPP binary API message 'show_vpe_system_time_reply'.
+// ShowVpeSystemTimeReply defines message 'show_vpe_system_time_reply'.
 type ShowVpeSystemTimeReply struct {
 	Retval        int32     `binapi:"i32,name=retval" json:"retval,omitempty"`
 	VpeSystemTime Timestamp `binapi:"timestamp,name=vpe_system_time" json:"vpe_system_time,omitempty"`
 }
 
-func (m *ShowVpeSystemTimeReply) Reset()                        { *m = ShowVpeSystemTimeReply{} }
-func (*ShowVpeSystemTimeReply) GetMessageName() string          { return "show_vpe_system_time_reply" }
-func (*ShowVpeSystemTimeReply) GetCrcString() string            { return "7ffd8193" }
-func (*ShowVpeSystemTimeReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *ShowVpeSystemTimeReply) Reset()               { *m = ShowVpeSystemTimeReply{} }
+func (*ShowVpeSystemTimeReply) GetMessageName() string { return "show_vpe_system_time_reply" }
+func (*ShowVpeSystemTimeReply) GetCrcString() string   { return "7ffd8193" }
+func (*ShowVpeSystemTimeReply) GetMessageType() api.MessageType {
+	return api.ReplyMessage
+}
 
-func (m *ShowVpeSystemTimeReply) Size() int {
+func (m *ShowVpeSystemTimeReply) Size() (size int) {
 	if m == nil {
 		return 0
 	}
-	var size int
-	// field[1] m.Retval
-	size += 4
-	// field[1] m.VpeSystemTime
-	size += 8
+	size += 4 // m.Retval
+	size += 8 // m.VpeSystemTime
 	return size
 }
 func (m *ShowVpeSystemTimeReply) Marshal(b []byte) ([]byte, error) {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	var buf []byte
 	if b == nil {
-		buf = make([]byte, m.Size())
-	} else {
-		buf = b
+		b = make([]byte, m.Size())
 	}
-	// field[1] m.Retval
-	o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
-	pos += 4
-	// field[1] m.VpeSystemTime
-	o.PutUint64(buf[pos:pos+8], math.Float64bits(float64(m.VpeSystemTime)))
-	pos += 8
-	return buf, nil
-}
-func (m *ShowVpeSystemTimeReply) Unmarshal(tmp []byte) error {
-	o := binary.BigEndian
-	_ = o
-	pos := 0
-	_ = pos
-	// field[1] m.Retval
-	m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
-	pos += 4
-	// field[1] m.VpeSystemTime
-	m.VpeSystemTime = Timestamp(math.Float64frombits(o.Uint64(tmp[pos : pos+8])))
-	pos += 8
+	buf := codec.NewBuffer(b)
+	buf.EncodeInt32(m.Retval)
+	buf.EncodeFloat64(float64(m.VpeSystemTime))
+	return buf.Bytes(), nil
+}
+func (m *ShowVpeSystemTimeReply) Unmarshal(b []byte) error {
+	buf := codec.NewBuffer(b)
+	m.Retval = buf.DecodeInt32()
+	m.VpeSystemTime = Timestamp(buf.DecodeFloat64())
 	return nil
 }
 
 func init() { file_vpe_binapi_init() }
 func file_vpe_binapi_init() {
-	api.RegisterMessage((*AddNodeNext)(nil), "vpe.AddNodeNext")
-	api.RegisterMessage((*AddNodeNextReply)(nil), "vpe.AddNodeNextReply")
-	api.RegisterMessage((*Cli)(nil), "vpe.Cli")
-	api.RegisterMessage((*CliInband)(nil), "vpe.CliInband")
-	api.RegisterMessage((*CliInbandReply)(nil), "vpe.CliInbandReply")
-	api.RegisterMessage((*CliReply)(nil), "vpe.CliReply")
-	api.RegisterMessage((*ControlPing)(nil), "vpe.ControlPing")
-	api.RegisterMessage((*ControlPingReply)(nil), "vpe.ControlPingReply")
-	api.RegisterMessage((*GetF64EndianValue)(nil), "vpe.GetF64EndianValue")
-	api.RegisterMessage((*GetF64EndianValueReply)(nil), "vpe.GetF64EndianValueReply")
-	api.RegisterMessage((*GetF64IncrementByOne)(nil), "vpe.GetF64IncrementByOne")
-	api.RegisterMessage((*GetF64IncrementByOneReply)(nil), "vpe.GetF64IncrementByOneReply")
-	api.RegisterMessage((*GetNextIndex)(nil), "vpe.GetNextIndex")
-	api.RegisterMessage((*GetNextIndexReply)(nil), "vpe.GetNextIndexReply")
-	api.RegisterMessage((*GetNodeGraph)(nil), "vpe.GetNodeGraph")
-	api.RegisterMessage((*GetNodeGraphReply)(nil), "vpe.GetNodeGraphReply")
-	api.RegisterMessage((*GetNodeIndex)(nil), "vpe.GetNodeIndex")
-	api.RegisterMessage((*GetNodeIndexReply)(nil), "vpe.GetNodeIndexReply")
-	api.RegisterMessage((*LogDetails)(nil), "vpe.LogDetails")
-	api.RegisterMessage((*LogDump)(nil), "vpe.LogDump")
-	api.RegisterMessage((*ShowThreads)(nil), "vpe.ShowThreads")
-	api.RegisterMessage((*ShowThreadsReply)(nil), "vpe.ShowThreadsReply")
-	api.RegisterMessage((*ShowVersion)(nil), "vpe.ShowVersion")
-	api.RegisterMessage((*ShowVersionReply)(nil), "vpe.ShowVersionReply")
-	api.RegisterMessage((*ShowVpeSystemTime)(nil), "vpe.ShowVpeSystemTime")
-	api.RegisterMessage((*ShowVpeSystemTimeReply)(nil), "vpe.ShowVpeSystemTimeReply")
+	api.RegisterMessage((*AddNodeNext)(nil), "add_node_next_9ab92f7a")
+	api.RegisterMessage((*AddNodeNextReply)(nil), "add_node_next_reply_2ed75f32")
+	api.RegisterMessage((*Cli)(nil), "cli_23bfbfff")
+	api.RegisterMessage((*CliInband)(nil), "cli_inband_f8377302")
+	api.RegisterMessage((*CliInbandReply)(nil), "cli_inband_reply_05879051")
+	api.RegisterMessage((*CliReply)(nil), "cli_reply_06d68297")
+	api.RegisterMessage((*ControlPing)(nil), "control_ping_51077d14")
+	api.RegisterMessage((*ControlPingReply)(nil), "control_ping_reply_f6b0b8ca")
+	api.RegisterMessage((*GetF64EndianValue)(nil), "get_f64_endian_value_809fcd44")
+	api.RegisterMessage((*GetF64EndianValueReply)(nil), "get_f64_endian_value_reply_7e02e404")
+	api.RegisterMessage((*GetF64IncrementByOne)(nil), "get_f64_increment_by_one_b64f027e")
+	api.RegisterMessage((*GetF64IncrementByOneReply)(nil), "get_f64_increment_by_one_reply_d25dbaa3")
+	api.RegisterMessage((*GetNextIndex)(nil), "get_next_index_9ab92f7a")
+	api.RegisterMessage((*GetNextIndexReply)(nil), "get_next_index_reply_2ed75f32")
+	api.RegisterMessage((*GetNodeGraph)(nil), "get_node_graph_51077d14")
+	api.RegisterMessage((*GetNodeGraphReply)(nil), "get_node_graph_reply_06d68297")
+	api.RegisterMessage((*GetNodeIndex)(nil), "get_node_index_6c9a495d")
+	api.RegisterMessage((*GetNodeIndexReply)(nil), "get_node_index_reply_a8600b89")
+	api.RegisterMessage((*LogDetails)(nil), "log_details_255827a1")
+	api.RegisterMessage((*LogDump)(nil), "log_dump_6ab31753")
+	api.RegisterMessage((*ShowThreads)(nil), "show_threads_51077d14")
+	api.RegisterMessage((*ShowThreadsReply)(nil), "show_threads_reply_f5e0b66f")
+	api.RegisterMessage((*ShowVersion)(nil), "show_version_51077d14")
+	api.RegisterMessage((*ShowVersionReply)(nil), "show_version_reply_c919bde1")
+	api.RegisterMessage((*ShowVpeSystemTime)(nil), "show_vpe_system_time_51077d14")
+	api.RegisterMessage((*ShowVpeSystemTimeReply)(nil), "show_vpe_system_time_reply_7ffd8193")
 }
 
 // Messages returns list of all messages in this module.
@@ -1688,14 +1124,3 @@ func AllMessages() []api.Message {
 		(*ShowVpeSystemTimeReply)(nil),
 	}
 }
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = api.RegisterMessage
-var _ = codec.DecodeString
-var _ = bytes.NewBuffer
-var _ = context.Background
-var _ = io.Copy
-var _ = strconv.Itoa
-var _ = struc.Pack
-var _ = binary.BigEndian
-var _ = math.Float32bits
diff --git a/internal/testbinapi/binapi2001/vpe/vpe_rpc.ba.go b/internal/testbinapi/binapi2001/vpe/vpe_rpc.ba.go
index e81fb91..dfa669f 100644
--- a/internal/testbinapi/binapi2001/vpe/vpe_rpc.ba.go
+++ b/internal/testbinapi/binapi2001/vpe/vpe_rpc.ba.go
@@ -4,14 +4,13 @@ package vpe
 
 import (
 	"context"
-	"io"
-
+	"fmt"
 	api "git.fd.io/govpp.git/api"
+	"io"
 )
 
-// RPCService represents RPC service API for vpe module.
+// RPCService defines RPC service  vpe.
 type RPCService interface {
-	DumpLog(ctx context.Context, in *LogDump) (RPCService_DumpLogClient, error)
 	AddNodeNext(ctx context.Context, in *AddNodeNext) (*AddNodeNextReply, error)
 	Cli(ctx context.Context, in *Cli) (*CliReply, error)
 	CliInband(ctx context.Context, in *CliInband) (*CliInbandReply, error)
@@ -21,48 +20,23 @@ type RPCService interface {
 	GetNextIndex(ctx context.Context, in *GetNextIndex) (*GetNextIndexReply, error)
 	GetNodeGraph(ctx context.Context, in *GetNodeGraph) (*GetNodeGraphReply, error)
 	GetNodeIndex(ctx context.Context, in *GetNodeIndex) (*GetNodeIndexReply, error)
+	LogDump(ctx context.Context, in *LogDump) (RPCService_LogDumpClient, error)
 	ShowThreads(ctx context.Context, in *ShowThreads) (*ShowThreadsReply, error)
 	ShowVersion(ctx context.Context, in *ShowVersion) (*ShowVersionReply, error)
 	ShowVpeSystemTime(ctx context.Context, in *ShowVpeSystemTime) (*ShowVpeSystemTimeReply, error)
 }
 
 type serviceClient struct {
-	ch api.Channel
-}
-
-func NewServiceClient(ch api.Channel) RPCService {
-	return &serviceClient{ch}
-}
-
-func (c *serviceClient) DumpLog(ctx context.Context, in *LogDump) (RPCService_DumpLogClient, error) {
-	stream := c.ch.SendMultiRequest(in)
-	x := &serviceClient_DumpLogClient{stream}
-	return x, nil
-}
-
-type RPCService_DumpLogClient interface {
-	Recv() (*LogDetails, error)
+	conn api.Connection
 }
 
-type serviceClient_DumpLogClient struct {
-	api.MultiRequestCtx
-}
-
-func (c *serviceClient_DumpLogClient) Recv() (*LogDetails, error) {
-	m := new(LogDetails)
-	stop, err := c.MultiRequestCtx.ReceiveReply(m)
-	if err != nil {
-		return nil, err
-	}
-	if stop {
-		return nil, io.EOF
-	}
-	return m, nil
+func NewServiceClient(conn api.Connection) RPCService {
+	return &serviceClient{conn}
 }
 
 func (c *serviceClient) AddNodeNext(ctx context.Context, in *AddNodeNext) (*AddNodeNextReply, error) {
 	out := new(AddNodeNextReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -71,7 +45,7 @@ func (c *serviceClient) AddNodeNext(ctx context.Context, in *AddNodeNext) (*AddN
 
 func (c *serviceClient) Cli(ctx context.Context, in *Cli) (*CliReply, error) {
 	out := new(CliReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -80,7 +54,7 @@ func (c *serviceClient) Cli(ctx context.Context, in *Cli) (*CliReply, error) {
 
 func (c *serviceClient) CliInband(ctx context.Context, in *CliInband) (*CliInbandReply, error) {
 	out := new(CliInbandReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -89,7 +63,7 @@ func (c *serviceClient) CliInband(ctx context.Context, in *CliInband) (*CliInban
 
 func (c *serviceClient) ControlPing(ctx context.Context, in *ControlPing) (*ControlPingReply, error) {
 	out := new(ControlPingReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -98,7 +72,7 @@ func (c *serviceClient) ControlPing(ctx context.Context, in *ControlPing) (*Cont
 
 func (c *serviceClient) GetF64EndianValue(ctx context.Context, in *GetF64EndianValue) (*GetF64EndianValueReply, error) {
 	out := new(GetF64EndianValueReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -107,7 +81,7 @@ func (c *serviceClient) GetF64EndianValue(ctx context.Context, in *GetF64EndianV
 
 func (c *serviceClient) GetF64IncrementByOne(ctx context.Context, in *GetF64IncrementByOne) (*GetF64IncrementByOneReply, error) {
 	out := new(GetF64IncrementByOneReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -116,7 +90,7 @@ func (c *serviceClient) GetF64IncrementByOne(ctx context.Context, in *GetF64Incr
 
 func (c *serviceClient) GetNextIndex(ctx context.Context, in *GetNextIndex) (*GetNextIndexReply, error) {
 	out := new(GetNextIndexReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -125,7 +99,7 @@ func (c *serviceClient) GetNextIndex(ctx context.Context, in *GetNextIndex) (*Ge
 
 func (c *serviceClient) GetNodeGraph(ctx context.Context, in *GetNodeGraph) (*GetNodeGraphReply, error) {
 	out := new(GetNodeGraphReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -134,16 +108,55 @@ func (c *serviceClient) GetNodeGraph(ctx context.Context, in *GetNodeGraph) (*Ge
 
 func (c *serviceClient) GetNodeIndex(ctx context.Context, in *GetNodeIndex) (*GetNodeIndexReply, error) {
 	out := new(GetNodeIndexReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
+func (c *serviceClient) LogDump(ctx context.Context, in *LogDump) (RPCService_LogDumpClient, error) {
+	stream, err := c.conn.NewStream(ctx)
+	if err != nil {
+		return nil, err
+	}
+	x := &serviceClient_LogDumpClient{stream}
+	if err := x.Stream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err = x.Stream.SendMsg(&ControlPing{}); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type RPCService_LogDumpClient interface {
+	Recv() (*LogDetails, error)
+	api.Stream
+}
+
+type serviceClient_LogDumpClient struct {
+	api.Stream
+}
+
+func (c *serviceClient_LogDumpClient) Recv() (*LogDetails, error) {
+	msg, err := c.Stream.RecvMsg()
+	if err != nil {
+		return nil, err
+	}
+	switch m := msg.(type) {
+	case *LogDetails:
+		return m, nil
+	case *ControlPingReply:
+		return nil, io.EOF
+	default:
+		return nil, fmt.Errorf("unexpected message: %T %v", m, m)
+	}
+}
+
 func (c *serviceClient) ShowThreads(ctx context.Context, in *ShowThreads) (*ShowThreadsReply, error) {
 	out := new(ShowThreadsReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -152,7 +165,7 @@ func (c *serviceClient) ShowThreads(ctx context.Context, in *ShowThreads) (*Show
 
 func (c *serviceClient) ShowVersion(ctx context.Context, in *ShowVersion) (*ShowVersionReply, error) {
 	out := new(ShowVersionReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
@@ -161,14 +174,9 @@ func (c *serviceClient) ShowVersion(ctx context.Context, in *ShowVersion) (*Show
 
 func (c *serviceClient) ShowVpeSystemTime(ctx context.Context, in *ShowVpeSystemTime) (*ShowVpeSystemTimeReply, error) {
 	out := new(ShowVpeSystemTimeReply)
-	err := c.ch.SendRequest(in).ReceiveReply(out)
+	err := c.conn.Invoke(ctx, in, out)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = api.RegisterMessage
-var _ = context.Background
-var _ = io.Copy
-- 
cgit