Fix binapigen decoding and minor improvements
[govpp.git] / internal / testbinapi / binapi2001 / ip / ip.ba.go
index ca717ca..1b0b6b2 100644 (file)
@@ -1,50 +1,42 @@
 // 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/ip.api.json
-
-/*
-Package ip contains generated code for VPP binary API defined by ip.api (version 3.0.1).
-
-It consists of:
-         7 aliases
-        15 enums
-        60 messages
-        14 types
-         1 union
-*/
+//  VPP:              20.01
+// source: .vppapi/core/ip.api.json
+
+// Package ip contains generated bindings for API file ip.api.
+//
+// Contents:
+//   7 aliases
+//  15 enums
+//  14 structs
+//   1 union
+//  60 messages
+//
 package ip
 
 import (
-       "bytes"
-       "context"
-       "encoding/binary"
-       "io"
-       "math"
-       "strconv"
-
+       "fmt"
        api "git.fd.io/govpp.git/api"
        codec "git.fd.io/govpp.git/codec"
-       struc "github.com/lunixbochs/struc"
+       "net"
+       "strconv"
+       "strings"
 )
 
 // 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 = "ip"
-       // APIVersion is the API version of this module.
+       APIFile    = "ip"
        APIVersion = "3.0.1"
-       // VersionCrc is the CRC of this module.
        VersionCrc = 0xfc3fea46
 )
 
-// AddressFamily represents VPP binary API enum 'address_family'.
+// AddressFamily defines enum 'address_family'.
 type AddressFamily uint32
 
 const (
@@ -71,7 +63,7 @@ func (x AddressFamily) String() string {
        return "AddressFamily(" + strconv.Itoa(int(x)) + ")"
 }
 
-// FibPathFlags represents VPP binary API enum 'fib_path_flags'.
+// FibPathFlags defines enum 'fib_path_flags'.
 type FibPathFlags uint32
 
 const (
@@ -101,10 +93,29 @@ func (x FibPathFlags) String() string {
        if ok {
                return s
        }
-       return "FibPathFlags(" + strconv.Itoa(int(x)) + ")"
+       str := func(n uint32) string {
+               s, ok := FibPathFlags_name[uint32(n)]
+               if ok {
+                       return s
+               }
+               return "FibPathFlags(" + strconv.Itoa(int(n)) + ")"
+       }
+       for i := uint32(0); i <= 32; i++ {
+               val := uint32(x)
+               if val&(1<<i) != 0 {
+                       if s != "" {
+                               s += "|"
+                       }
+                       s += str(1 << i)
+               }
+       }
+       if s == "" {
+               return str(uint32(x))
+       }
+       return s
 }
 
-// FibPathNhProto represents VPP binary API enum 'fib_path_nh_proto'.
+// FibPathNhProto defines enum 'fib_path_nh_proto'.
 type FibPathNhProto uint32
 
 const (
@@ -140,7 +151,7 @@ func (x FibPathNhProto) String() string {
        return "FibPathNhProto(" + strconv.Itoa(int(x)) + ")"
 }
 
-// FibPathType represents VPP binary API enum 'fib_path_type'.
+// FibPathType defines enum 'fib_path_type'.
 type FibPathType uint32
 
 const (
@@ -194,7 +205,7 @@ func (x FibPathType) String() string {
        return "FibPathType(" + strconv.Itoa(int(x)) + ")"
 }
 
-// IfStatusFlags represents VPP binary API enum 'if_status_flags'.
+// IfStatusFlags defines enum 'if_status_flags'.
 type IfStatusFlags uint32
 
 const (
@@ -218,10 +229,29 @@ func (x IfStatusFlags) String() string {
        if ok {
                return s
        }
-       return "IfStatusFlags(" + strconv.Itoa(int(x)) + ")"
+       str := func(n uint32) string {
+               s, ok := IfStatusFlags_name[uint32(n)]
+               if ok {
+                       return s
+               }
+               return "IfStatusFlags(" + strconv.Itoa(int(n)) + ")"
+       }
+       for i := uint32(0); i <= 32; i++ {
+               val := uint32(x)
+               if val&(1<<i) != 0 {
+                       if s != "" {
+                               s += "|"
+                       }
+                       s += str(1 << i)
+               }
+       }
+       if s == "" {
+               return str(uint32(x))
+       }
+       return s
 }
 
-// IfType represents VPP binary API enum 'if_type'.
+// IfType defines enum 'if_type'.
 type IfType uint32
 
 const (
@@ -254,7 +284,7 @@ func (x IfType) String() string {
        return "IfType(" + strconv.Itoa(int(x)) + ")"
 }
 
-// IPDscp represents VPP binary API enum 'ip_dscp'.
+// IPDscp defines enum 'ip_dscp'.
 type IPDscp uint8
 
 const (
@@ -338,7 +368,7 @@ func (x IPDscp) String() string {
        return "IPDscp(" + strconv.Itoa(int(x)) + ")"
 }
 
-// IPEcn represents VPP binary API enum 'ip_ecn'.
+// IPEcn defines enum 'ip_ecn'.
 type IPEcn uint8
 
 const (
@@ -371,7 +401,7 @@ func (x IPEcn) String() string {
        return "IPEcn(" + strconv.Itoa(int(x)) + ")"
 }
 
-// IPProto represents VPP binary API enum 'ip_proto'.
+// IPProto defines enum 'ip_proto'.
 type IPProto uint32
 
 const (
@@ -428,7 +458,7 @@ func (x IPProto) String() string {
        return "IPProto(" + strconv.Itoa(int(x)) + ")"
 }
 
-// IPReassType represents VPP binary API enum 'ip_reass_type'.
+// IPReassType defines enum 'ip_reass_type'.
 type IPReassType uint32
 
 const (
@@ -455,7 +485,7 @@ func (x IPReassType) String() string {
        return "IPReassType(" + strconv.Itoa(int(x)) + ")"
 }
 
-// LinkDuplex represents VPP binary API enum 'link_duplex'.
+// LinkDuplex defines enum 'link_duplex'.
 type LinkDuplex uint32
 
 const (
@@ -485,7 +515,7 @@ func (x LinkDuplex) String() string {
        return "LinkDuplex(" + strconv.Itoa(int(x)) + ")"
 }
 
-// MfibItfFlags represents VPP binary API enum 'mfib_itf_flags'.
+// MfibItfFlags defines enum 'mfib_itf_flags'.
 type MfibItfFlags uint32
 
 const (
@@ -521,10 +551,29 @@ func (x MfibItfFlags) String() string {
        if ok {
                return s
        }
-       return "MfibItfFlags(" + strconv.Itoa(int(x)) + ")"
+       str := func(n uint32) string {
+               s, ok := MfibItfFlags_name[uint32(n)]
+               if ok {
+                       return s
+               }
+               return "MfibItfFlags(" + strconv.Itoa(int(n)) + ")"
+       }
+       for i := uint32(0); i <= 32; i++ {
+               val := uint32(x)
+               if val&(1<<i) != 0 {
+                       if s != "" {
+                               s += "|"
+                       }
+                       s += str(1 << i)
+               }
+       }
+       if s == "" {
+               return str(uint32(x))
+       }
+       return s
 }
 
-// MtuProto represents VPP binary API enum 'mtu_proto'.
+// MtuProto defines enum 'mtu_proto'.
 type MtuProto uint32
 
 const (
@@ -560,7 +609,7 @@ func (x MtuProto) String() string {
        return "MtuProto(" + strconv.Itoa(int(x)) + ")"
 }
 
-// RxMode represents VPP binary API enum 'rx_mode'.
+// RxMode defines enum 'rx_mode'.
 type RxMode uint32
 
 const (
@@ -596,7 +645,7 @@ func (x RxMode) String() string {
        return "RxMode(" + strconv.Itoa(int(x)) + ")"
 }
 
-// SubIfFlags represents VPP binary API enum 'sub_if_flags'.
+// SubIfFlags defines enum 'sub_if_flags'.
 type SubIfFlags uint32
 
 const (
@@ -644,39 +693,204 @@ func (x SubIfFlags) String() string {
        if ok {
                return s
        }
-       return "SubIfFlags(" + strconv.Itoa(int(x)) + ")"
+       str := func(n uint32) string {
+               s, ok := SubIfFlags_name[uint32(n)]
+               if ok {
+                       return s
+               }
+               return "SubIfFlags(" + strconv.Itoa(int(n)) + ")"
+       }
+       for i := uint32(0); i <= 32; i++ {
+               val := uint32(x)
+               if val&(1<<i) != 0 {
+                       if s != "" {
+                               s += "|"
+                       }
+                       s += str(1 << i)
+               }
+       }
+       if s == "" {
+               return str(uint32(x))
+       }
+       return s
 }
 
-// AddressWithPrefix represents VPP binary API alias 'address_with_prefix'.
+// AddressWithPrefix defines alias 'address_with_prefix'.
 type AddressWithPrefix Prefix
 
-// InterfaceIndex represents VPP binary API alias 'interface_index'.
+func ParseAddressWithPrefix(s string) (AddressWithPrefix, error) {
+       prefix, err := ParsePrefix(s)
+       if err != nil {
+               return AddressWithPrefix{}, err
+       }
+       return AddressWithPrefix(prefix), nil
+}
+func (x AddressWithPrefix) String() string {
+       return Prefix(x).String()
+}
+func (x *AddressWithPrefix) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *AddressWithPrefix) UnmarshalText(text []byte) error {
+       prefix, err := ParseAddressWithPrefix(string(text))
+       if err != nil {
+               return err
+       }
+       *x = prefix
+       return nil
+}
+
+// InterfaceIndex defines alias 'interface_index'.
 type InterfaceIndex uint32
 
-// IP4Address represents VPP binary API alias 'ip4_address'.
+// IP4Address defines alias 'ip4_address'.
 type IP4Address [4]uint8
 
-// IP4AddressWithPrefix represents VPP binary API alias 'ip4_address_with_prefix'.
+func ParseIP4Address(s string) (IP4Address, error) {
+       ip := net.ParseIP(s).To4()
+       if ip == nil {
+               return IP4Address{}, fmt.Errorf("invalid IP address: %s", s)
+       }
+       var ipaddr IP4Address
+       copy(ipaddr[:], ip.To4())
+       return ipaddr, nil
+}
+
+func (x IP4Address) ToIP() net.IP {
+       return net.IP(x[:]).To4()
+}
+func (x IP4Address) String() string {
+       return x.ToIP().String()
+}
+func (x *IP4Address) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *IP4Address) UnmarshalText(text []byte) error {
+       ipaddr, err := ParseIP4Address(string(text))
+       if err != nil {
+               return err
+       }
+       *x = ipaddr
+       return nil
+}
+
+// IP4AddressWithPrefix defines alias 'ip4_address_with_prefix'.
 type IP4AddressWithPrefix IP4Prefix
 
-// IP6Address represents VPP binary API alias 'ip6_address'.
+// IP6Address defines alias 'ip6_address'.
 type IP6Address [16]uint8
 
-// IP6AddressWithPrefix represents VPP binary API alias 'ip6_address_with_prefix'.
+func ParseIP6Address(s string) (IP6Address, error) {
+       ip := net.ParseIP(s).To16()
+       if ip == nil {
+               return IP6Address{}, fmt.Errorf("invalid IP address: %s", s)
+       }
+       var ipaddr IP6Address
+       copy(ipaddr[:], ip.To16())
+       return ipaddr, nil
+}
+
+func (x IP6Address) ToIP() net.IP {
+       return net.IP(x[:]).To16()
+}
+func (x IP6Address) String() string {
+       return x.ToIP().String()
+}
+func (x *IP6Address) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *IP6Address) UnmarshalText(text []byte) error {
+       ipaddr, err := ParseIP6Address(string(text))
+       if err != nil {
+               return err
+       }
+       *x = ipaddr
+       return nil
+}
+
+// IP6AddressWithPrefix defines alias 'ip6_address_with_prefix'.
 type IP6AddressWithPrefix IP6Prefix
 
-// MacAddress represents VPP binary API alias 'mac_address'.
+// MacAddress defines alias 'mac_address'.
 type MacAddress [6]uint8
 
-// Address represents VPP binary API type 'address'.
+func ParseMacAddress(s string) (MacAddress, error) {
+       var macaddr MacAddress
+       mac, err := net.ParseMAC(s)
+       if err != nil {
+               return macaddr, err
+       }
+       copy(macaddr[:], mac[:])
+       return macaddr, nil
+}
+func (x MacAddress) ToMAC() net.HardwareAddr {
+       return net.HardwareAddr(x[:])
+}
+func (x MacAddress) String() string {
+       return x.ToMAC().String()
+}
+func (x *MacAddress) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *MacAddress) UnmarshalText(text []byte) error {
+       mac, err := ParseMacAddress(string(text))
+       if err != nil {
+               return err
+       }
+       *x = mac
+       return nil
+}
+
+// Address defines type 'address'.
 type Address struct {
        Af AddressFamily `binapi:"address_family,name=af" json:"af,omitempty"`
        Un AddressUnion  `binapi:"address_union,name=un" json:"un,omitempty"`
 }
 
-func (*Address) GetTypeName() string { return "address" }
+func ParseAddress(s string) (Address, error) {
+       ip := net.ParseIP(s)
+       if ip == nil {
+               return Address{}, fmt.Errorf("invalid address: %s", s)
+       }
+       var addr Address
+       if ip.To4() == nil {
+               addr.Af = ADDRESS_IP6
+               var ip6 IP6Address
+               copy(ip6[:], ip.To16())
+               addr.Un.SetIP6(ip6)
+       } else {
+               addr.Af = ADDRESS_IP4
+               var ip4 IP4Address
+               copy(ip4[:], ip.To4())
+               addr.Un.SetIP4(ip4)
+       }
+       return addr, nil
+}
+func (x Address) ToIP() net.IP {
+       if x.Af == ADDRESS_IP6 {
+               ip6 := x.Un.GetIP6()
+               return net.IP(ip6[:]).To16()
+       } else {
+               ip4 := x.Un.GetIP4()
+               return net.IP(ip4[:]).To4()
+       }
+}
+func (x Address) String() string {
+       return x.ToIP().String()
+}
+func (x *Address) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *Address) UnmarshalText(text []byte) error {
+       addr, err := ParseAddress(string(text))
+       if err != nil {
+               return err
+       }
+       *x = addr
+       return nil
+}
 
-// FibMplsLabel represents VPP binary API type 'fib_mpls_label'.
+// FibMplsLabel defines type 'fib_mpls_label'.
 type FibMplsLabel struct {
        IsUniform uint8  `binapi:"u8,name=is_uniform" json:"is_uniform,omitempty"`
        Label     uint32 `binapi:"u32,name=label" json:"label,omitempty"`
@@ -684,9 +898,7 @@ type FibMplsLabel struct {
        Exp       uint8  `binapi:"u8,name=exp" json:"exp,omitempty"`
 }
 
-func (*FibMplsLabel) GetTypeName() string { return "fib_mpls_label" }
-
-// FibPath represents VPP binary API type 'fib_path'.
+// FibPath defines type 'fib_path'.
 type FibPath struct {
        SwIfIndex  uint32           `binapi:"u32,name=sw_if_index" json:"sw_if_index,omitempty"`
        TableID    uint32           `binapi:"u32,name=table_id" json:"table_id,omitempty"`
@@ -698,12 +910,10 @@ type FibPath struct {
        Proto      FibPathNhProto   `binapi:"fib_path_nh_proto,name=proto" json:"proto,omitempty"`
        Nh         FibPathNh        `binapi:"fib_path_nh,name=nh" json:"nh,omitempty"`
        NLabels    uint8            `binapi:"u8,name=n_labels" json:"n_labels,omitempty"`
-       LabelStack [16]FibMplsLabel `binapi:"fib_mpls_label[16],name=label_stack" json:"label_stack,omitempty" struc:"[16]FibMplsLabel"`
+       LabelStack [16]FibMplsLabel `binapi:"fib_mpls_label[16],name=label_stack" json:"label_stack,omitempty"`
 }
 
-func (*FibPath) GetTypeName() string { return "fib_path" }
-
-// FibPathNh represents VPP binary API type 'fib_path_nh'.
+// FibPathNh defines type 'fib_path_nh'.
 type FibPathNh struct {
        Address            AddressUnion `binapi:"address_union,name=address" json:"address,omitempty"`
        ViaLabel           uint32       `binapi:"u32,name=via_label" json:"via_label,omitempty"`
@@ -711,65 +921,147 @@ type FibPathNh struct {
        ClassifyTableIndex uint32       `binapi:"u32,name=classify_table_index" json:"classify_table_index,omitempty"`
 }
 
-func (*FibPathNh) GetTypeName() string { return "fib_path_nh" }
-
-// IP4Prefix represents VPP binary API type 'ip4_prefix'.
+// IP4Prefix defines type 'ip4_prefix'.
 type IP4Prefix struct {
        Address IP4Address `binapi:"ip4_address,name=address" json:"address,omitempty"`
        Len     uint8      `binapi:"u8,name=len" json:"len,omitempty"`
 }
 
-func (*IP4Prefix) GetTypeName() string { return "ip4_prefix" }
+func ParseIP4Prefix(s string) (prefix IP4Prefix, err error) {
+       hasPrefix := strings.Contains(s, "/")
+       if hasPrefix {
+               ip, network, err := net.ParseCIDR(s)
+               if err != nil {
+                       return IP4Prefix{}, fmt.Errorf("invalid IP %s: %s", s, err)
+               }
+               maskSize, _ := network.Mask.Size()
+               prefix.Len = byte(maskSize)
+               prefix.Address, err = ParseIP4Address(ip.String())
+               if err != nil {
+                       return IP4Prefix{}, fmt.Errorf("invalid IP %s: %s", s, err)
+               }
+       } else {
+               ip := net.ParseIP(s)
+               defaultMaskSize, _ := net.CIDRMask(32, 32).Size()
+               if ip.To4() == nil {
+                       defaultMaskSize, _ = net.CIDRMask(128, 128).Size()
+               }
+               prefix.Len = byte(defaultMaskSize)
+               prefix.Address, err = ParseIP4Address(ip.String())
+               if err != nil {
+                       return IP4Prefix{}, fmt.Errorf("invalid IP %s: %s", s, err)
+               }
+       }
+       return prefix, nil
+}
+func (x IP4Prefix) ToIPNet() *net.IPNet {
+       mask := net.CIDRMask(int(x.Len), 32)
+       ipnet := &net.IPNet{IP: x.Address.ToIP(), Mask: mask}
+       return ipnet
+}
+func (x IP4Prefix) String() string {
+       ip := x.Address.String()
+       return ip + "/" + strconv.Itoa(int(x.Len))
+}
+func (x *IP4Prefix) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *IP4Prefix) UnmarshalText(text []byte) error {
+       prefix, err := ParseIP4Prefix(string(text))
+       if err != nil {
+               return err
+       }
+       *x = prefix
+       return nil
+}
 
-// IP6Prefix represents VPP binary API type 'ip6_prefix'.
+// IP6Prefix defines type 'ip6_prefix'.
 type IP6Prefix struct {
        Address IP6Address `binapi:"ip6_address,name=address" json:"address,omitempty"`
        Len     uint8      `binapi:"u8,name=len" json:"len,omitempty"`
 }
 
-func (*IP6Prefix) GetTypeName() string { return "ip6_prefix" }
+func ParseIP6Prefix(s string) (prefix IP6Prefix, err error) {
+       hasPrefix := strings.Contains(s, "/")
+       if hasPrefix {
+               ip, network, err := net.ParseCIDR(s)
+               if err != nil {
+                       return IP6Prefix{}, fmt.Errorf("invalid IP %s: %s", s, err)
+               }
+               maskSize, _ := network.Mask.Size()
+               prefix.Len = byte(maskSize)
+               prefix.Address, err = ParseIP6Address(ip.String())
+               if err != nil {
+                       return IP6Prefix{}, fmt.Errorf("invalid IP %s: %s", s, err)
+               }
+       } else {
+               ip := net.ParseIP(s)
+               defaultMaskSize, _ := net.CIDRMask(32, 32).Size()
+               if ip.To4() == nil {
+                       defaultMaskSize, _ = net.CIDRMask(128, 128).Size()
+               }
+               prefix.Len = byte(defaultMaskSize)
+               prefix.Address, err = ParseIP6Address(ip.String())
+               if err != nil {
+                       return IP6Prefix{}, fmt.Errorf("invalid IP %s: %s", s, err)
+               }
+       }
+       return prefix, nil
+}
+func (x IP6Prefix) ToIPNet() *net.IPNet {
+       mask := net.CIDRMask(int(x.Len), 128)
+       ipnet := &net.IPNet{IP: x.Address.ToIP(), Mask: mask}
+       return ipnet
+}
+func (x IP6Prefix) String() string {
+       ip := x.Address.String()
+       return ip + "/" + strconv.Itoa(int(x.Len))
+}
+func (x *IP6Prefix) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *IP6Prefix) UnmarshalText(text []byte) error {
+       prefix, err := ParseIP6Prefix(string(text))
+       if err != nil {
+               return err
+       }
+       *x = prefix
+       return nil
+}
 
-// IPMroute represents VPP binary API type 'ip_mroute'.
+// IPMroute defines type 'ip_mroute'.
 type IPMroute struct {
        TableID    uint32     `binapi:"u32,name=table_id" json:"table_id,omitempty"`
        EntryFlags uint32     `binapi:"u32,name=entry_flags" json:"entry_flags,omitempty"`
        RpfID      uint32     `binapi:"u32,name=rpf_id" json:"rpf_id,omitempty"`
        Prefix     Mprefix    `binapi:"mprefix,name=prefix" json:"prefix,omitempty"`
-       NPaths     uint8      `binapi:"u8,name=n_paths" json:"n_paths,omitempty" struc:"sizeof=Paths"`
+       NPaths     uint8      `binapi:"u8,name=n_paths" json:"-"`
        Paths      []MfibPath `binapi:"mfib_path[n_paths],name=paths" json:"paths,omitempty"`
 }
 
-func (*IPMroute) GetTypeName() string { return "ip_mroute" }
-
-// IPRoute represents VPP binary API type 'ip_route'.
+// IPRoute defines type 'ip_route'.
 type IPRoute struct {
        TableID    uint32    `binapi:"u32,name=table_id" json:"table_id,omitempty"`
        StatsIndex uint32    `binapi:"u32,name=stats_index" json:"stats_index,omitempty"`
        Prefix     Prefix    `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
-       NPaths     uint8     `binapi:"u8,name=n_paths" json:"n_paths,omitempty" struc:"sizeof=Paths"`
+       NPaths     uint8     `binapi:"u8,name=n_paths" json:"-"`
        Paths      []FibPath `binapi:"fib_path[n_paths],name=paths" json:"paths,omitempty"`
 }
 
-func (*IPRoute) GetTypeName() string { return "ip_route" }
-
-// IPTable represents VPP binary API type 'ip_table'.
+// IPTable defines type 'ip_table'.
 type IPTable struct {
        TableID uint32 `binapi:"u32,name=table_id" json:"table_id,omitempty"`
        IsIP6   bool   `binapi:"bool,name=is_ip6" json:"is_ip6,omitempty"`
-       Name    string `binapi:"string[64],name=name" json:"name,omitempty" struc:"[64]byte"`
+       Name    string `binapi:"string[64],name=name" json:"name,omitempty"`
 }
 
-func (*IPTable) GetTypeName() string { return "ip_table" }
-
-// MfibPath represents VPP binary API type 'mfib_path'.
+// MfibPath defines type 'mfib_path'.
 type MfibPath struct {
        ItfFlags MfibItfFlags `binapi:"mfib_itf_flags,name=itf_flags" json:"itf_flags,omitempty"`
        Path     FibPath      `binapi:"fib_path,name=path" json:"path,omitempty"`
 }
 
-func (*MfibPath) GetTypeName() string { return "mfib_path" }
-
-// Mprefix represents VPP binary API type 'mprefix'.
+// Mprefix defines type 'mprefix'.
 type Mprefix struct {
        Af               AddressFamily `binapi:"address_family,name=af" json:"af,omitempty"`
        GrpAddressLength uint16        `binapi:"u16,name=grp_address_length" json:"grp_address_length,omitempty"`
@@ -777,54 +1069,96 @@ type Mprefix struct {
        SrcAddress       AddressUnion  `binapi:"address_union,name=src_address" json:"src_address,omitempty"`
 }
 
-func (*Mprefix) GetTypeName() string { return "mprefix" }
-
-// Prefix represents VPP binary API type 'prefix'.
+// Prefix defines type 'prefix'.
 type Prefix struct {
        Address Address `binapi:"address,name=address" json:"address,omitempty"`
        Len     uint8   `binapi:"u8,name=len" json:"len,omitempty"`
 }
 
-func (*Prefix) GetTypeName() string { return "prefix" }
+func ParsePrefix(ip string) (prefix Prefix, err error) {
+       hasPrefix := strings.Contains(ip, "/")
+       if hasPrefix {
+               netIP, network, err := net.ParseCIDR(ip)
+               if err != nil {
+                       return Prefix{}, fmt.Errorf("invalid IP %s: %s", ip, err)
+               }
+               maskSize, _ := network.Mask.Size()
+               prefix.Len = byte(maskSize)
+               prefix.Address, err = ParseAddress(netIP.String())
+               if err != nil {
+                       return Prefix{}, fmt.Errorf("invalid IP %s: %s", ip, err)
+               }
+       } else {
+               netIP := net.ParseIP(ip)
+               defaultMaskSize, _ := net.CIDRMask(32, 32).Size()
+               if netIP.To4() == nil {
+                       defaultMaskSize, _ = net.CIDRMask(128, 128).Size()
+               }
+               prefix.Len = byte(defaultMaskSize)
+               prefix.Address, err = ParseAddress(netIP.String())
+               if err != nil {
+                       return Prefix{}, fmt.Errorf("invalid IP %s: %s", ip, err)
+               }
+       }
+       return prefix, nil
+}
+func (x Prefix) ToIPNet() *net.IPNet {
+       var mask net.IPMask
+       if x.Address.Af == ADDRESS_IP4 {
+               mask = net.CIDRMask(int(x.Len), 32)
+       } else {
+               mask = net.CIDRMask(int(x.Len), 128)
+       }
+       ipnet := &net.IPNet{IP: x.Address.ToIP(), Mask: mask}
+       return ipnet
+}
+func (x Prefix) String() string {
+       ip := x.Address.String()
+       return ip + "/" + strconv.Itoa(int(x.Len))
+}
+func (x *Prefix) MarshalText() ([]byte, error) {
+       return []byte(x.String()), nil
+}
+func (x *Prefix) UnmarshalText(text []byte) error {
+       prefix, err := ParsePrefix(string(text))
+       if err != nil {
+               return err
+       }
+       *x = prefix
+       return nil
+}
 
-// PrefixMatcher represents VPP binary API type 'prefix_matcher'.
+// PrefixMatcher defines type 'prefix_matcher'.
 type PrefixMatcher struct {
        Le uint8 `binapi:"u8,name=le" json:"le,omitempty"`
        Ge uint8 `binapi:"u8,name=ge" json:"ge,omitempty"`
 }
 
-func (*PrefixMatcher) GetTypeName() string { return "prefix_matcher" }
-
-// PuntRedirect represents VPP binary API type 'punt_redirect'.
+// PuntRedirect defines type 'punt_redirect'.
 type PuntRedirect struct {
        RxSwIfIndex InterfaceIndex `binapi:"interface_index,name=rx_sw_if_index" json:"rx_sw_if_index,omitempty"`
        TxSwIfIndex InterfaceIndex `binapi:"interface_index,name=tx_sw_if_index" json:"tx_sw_if_index,omitempty"`
        Nh          Address        `binapi:"address,name=nh" json:"nh,omitempty"`
 }
 
-func (*PuntRedirect) GetTypeName() string { return "punt_redirect" }
-
-// AddressUnion represents VPP binary API union 'address_union'.
+// AddressUnion defines union 'address_union'.
 type AddressUnion struct {
+       // IP4 *IP4Address
+       // IP6 *IP6Address
        XXX_UnionData [16]byte
 }
 
-func (*AddressUnion) GetTypeName() string { return "address_union" }
-
 func AddressUnionIP4(a IP4Address) (u AddressUnion) {
        u.SetIP4(a)
        return
 }
 func (u *AddressUnion) SetIP4(a IP4Address) {
-       var b = new(bytes.Buffer)
-       if err := struc.Pack(b, &a); err != nil {
-               return
-       }
-       copy(u.XXX_UnionData[:], b.Bytes())
+       buf := codec.NewBuffer(u.XXX_UnionData[:])
+       buf.EncodeBytes(a[:], 4)
 }
 func (u *AddressUnion) GetIP4() (a IP4Address) {
-       var b = bytes.NewReader(u.XXX_UnionData[:])
-       struc.Unpack(b, &a)
+       buf := codec.NewBuffer(u.XXX_UnionData[:])
+       copy(a[:], buf.DecodeBytes(4))
        return
 }
 
@@ -833,111 +1167,82 @@ func AddressUnionIP6(a IP6Address) (u AddressUnion) {
        return
 }
 func (u *AddressUnion) SetIP6(a IP6Address) {
-       var b = new(bytes.Buffer)
-       if err := struc.Pack(b, &a); err != nil {
-               return
-       }
-       copy(u.XXX_UnionData[:], b.Bytes())
+       buf := codec.NewBuffer(u.XXX_UnionData[:])
+       buf.EncodeBytes(a[:], 16)
 }
 func (u *AddressUnion) GetIP6() (a IP6Address) {
-       var b = bytes.NewReader(u.XXX_UnionData[:])
-       struc.Unpack(b, &a)
+       buf := codec.NewBuffer(u.XXX_UnionData[:])
+       copy(a[:], buf.DecodeBytes(16))
        return
 }
 
-// IoamDisable represents VPP binary API message 'ioam_disable'.
+// IoamDisable defines message 'ioam_disable'.
 type IoamDisable struct {
        ID uint16 `binapi:"u16,name=id" json:"id,omitempty"`
 }
 
-func (m *IoamDisable) Reset()                        { *m = IoamDisable{} }
-func (*IoamDisable) GetMessageName() string          { return "ioam_disable" }
-func (*IoamDisable) GetCrcString() string            { return "6b16a45e" }
-func (*IoamDisable) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IoamDisable) Reset()               { *m = IoamDisable{} }
+func (*IoamDisable) GetMessageName() string { return "ioam_disable" }
+func (*IoamDisable) GetCrcString() string   { return "6b16a45e" }
+func (*IoamDisable) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IoamDisable) Size() int {
+func (m *IoamDisable) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.ID
-       size += 2
+       size += 2 // m.ID
        return size
 }
 func (m *IoamDisable) 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.ID
-       o.PutUint16(buf[pos:pos+2], uint16(m.ID))
-       pos += 2
-       return buf, nil
-}
-func (m *IoamDisable) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.ID
-       m.ID = uint16(o.Uint16(tmp[pos : pos+2]))
-       pos += 2
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint16(m.ID)
+       return buf.Bytes(), nil
+}
+func (m *IoamDisable) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.ID = buf.DecodeUint16()
        return nil
 }
 
-// IoamDisableReply represents VPP binary API message 'ioam_disable_reply'.
+// IoamDisableReply defines message 'ioam_disable_reply'.
 type IoamDisableReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IoamDisableReply) Reset()                        { *m = IoamDisableReply{} }
-func (*IoamDisableReply) GetMessageName() string          { return "ioam_disable_reply" }
-func (*IoamDisableReply) GetCrcString() string            { return "e8d4e804" }
-func (*IoamDisableReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IoamDisableReply) Reset()               { *m = IoamDisableReply{} }
+func (*IoamDisableReply) GetMessageName() string { return "ioam_disable_reply" }
+func (*IoamDisableReply) GetCrcString() string   { return "e8d4e804" }
+func (*IoamDisableReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IoamDisableReply) Size() int {
+func (m *IoamDisableReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IoamDisableReply) 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
-       return buf, nil
-}
-func (m *IoamDisableReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IoamDisableReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IoamEnable represents VPP binary API message 'ioam_enable'.
+// IoamEnable defines message 'ioam_enable'.
 type IoamEnable struct {
        ID          uint16 `binapi:"u16,name=id" json:"id,omitempty"`
        Seqno       bool   `binapi:"bool,name=seqno" json:"seqno,omitempty"`
@@ -947,364 +1252,210 @@ type IoamEnable struct {
        NodeID      uint32 `binapi:"u32,name=node_id" json:"node_id,omitempty"`
 }
 
-func (m *IoamEnable) Reset()                        { *m = IoamEnable{} }
-func (*IoamEnable) GetMessageName() string          { return "ioam_enable" }
-func (*IoamEnable) GetCrcString() string            { return "51ccd868" }
-func (*IoamEnable) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IoamEnable) Reset()               { *m = IoamEnable{} }
+func (*IoamEnable) GetMessageName() string { return "ioam_enable" }
+func (*IoamEnable) GetCrcString() string   { return "51ccd868" }
+func (*IoamEnable) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IoamEnable) Size() int {
+func (m *IoamEnable) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.ID
-       size += 2
-       // field[1] m.Seqno
-       size += 1
-       // field[1] m.Analyse
-       size += 1
-       // field[1] m.PotEnable
-       size += 1
-       // field[1] m.TraceEnable
-       size += 1
-       // field[1] m.NodeID
-       size += 4
+       size += 2 // m.ID
+       size += 1 // m.Seqno
+       size += 1 // m.Analyse
+       size += 1 // m.PotEnable
+       size += 1 // m.TraceEnable
+       size += 4 // m.NodeID
        return size
 }
 func (m *IoamEnable) 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.ID
-       o.PutUint16(buf[pos:pos+2], uint16(m.ID))
-       pos += 2
-       // field[1] m.Seqno
-       if m.Seqno {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Analyse
-       if m.Analyse {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.PotEnable
-       if m.PotEnable {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.TraceEnable
-       if m.TraceEnable {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.NodeID
-       o.PutUint32(buf[pos:pos+4], uint32(m.NodeID))
-       pos += 4
-       return buf, nil
-}
-func (m *IoamEnable) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.ID
-       m.ID = uint16(o.Uint16(tmp[pos : pos+2]))
-       pos += 2
-       // field[1] m.Seqno
-       m.Seqno = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Analyse
-       m.Analyse = tmp[pos] != 0
-       pos += 1
-       // field[1] m.PotEnable
-       m.PotEnable = tmp[pos] != 0
-       pos += 1
-       // field[1] m.TraceEnable
-       m.TraceEnable = tmp[pos] != 0
-       pos += 1
-       // field[1] m.NodeID
-       m.NodeID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint16(m.ID)
+       buf.EncodeBool(m.Seqno)
+       buf.EncodeBool(m.Analyse)
+       buf.EncodeBool(m.PotEnable)
+       buf.EncodeBool(m.TraceEnable)
+       buf.EncodeUint32(m.NodeID)
+       return buf.Bytes(), nil
+}
+func (m *IoamEnable) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.ID = buf.DecodeUint16()
+       m.Seqno = buf.DecodeBool()
+       m.Analyse = buf.DecodeBool()
+       m.PotEnable = buf.DecodeBool()
+       m.TraceEnable = buf.DecodeBool()
+       m.NodeID = buf.DecodeUint32()
        return nil
 }
 
-// IoamEnableReply represents VPP binary API message 'ioam_enable_reply'.
+// IoamEnableReply defines message 'ioam_enable_reply'.
 type IoamEnableReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IoamEnableReply) Reset()                        { *m = IoamEnableReply{} }
-func (*IoamEnableReply) GetMessageName() string          { return "ioam_enable_reply" }
-func (*IoamEnableReply) GetCrcString() string            { return "e8d4e804" }
-func (*IoamEnableReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IoamEnableReply) Reset()               { *m = IoamEnableReply{} }
+func (*IoamEnableReply) GetMessageName() string { return "ioam_enable_reply" }
+func (*IoamEnableReply) GetCrcString() string   { return "e8d4e804" }
+func (*IoamEnableReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IoamEnableReply) Size() int {
+func (m *IoamEnableReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IoamEnableReply) 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
-       return buf, nil
-}
-func (m *IoamEnableReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IoamEnableReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPAddressDetails represents VPP binary API message 'ip_address_details'.
+// IPAddressDetails defines message 'ip_address_details'.
 type IPAddressDetails struct {
        SwIfIndex InterfaceIndex    `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        Prefix    AddressWithPrefix `binapi:"address_with_prefix,name=prefix" json:"prefix,omitempty"`
 }
 
-func (m *IPAddressDetails) Reset()                        { *m = IPAddressDetails{} }
-func (*IPAddressDetails) GetMessageName() string          { return "ip_address_details" }
-func (*IPAddressDetails) GetCrcString() string            { return "b1199745" }
-func (*IPAddressDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPAddressDetails) Reset()               { *m = IPAddressDetails{} }
+func (*IPAddressDetails) GetMessageName() string { return "ip_address_details" }
+func (*IPAddressDetails) GetCrcString() string   { return "b1199745" }
+func (*IPAddressDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPAddressDetails) Size() int {
+func (m *IPAddressDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       size += 4
-       // field[3] m.Prefix.Address.Un
-       size += 16
-       // field[2] m.Prefix.Len
-       size += 1
+       size += 4      // m.SwIfIndex
+       size += 4      // m.Prefix.Address.Af
+       size += 1 * 16 // m.Prefix.Address.Un
+       size += 1      // m.Prefix.Len
        return size
 }
 func (m *IPAddressDetails) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Prefix.Address.Af))
-       pos += 4
-       // field[3] m.Prefix.Address.Un
-       copy(buf[pos:pos+16], m.Prefix.Address.Un.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Prefix.Len
-       buf[pos] = uint8(m.Prefix.Len)
-       pos += 1
-       return buf, nil
-}
-func (m *IPAddressDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       m.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Prefix.Address.Un
-       copy(m.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Prefix.Len
-       m.Prefix.Len = uint8(tmp[pos])
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(uint32(m.Prefix.Address.Af))
+       buf.EncodeBytes(m.Prefix.Address.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(m.Prefix.Len)
+       return buf.Bytes(), nil
+}
+func (m *IPAddressDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Prefix.Address.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Prefix.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Prefix.Len = buf.DecodeUint8()
        return nil
 }
 
-// IPAddressDump represents VPP binary API message 'ip_address_dump'.
+// IPAddressDump defines message 'ip_address_dump'.
 type IPAddressDump struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        IsIPv6    bool           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
 }
 
-func (m *IPAddressDump) Reset()                        { *m = IPAddressDump{} }
-func (*IPAddressDump) GetMessageName() string          { return "ip_address_dump" }
-func (*IPAddressDump) GetCrcString() string            { return "2d033de4" }
-func (*IPAddressDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPAddressDump) Reset()               { *m = IPAddressDump{} }
+func (*IPAddressDump) GetMessageName() string { return "ip_address_dump" }
+func (*IPAddressDump) GetCrcString() string   { return "2d033de4" }
+func (*IPAddressDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPAddressDump) Size() int {
+func (m *IPAddressDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.IsIPv6
-       size += 1
+       size += 4 // m.SwIfIndex
+       size += 1 // m.IsIPv6
        return size
 }
 func (m *IPAddressDump) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.IsIPv6
-       if m.IsIPv6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPAddressDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsIPv6
-       m.IsIPv6 = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBool(m.IsIPv6)
+       return buf.Bytes(), nil
+}
+func (m *IPAddressDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.IsIPv6 = buf.DecodeBool()
        return nil
 }
 
-// IPContainerProxyAddDel represents VPP binary API message 'ip_container_proxy_add_del'.
+// IPContainerProxyAddDel defines message 'ip_container_proxy_add_del'.
 type IPContainerProxyAddDel struct {
        Pfx       Prefix         `binapi:"prefix,name=pfx" json:"pfx,omitempty"`
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        IsAdd     bool           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
 }
 
-func (m *IPContainerProxyAddDel) Reset()                        { *m = IPContainerProxyAddDel{} }
-func (*IPContainerProxyAddDel) GetMessageName() string          { return "ip_container_proxy_add_del" }
-func (*IPContainerProxyAddDel) GetCrcString() string            { return "91189f40" }
-func (*IPContainerProxyAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPContainerProxyAddDel) Reset()               { *m = IPContainerProxyAddDel{} }
+func (*IPContainerProxyAddDel) GetMessageName() string { return "ip_container_proxy_add_del" }
+func (*IPContainerProxyAddDel) GetCrcString() string   { return "91189f40" }
+func (*IPContainerProxyAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPContainerProxyAddDel) Size() int {
+func (m *IPContainerProxyAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Pfx
-       // field[2] m.Pfx.Address
-       // field[3] m.Pfx.Address.Af
-       size += 4
-       // field[3] m.Pfx.Address.Un
-       size += 16
-       // field[2] m.Pfx.Len
-       size += 1
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.IsAdd
-       size += 1
+       size += 4      // m.Pfx.Address.Af
+       size += 1 * 16 // m.Pfx.Address.Un
+       size += 1      // m.Pfx.Len
+       size += 4      // m.SwIfIndex
+       size += 1      // m.IsAdd
        return size
 }
 func (m *IPContainerProxyAddDel) 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.Pfx
-       // field[2] m.Pfx.Address
-       // field[3] m.Pfx.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Pfx.Address.Af))
-       pos += 4
-       // field[3] m.Pfx.Address.Un
-       copy(buf[pos:pos+16], m.Pfx.Address.Un.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Pfx.Len
-       buf[pos] = uint8(m.Pfx.Len)
-       pos += 1
-       // field[1] m.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPContainerProxyAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Pfx
-       // field[2] m.Pfx.Address
-       // field[3] m.Pfx.Address.Af
-       m.Pfx.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Pfx.Address.Un
-       copy(m.Pfx.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Pfx.Len
-       m.Pfx.Len = uint8(tmp[pos])
-       pos += 1
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.Pfx.Address.Af))
+       buf.EncodeBytes(m.Pfx.Address.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(m.Pfx.Len)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBool(m.IsAdd)
+       return buf.Bytes(), nil
+}
+func (m *IPContainerProxyAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Pfx.Address.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Pfx.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Pfx.Len = buf.DecodeUint8()
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.IsAdd = buf.DecodeBool()
        return nil
 }
 
-// IPContainerProxyAddDelReply represents VPP binary API message 'ip_container_proxy_add_del_reply'.
+// IPContainerProxyAddDelReply defines message 'ip_container_proxy_add_del_reply'.
 type IPContainerProxyAddDelReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -1313,1487 +1464,815 @@ func (m *IPContainerProxyAddDelReply) Reset() { *m = IPContainerProxyAddDelReply
 func (*IPContainerProxyAddDelReply) GetMessageName() string {
        return "ip_container_proxy_add_del_reply"
 }
-func (*IPContainerProxyAddDelReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPContainerProxyAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (*IPContainerProxyAddDelReply) GetCrcString() string { return "e8d4e804" }
+func (*IPContainerProxyAddDelReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPContainerProxyAddDelReply) Size() int {
+func (m *IPContainerProxyAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPContainerProxyAddDelReply) 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
-       return buf, nil
-}
-func (m *IPContainerProxyAddDelReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPContainerProxyAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPContainerProxyDetails represents VPP binary API message 'ip_container_proxy_details'.
+// IPContainerProxyDetails defines message 'ip_container_proxy_details'.
 type IPContainerProxyDetails struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        Prefix    Prefix         `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
 }
 
-func (m *IPContainerProxyDetails) Reset()                        { *m = IPContainerProxyDetails{} }
-func (*IPContainerProxyDetails) GetMessageName() string          { return "ip_container_proxy_details" }
-func (*IPContainerProxyDetails) GetCrcString() string            { return "0ee460e8" }
-func (*IPContainerProxyDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPContainerProxyDetails) Reset()               { *m = IPContainerProxyDetails{} }
+func (*IPContainerProxyDetails) GetMessageName() string { return "ip_container_proxy_details" }
+func (*IPContainerProxyDetails) GetCrcString() string   { return "0ee460e8" }
+func (*IPContainerProxyDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPContainerProxyDetails) Size() int {
+func (m *IPContainerProxyDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       size += 4
-       // field[3] m.Prefix.Address.Un
-       size += 16
-       // field[2] m.Prefix.Len
-       size += 1
+       size += 4      // m.SwIfIndex
+       size += 4      // m.Prefix.Address.Af
+       size += 1 * 16 // m.Prefix.Address.Un
+       size += 1      // m.Prefix.Len
        return size
 }
 func (m *IPContainerProxyDetails) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Prefix.Address.Af))
-       pos += 4
-       // field[3] m.Prefix.Address.Un
-       copy(buf[pos:pos+16], m.Prefix.Address.Un.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Prefix.Len
-       buf[pos] = uint8(m.Prefix.Len)
-       pos += 1
-       return buf, nil
-}
-func (m *IPContainerProxyDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       m.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Prefix.Address.Un
-       copy(m.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Prefix.Len
-       m.Prefix.Len = uint8(tmp[pos])
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(uint32(m.Prefix.Address.Af))
+       buf.EncodeBytes(m.Prefix.Address.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(m.Prefix.Len)
+       return buf.Bytes(), nil
+}
+func (m *IPContainerProxyDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Prefix.Address.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Prefix.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Prefix.Len = buf.DecodeUint8()
        return nil
 }
 
-// IPContainerProxyDump represents VPP binary API message 'ip_container_proxy_dump'.
+// IPContainerProxyDump defines message 'ip_container_proxy_dump'.
 type IPContainerProxyDump struct{}
 
-func (m *IPContainerProxyDump) Reset()                        { *m = IPContainerProxyDump{} }
-func (*IPContainerProxyDump) GetMessageName() string          { return "ip_container_proxy_dump" }
-func (*IPContainerProxyDump) GetCrcString() string            { return "51077d14" }
-func (*IPContainerProxyDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPContainerProxyDump) Reset()               { *m = IPContainerProxyDump{} }
+func (*IPContainerProxyDump) GetMessageName() string { return "ip_container_proxy_dump" }
+func (*IPContainerProxyDump) GetCrcString() string   { return "51077d14" }
+func (*IPContainerProxyDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPContainerProxyDump) Size() int {
+func (m *IPContainerProxyDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        return size
 }
 func (m *IPContainerProxyDump) 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 *IPContainerProxyDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
+func (m *IPContainerProxyDump) Unmarshal(b []byte) error {
        return nil
 }
 
-// IPDetails represents VPP binary API message 'ip_details'.
+// IPDetails defines message 'ip_details'.
 type IPDetails struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        IsIPv6    bool           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
 }
 
-func (m *IPDetails) Reset()                        { *m = IPDetails{} }
-func (*IPDetails) GetMessageName() string          { return "ip_details" }
-func (*IPDetails) GetCrcString() string            { return "eb152d07" }
-func (*IPDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPDetails) Reset()               { *m = IPDetails{} }
+func (*IPDetails) GetMessageName() string { return "ip_details" }
+func (*IPDetails) GetCrcString() string   { return "eb152d07" }
+func (*IPDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPDetails) Size() int {
+func (m *IPDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.IsIPv6
-       size += 1
+       size += 4 // m.SwIfIndex
+       size += 1 // m.IsIPv6
        return size
 }
 func (m *IPDetails) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.IsIPv6
-       if m.IsIPv6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsIPv6
-       m.IsIPv6 = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBool(m.IsIPv6)
+       return buf.Bytes(), nil
+}
+func (m *IPDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.IsIPv6 = buf.DecodeBool()
        return nil
 }
 
-// IPDump represents VPP binary API message 'ip_dump'.
+// IPDump defines message 'ip_dump'.
 type IPDump struct {
        IsIPv6 bool `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
 }
 
-func (m *IPDump) Reset()                        { *m = IPDump{} }
-func (*IPDump) GetMessageName() string          { return "ip_dump" }
-func (*IPDump) GetCrcString() string            { return "98d231ca" }
-func (*IPDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPDump) Reset()               { *m = IPDump{} }
+func (*IPDump) GetMessageName() string { return "ip_dump" }
+func (*IPDump) GetCrcString() string   { return "98d231ca" }
+func (*IPDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPDump) Size() int {
+func (m *IPDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsIPv6
-       size += 1
+       size += 1 // m.IsIPv6
        return size
 }
 func (m *IPDump) 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.IsIPv6
-       if m.IsIPv6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsIPv6
-       m.IsIPv6 = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsIPv6)
+       return buf.Bytes(), nil
+}
+func (m *IPDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsIPv6 = buf.DecodeBool()
        return nil
 }
 
-// IPMrouteAddDel represents VPP binary API message 'ip_mroute_add_del'.
+// IPMrouteAddDel defines message 'ip_mroute_add_del'.
 type IPMrouteAddDel struct {
        IsAdd       bool     `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        IsMultipath bool     `binapi:"bool,name=is_multipath" json:"is_multipath,omitempty"`
        Route       IPMroute `binapi:"ip_mroute,name=route" json:"route,omitempty"`
 }
 
-func (m *IPMrouteAddDel) Reset()                        { *m = IPMrouteAddDel{} }
-func (*IPMrouteAddDel) GetMessageName() string          { return "ip_mroute_add_del" }
-func (*IPMrouteAddDel) GetCrcString() string            { return "f6627d17" }
-func (*IPMrouteAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPMrouteAddDel) Reset()               { *m = IPMrouteAddDel{} }
+func (*IPMrouteAddDel) GetMessageName() string { return "ip_mroute_add_del" }
+func (*IPMrouteAddDel) GetCrcString() string   { return "f6627d17" }
+func (*IPMrouteAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPMrouteAddDel) Size() int {
+func (m *IPMrouteAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.IsMultipath
-       size += 1
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       size += 4
-       // field[2] m.Route.EntryFlags
-       size += 4
-       // field[2] m.Route.RpfID
-       size += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Af
-       size += 4
-       // field[3] m.Route.Prefix.GrpAddressLength
-       size += 2
-       // field[3] m.Route.Prefix.GrpAddress
-       size += 16
-       // field[3] m.Route.Prefix.SrcAddress
-       size += 16
-       // field[2] m.Route.NPaths
-       size += 1
-       // field[2] m.Route.Paths
+       size += 1      // m.IsAdd
+       size += 1      // m.IsMultipath
+       size += 4      // m.Route.TableID
+       size += 4      // m.Route.EntryFlags
+       size += 4      // m.Route.RpfID
+       size += 4      // m.Route.Prefix.Af
+       size += 2      // m.Route.Prefix.GrpAddressLength
+       size += 1 * 16 // m.Route.Prefix.GrpAddress
+       size += 1 * 16 // m.Route.Prefix.SrcAddress
+       size += 1      // m.Route.NPaths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
                var s2 MfibPath
                _ = s2
                if j2 < len(m.Route.Paths) {
                        s2 = m.Route.Paths[j2]
                }
-               // field[3] s2.ItfFlags
-               size += 4
-               // field[3] s2.Path
-               // field[4] s2.Path.SwIfIndex
-               size += 4
-               // field[4] s2.Path.TableID
-               size += 4
-               // field[4] s2.Path.RpfID
-               size += 4
-               // field[4] s2.Path.Weight
-               size += 1
-               // field[4] s2.Path.Preference
-               size += 1
-               // field[4] s2.Path.Type
-               size += 4
-               // field[4] s2.Path.Flags
-               size += 4
-               // field[4] s2.Path.Proto
-               size += 4
-               // field[4] s2.Path.Nh
-               // field[5] s2.Path.Nh.Address
-               size += 16
-               // field[5] s2.Path.Nh.ViaLabel
-               size += 4
-               // field[5] s2.Path.Nh.ObjID
-               size += 4
-               // field[5] s2.Path.Nh.ClassifyTableIndex
-               size += 4
-               // field[4] s2.Path.NLabels
-               size += 1
-               // field[4] s2.Path.LabelStack
+               size += 4      // s2.ItfFlags
+               size += 4      // s2.Path.SwIfIndex
+               size += 4      // s2.Path.TableID
+               size += 4      // s2.Path.RpfID
+               size += 1      // s2.Path.Weight
+               size += 1      // s2.Path.Preference
+               size += 4      // s2.Path.Type
+               size += 4      // s2.Path.Flags
+               size += 4      // s2.Path.Proto
+               size += 1 * 16 // s2.Path.Nh.Address
+               size += 4      // s2.Path.Nh.ViaLabel
+               size += 4      // s2.Path.Nh.ObjID
+               size += 4      // s2.Path.Nh.ClassifyTableIndex
+               size += 1      // s2.Path.NLabels
                for j4 := 0; j4 < 16; j4++ {
-                       var s4 FibMplsLabel
-                       _ = s4
-                       if j4 < len(s2.Path.LabelStack) {
-                               s4 = s2.Path.LabelStack[j4]
-                       }
-                       // field[5] s4.IsUniform
-                       size += 1
-                       // field[5] s4.Label
-                       size += 4
-                       // field[5] s4.TTL
-                       size += 1
-                       // field[5] s4.Exp
-                       size += 1
+                       size += 1 // s2.Path.LabelStack[j4].IsUniform
+                       size += 4 // s2.Path.LabelStack[j4].Label
+                       size += 1 // s2.Path.LabelStack[j4].TTL
+                       size += 1 // s2.Path.LabelStack[j4].Exp
                }
        }
        return size
 }
 func (m *IPMrouteAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.IsMultipath
-       if m.IsMultipath {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.TableID))
-       pos += 4
-       // field[2] m.Route.EntryFlags
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.EntryFlags))
-       pos += 4
-       // field[2] m.Route.RpfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.RpfID))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Af))
-       pos += 4
-       // field[3] m.Route.Prefix.GrpAddressLength
-       o.PutUint16(buf[pos:pos+2], uint16(m.Route.Prefix.GrpAddressLength))
-       pos += 2
-       // field[3] m.Route.Prefix.GrpAddress
-       copy(buf[pos:pos+16], m.Route.Prefix.GrpAddress.XXX_UnionData[:])
-       pos += 16
-       // field[3] m.Route.Prefix.SrcAddress
-       copy(buf[pos:pos+16], m.Route.Prefix.SrcAddress.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Route.NPaths
-       buf[pos] = uint8(len(m.Route.Paths))
-       pos += 1
-       // field[2] m.Route.Paths
-       for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var v2 MfibPath
-               if j2 < len(m.Route.Paths) {
-                       v2 = m.Route.Paths[j2]
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeBool(m.IsMultipath)
+       buf.EncodeUint32(m.Route.TableID)
+       buf.EncodeUint32(m.Route.EntryFlags)
+       buf.EncodeUint32(m.Route.RpfID)
+       buf.EncodeUint32(uint32(m.Route.Prefix.Af))
+       buf.EncodeUint16(m.Route.Prefix.GrpAddressLength)
+       buf.EncodeBytes(m.Route.Prefix.GrpAddress.XXX_UnionData[:], 16)
+       buf.EncodeBytes(m.Route.Prefix.SrcAddress.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(len(m.Route.Paths)))
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               var v1 MfibPath // Paths
+               if j1 < len(m.Route.Paths) {
+                       v1 = m.Route.Paths[j1]
                }
-               // field[3] v2.ItfFlags
-               o.PutUint32(buf[pos:pos+4], uint32(v2.ItfFlags))
-               pos += 4
-               // field[3] v2.Path
-               // field[4] v2.Path.SwIfIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.SwIfIndex))
-               pos += 4
-               // field[4] v2.Path.TableID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.TableID))
-               pos += 4
-               // field[4] v2.Path.RpfID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.RpfID))
-               pos += 4
-               // field[4] v2.Path.Weight
-               buf[pos] = uint8(v2.Path.Weight)
-               pos += 1
-               // field[4] v2.Path.Preference
-               buf[pos] = uint8(v2.Path.Preference)
-               pos += 1
-               // field[4] v2.Path.Type
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Type))
-               pos += 4
-               // field[4] v2.Path.Flags
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Flags))
-               pos += 4
-               // field[4] v2.Path.Proto
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Proto))
-               pos += 4
-               // field[4] v2.Path.Nh
-               // field[5] v2.Path.Nh.Address
-               copy(buf[pos:pos+16], v2.Path.Nh.Address.XXX_UnionData[:])
-               pos += 16
-               // field[5] v2.Path.Nh.ViaLabel
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Nh.ViaLabel))
-               pos += 4
-               // field[5] v2.Path.Nh.ObjID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Nh.ObjID))
-               pos += 4
-               // field[5] v2.Path.Nh.ClassifyTableIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Nh.ClassifyTableIndex))
-               pos += 4
-               // field[4] v2.Path.NLabels
-               buf[pos] = uint8(v2.Path.NLabels)
-               pos += 1
-               // field[4] v2.Path.LabelStack
-               for j4 := 0; j4 < 16; j4++ {
-                       var v4 FibMplsLabel
-                       if j4 < len(v2.Path.LabelStack) {
-                               v4 = v2.Path.LabelStack[j4]
-                       }
-                       // field[5] v4.IsUniform
-                       buf[pos] = uint8(v4.IsUniform)
-                       pos += 1
-                       // field[5] v4.Label
-                       o.PutUint32(buf[pos:pos+4], uint32(v4.Label))
-                       pos += 4
-                       // field[5] v4.TTL
-                       buf[pos] = uint8(v4.TTL)
-                       pos += 1
-                       // field[5] v4.Exp
-                       buf[pos] = uint8(v4.Exp)
-                       pos += 1
+               buf.EncodeUint32(uint32(v1.ItfFlags))
+               buf.EncodeUint32(v1.Path.SwIfIndex)
+               buf.EncodeUint32(v1.Path.TableID)
+               buf.EncodeUint32(v1.Path.RpfID)
+               buf.EncodeUint8(v1.Path.Weight)
+               buf.EncodeUint8(v1.Path.Preference)
+               buf.EncodeUint32(uint32(v1.Path.Type))
+               buf.EncodeUint32(uint32(v1.Path.Flags))
+               buf.EncodeUint32(uint32(v1.Path.Proto))
+               buf.EncodeBytes(v1.Path.Nh.Address.XXX_UnionData[:], 16)
+               buf.EncodeUint32(v1.Path.Nh.ViaLabel)
+               buf.EncodeUint32(v1.Path.Nh.ObjID)
+               buf.EncodeUint32(v1.Path.Nh.ClassifyTableIndex)
+               buf.EncodeUint8(v1.Path.NLabels)
+               for j3 := 0; j3 < 16; j3++ {
+                       buf.EncodeUint8(v1.Path.LabelStack[j3].IsUniform)
+                       buf.EncodeUint32(v1.Path.LabelStack[j3].Label)
+                       buf.EncodeUint8(v1.Path.LabelStack[j3].TTL)
+                       buf.EncodeUint8(v1.Path.LabelStack[j3].Exp)
                }
        }
-       return buf, nil
-}
-func (m *IPMrouteAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.IsMultipath
-       m.IsMultipath = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       m.Route.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.EntryFlags
-       m.Route.EntryFlags = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.RpfID
-       m.Route.RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Af
-       m.Route.Prefix.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Route.Prefix.GrpAddressLength
-       m.Route.Prefix.GrpAddressLength = uint16(o.Uint16(tmp[pos : pos+2]))
-       pos += 2
-       // field[3] m.Route.Prefix.GrpAddress
-       copy(m.Route.Prefix.GrpAddress.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[3] m.Route.Prefix.SrcAddress
-       copy(m.Route.Prefix.SrcAddress.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Route.NPaths
-       m.Route.NPaths = uint8(tmp[pos])
-       pos += 1
-       // field[2] m.Route.Paths
-       m.Route.Paths = make([]MfibPath, int(m.Route.NPaths))
-       for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
-               // field[3] m.Route.Paths[j2].ItfFlags
-               m.Route.Paths[j2].ItfFlags = MfibItfFlags(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Path
-               // field[4] m.Route.Paths[j2].Path.SwIfIndex
-               m.Route.Paths[j2].Path.SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.TableID
-               m.Route.Paths[j2].Path.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.RpfID
-               m.Route.Paths[j2].Path.RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Weight
-               m.Route.Paths[j2].Path.Weight = uint8(tmp[pos])
-               pos += 1
-               // field[4] m.Route.Paths[j2].Path.Preference
-               m.Route.Paths[j2].Path.Preference = uint8(tmp[pos])
-               pos += 1
-               // field[4] m.Route.Paths[j2].Path.Type
-               m.Route.Paths[j2].Path.Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Flags
-               m.Route.Paths[j2].Path.Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Proto
-               m.Route.Paths[j2].Path.Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Nh
-               // field[5] m.Route.Paths[j2].Path.Nh.Address
-               copy(m.Route.Paths[j2].Path.Nh.Address.XXX_UnionData[:], tmp[pos:pos+16])
-               pos += 16
-               // field[5] m.Route.Paths[j2].Path.Nh.ViaLabel
-               m.Route.Paths[j2].Path.Nh.ViaLabel = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[5] m.Route.Paths[j2].Path.Nh.ObjID
-               m.Route.Paths[j2].Path.Nh.ObjID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[5] m.Route.Paths[j2].Path.Nh.ClassifyTableIndex
-               m.Route.Paths[j2].Path.Nh.ClassifyTableIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.NLabels
-               m.Route.Paths[j2].Path.NLabels = uint8(tmp[pos])
-               pos += 1
-               // field[4] m.Route.Paths[j2].Path.LabelStack
-               for j4 := 0; j4 < 16; j4++ {
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].IsUniform
-                       m.Route.Paths[j2].Path.LabelStack[j4].IsUniform = uint8(tmp[pos])
-                       pos += 1
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].Label
-                       m.Route.Paths[j2].Path.LabelStack[j4].Label = uint32(o.Uint32(tmp[pos : pos+4]))
-                       pos += 4
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].TTL
-                       m.Route.Paths[j2].Path.LabelStack[j4].TTL = uint8(tmp[pos])
-                       pos += 1
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].Exp
-                       m.Route.Paths[j2].Path.LabelStack[j4].Exp = uint8(tmp[pos])
-                       pos += 1
+       return buf.Bytes(), nil
+}
+func (m *IPMrouteAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.IsMultipath = buf.DecodeBool()
+       m.Route.TableID = buf.DecodeUint32()
+       m.Route.EntryFlags = buf.DecodeUint32()
+       m.Route.RpfID = buf.DecodeUint32()
+       m.Route.Prefix.Af = AddressFamily(buf.DecodeUint32())
+       m.Route.Prefix.GrpAddressLength = buf.DecodeUint16()
+       copy(m.Route.Prefix.GrpAddress.XXX_UnionData[:], buf.DecodeBytes(16))
+       copy(m.Route.Prefix.SrcAddress.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Route.NPaths = buf.DecodeUint8()
+       m.Route.Paths = make([]MfibPath, m.Route.NPaths)
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               m.Route.Paths[j1].ItfFlags = MfibItfFlags(buf.DecodeUint32())
+               m.Route.Paths[j1].Path.SwIfIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.TableID = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.RpfID = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.Weight = buf.DecodeUint8()
+               m.Route.Paths[j1].Path.Preference = buf.DecodeUint8()
+               m.Route.Paths[j1].Path.Type = FibPathType(buf.DecodeUint32())
+               m.Route.Paths[j1].Path.Flags = FibPathFlags(buf.DecodeUint32())
+               m.Route.Paths[j1].Path.Proto = FibPathNhProto(buf.DecodeUint32())
+               copy(m.Route.Paths[j1].Path.Nh.Address.XXX_UnionData[:], buf.DecodeBytes(16))
+               m.Route.Paths[j1].Path.Nh.ViaLabel = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.Nh.ObjID = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.Nh.ClassifyTableIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.NLabels = buf.DecodeUint8()
+               for j3 := 0; j3 < 16; j3++ {
+                       m.Route.Paths[j1].Path.LabelStack[j3].IsUniform = buf.DecodeUint8()
+                       m.Route.Paths[j1].Path.LabelStack[j3].Label = buf.DecodeUint32()
+                       m.Route.Paths[j1].Path.LabelStack[j3].TTL = buf.DecodeUint8()
+                       m.Route.Paths[j1].Path.LabelStack[j3].Exp = buf.DecodeUint8()
                }
        }
        return nil
 }
 
-// IPMrouteAddDelReply represents VPP binary API message 'ip_mroute_add_del_reply'.
+// IPMrouteAddDelReply defines message 'ip_mroute_add_del_reply'.
 type IPMrouteAddDelReply struct {
        Retval     int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
        StatsIndex uint32 `binapi:"u32,name=stats_index" json:"stats_index,omitempty"`
 }
 
-func (m *IPMrouteAddDelReply) Reset()                        { *m = IPMrouteAddDelReply{} }
-func (*IPMrouteAddDelReply) GetMessageName() string          { return "ip_mroute_add_del_reply" }
-func (*IPMrouteAddDelReply) GetCrcString() string            { return "1992deab" }
-func (*IPMrouteAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPMrouteAddDelReply) Reset()               { *m = IPMrouteAddDelReply{} }
+func (*IPMrouteAddDelReply) GetMessageName() string { return "ip_mroute_add_del_reply" }
+func (*IPMrouteAddDelReply) GetCrcString() string   { return "1992deab" }
+func (*IPMrouteAddDelReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPMrouteAddDelReply) Size() int {
+func (m *IPMrouteAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
-       // field[1] m.StatsIndex
-       size += 4
+       size += 4 // m.Retval
+       size += 4 // m.StatsIndex
        return size
 }
 func (m *IPMrouteAddDelReply) 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.StatsIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.StatsIndex))
-       pos += 4
-       return buf, nil
-}
-func (m *IPMrouteAddDelReply) 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.StatsIndex
-       m.StatsIndex = 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.StatsIndex)
+       return buf.Bytes(), nil
+}
+func (m *IPMrouteAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
+       m.StatsIndex = buf.DecodeUint32()
        return nil
 }
 
-// IPMrouteDetails represents VPP binary API message 'ip_mroute_details'.
+// IPMrouteDetails defines message 'ip_mroute_details'.
 type IPMrouteDetails struct {
        Route IPMroute `binapi:"ip_mroute,name=route" json:"route,omitempty"`
 }
 
-func (m *IPMrouteDetails) Reset()                        { *m = IPMrouteDetails{} }
-func (*IPMrouteDetails) GetMessageName() string          { return "ip_mroute_details" }
-func (*IPMrouteDetails) GetCrcString() string            { return "c1cb4b44" }
-func (*IPMrouteDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPMrouteDetails) Reset()               { *m = IPMrouteDetails{} }
+func (*IPMrouteDetails) GetMessageName() string { return "ip_mroute_details" }
+func (*IPMrouteDetails) GetCrcString() string   { return "c1cb4b44" }
+func (*IPMrouteDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPMrouteDetails) Size() int {
+func (m *IPMrouteDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       size += 4
-       // field[2] m.Route.EntryFlags
-       size += 4
-       // field[2] m.Route.RpfID
-       size += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Af
-       size += 4
-       // field[3] m.Route.Prefix.GrpAddressLength
-       size += 2
-       // field[3] m.Route.Prefix.GrpAddress
-       size += 16
-       // field[3] m.Route.Prefix.SrcAddress
-       size += 16
-       // field[2] m.Route.NPaths
-       size += 1
-       // field[2] m.Route.Paths
+       size += 4      // m.Route.TableID
+       size += 4      // m.Route.EntryFlags
+       size += 4      // m.Route.RpfID
+       size += 4      // m.Route.Prefix.Af
+       size += 2      // m.Route.Prefix.GrpAddressLength
+       size += 1 * 16 // m.Route.Prefix.GrpAddress
+       size += 1 * 16 // m.Route.Prefix.SrcAddress
+       size += 1      // m.Route.NPaths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
                var s2 MfibPath
                _ = s2
                if j2 < len(m.Route.Paths) {
                        s2 = m.Route.Paths[j2]
                }
-               // field[3] s2.ItfFlags
-               size += 4
-               // field[3] s2.Path
-               // field[4] s2.Path.SwIfIndex
-               size += 4
-               // field[4] s2.Path.TableID
-               size += 4
-               // field[4] s2.Path.RpfID
-               size += 4
-               // field[4] s2.Path.Weight
-               size += 1
-               // field[4] s2.Path.Preference
-               size += 1
-               // field[4] s2.Path.Type
-               size += 4
-               // field[4] s2.Path.Flags
-               size += 4
-               // field[4] s2.Path.Proto
-               size += 4
-               // field[4] s2.Path.Nh
-               // field[5] s2.Path.Nh.Address
-               size += 16
-               // field[5] s2.Path.Nh.ViaLabel
-               size += 4
-               // field[5] s2.Path.Nh.ObjID
-               size += 4
-               // field[5] s2.Path.Nh.ClassifyTableIndex
-               size += 4
-               // field[4] s2.Path.NLabels
-               size += 1
-               // field[4] s2.Path.LabelStack
+               size += 4      // s2.ItfFlags
+               size += 4      // s2.Path.SwIfIndex
+               size += 4      // s2.Path.TableID
+               size += 4      // s2.Path.RpfID
+               size += 1      // s2.Path.Weight
+               size += 1      // s2.Path.Preference
+               size += 4      // s2.Path.Type
+               size += 4      // s2.Path.Flags
+               size += 4      // s2.Path.Proto
+               size += 1 * 16 // s2.Path.Nh.Address
+               size += 4      // s2.Path.Nh.ViaLabel
+               size += 4      // s2.Path.Nh.ObjID
+               size += 4      // s2.Path.Nh.ClassifyTableIndex
+               size += 1      // s2.Path.NLabels
                for j4 := 0; j4 < 16; j4++ {
-                       var s4 FibMplsLabel
-                       _ = s4
-                       if j4 < len(s2.Path.LabelStack) {
-                               s4 = s2.Path.LabelStack[j4]
-                       }
-                       // field[5] s4.IsUniform
-                       size += 1
-                       // field[5] s4.Label
-                       size += 4
-                       // field[5] s4.TTL
-                       size += 1
-                       // field[5] s4.Exp
-                       size += 1
+                       size += 1 // s2.Path.LabelStack[j4].IsUniform
+                       size += 4 // s2.Path.LabelStack[j4].Label
+                       size += 1 // s2.Path.LabelStack[j4].TTL
+                       size += 1 // s2.Path.LabelStack[j4].Exp
                }
        }
        return size
 }
 func (m *IPMrouteDetails) 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.Route
-       // field[2] m.Route.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.TableID))
-       pos += 4
-       // field[2] m.Route.EntryFlags
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.EntryFlags))
-       pos += 4
-       // field[2] m.Route.RpfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.RpfID))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Af))
-       pos += 4
-       // field[3] m.Route.Prefix.GrpAddressLength
-       o.PutUint16(buf[pos:pos+2], uint16(m.Route.Prefix.GrpAddressLength))
-       pos += 2
-       // field[3] m.Route.Prefix.GrpAddress
-       copy(buf[pos:pos+16], m.Route.Prefix.GrpAddress.XXX_UnionData[:])
-       pos += 16
-       // field[3] m.Route.Prefix.SrcAddress
-       copy(buf[pos:pos+16], m.Route.Prefix.SrcAddress.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Route.NPaths
-       buf[pos] = uint8(len(m.Route.Paths))
-       pos += 1
-       // field[2] m.Route.Paths
-       for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var v2 MfibPath
-               if j2 < len(m.Route.Paths) {
-                       v2 = m.Route.Paths[j2]
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Route.TableID)
+       buf.EncodeUint32(m.Route.EntryFlags)
+       buf.EncodeUint32(m.Route.RpfID)
+       buf.EncodeUint32(uint32(m.Route.Prefix.Af))
+       buf.EncodeUint16(m.Route.Prefix.GrpAddressLength)
+       buf.EncodeBytes(m.Route.Prefix.GrpAddress.XXX_UnionData[:], 16)
+       buf.EncodeBytes(m.Route.Prefix.SrcAddress.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(len(m.Route.Paths)))
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               var v1 MfibPath // Paths
+               if j1 < len(m.Route.Paths) {
+                       v1 = m.Route.Paths[j1]
                }
-               // field[3] v2.ItfFlags
-               o.PutUint32(buf[pos:pos+4], uint32(v2.ItfFlags))
-               pos += 4
-               // field[3] v2.Path
-               // field[4] v2.Path.SwIfIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.SwIfIndex))
-               pos += 4
-               // field[4] v2.Path.TableID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.TableID))
-               pos += 4
-               // field[4] v2.Path.RpfID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.RpfID))
-               pos += 4
-               // field[4] v2.Path.Weight
-               buf[pos] = uint8(v2.Path.Weight)
-               pos += 1
-               // field[4] v2.Path.Preference
-               buf[pos] = uint8(v2.Path.Preference)
-               pos += 1
-               // field[4] v2.Path.Type
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Type))
-               pos += 4
-               // field[4] v2.Path.Flags
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Flags))
-               pos += 4
-               // field[4] v2.Path.Proto
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Proto))
-               pos += 4
-               // field[4] v2.Path.Nh
-               // field[5] v2.Path.Nh.Address
-               copy(buf[pos:pos+16], v2.Path.Nh.Address.XXX_UnionData[:])
-               pos += 16
-               // field[5] v2.Path.Nh.ViaLabel
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Nh.ViaLabel))
-               pos += 4
-               // field[5] v2.Path.Nh.ObjID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Nh.ObjID))
-               pos += 4
-               // field[5] v2.Path.Nh.ClassifyTableIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Path.Nh.ClassifyTableIndex))
-               pos += 4
-               // field[4] v2.Path.NLabels
-               buf[pos] = uint8(v2.Path.NLabels)
-               pos += 1
-               // field[4] v2.Path.LabelStack
-               for j4 := 0; j4 < 16; j4++ {
-                       var v4 FibMplsLabel
-                       if j4 < len(v2.Path.LabelStack) {
-                               v4 = v2.Path.LabelStack[j4]
-                       }
-                       // field[5] v4.IsUniform
-                       buf[pos] = uint8(v4.IsUniform)
-                       pos += 1
-                       // field[5] v4.Label
-                       o.PutUint32(buf[pos:pos+4], uint32(v4.Label))
-                       pos += 4
-                       // field[5] v4.TTL
-                       buf[pos] = uint8(v4.TTL)
-                       pos += 1
-                       // field[5] v4.Exp
-                       buf[pos] = uint8(v4.Exp)
-                       pos += 1
+               buf.EncodeUint32(uint32(v1.ItfFlags))
+               buf.EncodeUint32(v1.Path.SwIfIndex)
+               buf.EncodeUint32(v1.Path.TableID)
+               buf.EncodeUint32(v1.Path.RpfID)
+               buf.EncodeUint8(v1.Path.Weight)
+               buf.EncodeUint8(v1.Path.Preference)
+               buf.EncodeUint32(uint32(v1.Path.Type))
+               buf.EncodeUint32(uint32(v1.Path.Flags))
+               buf.EncodeUint32(uint32(v1.Path.Proto))
+               buf.EncodeBytes(v1.Path.Nh.Address.XXX_UnionData[:], 16)
+               buf.EncodeUint32(v1.Path.Nh.ViaLabel)
+               buf.EncodeUint32(v1.Path.Nh.ObjID)
+               buf.EncodeUint32(v1.Path.Nh.ClassifyTableIndex)
+               buf.EncodeUint8(v1.Path.NLabels)
+               for j3 := 0; j3 < 16; j3++ {
+                       buf.EncodeUint8(v1.Path.LabelStack[j3].IsUniform)
+                       buf.EncodeUint32(v1.Path.LabelStack[j3].Label)
+                       buf.EncodeUint8(v1.Path.LabelStack[j3].TTL)
+                       buf.EncodeUint8(v1.Path.LabelStack[j3].Exp)
                }
        }
-       return buf, nil
-}
-func (m *IPMrouteDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       m.Route.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.EntryFlags
-       m.Route.EntryFlags = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.RpfID
-       m.Route.RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Af
-       m.Route.Prefix.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Route.Prefix.GrpAddressLength
-       m.Route.Prefix.GrpAddressLength = uint16(o.Uint16(tmp[pos : pos+2]))
-       pos += 2
-       // field[3] m.Route.Prefix.GrpAddress
-       copy(m.Route.Prefix.GrpAddress.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[3] m.Route.Prefix.SrcAddress
-       copy(m.Route.Prefix.SrcAddress.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Route.NPaths
-       m.Route.NPaths = uint8(tmp[pos])
-       pos += 1
-       // field[2] m.Route.Paths
-       m.Route.Paths = make([]MfibPath, int(m.Route.NPaths))
-       for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
-               // field[3] m.Route.Paths[j2].ItfFlags
-               m.Route.Paths[j2].ItfFlags = MfibItfFlags(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Path
-               // field[4] m.Route.Paths[j2].Path.SwIfIndex
-               m.Route.Paths[j2].Path.SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.TableID
-               m.Route.Paths[j2].Path.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.RpfID
-               m.Route.Paths[j2].Path.RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Weight
-               m.Route.Paths[j2].Path.Weight = uint8(tmp[pos])
-               pos += 1
-               // field[4] m.Route.Paths[j2].Path.Preference
-               m.Route.Paths[j2].Path.Preference = uint8(tmp[pos])
-               pos += 1
-               // field[4] m.Route.Paths[j2].Path.Type
-               m.Route.Paths[j2].Path.Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Flags
-               m.Route.Paths[j2].Path.Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Proto
-               m.Route.Paths[j2].Path.Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.Nh
-               // field[5] m.Route.Paths[j2].Path.Nh.Address
-               copy(m.Route.Paths[j2].Path.Nh.Address.XXX_UnionData[:], tmp[pos:pos+16])
-               pos += 16
-               // field[5] m.Route.Paths[j2].Path.Nh.ViaLabel
-               m.Route.Paths[j2].Path.Nh.ViaLabel = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[5] m.Route.Paths[j2].Path.Nh.ObjID
-               m.Route.Paths[j2].Path.Nh.ObjID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[5] m.Route.Paths[j2].Path.Nh.ClassifyTableIndex
-               m.Route.Paths[j2].Path.Nh.ClassifyTableIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Path.NLabels
-               m.Route.Paths[j2].Path.NLabels = uint8(tmp[pos])
-               pos += 1
-               // field[4] m.Route.Paths[j2].Path.LabelStack
-               for j4 := 0; j4 < 16; j4++ {
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].IsUniform
-                       m.Route.Paths[j2].Path.LabelStack[j4].IsUniform = uint8(tmp[pos])
-                       pos += 1
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].Label
-                       m.Route.Paths[j2].Path.LabelStack[j4].Label = uint32(o.Uint32(tmp[pos : pos+4]))
-                       pos += 4
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].TTL
-                       m.Route.Paths[j2].Path.LabelStack[j4].TTL = uint8(tmp[pos])
-                       pos += 1
-                       // field[5] m.Route.Paths[j2].Path.LabelStack[j4].Exp
-                       m.Route.Paths[j2].Path.LabelStack[j4].Exp = uint8(tmp[pos])
-                       pos += 1
+       return buf.Bytes(), nil
+}
+func (m *IPMrouteDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Route.TableID = buf.DecodeUint32()
+       m.Route.EntryFlags = buf.DecodeUint32()
+       m.Route.RpfID = buf.DecodeUint32()
+       m.Route.Prefix.Af = AddressFamily(buf.DecodeUint32())
+       m.Route.Prefix.GrpAddressLength = buf.DecodeUint16()
+       copy(m.Route.Prefix.GrpAddress.XXX_UnionData[:], buf.DecodeBytes(16))
+       copy(m.Route.Prefix.SrcAddress.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Route.NPaths = buf.DecodeUint8()
+       m.Route.Paths = make([]MfibPath, m.Route.NPaths)
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               m.Route.Paths[j1].ItfFlags = MfibItfFlags(buf.DecodeUint32())
+               m.Route.Paths[j1].Path.SwIfIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.TableID = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.RpfID = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.Weight = buf.DecodeUint8()
+               m.Route.Paths[j1].Path.Preference = buf.DecodeUint8()
+               m.Route.Paths[j1].Path.Type = FibPathType(buf.DecodeUint32())
+               m.Route.Paths[j1].Path.Flags = FibPathFlags(buf.DecodeUint32())
+               m.Route.Paths[j1].Path.Proto = FibPathNhProto(buf.DecodeUint32())
+               copy(m.Route.Paths[j1].Path.Nh.Address.XXX_UnionData[:], buf.DecodeBytes(16))
+               m.Route.Paths[j1].Path.Nh.ViaLabel = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.Nh.ObjID = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.Nh.ClassifyTableIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].Path.NLabels = buf.DecodeUint8()
+               for j3 := 0; j3 < 16; j3++ {
+                       m.Route.Paths[j1].Path.LabelStack[j3].IsUniform = buf.DecodeUint8()
+                       m.Route.Paths[j1].Path.LabelStack[j3].Label = buf.DecodeUint32()
+                       m.Route.Paths[j1].Path.LabelStack[j3].TTL = buf.DecodeUint8()
+                       m.Route.Paths[j1].Path.LabelStack[j3].Exp = buf.DecodeUint8()
                }
        }
        return nil
 }
 
-// IPMrouteDump represents VPP binary API message 'ip_mroute_dump'.
+// IPMrouteDump defines message 'ip_mroute_dump'.
 type IPMrouteDump struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPMrouteDump) Reset()                        { *m = IPMrouteDump{} }
-func (*IPMrouteDump) GetMessageName() string          { return "ip_mroute_dump" }
-func (*IPMrouteDump) GetCrcString() string            { return "b9d2e09e" }
-func (*IPMrouteDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPMrouteDump) Reset()               { *m = IPMrouteDump{} }
+func (*IPMrouteDump) GetMessageName() string { return "ip_mroute_dump" }
+func (*IPMrouteDump) GetCrcString() string   { return "b9d2e09e" }
+func (*IPMrouteDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPMrouteDump) Size() int {
+func (m *IPMrouteDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPMrouteDump) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPMrouteDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPMrouteDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPMtableDetails represents VPP binary API message 'ip_mtable_details'.
+// IPMtableDetails defines message 'ip_mtable_details'.
 type IPMtableDetails struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPMtableDetails) Reset()                        { *m = IPMtableDetails{} }
-func (*IPMtableDetails) GetMessageName() string          { return "ip_mtable_details" }
-func (*IPMtableDetails) GetCrcString() string            { return "b9d2e09e" }
-func (*IPMtableDetails) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPMtableDetails) Reset()               { *m = IPMtableDetails{} }
+func (*IPMtableDetails) GetMessageName() string { return "ip_mtable_details" }
+func (*IPMtableDetails) GetCrcString() string   { return "b9d2e09e" }
+func (*IPMtableDetails) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPMtableDetails) Size() int {
+func (m *IPMtableDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPMtableDetails) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPMtableDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPMtableDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPMtableDump represents VPP binary API message 'ip_mtable_dump'.
+// IPMtableDump defines message 'ip_mtable_dump'.
 type IPMtableDump struct{}
 
-func (m *IPMtableDump) Reset()                        { *m = IPMtableDump{} }
-func (*IPMtableDump) GetMessageName() string          { return "ip_mtable_dump" }
-func (*IPMtableDump) GetCrcString() string            { return "51077d14" }
-func (*IPMtableDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPMtableDump) Reset()               { *m = IPMtableDump{} }
+func (*IPMtableDump) GetMessageName() string { return "ip_mtable_dump" }
+func (*IPMtableDump) GetCrcString() string   { return "51077d14" }
+func (*IPMtableDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPMtableDump) Size() int {
+func (m *IPMtableDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        return size
 }
 func (m *IPMtableDump) 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 *IPMtableDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
+func (m *IPMtableDump) Unmarshal(b []byte) error {
        return nil
 }
 
-// IPPuntPolice represents VPP binary API message 'ip_punt_police'.
+// IPPuntPolice defines message 'ip_punt_police'.
 type IPPuntPolice struct {
        PolicerIndex uint32 `binapi:"u32,name=policer_index" json:"policer_index,omitempty"`
        IsAdd        bool   `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        IsIP6        bool   `binapi:"bool,name=is_ip6" json:"is_ip6,omitempty"`
 }
 
-func (m *IPPuntPolice) Reset()                        { *m = IPPuntPolice{} }
-func (*IPPuntPolice) GetMessageName() string          { return "ip_punt_police" }
-func (*IPPuntPolice) GetCrcString() string            { return "db867cea" }
-func (*IPPuntPolice) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPPuntPolice) Reset()               { *m = IPPuntPolice{} }
+func (*IPPuntPolice) GetMessageName() string { return "ip_punt_police" }
+func (*IPPuntPolice) GetCrcString() string   { return "db867cea" }
+func (*IPPuntPolice) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPPuntPolice) Size() int {
+func (m *IPPuntPolice) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.PolicerIndex
-       size += 4
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.IsIP6
-       size += 1
+       size += 4 // m.PolicerIndex
+       size += 1 // m.IsAdd
+       size += 1 // m.IsIP6
        return size
 }
 func (m *IPPuntPolice) 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.PolicerIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.PolicerIndex))
-       pos += 4
-       // field[1] m.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.IsIP6
-       if m.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPPuntPolice) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.PolicerIndex
-       m.PolicerIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.IsIP6
-       m.IsIP6 = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.PolicerIndex)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeBool(m.IsIP6)
+       return buf.Bytes(), nil
+}
+func (m *IPPuntPolice) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.PolicerIndex = buf.DecodeUint32()
+       m.IsAdd = buf.DecodeBool()
+       m.IsIP6 = buf.DecodeBool()
        return nil
 }
 
-// IPPuntPoliceReply represents VPP binary API message 'ip_punt_police_reply'.
+// IPPuntPoliceReply defines message 'ip_punt_police_reply'.
 type IPPuntPoliceReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPPuntPoliceReply) Reset()                        { *m = IPPuntPoliceReply{} }
-func (*IPPuntPoliceReply) GetMessageName() string          { return "ip_punt_police_reply" }
-func (*IPPuntPoliceReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPPuntPoliceReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPPuntPoliceReply) Reset()               { *m = IPPuntPoliceReply{} }
+func (*IPPuntPoliceReply) GetMessageName() string { return "ip_punt_police_reply" }
+func (*IPPuntPoliceReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPPuntPoliceReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPPuntPoliceReply) Size() int {
+func (m *IPPuntPoliceReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPPuntPoliceReply) 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
-       return buf, nil
-}
-func (m *IPPuntPoliceReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPPuntPoliceReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPPuntRedirect represents VPP binary API message 'ip_punt_redirect'.
+// IPPuntRedirect defines message 'ip_punt_redirect'.
 type IPPuntRedirect struct {
        Punt  PuntRedirect `binapi:"punt_redirect,name=punt" json:"punt,omitempty"`
        IsAdd bool         `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
 }
 
-func (m *IPPuntRedirect) Reset()                        { *m = IPPuntRedirect{} }
-func (*IPPuntRedirect) GetMessageName() string          { return "ip_punt_redirect" }
-func (*IPPuntRedirect) GetCrcString() string            { return "a9a5592c" }
-func (*IPPuntRedirect) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPPuntRedirect) Reset()               { *m = IPPuntRedirect{} }
+func (*IPPuntRedirect) GetMessageName() string { return "ip_punt_redirect" }
+func (*IPPuntRedirect) GetCrcString() string   { return "a9a5592c" }
+func (*IPPuntRedirect) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPPuntRedirect) Size() int {
+func (m *IPPuntRedirect) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Punt
-       // field[2] m.Punt.RxSwIfIndex
-       size += 4
-       // field[2] m.Punt.TxSwIfIndex
-       size += 4
-       // field[2] m.Punt.Nh
-       // field[3] m.Punt.Nh.Af
-       size += 4
-       // field[3] m.Punt.Nh.Un
-       size += 16
-       // field[1] m.IsAdd
-       size += 1
+       size += 4      // m.Punt.RxSwIfIndex
+       size += 4      // m.Punt.TxSwIfIndex
+       size += 4      // m.Punt.Nh.Af
+       size += 1 * 16 // m.Punt.Nh.Un
+       size += 1      // m.IsAdd
        return size
 }
 func (m *IPPuntRedirect) 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.Punt
-       // field[2] m.Punt.RxSwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.RxSwIfIndex))
-       pos += 4
-       // field[2] m.Punt.TxSwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.TxSwIfIndex))
-       pos += 4
-       // field[2] m.Punt.Nh
-       // field[3] m.Punt.Nh.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.Nh.Af))
-       pos += 4
-       // field[3] m.Punt.Nh.Un
-       copy(buf[pos:pos+16], m.Punt.Nh.Un.XXX_UnionData[:])
-       pos += 16
-       // field[1] m.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPPuntRedirect) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Punt
-       // field[2] m.Punt.RxSwIfIndex
-       m.Punt.RxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Punt.TxSwIfIndex
-       m.Punt.TxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Punt.Nh
-       // field[3] m.Punt.Nh.Af
-       m.Punt.Nh.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Punt.Nh.Un
-       copy(m.Punt.Nh.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.Punt.RxSwIfIndex))
+       buf.EncodeUint32(uint32(m.Punt.TxSwIfIndex))
+       buf.EncodeUint32(uint32(m.Punt.Nh.Af))
+       buf.EncodeBytes(m.Punt.Nh.Un.XXX_UnionData[:], 16)
+       buf.EncodeBool(m.IsAdd)
+       return buf.Bytes(), nil
+}
+func (m *IPPuntRedirect) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Punt.RxSwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Punt.TxSwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Punt.Nh.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Punt.Nh.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.IsAdd = buf.DecodeBool()
        return nil
 }
 
-// IPPuntRedirectDetails represents VPP binary API message 'ip_punt_redirect_details'.
+// IPPuntRedirectDetails defines message 'ip_punt_redirect_details'.
 type IPPuntRedirectDetails struct {
        Punt PuntRedirect `binapi:"punt_redirect,name=punt" json:"punt,omitempty"`
 }
 
-func (m *IPPuntRedirectDetails) Reset()                        { *m = IPPuntRedirectDetails{} }
-func (*IPPuntRedirectDetails) GetMessageName() string          { return "ip_punt_redirect_details" }
-func (*IPPuntRedirectDetails) GetCrcString() string            { return "3924f5d3" }
-func (*IPPuntRedirectDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPPuntRedirectDetails) Reset()               { *m = IPPuntRedirectDetails{} }
+func (*IPPuntRedirectDetails) GetMessageName() string { return "ip_punt_redirect_details" }
+func (*IPPuntRedirectDetails) GetCrcString() string   { return "3924f5d3" }
+func (*IPPuntRedirectDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPPuntRedirectDetails) Size() int {
+func (m *IPPuntRedirectDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Punt
-       // field[2] m.Punt.RxSwIfIndex
-       size += 4
-       // field[2] m.Punt.TxSwIfIndex
-       size += 4
-       // field[2] m.Punt.Nh
-       // field[3] m.Punt.Nh.Af
-       size += 4
-       // field[3] m.Punt.Nh.Un
-       size += 16
+       size += 4      // m.Punt.RxSwIfIndex
+       size += 4      // m.Punt.TxSwIfIndex
+       size += 4      // m.Punt.Nh.Af
+       size += 1 * 16 // m.Punt.Nh.Un
        return size
 }
 func (m *IPPuntRedirectDetails) 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.Punt
-       // field[2] m.Punt.RxSwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.RxSwIfIndex))
-       pos += 4
-       // field[2] m.Punt.TxSwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.TxSwIfIndex))
-       pos += 4
-       // field[2] m.Punt.Nh
-       // field[3] m.Punt.Nh.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.Nh.Af))
-       pos += 4
-       // field[3] m.Punt.Nh.Un
-       copy(buf[pos:pos+16], m.Punt.Nh.Un.XXX_UnionData[:])
-       pos += 16
-       return buf, nil
-}
-func (m *IPPuntRedirectDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Punt
-       // field[2] m.Punt.RxSwIfIndex
-       m.Punt.RxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Punt.TxSwIfIndex
-       m.Punt.TxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Punt.Nh
-       // field[3] m.Punt.Nh.Af
-       m.Punt.Nh.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Punt.Nh.Un
-       copy(m.Punt.Nh.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.Punt.RxSwIfIndex))
+       buf.EncodeUint32(uint32(m.Punt.TxSwIfIndex))
+       buf.EncodeUint32(uint32(m.Punt.Nh.Af))
+       buf.EncodeBytes(m.Punt.Nh.Un.XXX_UnionData[:], 16)
+       return buf.Bytes(), nil
+}
+func (m *IPPuntRedirectDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Punt.RxSwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Punt.TxSwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Punt.Nh.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Punt.Nh.Un.XXX_UnionData[:], buf.DecodeBytes(16))
        return nil
 }
 
-// IPPuntRedirectDump represents VPP binary API message 'ip_punt_redirect_dump'.
+// IPPuntRedirectDump defines message 'ip_punt_redirect_dump'.
 type IPPuntRedirectDump struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        IsIPv6    bool           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
 }
 
-func (m *IPPuntRedirectDump) Reset()                        { *m = IPPuntRedirectDump{} }
-func (*IPPuntRedirectDump) GetMessageName() string          { return "ip_punt_redirect_dump" }
-func (*IPPuntRedirectDump) GetCrcString() string            { return "2d033de4" }
-func (*IPPuntRedirectDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPPuntRedirectDump) Reset()               { *m = IPPuntRedirectDump{} }
+func (*IPPuntRedirectDump) GetMessageName() string { return "ip_punt_redirect_dump" }
+func (*IPPuntRedirectDump) GetCrcString() string   { return "2d033de4" }
+func (*IPPuntRedirectDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPPuntRedirectDump) Size() int {
+func (m *IPPuntRedirectDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.IsIPv6
-       size += 1
+       size += 4 // m.SwIfIndex
+       size += 1 // m.IsIPv6
        return size
 }
 func (m *IPPuntRedirectDump) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.IsIPv6
-       if m.IsIPv6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPPuntRedirectDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsIPv6
-       m.IsIPv6 = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBool(m.IsIPv6)
+       return buf.Bytes(), nil
+}
+func (m *IPPuntRedirectDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.IsIPv6 = buf.DecodeBool()
        return nil
 }
 
-// IPPuntRedirectReply represents VPP binary API message 'ip_punt_redirect_reply'.
+// IPPuntRedirectReply defines message 'ip_punt_redirect_reply'.
 type IPPuntRedirectReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPPuntRedirectReply) Reset()                        { *m = IPPuntRedirectReply{} }
-func (*IPPuntRedirectReply) GetMessageName() string          { return "ip_punt_redirect_reply" }
-func (*IPPuntRedirectReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPPuntRedirectReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPPuntRedirectReply) Reset()               { *m = IPPuntRedirectReply{} }
+func (*IPPuntRedirectReply) GetMessageName() string { return "ip_punt_redirect_reply" }
+func (*IPPuntRedirectReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPPuntRedirectReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPPuntRedirectReply) Size() int {
+func (m *IPPuntRedirectReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPPuntRedirectReply) 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
-       return buf, nil
-}
-func (m *IPPuntRedirectReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPPuntRedirectReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPReassemblyEnableDisable represents VPP binary API message 'ip_reassembly_enable_disable'.
+// IPReassemblyEnableDisable defines message 'ip_reassembly_enable_disable'.
 type IPReassemblyEnableDisable struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        EnableIP4 bool           `binapi:"bool,name=enable_ip4" json:"enable_ip4,omitempty"`
@@ -2801,76 +2280,44 @@ type IPReassemblyEnableDisable struct {
        Type      IPReassType    `binapi:"ip_reass_type,name=type" json:"type,omitempty"`
 }
 
-func (m *IPReassemblyEnableDisable) Reset()                        { *m = IPReassemblyEnableDisable{} }
-func (*IPReassemblyEnableDisable) GetMessageName() string          { return "ip_reassembly_enable_disable" }
-func (*IPReassemblyEnableDisable) GetCrcString() string            { return "885c85a6" }
-func (*IPReassemblyEnableDisable) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPReassemblyEnableDisable) Reset()               { *m = IPReassemblyEnableDisable{} }
+func (*IPReassemblyEnableDisable) GetMessageName() string { return "ip_reassembly_enable_disable" }
+func (*IPReassemblyEnableDisable) GetCrcString() string   { return "885c85a6" }
+func (*IPReassemblyEnableDisable) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPReassemblyEnableDisable) Size() int {
+func (m *IPReassemblyEnableDisable) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.EnableIP4
-       size += 1
-       // field[1] m.EnableIP6
-       size += 1
-       // field[1] m.Type
-       size += 4
+       size += 4 // m.SwIfIndex
+       size += 1 // m.EnableIP4
+       size += 1 // m.EnableIP6
+       size += 4 // m.Type
        return size
 }
 func (m *IPReassemblyEnableDisable) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.EnableIP4
-       if m.EnableIP4 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.EnableIP6
-       if m.EnableIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Type
-       o.PutUint32(buf[pos:pos+4], uint32(m.Type))
-       pos += 4
-       return buf, nil
-}
-func (m *IPReassemblyEnableDisable) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.EnableIP4
-       m.EnableIP4 = tmp[pos] != 0
-       pos += 1
-       // field[1] m.EnableIP6
-       m.EnableIP6 = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Type
-       m.Type = IPReassType(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBool(m.EnableIP4)
+       buf.EncodeBool(m.EnableIP6)
+       buf.EncodeUint32(uint32(m.Type))
+       return buf.Bytes(), nil
+}
+func (m *IPReassemblyEnableDisable) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.EnableIP4 = buf.DecodeBool()
+       m.EnableIP6 = buf.DecodeBool()
+       m.Type = IPReassType(buf.DecodeUint32())
        return nil
 }
 
-// IPReassemblyEnableDisableReply represents VPP binary API message 'ip_reassembly_enable_disable_reply'.
+// IPReassemblyEnableDisableReply defines message 'ip_reassembly_enable_disable_reply'.
 type IPReassemblyEnableDisableReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -2879,103 +2326,70 @@ func (m *IPReassemblyEnableDisableReply) Reset() { *m = IPReassemblyEnableDisabl
 func (*IPReassemblyEnableDisableReply) GetMessageName() string {
        return "ip_reassembly_enable_disable_reply"
 }
-func (*IPReassemblyEnableDisableReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPReassemblyEnableDisableReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (*IPReassemblyEnableDisableReply) GetCrcString() string { return "e8d4e804" }
+func (*IPReassemblyEnableDisableReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPReassemblyEnableDisableReply) Size() int {
+func (m *IPReassemblyEnableDisableReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPReassemblyEnableDisableReply) 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
-       return buf, nil
-}
-func (m *IPReassemblyEnableDisableReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPReassemblyEnableDisableReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPReassemblyGet represents VPP binary API message 'ip_reassembly_get'.
+// IPReassemblyGet defines message 'ip_reassembly_get'.
 type IPReassemblyGet struct {
        IsIP6 bool        `binapi:"bool,name=is_ip6" json:"is_ip6,omitempty"`
        Type  IPReassType `binapi:"ip_reass_type,name=type" json:"type,omitempty"`
 }
 
-func (m *IPReassemblyGet) Reset()                        { *m = IPReassemblyGet{} }
-func (*IPReassemblyGet) GetMessageName() string          { return "ip_reassembly_get" }
-func (*IPReassemblyGet) GetCrcString() string            { return "ea13ff63" }
-func (*IPReassemblyGet) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPReassemblyGet) Reset()               { *m = IPReassemblyGet{} }
+func (*IPReassemblyGet) GetMessageName() string { return "ip_reassembly_get" }
+func (*IPReassemblyGet) GetCrcString() string   { return "ea13ff63" }
+func (*IPReassemblyGet) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPReassemblyGet) Size() int {
+func (m *IPReassemblyGet) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsIP6
-       size += 1
-       // field[1] m.Type
-       size += 4
+       size += 1 // m.IsIP6
+       size += 4 // m.Type
        return size
 }
 func (m *IPReassemblyGet) 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.IsIP6
-       if m.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Type
-       o.PutUint32(buf[pos:pos+4], uint32(m.Type))
-       pos += 4
-       return buf, nil
-}
-func (m *IPReassemblyGet) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsIP6
-       m.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Type
-       m.Type = IPReassType(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsIP6)
+       buf.EncodeUint32(uint32(m.Type))
+       return buf.Bytes(), nil
+}
+func (m *IPReassemblyGet) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsIP6 = buf.DecodeBool()
+       m.Type = IPReassType(buf.DecodeUint32())
        return nil
 }
 
-// IPReassemblyGetReply represents VPP binary API message 'ip_reassembly_get_reply'.
+// IPReassemblyGetReply defines message 'ip_reassembly_get_reply'.
 type IPReassemblyGetReply struct {
        Retval               int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
        TimeoutMs            uint32 `binapi:"u32,name=timeout_ms" json:"timeout_ms,omitempty"`
@@ -2985,90 +2399,50 @@ type IPReassemblyGetReply struct {
        IsIP6                bool   `binapi:"bool,name=is_ip6" json:"is_ip6,omitempty"`
 }
 
-func (m *IPReassemblyGetReply) Reset()                        { *m = IPReassemblyGetReply{} }
-func (*IPReassemblyGetReply) GetMessageName() string          { return "ip_reassembly_get_reply" }
-func (*IPReassemblyGetReply) GetCrcString() string            { return "d5eb8d34" }
-func (*IPReassemblyGetReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPReassemblyGetReply) Reset()               { *m = IPReassemblyGetReply{} }
+func (*IPReassemblyGetReply) GetMessageName() string { return "ip_reassembly_get_reply" }
+func (*IPReassemblyGetReply) GetCrcString() string   { return "d5eb8d34" }
+func (*IPReassemblyGetReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPReassemblyGetReply) Size() int {
+func (m *IPReassemblyGetReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
-       // field[1] m.TimeoutMs
-       size += 4
-       // field[1] m.MaxReassemblies
-       size += 4
-       // field[1] m.MaxReassemblyLength
-       size += 4
-       // field[1] m.ExpireWalkIntervalMs
-       size += 4
-       // field[1] m.IsIP6
-       size += 1
+       size += 4 // m.Retval
+       size += 4 // m.TimeoutMs
+       size += 4 // m.MaxReassemblies
+       size += 4 // m.MaxReassemblyLength
+       size += 4 // m.ExpireWalkIntervalMs
+       size += 1 // m.IsIP6
        return size
 }
 func (m *IPReassemblyGetReply) 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.TimeoutMs
-       o.PutUint32(buf[pos:pos+4], uint32(m.TimeoutMs))
-       pos += 4
-       // field[1] m.MaxReassemblies
-       o.PutUint32(buf[pos:pos+4], uint32(m.MaxReassemblies))
-       pos += 4
-       // field[1] m.MaxReassemblyLength
-       o.PutUint32(buf[pos:pos+4], uint32(m.MaxReassemblyLength))
-       pos += 4
-       // field[1] m.ExpireWalkIntervalMs
-       o.PutUint32(buf[pos:pos+4], uint32(m.ExpireWalkIntervalMs))
-       pos += 4
-       // field[1] m.IsIP6
-       if m.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *IPReassemblyGetReply) 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.TimeoutMs
-       m.TimeoutMs = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.MaxReassemblies
-       m.MaxReassemblies = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.MaxReassemblyLength
-       m.MaxReassemblyLength = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.ExpireWalkIntervalMs
-       m.ExpireWalkIntervalMs = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsIP6
-       m.IsIP6 = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       buf.EncodeUint32(m.TimeoutMs)
+       buf.EncodeUint32(m.MaxReassemblies)
+       buf.EncodeUint32(m.MaxReassemblyLength)
+       buf.EncodeUint32(m.ExpireWalkIntervalMs)
+       buf.EncodeBool(m.IsIP6)
+       return buf.Bytes(), nil
+}
+func (m *IPReassemblyGetReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
+       m.TimeoutMs = buf.DecodeUint32()
+       m.MaxReassemblies = buf.DecodeUint32()
+       m.MaxReassemblyLength = buf.DecodeUint32()
+       m.ExpireWalkIntervalMs = buf.DecodeUint32()
+       m.IsIP6 = buf.DecodeBool()
        return nil
 }
 
-// IPReassemblySet represents VPP binary API message 'ip_reassembly_set'.
+// IPReassemblySet defines message 'ip_reassembly_set'.
 type IPReassemblySet struct {
        TimeoutMs            uint32      `binapi:"u32,name=timeout_ms" json:"timeout_ms,omitempty"`
        MaxReassemblies      uint32      `binapi:"u32,name=max_reassemblies" json:"max_reassemblies,omitempty"`
@@ -3078,831 +2452,415 @@ type IPReassemblySet struct {
        Type                 IPReassType `binapi:"ip_reass_type,name=type" json:"type,omitempty"`
 }
 
-func (m *IPReassemblySet) Reset()                        { *m = IPReassemblySet{} }
-func (*IPReassemblySet) GetMessageName() string          { return "ip_reassembly_set" }
-func (*IPReassemblySet) GetCrcString() string            { return "16467d25" }
-func (*IPReassemblySet) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPReassemblySet) Reset()               { *m = IPReassemblySet{} }
+func (*IPReassemblySet) GetMessageName() string { return "ip_reassembly_set" }
+func (*IPReassemblySet) GetCrcString() string   { return "16467d25" }
+func (*IPReassemblySet) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPReassemblySet) Size() int {
+func (m *IPReassemblySet) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.TimeoutMs
-       size += 4
-       // field[1] m.MaxReassemblies
-       size += 4
-       // field[1] m.MaxReassemblyLength
-       size += 4
-       // field[1] m.ExpireWalkIntervalMs
-       size += 4
-       // field[1] m.IsIP6
-       size += 1
-       // field[1] m.Type
-       size += 4
+       size += 4 // m.TimeoutMs
+       size += 4 // m.MaxReassemblies
+       size += 4 // m.MaxReassemblyLength
+       size += 4 // m.ExpireWalkIntervalMs
+       size += 1 // m.IsIP6
+       size += 4 // m.Type
        return size
 }
 func (m *IPReassemblySet) 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.TimeoutMs
-       o.PutUint32(buf[pos:pos+4], uint32(m.TimeoutMs))
-       pos += 4
-       // field[1] m.MaxReassemblies
-       o.PutUint32(buf[pos:pos+4], uint32(m.MaxReassemblies))
-       pos += 4
-       // field[1] m.MaxReassemblyLength
-       o.PutUint32(buf[pos:pos+4], uint32(m.MaxReassemblyLength))
-       pos += 4
-       // field[1] m.ExpireWalkIntervalMs
-       o.PutUint32(buf[pos:pos+4], uint32(m.ExpireWalkIntervalMs))
-       pos += 4
-       // field[1] m.IsIP6
-       if m.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Type
-       o.PutUint32(buf[pos:pos+4], uint32(m.Type))
-       pos += 4
-       return buf, nil
-}
-func (m *IPReassemblySet) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.TimeoutMs
-       m.TimeoutMs = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.MaxReassemblies
-       m.MaxReassemblies = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.MaxReassemblyLength
-       m.MaxReassemblyLength = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.ExpireWalkIntervalMs
-       m.ExpireWalkIntervalMs = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsIP6
-       m.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Type
-       m.Type = IPReassType(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.TimeoutMs)
+       buf.EncodeUint32(m.MaxReassemblies)
+       buf.EncodeUint32(m.MaxReassemblyLength)
+       buf.EncodeUint32(m.ExpireWalkIntervalMs)
+       buf.EncodeBool(m.IsIP6)
+       buf.EncodeUint32(uint32(m.Type))
+       return buf.Bytes(), nil
+}
+func (m *IPReassemblySet) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.TimeoutMs = buf.DecodeUint32()
+       m.MaxReassemblies = buf.DecodeUint32()
+       m.MaxReassemblyLength = buf.DecodeUint32()
+       m.ExpireWalkIntervalMs = buf.DecodeUint32()
+       m.IsIP6 = buf.DecodeBool()
+       m.Type = IPReassType(buf.DecodeUint32())
        return nil
 }
 
-// IPReassemblySetReply represents VPP binary API message 'ip_reassembly_set_reply'.
+// IPReassemblySetReply defines message 'ip_reassembly_set_reply'.
 type IPReassemblySetReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPReassemblySetReply) Reset()                        { *m = IPReassemblySetReply{} }
-func (*IPReassemblySetReply) GetMessageName() string          { return "ip_reassembly_set_reply" }
-func (*IPReassemblySetReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPReassemblySetReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPReassemblySetReply) Reset()               { *m = IPReassemblySetReply{} }
+func (*IPReassemblySetReply) GetMessageName() string { return "ip_reassembly_set_reply" }
+func (*IPReassemblySetReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPReassemblySetReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPReassemblySetReply) Size() int {
+func (m *IPReassemblySetReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPReassemblySetReply) 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
-       return buf, nil
-}
-func (m *IPReassemblySetReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPReassemblySetReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPRouteAddDel represents VPP binary API message 'ip_route_add_del'.
+// IPRouteAddDel defines message 'ip_route_add_del'.
 type IPRouteAddDel struct {
        IsAdd       bool    `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        IsMultipath bool    `binapi:"bool,name=is_multipath" json:"is_multipath,omitempty"`
        Route       IPRoute `binapi:"ip_route,name=route" json:"route,omitempty"`
 }
 
-func (m *IPRouteAddDel) Reset()                        { *m = IPRouteAddDel{} }
-func (*IPRouteAddDel) GetMessageName() string          { return "ip_route_add_del" }
-func (*IPRouteAddDel) GetCrcString() string            { return "c1ff832d" }
-func (*IPRouteAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPRouteAddDel) Reset()               { *m = IPRouteAddDel{} }
+func (*IPRouteAddDel) GetMessageName() string { return "ip_route_add_del" }
+func (*IPRouteAddDel) GetCrcString() string   { return "c1ff832d" }
+func (*IPRouteAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPRouteAddDel) Size() int {
+func (m *IPRouteAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.IsMultipath
-       size += 1
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       size += 4
-       // field[2] m.Route.StatsIndex
-       size += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Address
-       // field[4] m.Route.Prefix.Address.Af
-       size += 4
-       // field[4] m.Route.Prefix.Address.Un
-       size += 16
-       // field[3] m.Route.Prefix.Len
-       size += 1
-       // field[2] m.Route.NPaths
-       size += 1
-       // field[2] m.Route.Paths
+       size += 1      // m.IsAdd
+       size += 1      // m.IsMultipath
+       size += 4      // m.Route.TableID
+       size += 4      // m.Route.StatsIndex
+       size += 4      // m.Route.Prefix.Address.Af
+       size += 1 * 16 // m.Route.Prefix.Address.Un
+       size += 1      // m.Route.Prefix.Len
+       size += 1      // m.Route.NPaths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
                var s2 FibPath
                _ = s2
                if j2 < len(m.Route.Paths) {
                        s2 = m.Route.Paths[j2]
                }
-               // field[3] s2.SwIfIndex
-               size += 4
-               // field[3] s2.TableID
-               size += 4
-               // field[3] s2.RpfID
-               size += 4
-               // field[3] s2.Weight
-               size += 1
-               // field[3] s2.Preference
-               size += 1
-               // field[3] s2.Type
-               size += 4
-               // field[3] s2.Flags
-               size += 4
-               // field[3] s2.Proto
-               size += 4
-               // field[3] s2.Nh
-               // field[4] s2.Nh.Address
-               size += 16
-               // field[4] s2.Nh.ViaLabel
-               size += 4
-               // field[4] s2.Nh.ObjID
-               size += 4
-               // field[4] s2.Nh.ClassifyTableIndex
-               size += 4
-               // field[3] s2.NLabels
-               size += 1
-               // field[3] s2.LabelStack
+               size += 4      // s2.SwIfIndex
+               size += 4      // s2.TableID
+               size += 4      // s2.RpfID
+               size += 1      // s2.Weight
+               size += 1      // s2.Preference
+               size += 4      // s2.Type
+               size += 4      // s2.Flags
+               size += 4      // s2.Proto
+               size += 1 * 16 // s2.Nh.Address
+               size += 4      // s2.Nh.ViaLabel
+               size += 4      // s2.Nh.ObjID
+               size += 4      // s2.Nh.ClassifyTableIndex
+               size += 1      // s2.NLabels
                for j3 := 0; j3 < 16; j3++ {
-                       var s3 FibMplsLabel
-                       _ = s3
-                       if j3 < len(s2.LabelStack) {
-                               s3 = s2.LabelStack[j3]
-                       }
-                       // field[4] s3.IsUniform
-                       size += 1
-                       // field[4] s3.Label
-                       size += 4
-                       // field[4] s3.TTL
-                       size += 1
-                       // field[4] s3.Exp
-                       size += 1
+                       size += 1 // s2.LabelStack[j3].IsUniform
+                       size += 4 // s2.LabelStack[j3].Label
+                       size += 1 // s2.LabelStack[j3].TTL
+                       size += 1 // s2.LabelStack[j3].Exp
                }
        }
        return size
 }
 func (m *IPRouteAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.IsMultipath
-       if m.IsMultipath {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.TableID))
-       pos += 4
-       // field[2] m.Route.StatsIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.StatsIndex))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Address
-       // field[4] m.Route.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Address.Af))
-       pos += 4
-       // field[4] m.Route.Prefix.Address.Un
-       copy(buf[pos:pos+16], m.Route.Prefix.Address.Un.XXX_UnionData[:])
-       pos += 16
-       // field[3] m.Route.Prefix.Len
-       buf[pos] = uint8(m.Route.Prefix.Len)
-       pos += 1
-       // field[2] m.Route.NPaths
-       buf[pos] = uint8(len(m.Route.Paths))
-       pos += 1
-       // field[2] m.Route.Paths
-       for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var v2 FibPath
-               if j2 < len(m.Route.Paths) {
-                       v2 = m.Route.Paths[j2]
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeBool(m.IsMultipath)
+       buf.EncodeUint32(m.Route.TableID)
+       buf.EncodeUint32(m.Route.StatsIndex)
+       buf.EncodeUint32(uint32(m.Route.Prefix.Address.Af))
+       buf.EncodeBytes(m.Route.Prefix.Address.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(m.Route.Prefix.Len)
+       buf.EncodeUint8(uint8(len(m.Route.Paths)))
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               var v1 FibPath // Paths
+               if j1 < len(m.Route.Paths) {
+                       v1 = m.Route.Paths[j1]
                }
-               // field[3] v2.SwIfIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.SwIfIndex))
-               pos += 4
-               // field[3] v2.TableID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.TableID))
-               pos += 4
-               // field[3] v2.RpfID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.RpfID))
-               pos += 4
-               // field[3] v2.Weight
-               buf[pos] = uint8(v2.Weight)
-               pos += 1
-               // field[3] v2.Preference
-               buf[pos] = uint8(v2.Preference)
-               pos += 1
-               // field[3] v2.Type
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Type))
-               pos += 4
-               // field[3] v2.Flags
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Flags))
-               pos += 4
-               // field[3] v2.Proto
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Proto))
-               pos += 4
-               // field[3] v2.Nh
-               // field[4] v2.Nh.Address
-               copy(buf[pos:pos+16], v2.Nh.Address.XXX_UnionData[:])
-               pos += 16
-               // field[4] v2.Nh.ViaLabel
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ViaLabel))
-               pos += 4
-               // field[4] v2.Nh.ObjID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ObjID))
-               pos += 4
-               // field[4] v2.Nh.ClassifyTableIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ClassifyTableIndex))
-               pos += 4
-               // field[3] v2.NLabels
-               buf[pos] = uint8(v2.NLabels)
-               pos += 1
-               // field[3] v2.LabelStack
-               for j3 := 0; j3 < 16; j3++ {
-                       var v3 FibMplsLabel
-                       if j3 < len(v2.LabelStack) {
-                               v3 = v2.LabelStack[j3]
-                       }
-                       // field[4] v3.IsUniform
-                       buf[pos] = uint8(v3.IsUniform)
-                       pos += 1
-                       // field[4] v3.Label
-                       o.PutUint32(buf[pos:pos+4], uint32(v3.Label))
-                       pos += 4
-                       // field[4] v3.TTL
-                       buf[pos] = uint8(v3.TTL)
-                       pos += 1
-                       // field[4] v3.Exp
-                       buf[pos] = uint8(v3.Exp)
-                       pos += 1
+               buf.EncodeUint32(v1.SwIfIndex)
+               buf.EncodeUint32(v1.TableID)
+               buf.EncodeUint32(v1.RpfID)
+               buf.EncodeUint8(v1.Weight)
+               buf.EncodeUint8(v1.Preference)
+               buf.EncodeUint32(uint32(v1.Type))
+               buf.EncodeUint32(uint32(v1.Flags))
+               buf.EncodeUint32(uint32(v1.Proto))
+               buf.EncodeBytes(v1.Nh.Address.XXX_UnionData[:], 16)
+               buf.EncodeUint32(v1.Nh.ViaLabel)
+               buf.EncodeUint32(v1.Nh.ObjID)
+               buf.EncodeUint32(v1.Nh.ClassifyTableIndex)
+               buf.EncodeUint8(v1.NLabels)
+               for j2 := 0; j2 < 16; j2++ {
+                       buf.EncodeUint8(v1.LabelStack[j2].IsUniform)
+                       buf.EncodeUint32(v1.LabelStack[j2].Label)
+                       buf.EncodeUint8(v1.LabelStack[j2].TTL)
+                       buf.EncodeUint8(v1.LabelStack[j2].Exp)
                }
        }
-       return buf, nil
-}
-func (m *IPRouteAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.IsMultipath
-       m.IsMultipath = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       m.Route.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.StatsIndex
-       m.Route.StatsIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Address
-       // field[4] m.Route.Prefix.Address.Af
-       m.Route.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[4] m.Route.Prefix.Address.Un
-       copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[3] m.Route.Prefix.Len
-       m.Route.Prefix.Len = uint8(tmp[pos])
-       pos += 1
-       // field[2] m.Route.NPaths
-       m.Route.NPaths = uint8(tmp[pos])
-       pos += 1
-       // field[2] m.Route.Paths
-       m.Route.Paths = make([]FibPath, int(m.Route.NPaths))
-       for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
-               // field[3] m.Route.Paths[j2].SwIfIndex
-               m.Route.Paths[j2].SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].TableID
-               m.Route.Paths[j2].TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].RpfID
-               m.Route.Paths[j2].RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Weight
-               m.Route.Paths[j2].Weight = uint8(tmp[pos])
-               pos += 1
-               // field[3] m.Route.Paths[j2].Preference
-               m.Route.Paths[j2].Preference = uint8(tmp[pos])
-               pos += 1
-               // field[3] m.Route.Paths[j2].Type
-               m.Route.Paths[j2].Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Flags
-               m.Route.Paths[j2].Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Proto
-               m.Route.Paths[j2].Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Nh
-               // field[4] m.Route.Paths[j2].Nh.Address
-               copy(m.Route.Paths[j2].Nh.Address.XXX_UnionData[:], tmp[pos:pos+16])
-               pos += 16
-               // field[4] m.Route.Paths[j2].Nh.ViaLabel
-               m.Route.Paths[j2].Nh.ViaLabel = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Nh.ObjID
-               m.Route.Paths[j2].Nh.ObjID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Nh.ClassifyTableIndex
-               m.Route.Paths[j2].Nh.ClassifyTableIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].NLabels
-               m.Route.Paths[j2].NLabels = uint8(tmp[pos])
-               pos += 1
-               // field[3] m.Route.Paths[j2].LabelStack
-               for j3 := 0; j3 < 16; j3++ {
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].IsUniform
-                       m.Route.Paths[j2].LabelStack[j3].IsUniform = uint8(tmp[pos])
-                       pos += 1
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].Label
-                       m.Route.Paths[j2].LabelStack[j3].Label = uint32(o.Uint32(tmp[pos : pos+4]))
-                       pos += 4
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].TTL
-                       m.Route.Paths[j2].LabelStack[j3].TTL = uint8(tmp[pos])
-                       pos += 1
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].Exp
-                       m.Route.Paths[j2].LabelStack[j3].Exp = uint8(tmp[pos])
-                       pos += 1
+       return buf.Bytes(), nil
+}
+func (m *IPRouteAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.IsMultipath = buf.DecodeBool()
+       m.Route.TableID = buf.DecodeUint32()
+       m.Route.StatsIndex = buf.DecodeUint32()
+       m.Route.Prefix.Address.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Route.Prefix.Len = buf.DecodeUint8()
+       m.Route.NPaths = buf.DecodeUint8()
+       m.Route.Paths = make([]FibPath, m.Route.NPaths)
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               m.Route.Paths[j1].SwIfIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].TableID = buf.DecodeUint32()
+               m.Route.Paths[j1].RpfID = buf.DecodeUint32()
+               m.Route.Paths[j1].Weight = buf.DecodeUint8()
+               m.Route.Paths[j1].Preference = buf.DecodeUint8()
+               m.Route.Paths[j1].Type = FibPathType(buf.DecodeUint32())
+               m.Route.Paths[j1].Flags = FibPathFlags(buf.DecodeUint32())
+               m.Route.Paths[j1].Proto = FibPathNhProto(buf.DecodeUint32())
+               copy(m.Route.Paths[j1].Nh.Address.XXX_UnionData[:], buf.DecodeBytes(16))
+               m.Route.Paths[j1].Nh.ViaLabel = buf.DecodeUint32()
+               m.Route.Paths[j1].Nh.ObjID = buf.DecodeUint32()
+               m.Route.Paths[j1].Nh.ClassifyTableIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].NLabels = buf.DecodeUint8()
+               for j2 := 0; j2 < 16; j2++ {
+                       m.Route.Paths[j1].LabelStack[j2].IsUniform = buf.DecodeUint8()
+                       m.Route.Paths[j1].LabelStack[j2].Label = buf.DecodeUint32()
+                       m.Route.Paths[j1].LabelStack[j2].TTL = buf.DecodeUint8()
+                       m.Route.Paths[j1].LabelStack[j2].Exp = buf.DecodeUint8()
                }
        }
        return nil
 }
 
-// IPRouteAddDelReply represents VPP binary API message 'ip_route_add_del_reply'.
+// IPRouteAddDelReply defines message 'ip_route_add_del_reply'.
 type IPRouteAddDelReply struct {
        Retval     int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
        StatsIndex uint32 `binapi:"u32,name=stats_index" json:"stats_index,omitempty"`
 }
 
-func (m *IPRouteAddDelReply) Reset()                        { *m = IPRouteAddDelReply{} }
-func (*IPRouteAddDelReply) GetMessageName() string          { return "ip_route_add_del_reply" }
-func (*IPRouteAddDelReply) GetCrcString() string            { return "1992deab" }
-func (*IPRouteAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPRouteAddDelReply) Reset()               { *m = IPRouteAddDelReply{} }
+func (*IPRouteAddDelReply) GetMessageName() string { return "ip_route_add_del_reply" }
+func (*IPRouteAddDelReply) GetCrcString() string   { return "1992deab" }
+func (*IPRouteAddDelReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPRouteAddDelReply) Size() int {
+func (m *IPRouteAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
-       // field[1] m.StatsIndex
-       size += 4
+       size += 4 // m.Retval
+       size += 4 // m.StatsIndex
        return size
 }
 func (m *IPRouteAddDelReply) 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.StatsIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.StatsIndex))
-       pos += 4
-       return buf, nil
-}
-func (m *IPRouteAddDelReply) 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.StatsIndex
-       m.StatsIndex = 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.StatsIndex)
+       return buf.Bytes(), nil
+}
+func (m *IPRouteAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
+       m.StatsIndex = buf.DecodeUint32()
        return nil
 }
 
-// IPRouteDetails represents VPP binary API message 'ip_route_details'.
+// IPRouteDetails defines message 'ip_route_details'.
 type IPRouteDetails struct {
        Route IPRoute `binapi:"ip_route,name=route" json:"route,omitempty"`
 }
 
-func (m *IPRouteDetails) Reset()                        { *m = IPRouteDetails{} }
-func (*IPRouteDetails) GetMessageName() string          { return "ip_route_details" }
-func (*IPRouteDetails) GetCrcString() string            { return "d1ffaae1" }
-func (*IPRouteDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPRouteDetails) Reset()               { *m = IPRouteDetails{} }
+func (*IPRouteDetails) GetMessageName() string { return "ip_route_details" }
+func (*IPRouteDetails) GetCrcString() string   { return "d1ffaae1" }
+func (*IPRouteDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPRouteDetails) Size() int {
+func (m *IPRouteDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       size += 4
-       // field[2] m.Route.StatsIndex
-       size += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Address
-       // field[4] m.Route.Prefix.Address.Af
-       size += 4
-       // field[4] m.Route.Prefix.Address.Un
-       size += 16
-       // field[3] m.Route.Prefix.Len
-       size += 1
-       // field[2] m.Route.NPaths
-       size += 1
-       // field[2] m.Route.Paths
+       size += 4      // m.Route.TableID
+       size += 4      // m.Route.StatsIndex
+       size += 4      // m.Route.Prefix.Address.Af
+       size += 1 * 16 // m.Route.Prefix.Address.Un
+       size += 1      // m.Route.Prefix.Len
+       size += 1      // m.Route.NPaths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
                var s2 FibPath
                _ = s2
                if j2 < len(m.Route.Paths) {
                        s2 = m.Route.Paths[j2]
                }
-               // field[3] s2.SwIfIndex
-               size += 4
-               // field[3] s2.TableID
-               size += 4
-               // field[3] s2.RpfID
-               size += 4
-               // field[3] s2.Weight
-               size += 1
-               // field[3] s2.Preference
-               size += 1
-               // field[3] s2.Type
-               size += 4
-               // field[3] s2.Flags
-               size += 4
-               // field[3] s2.Proto
-               size += 4
-               // field[3] s2.Nh
-               // field[4] s2.Nh.Address
-               size += 16
-               // field[4] s2.Nh.ViaLabel
-               size += 4
-               // field[4] s2.Nh.ObjID
-               size += 4
-               // field[4] s2.Nh.ClassifyTableIndex
-               size += 4
-               // field[3] s2.NLabels
-               size += 1
-               // field[3] s2.LabelStack
+               size += 4      // s2.SwIfIndex
+               size += 4      // s2.TableID
+               size += 4      // s2.RpfID
+               size += 1      // s2.Weight
+               size += 1      // s2.Preference
+               size += 4      // s2.Type
+               size += 4      // s2.Flags
+               size += 4      // s2.Proto
+               size += 1 * 16 // s2.Nh.Address
+               size += 4      // s2.Nh.ViaLabel
+               size += 4      // s2.Nh.ObjID
+               size += 4      // s2.Nh.ClassifyTableIndex
+               size += 1      // s2.NLabels
                for j3 := 0; j3 < 16; j3++ {
-                       var s3 FibMplsLabel
-                       _ = s3
-                       if j3 < len(s2.LabelStack) {
-                               s3 = s2.LabelStack[j3]
-                       }
-                       // field[4] s3.IsUniform
-                       size += 1
-                       // field[4] s3.Label
-                       size += 4
-                       // field[4] s3.TTL
-                       size += 1
-                       // field[4] s3.Exp
-                       size += 1
+                       size += 1 // s2.LabelStack[j3].IsUniform
+                       size += 4 // s2.LabelStack[j3].Label
+                       size += 1 // s2.LabelStack[j3].TTL
+                       size += 1 // s2.LabelStack[j3].Exp
                }
        }
        return size
 }
 func (m *IPRouteDetails) 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.Route
-       // field[2] m.Route.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.TableID))
-       pos += 4
-       // field[2] m.Route.StatsIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.StatsIndex))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Address
-       // field[4] m.Route.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Address.Af))
-       pos += 4
-       // field[4] m.Route.Prefix.Address.Un
-       copy(buf[pos:pos+16], m.Route.Prefix.Address.Un.XXX_UnionData[:])
-       pos += 16
-       // field[3] m.Route.Prefix.Len
-       buf[pos] = uint8(m.Route.Prefix.Len)
-       pos += 1
-       // field[2] m.Route.NPaths
-       buf[pos] = uint8(len(m.Route.Paths))
-       pos += 1
-       // field[2] m.Route.Paths
-       for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var v2 FibPath
-               if j2 < len(m.Route.Paths) {
-                       v2 = m.Route.Paths[j2]
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Route.TableID)
+       buf.EncodeUint32(m.Route.StatsIndex)
+       buf.EncodeUint32(uint32(m.Route.Prefix.Address.Af))
+       buf.EncodeBytes(m.Route.Prefix.Address.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(m.Route.Prefix.Len)
+       buf.EncodeUint8(uint8(len(m.Route.Paths)))
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               var v1 FibPath // Paths
+               if j1 < len(m.Route.Paths) {
+                       v1 = m.Route.Paths[j1]
                }
-               // field[3] v2.SwIfIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.SwIfIndex))
-               pos += 4
-               // field[3] v2.TableID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.TableID))
-               pos += 4
-               // field[3] v2.RpfID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.RpfID))
-               pos += 4
-               // field[3] v2.Weight
-               buf[pos] = uint8(v2.Weight)
-               pos += 1
-               // field[3] v2.Preference
-               buf[pos] = uint8(v2.Preference)
-               pos += 1
-               // field[3] v2.Type
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Type))
-               pos += 4
-               // field[3] v2.Flags
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Flags))
-               pos += 4
-               // field[3] v2.Proto
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Proto))
-               pos += 4
-               // field[3] v2.Nh
-               // field[4] v2.Nh.Address
-               copy(buf[pos:pos+16], v2.Nh.Address.XXX_UnionData[:])
-               pos += 16
-               // field[4] v2.Nh.ViaLabel
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ViaLabel))
-               pos += 4
-               // field[4] v2.Nh.ObjID
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ObjID))
-               pos += 4
-               // field[4] v2.Nh.ClassifyTableIndex
-               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ClassifyTableIndex))
-               pos += 4
-               // field[3] v2.NLabels
-               buf[pos] = uint8(v2.NLabels)
-               pos += 1
-               // field[3] v2.LabelStack
-               for j3 := 0; j3 < 16; j3++ {
-                       var v3 FibMplsLabel
-                       if j3 < len(v2.LabelStack) {
-                               v3 = v2.LabelStack[j3]
-                       }
-                       // field[4] v3.IsUniform
-                       buf[pos] = uint8(v3.IsUniform)
-                       pos += 1
-                       // field[4] v3.Label
-                       o.PutUint32(buf[pos:pos+4], uint32(v3.Label))
-                       pos += 4
-                       // field[4] v3.TTL
-                       buf[pos] = uint8(v3.TTL)
-                       pos += 1
-                       // field[4] v3.Exp
-                       buf[pos] = uint8(v3.Exp)
-                       pos += 1
+               buf.EncodeUint32(v1.SwIfIndex)
+               buf.EncodeUint32(v1.TableID)
+               buf.EncodeUint32(v1.RpfID)
+               buf.EncodeUint8(v1.Weight)
+               buf.EncodeUint8(v1.Preference)
+               buf.EncodeUint32(uint32(v1.Type))
+               buf.EncodeUint32(uint32(v1.Flags))
+               buf.EncodeUint32(uint32(v1.Proto))
+               buf.EncodeBytes(v1.Nh.Address.XXX_UnionData[:], 16)
+               buf.EncodeUint32(v1.Nh.ViaLabel)
+               buf.EncodeUint32(v1.Nh.ObjID)
+               buf.EncodeUint32(v1.Nh.ClassifyTableIndex)
+               buf.EncodeUint8(v1.NLabels)
+               for j2 := 0; j2 < 16; j2++ {
+                       buf.EncodeUint8(v1.LabelStack[j2].IsUniform)
+                       buf.EncodeUint32(v1.LabelStack[j2].Label)
+                       buf.EncodeUint8(v1.LabelStack[j2].TTL)
+                       buf.EncodeUint8(v1.LabelStack[j2].Exp)
                }
        }
-       return buf, nil
-}
-func (m *IPRouteDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Route
-       // field[2] m.Route.TableID
-       m.Route.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.StatsIndex
-       m.Route.StatsIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Route.Prefix
-       // field[3] m.Route.Prefix.Address
-       // field[4] m.Route.Prefix.Address.Af
-       m.Route.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[4] m.Route.Prefix.Address.Un
-       copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[3] m.Route.Prefix.Len
-       m.Route.Prefix.Len = uint8(tmp[pos])
-       pos += 1
-       // field[2] m.Route.NPaths
-       m.Route.NPaths = uint8(tmp[pos])
-       pos += 1
-       // field[2] m.Route.Paths
-       m.Route.Paths = make([]FibPath, int(m.Route.NPaths))
-       for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
-               // field[3] m.Route.Paths[j2].SwIfIndex
-               m.Route.Paths[j2].SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].TableID
-               m.Route.Paths[j2].TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].RpfID
-               m.Route.Paths[j2].RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Weight
-               m.Route.Paths[j2].Weight = uint8(tmp[pos])
-               pos += 1
-               // field[3] m.Route.Paths[j2].Preference
-               m.Route.Paths[j2].Preference = uint8(tmp[pos])
-               pos += 1
-               // field[3] m.Route.Paths[j2].Type
-               m.Route.Paths[j2].Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Flags
-               m.Route.Paths[j2].Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Proto
-               m.Route.Paths[j2].Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].Nh
-               // field[4] m.Route.Paths[j2].Nh.Address
-               copy(m.Route.Paths[j2].Nh.Address.XXX_UnionData[:], tmp[pos:pos+16])
-               pos += 16
-               // field[4] m.Route.Paths[j2].Nh.ViaLabel
-               m.Route.Paths[j2].Nh.ViaLabel = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Nh.ObjID
-               m.Route.Paths[j2].Nh.ObjID = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[4] m.Route.Paths[j2].Nh.ClassifyTableIndex
-               m.Route.Paths[j2].Nh.ClassifyTableIndex = uint32(o.Uint32(tmp[pos : pos+4]))
-               pos += 4
-               // field[3] m.Route.Paths[j2].NLabels
-               m.Route.Paths[j2].NLabels = uint8(tmp[pos])
-               pos += 1
-               // field[3] m.Route.Paths[j2].LabelStack
-               for j3 := 0; j3 < 16; j3++ {
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].IsUniform
-                       m.Route.Paths[j2].LabelStack[j3].IsUniform = uint8(tmp[pos])
-                       pos += 1
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].Label
-                       m.Route.Paths[j2].LabelStack[j3].Label = uint32(o.Uint32(tmp[pos : pos+4]))
-                       pos += 4
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].TTL
-                       m.Route.Paths[j2].LabelStack[j3].TTL = uint8(tmp[pos])
-                       pos += 1
-                       // field[4] m.Route.Paths[j2].LabelStack[j3].Exp
-                       m.Route.Paths[j2].LabelStack[j3].Exp = uint8(tmp[pos])
-                       pos += 1
+       return buf.Bytes(), nil
+}
+func (m *IPRouteDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Route.TableID = buf.DecodeUint32()
+       m.Route.StatsIndex = buf.DecodeUint32()
+       m.Route.Prefix.Address.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Route.Prefix.Len = buf.DecodeUint8()
+       m.Route.NPaths = buf.DecodeUint8()
+       m.Route.Paths = make([]FibPath, m.Route.NPaths)
+       for j1 := 0; j1 < len(m.Route.Paths); j1++ {
+               m.Route.Paths[j1].SwIfIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].TableID = buf.DecodeUint32()
+               m.Route.Paths[j1].RpfID = buf.DecodeUint32()
+               m.Route.Paths[j1].Weight = buf.DecodeUint8()
+               m.Route.Paths[j1].Preference = buf.DecodeUint8()
+               m.Route.Paths[j1].Type = FibPathType(buf.DecodeUint32())
+               m.Route.Paths[j1].Flags = FibPathFlags(buf.DecodeUint32())
+               m.Route.Paths[j1].Proto = FibPathNhProto(buf.DecodeUint32())
+               copy(m.Route.Paths[j1].Nh.Address.XXX_UnionData[:], buf.DecodeBytes(16))
+               m.Route.Paths[j1].Nh.ViaLabel = buf.DecodeUint32()
+               m.Route.Paths[j1].Nh.ObjID = buf.DecodeUint32()
+               m.Route.Paths[j1].Nh.ClassifyTableIndex = buf.DecodeUint32()
+               m.Route.Paths[j1].NLabels = buf.DecodeUint8()
+               for j2 := 0; j2 < 16; j2++ {
+                       m.Route.Paths[j1].LabelStack[j2].IsUniform = buf.DecodeUint8()
+                       m.Route.Paths[j1].LabelStack[j2].Label = buf.DecodeUint32()
+                       m.Route.Paths[j1].LabelStack[j2].TTL = buf.DecodeUint8()
+                       m.Route.Paths[j1].LabelStack[j2].Exp = buf.DecodeUint8()
                }
        }
        return nil
 }
 
-// IPRouteDump represents VPP binary API message 'ip_route_dump'.
+// IPRouteDump defines message 'ip_route_dump'.
 type IPRouteDump struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPRouteDump) Reset()                        { *m = IPRouteDump{} }
-func (*IPRouteDump) GetMessageName() string          { return "ip_route_dump" }
-func (*IPRouteDump) GetCrcString() string            { return "b9d2e09e" }
-func (*IPRouteDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPRouteDump) Reset()               { *m = IPRouteDump{} }
+func (*IPRouteDump) GetMessageName() string { return "ip_route_dump" }
+func (*IPRouteDump) GetCrcString() string   { return "b9d2e09e" }
+func (*IPRouteDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPRouteDump) Size() int {
+func (m *IPRouteDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPRouteDump) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPRouteDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPRouteDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPSourceAndPortRangeCheckAddDel represents VPP binary API message 'ip_source_and_port_range_check_add_del'.
+// IPSourceAndPortRangeCheckAddDel defines message 'ip_source_and_port_range_check_add_del'.
 type IPSourceAndPortRangeCheckAddDel struct {
        IsAdd          bool     `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        Prefix         Prefix   `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
        NumberOfRanges uint8    `binapi:"u8,name=number_of_ranges" json:"number_of_ranges,omitempty"`
-       LowPorts       []uint16 `binapi:"u16[32],name=low_ports" json:"low_ports,omitempty" struc:"[32]uint16"`
-       HighPorts      []uint16 `binapi:"u16[32],name=high_ports" json:"high_ports,omitempty" struc:"[32]uint16"`
+       LowPorts       []uint16 `binapi:"u16[32],name=low_ports" json:"low_ports,omitempty"`
+       HighPorts      []uint16 `binapi:"u16[32],name=high_ports" json:"high_ports,omitempty"`
        VrfID          uint32   `binapi:"u32,name=vrf_id" json:"vrf_id,omitempty"`
 }
 
@@ -3910,128 +2868,72 @@ func (m *IPSourceAndPortRangeCheckAddDel) Reset() { *m = IPSourceAndPortRangeChe
 func (*IPSourceAndPortRangeCheckAddDel) GetMessageName() string {
        return "ip_source_and_port_range_check_add_del"
 }
-func (*IPSourceAndPortRangeCheckAddDel) GetCrcString() string            { return "8bfc76f2" }
-func (*IPSourceAndPortRangeCheckAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
+func (*IPSourceAndPortRangeCheckAddDel) GetCrcString() string { return "8bfc76f2" }
+func (*IPSourceAndPortRangeCheckAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPSourceAndPortRangeCheckAddDel) Size() int {
+func (m *IPSourceAndPortRangeCheckAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       size += 4
-       // field[3] m.Prefix.Address.Un
-       size += 16
-       // field[2] m.Prefix.Len
-       size += 1
-       // field[1] m.NumberOfRanges
-       size += 1
-       // field[1] m.LowPorts
-       size += 64
-       // field[1] m.HighPorts
-       size += 64
-       // field[1] m.VrfID
-       size += 4
+       size += 1      // m.IsAdd
+       size += 4      // m.Prefix.Address.Af
+       size += 1 * 16 // m.Prefix.Address.Un
+       size += 1      // m.Prefix.Len
+       size += 1      // m.NumberOfRanges
+       size += 2 * 32 // m.LowPorts
+       size += 2 * 32 // m.HighPorts
+       size += 4      // m.VrfID
        return size
 }
 func (m *IPSourceAndPortRangeCheckAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Prefix.Address.Af))
-       pos += 4
-       // field[3] m.Prefix.Address.Un
-       copy(buf[pos:pos+16], m.Prefix.Address.Un.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Prefix.Len
-       buf[pos] = uint8(m.Prefix.Len)
-       pos += 1
-       // field[1] m.NumberOfRanges
-       buf[pos] = uint8(m.NumberOfRanges)
-       pos += 1
-       // field[1] m.LowPorts
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeUint32(uint32(m.Prefix.Address.Af))
+       buf.EncodeBytes(m.Prefix.Address.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(m.Prefix.Len)
+       buf.EncodeUint8(m.NumberOfRanges)
        for i := 0; i < 32; i++ {
                var x uint16
                if i < len(m.LowPorts) {
                        x = uint16(m.LowPorts[i])
                }
-               o.PutUint16(buf[pos:pos+2], uint16(x))
-               pos += 2
+               buf.EncodeUint16(x)
        }
-       // field[1] m.HighPorts
        for i := 0; i < 32; i++ {
                var x uint16
                if i < len(m.HighPorts) {
                        x = uint16(m.HighPorts[i])
                }
-               o.PutUint16(buf[pos:pos+2], uint16(x))
-               pos += 2
-       }
-       // field[1] m.VrfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.VrfID))
-       pos += 4
-       return buf, nil
-}
-func (m *IPSourceAndPortRangeCheckAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Address
-       // field[3] m.Prefix.Address.Af
-       m.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[3] m.Prefix.Address.Un
-       copy(m.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Prefix.Len
-       m.Prefix.Len = uint8(tmp[pos])
-       pos += 1
-       // field[1] m.NumberOfRanges
-       m.NumberOfRanges = uint8(tmp[pos])
-       pos += 1
-       // field[1] m.LowPorts
+               buf.EncodeUint16(x)
+       }
+       buf.EncodeUint32(m.VrfID)
+       return buf.Bytes(), nil
+}
+func (m *IPSourceAndPortRangeCheckAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.Prefix.Address.Af = AddressFamily(buf.DecodeUint32())
+       copy(m.Prefix.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Prefix.Len = buf.DecodeUint8()
+       m.NumberOfRanges = buf.DecodeUint8()
        m.LowPorts = make([]uint16, 32)
        for i := 0; i < len(m.LowPorts); i++ {
-               m.LowPorts[i] = uint16(o.Uint16(tmp[pos : pos+2]))
-               pos += 2
+               m.LowPorts[i] = buf.DecodeUint16()
        }
-       // field[1] m.HighPorts
        m.HighPorts = make([]uint16, 32)
        for i := 0; i < len(m.HighPorts); i++ {
-               m.HighPorts[i] = uint16(o.Uint16(tmp[pos : pos+2]))
-               pos += 2
+               m.HighPorts[i] = buf.DecodeUint16()
        }
-       // field[1] m.VrfID
-       m.VrfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.VrfID = buf.DecodeUint32()
        return nil
 }
 
-// IPSourceAndPortRangeCheckAddDelReply represents VPP binary API message 'ip_source_and_port_range_check_add_del_reply'.
+// IPSourceAndPortRangeCheckAddDelReply defines message 'ip_source_and_port_range_check_add_del_reply'.
 type IPSourceAndPortRangeCheckAddDelReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -4045,43 +2947,28 @@ func (*IPSourceAndPortRangeCheckAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IPSourceAndPortRangeCheckAddDelReply) Size() int {
+func (m *IPSourceAndPortRangeCheckAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPSourceAndPortRangeCheckAddDelReply) 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
-       return buf, nil
-}
-func (m *IPSourceAndPortRangeCheckAddDelReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPSourceAndPortRangeCheckAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPSourceAndPortRangeCheckInterfaceAddDel represents VPP binary API message 'ip_source_and_port_range_check_interface_add_del'.
+// IPSourceAndPortRangeCheckInterfaceAddDel defines message 'ip_source_and_port_range_check_interface_add_del'.
 type IPSourceAndPortRangeCheckInterfaceAddDel struct {
        IsAdd       bool           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        SwIfIndex   InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
@@ -4102,85 +2989,43 @@ func (*IPSourceAndPortRangeCheckInterfaceAddDel) GetMessageType() api.MessageTyp
        return api.RequestMessage
 }
 
-func (m *IPSourceAndPortRangeCheckInterfaceAddDel) Size() int {
+func (m *IPSourceAndPortRangeCheckInterfaceAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.TCPInVrfID
-       size += 4
-       // field[1] m.TCPOutVrfID
-       size += 4
-       // field[1] m.UDPInVrfID
-       size += 4
-       // field[1] m.UDPOutVrfID
-       size += 4
+       size += 1 // m.IsAdd
+       size += 4 // m.SwIfIndex
+       size += 4 // m.TCPInVrfID
+       size += 4 // m.TCPOutVrfID
+       size += 4 // m.UDPInVrfID
+       size += 4 // m.UDPOutVrfID
        return size
 }
 func (m *IPSourceAndPortRangeCheckInterfaceAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.TCPInVrfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.TCPInVrfID))
-       pos += 4
-       // field[1] m.TCPOutVrfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.TCPOutVrfID))
-       pos += 4
-       // field[1] m.UDPInVrfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.UDPInVrfID))
-       pos += 4
-       // field[1] m.UDPOutVrfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.UDPOutVrfID))
-       pos += 4
-       return buf, nil
-}
-func (m *IPSourceAndPortRangeCheckInterfaceAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.TCPInVrfID
-       m.TCPInVrfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.TCPOutVrfID
-       m.TCPOutVrfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.UDPInVrfID
-       m.UDPInVrfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.UDPOutVrfID
-       m.UDPOutVrfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(m.TCPInVrfID)
+       buf.EncodeUint32(m.TCPOutVrfID)
+       buf.EncodeUint32(m.UDPInVrfID)
+       buf.EncodeUint32(m.UDPOutVrfID)
+       return buf.Bytes(), nil
+}
+func (m *IPSourceAndPortRangeCheckInterfaceAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.TCPInVrfID = buf.DecodeUint32()
+       m.TCPOutVrfID = buf.DecodeUint32()
+       m.UDPInVrfID = buf.DecodeUint32()
+       m.UDPOutVrfID = buf.DecodeUint32()
        return nil
 }
 
-// IPSourceAndPortRangeCheckInterfaceAddDelReply represents VPP binary API message 'ip_source_and_port_range_check_interface_add_del_reply'.
+// IPSourceAndPortRangeCheckInterfaceAddDelReply defines message 'ip_source_and_port_range_check_interface_add_del_reply'.
 type IPSourceAndPortRangeCheckInterfaceAddDelReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -4196,43 +3041,28 @@ func (*IPSourceAndPortRangeCheckInterfaceAddDelReply) GetMessageType() api.Messa
        return api.ReplyMessage
 }
 
-func (m *IPSourceAndPortRangeCheckInterfaceAddDelReply) Size() int {
+func (m *IPSourceAndPortRangeCheckInterfaceAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPSourceAndPortRangeCheckInterfaceAddDelReply) 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
-       return buf, nil
-}
-func (m *IPSourceAndPortRangeCheckInterfaceAddDelReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPSourceAndPortRangeCheckInterfaceAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPSourceCheckInterfaceAddDel represents VPP binary API message 'ip_source_check_interface_add_del'.
+// IPSourceCheckInterfaceAddDel defines message 'ip_source_check_interface_add_del'.
 type IPSourceCheckInterfaceAddDel struct {
        IsAdd     bool           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        Loose     bool           `binapi:"bool,name=loose" json:"loose,omitempty"`
@@ -4243,66 +3073,39 @@ func (m *IPSourceCheckInterfaceAddDel) Reset() { *m = IPSourceCheckInterfaceAddD
 func (*IPSourceCheckInterfaceAddDel) GetMessageName() string {
        return "ip_source_check_interface_add_del"
 }
-func (*IPSourceCheckInterfaceAddDel) GetCrcString() string            { return "6612356b" }
-func (*IPSourceCheckInterfaceAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
+func (*IPSourceCheckInterfaceAddDel) GetCrcString() string { return "6612356b" }
+func (*IPSourceCheckInterfaceAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPSourceCheckInterfaceAddDel) Size() int {
+func (m *IPSourceCheckInterfaceAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.Loose
-       size += 1
-       // field[1] m.SwIfIndex
-       size += 4
+       size += 1 // m.IsAdd
+       size += 1 // m.Loose
+       size += 4 // m.SwIfIndex
        return size
 }
 func (m *IPSourceCheckInterfaceAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Loose
-       if m.Loose {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       return buf, nil
-}
-func (m *IPSourceCheckInterfaceAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Loose
-       m.Loose = tmp[pos] != 0
-       pos += 1
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeBool(m.Loose)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IPSourceCheckInterfaceAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.Loose = buf.DecodeBool()
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
        return nil
 }
 
-// IPSourceCheckInterfaceAddDelReply represents VPP binary API message 'ip_source_check_interface_add_del_reply'.
+// IPSourceCheckInterfaceAddDelReply defines message 'ip_source_check_interface_add_del_reply'.
 type IPSourceCheckInterfaceAddDelReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -4311,882 +3114,547 @@ func (m *IPSourceCheckInterfaceAddDelReply) Reset() { *m = IPSourceCheckInterfac
 func (*IPSourceCheckInterfaceAddDelReply) GetMessageName() string {
        return "ip_source_check_interface_add_del_reply"
 }
-func (*IPSourceCheckInterfaceAddDelReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPSourceCheckInterfaceAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (*IPSourceCheckInterfaceAddDelReply) GetCrcString() string { return "e8d4e804" }
+func (*IPSourceCheckInterfaceAddDelReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPSourceCheckInterfaceAddDelReply) Size() int {
+func (m *IPSourceCheckInterfaceAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPSourceCheckInterfaceAddDelReply) 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
-       return buf, nil
-}
-func (m *IPSourceCheckInterfaceAddDelReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPSourceCheckInterfaceAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPTableAddDel represents VPP binary API message 'ip_table_add_del'.
+// IPTableAddDel defines message 'ip_table_add_del'.
 type IPTableAddDel struct {
        IsAdd bool    `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPTableAddDel) Reset()                        { *m = IPTableAddDel{} }
-func (*IPTableAddDel) GetMessageName() string          { return "ip_table_add_del" }
-func (*IPTableAddDel) GetCrcString() string            { return "0ffdaec0" }
-func (*IPTableAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPTableAddDel) Reset()               { *m = IPTableAddDel{} }
+func (*IPTableAddDel) GetMessageName() string { return "ip_table_add_del" }
+func (*IPTableAddDel) GetCrcString() string   { return "0ffdaec0" }
+func (*IPTableAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPTableAddDel) Size() int {
+func (m *IPTableAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 1  // m.IsAdd
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPTableAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPTableAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPTableAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPTableAddDelReply represents VPP binary API message 'ip_table_add_del_reply'.
+// IPTableAddDelReply defines message 'ip_table_add_del_reply'.
 type IPTableAddDelReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPTableAddDelReply) Reset()                        { *m = IPTableAddDelReply{} }
-func (*IPTableAddDelReply) GetMessageName() string          { return "ip_table_add_del_reply" }
-func (*IPTableAddDelReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPTableAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPTableAddDelReply) Reset()               { *m = IPTableAddDelReply{} }
+func (*IPTableAddDelReply) GetMessageName() string { return "ip_table_add_del_reply" }
+func (*IPTableAddDelReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPTableAddDelReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPTableAddDelReply) Size() int {
+func (m *IPTableAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPTableAddDelReply) 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
-       return buf, nil
-}
-func (m *IPTableAddDelReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPTableAddDelReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPTableDetails represents VPP binary API message 'ip_table_details'.
+// IPTableDetails defines message 'ip_table_details'.
 type IPTableDetails struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPTableDetails) Reset()                        { *m = IPTableDetails{} }
-func (*IPTableDetails) GetMessageName() string          { return "ip_table_details" }
-func (*IPTableDetails) GetCrcString() string            { return "c79fca0f" }
-func (*IPTableDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPTableDetails) Reset()               { *m = IPTableDetails{} }
+func (*IPTableDetails) GetMessageName() string { return "ip_table_details" }
+func (*IPTableDetails) GetCrcString() string   { return "c79fca0f" }
+func (*IPTableDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPTableDetails) Size() int {
+func (m *IPTableDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPTableDetails) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPTableDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPTableDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPTableDump represents VPP binary API message 'ip_table_dump'.
+// IPTableDump defines message 'ip_table_dump'.
 type IPTableDump struct{}
 
-func (m *IPTableDump) Reset()                        { *m = IPTableDump{} }
-func (*IPTableDump) GetMessageName() string          { return "ip_table_dump" }
-func (*IPTableDump) GetCrcString() string            { return "51077d14" }
-func (*IPTableDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPTableDump) Reset()               { *m = IPTableDump{} }
+func (*IPTableDump) GetMessageName() string { return "ip_table_dump" }
+func (*IPTableDump) GetCrcString() string   { return "51077d14" }
+func (*IPTableDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPTableDump) Size() int {
+func (m *IPTableDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        return size
 }
 func (m *IPTableDump) 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 *IPTableDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
+func (m *IPTableDump) Unmarshal(b []byte) error {
        return nil
 }
 
-// IPTableFlush represents VPP binary API message 'ip_table_flush'.
+// IPTableFlush defines message 'ip_table_flush'.
 type IPTableFlush struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPTableFlush) Reset()                        { *m = IPTableFlush{} }
-func (*IPTableFlush) GetMessageName() string          { return "ip_table_flush" }
-func (*IPTableFlush) GetCrcString() string            { return "b9d2e09e" }
-func (*IPTableFlush) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPTableFlush) Reset()               { *m = IPTableFlush{} }
+func (*IPTableFlush) GetMessageName() string { return "ip_table_flush" }
+func (*IPTableFlush) GetCrcString() string   { return "b9d2e09e" }
+func (*IPTableFlush) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPTableFlush) Size() int {
+func (m *IPTableFlush) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPTableFlush) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPTableFlush) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPTableFlush) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPTableFlushReply represents VPP binary API message 'ip_table_flush_reply'.
+// IPTableFlushReply defines message 'ip_table_flush_reply'.
 type IPTableFlushReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPTableFlushReply) Reset()                        { *m = IPTableFlushReply{} }
-func (*IPTableFlushReply) GetMessageName() string          { return "ip_table_flush_reply" }
-func (*IPTableFlushReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPTableFlushReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPTableFlushReply) Reset()               { *m = IPTableFlushReply{} }
+func (*IPTableFlushReply) GetMessageName() string { return "ip_table_flush_reply" }
+func (*IPTableFlushReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPTableFlushReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPTableFlushReply) Size() int {
+func (m *IPTableFlushReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPTableFlushReply) 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
-       return buf, nil
-}
-func (m *IPTableFlushReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPTableFlushReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPTableReplaceBegin represents VPP binary API message 'ip_table_replace_begin'.
+// IPTableReplaceBegin defines message 'ip_table_replace_begin'.
 type IPTableReplaceBegin struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPTableReplaceBegin) Reset()                        { *m = IPTableReplaceBegin{} }
-func (*IPTableReplaceBegin) GetMessageName() string          { return "ip_table_replace_begin" }
-func (*IPTableReplaceBegin) GetCrcString() string            { return "b9d2e09e" }
-func (*IPTableReplaceBegin) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPTableReplaceBegin) Reset()               { *m = IPTableReplaceBegin{} }
+func (*IPTableReplaceBegin) GetMessageName() string { return "ip_table_replace_begin" }
+func (*IPTableReplaceBegin) GetCrcString() string   { return "b9d2e09e" }
+func (*IPTableReplaceBegin) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPTableReplaceBegin) Size() int {
+func (m *IPTableReplaceBegin) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPTableReplaceBegin) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPTableReplaceBegin) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPTableReplaceBegin) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPTableReplaceBeginReply represents VPP binary API message 'ip_table_replace_begin_reply'.
+// IPTableReplaceBeginReply defines message 'ip_table_replace_begin_reply'.
 type IPTableReplaceBeginReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPTableReplaceBeginReply) Reset()                        { *m = IPTableReplaceBeginReply{} }
-func (*IPTableReplaceBeginReply) GetMessageName() string          { return "ip_table_replace_begin_reply" }
-func (*IPTableReplaceBeginReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPTableReplaceBeginReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPTableReplaceBeginReply) Reset()               { *m = IPTableReplaceBeginReply{} }
+func (*IPTableReplaceBeginReply) GetMessageName() string { return "ip_table_replace_begin_reply" }
+func (*IPTableReplaceBeginReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPTableReplaceBeginReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPTableReplaceBeginReply) Size() int {
+func (m *IPTableReplaceBeginReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPTableReplaceBeginReply) 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
-       return buf, nil
-}
-func (m *IPTableReplaceBeginReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPTableReplaceBeginReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPTableReplaceEnd represents VPP binary API message 'ip_table_replace_end'.
+// IPTableReplaceEnd defines message 'ip_table_replace_end'.
 type IPTableReplaceEnd struct {
        Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"`
 }
 
-func (m *IPTableReplaceEnd) Reset()                        { *m = IPTableReplaceEnd{} }
-func (*IPTableReplaceEnd) GetMessageName() string          { return "ip_table_replace_end" }
-func (*IPTableReplaceEnd) GetCrcString() string            { return "b9d2e09e" }
-func (*IPTableReplaceEnd) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPTableReplaceEnd) Reset()               { *m = IPTableReplaceEnd{} }
+func (*IPTableReplaceEnd) GetMessageName() string { return "ip_table_replace_end" }
+func (*IPTableReplaceEnd) GetCrcString() string   { return "b9d2e09e" }
+func (*IPTableReplaceEnd) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPTableReplaceEnd) Size() int {
+func (m *IPTableReplaceEnd) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       size += 4
-       // field[2] m.Table.IsIP6
-       size += 1
-       // field[2] m.Table.Name
-       size += 64
+       size += 4  // m.Table.TableID
+       size += 1  // m.Table.IsIP6
+       size += 64 // m.Table.Name
        return size
 }
 func (m *IPTableReplaceEnd) 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.Table
-       // field[2] m.Table.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.Table.TableID))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       if m.Table.IsIP6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[2] m.Table.Name
-       copy(buf[pos:pos+64], m.Table.Name)
-       pos += 64
-       return buf, nil
-}
-func (m *IPTableReplaceEnd) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.Table
-       // field[2] m.Table.TableID
-       m.Table.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Table.IsIP6
-       m.Table.IsIP6 = tmp[pos] != 0
-       pos += 1
-       // field[2] m.Table.Name
-       {
-               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
-               m.Table.Name = codec.DecodeString(tmp[pos : pos+nul])
-               pos += 64
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Table.TableID)
+       buf.EncodeBool(m.Table.IsIP6)
+       buf.EncodeString(m.Table.Name, 64)
+       return buf.Bytes(), nil
+}
+func (m *IPTableReplaceEnd) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Table.TableID = buf.DecodeUint32()
+       m.Table.IsIP6 = buf.DecodeBool()
+       m.Table.Name = buf.DecodeString(64)
        return nil
 }
 
-// IPTableReplaceEndReply represents VPP binary API message 'ip_table_replace_end_reply'.
+// IPTableReplaceEndReply defines message 'ip_table_replace_end_reply'.
 type IPTableReplaceEndReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *IPTableReplaceEndReply) Reset()                        { *m = IPTableReplaceEndReply{} }
-func (*IPTableReplaceEndReply) GetMessageName() string          { return "ip_table_replace_end_reply" }
-func (*IPTableReplaceEndReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPTableReplaceEndReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPTableReplaceEndReply) Reset()               { *m = IPTableReplaceEndReply{} }
+func (*IPTableReplaceEndReply) GetMessageName() string { return "ip_table_replace_end_reply" }
+func (*IPTableReplaceEndReply) GetCrcString() string   { return "e8d4e804" }
+func (*IPTableReplaceEndReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPTableReplaceEndReply) Size() int {
+func (m *IPTableReplaceEndReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *IPTableReplaceEndReply) 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
-       return buf, nil
-}
-func (m *IPTableReplaceEndReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IPTableReplaceEndReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// IPUnnumberedDetails represents VPP binary API message 'ip_unnumbered_details'.
+// IPUnnumberedDetails defines message 'ip_unnumbered_details'.
 type IPUnnumberedDetails struct {
        SwIfIndex   InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        IPSwIfIndex InterfaceIndex `binapi:"interface_index,name=ip_sw_if_index" json:"ip_sw_if_index,omitempty"`
 }
 
-func (m *IPUnnumberedDetails) Reset()                        { *m = IPUnnumberedDetails{} }
-func (*IPUnnumberedDetails) GetMessageName() string          { return "ip_unnumbered_details" }
-func (*IPUnnumberedDetails) GetCrcString() string            { return "aa12a483" }
-func (*IPUnnumberedDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *IPUnnumberedDetails) Reset()               { *m = IPUnnumberedDetails{} }
+func (*IPUnnumberedDetails) GetMessageName() string { return "ip_unnumbered_details" }
+func (*IPUnnumberedDetails) GetCrcString() string   { return "aa12a483" }
+func (*IPUnnumberedDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *IPUnnumberedDetails) Size() int {
+func (m *IPUnnumberedDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.IPSwIfIndex
-       size += 4
+       size += 4 // m.SwIfIndex
+       size += 4 // m.IPSwIfIndex
        return size
 }
 func (m *IPUnnumberedDetails) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.IPSwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.IPSwIfIndex))
-       pos += 4
-       return buf, nil
-}
-func (m *IPUnnumberedDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IPSwIfIndex
-       m.IPSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(uint32(m.IPSwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IPUnnumberedDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.IPSwIfIndex = InterfaceIndex(buf.DecodeUint32())
        return nil
 }
 
-// IPUnnumberedDump represents VPP binary API message 'ip_unnumbered_dump'.
+// IPUnnumberedDump defines message 'ip_unnumbered_dump'.
 type IPUnnumberedDump struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
-func (m *IPUnnumberedDump) Reset()                        { *m = IPUnnumberedDump{} }
-func (*IPUnnumberedDump) GetMessageName() string          { return "ip_unnumbered_dump" }
-func (*IPUnnumberedDump) GetCrcString() string            { return "f9e6675e" }
-func (*IPUnnumberedDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *IPUnnumberedDump) Reset()               { *m = IPUnnumberedDump{} }
+func (*IPUnnumberedDump) GetMessageName() string { return "ip_unnumbered_dump" }
+func (*IPUnnumberedDump) GetCrcString() string   { return "f9e6675e" }
+func (*IPUnnumberedDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *IPUnnumberedDump) Size() int {
+func (m *IPUnnumberedDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
+       size += 4 // m.SwIfIndex
        return size
 }
 func (m *IPUnnumberedDump) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       return buf, nil
-}
-func (m *IPUnnumberedDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IPUnnumberedDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
        return nil
 }
 
-// MfibSignalDetails represents VPP binary API message 'mfib_signal_details'.
+// MfibSignalDetails defines message 'mfib_signal_details'.
 type MfibSignalDetails struct {
        SwIfIndex    InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        TableID      uint32         `binapi:"u32,name=table_id" json:"table_id,omitempty"`
        Prefix       Mprefix        `binapi:"mprefix,name=prefix" json:"prefix,omitempty"`
        IPPacketLen  uint16         `binapi:"u16,name=ip_packet_len" json:"ip_packet_len,omitempty"`
-       IPPacketData []byte         `binapi:"u8[256],name=ip_packet_data" json:"ip_packet_data,omitempty" struc:"[256]byte"`
+       IPPacketData []byte         `binapi:"u8[256],name=ip_packet_data" json:"ip_packet_data,omitempty"`
 }
 
-func (m *MfibSignalDetails) Reset()                        { *m = MfibSignalDetails{} }
-func (*MfibSignalDetails) GetMessageName() string          { return "mfib_signal_details" }
-func (*MfibSignalDetails) GetCrcString() string            { return "64398a9a" }
-func (*MfibSignalDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *MfibSignalDetails) Reset()               { *m = MfibSignalDetails{} }
+func (*MfibSignalDetails) GetMessageName() string { return "mfib_signal_details" }
+func (*MfibSignalDetails) GetCrcString() string   { return "64398a9a" }
+func (*MfibSignalDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *MfibSignalDetails) Size() int {
+func (m *MfibSignalDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.TableID
-       size += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Af
-       size += 4
-       // field[2] m.Prefix.GrpAddressLength
-       size += 2
-       // field[2] m.Prefix.GrpAddress
-       size += 16
-       // field[2] m.Prefix.SrcAddress
-       size += 16
-       // field[1] m.IPPacketLen
-       size += 2
-       // field[1] m.IPPacketData
-       size += 256
+       size += 4       // m.SwIfIndex
+       size += 4       // m.TableID
+       size += 4       // m.Prefix.Af
+       size += 2       // m.Prefix.GrpAddressLength
+       size += 1 * 16  // m.Prefix.GrpAddress
+       size += 1 * 16  // m.Prefix.SrcAddress
+       size += 2       // m.IPPacketLen
+       size += 1 * 256 // m.IPPacketData
        return size
 }
 func (m *MfibSignalDetails) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.TableID
-       o.PutUint32(buf[pos:pos+4], uint32(m.TableID))
-       pos += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Prefix.Af))
-       pos += 4
-       // field[2] m.Prefix.GrpAddressLength
-       o.PutUint16(buf[pos:pos+2], uint16(m.Prefix.GrpAddressLength))
-       pos += 2
-       // field[2] m.Prefix.GrpAddress
-       copy(buf[pos:pos+16], m.Prefix.GrpAddress.XXX_UnionData[:])
-       pos += 16
-       // field[2] m.Prefix.SrcAddress
-       copy(buf[pos:pos+16], m.Prefix.SrcAddress.XXX_UnionData[:])
-       pos += 16
-       // field[1] m.IPPacketLen
-       o.PutUint16(buf[pos:pos+2], uint16(m.IPPacketLen))
-       pos += 2
-       // field[1] m.IPPacketData
-       for i := 0; i < 256; i++ {
-               var x uint8
-               if i < len(m.IPPacketData) {
-                       x = uint8(m.IPPacketData[i])
-               }
-               buf[pos] = uint8(x)
-               pos += 1
-       }
-       return buf, nil
-}
-func (m *MfibSignalDetails) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.TableID
-       m.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.Prefix
-       // field[2] m.Prefix.Af
-       m.Prefix.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[2] m.Prefix.GrpAddressLength
-       m.Prefix.GrpAddressLength = uint16(o.Uint16(tmp[pos : pos+2]))
-       pos += 2
-       // field[2] m.Prefix.GrpAddress
-       copy(m.Prefix.GrpAddress.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[2] m.Prefix.SrcAddress
-       copy(m.Prefix.SrcAddress.XXX_UnionData[:], tmp[pos:pos+16])
-       pos += 16
-       // field[1] m.IPPacketLen
-       m.IPPacketLen = uint16(o.Uint16(tmp[pos : pos+2]))
-       pos += 2
-       // field[1] m.IPPacketData
-       m.IPPacketData = make([]uint8, 256)
-       for i := 0; i < len(m.IPPacketData); i++ {
-               m.IPPacketData[i] = uint8(tmp[pos])
-               pos += 1
-       }
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(m.TableID)
+       buf.EncodeUint32(uint32(m.Prefix.Af))
+       buf.EncodeUint16(m.Prefix.GrpAddressLength)
+       buf.EncodeBytes(m.Prefix.GrpAddress.XXX_UnionData[:], 16)
+       buf.EncodeBytes(m.Prefix.SrcAddress.XXX_UnionData[:], 16)
+       buf.EncodeUint16(m.IPPacketLen)
+       buf.EncodeBytes(m.IPPacketData, 256)
+       return buf.Bytes(), nil
+}
+func (m *MfibSignalDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.TableID = buf.DecodeUint32()
+       m.Prefix.Af = AddressFamily(buf.DecodeUint32())
+       m.Prefix.GrpAddressLength = buf.DecodeUint16()
+       copy(m.Prefix.GrpAddress.XXX_UnionData[:], buf.DecodeBytes(16))
+       copy(m.Prefix.SrcAddress.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.IPPacketLen = buf.DecodeUint16()
+       m.IPPacketData = make([]byte, 256)
+       copy(m.IPPacketData, buf.DecodeBytes(len(m.IPPacketData)))
        return nil
 }
 
-// MfibSignalDump represents VPP binary API message 'mfib_signal_dump'.
+// MfibSignalDump defines message 'mfib_signal_dump'.
 type MfibSignalDump struct{}
 
-func (m *MfibSignalDump) Reset()                        { *m = MfibSignalDump{} }
-func (*MfibSignalDump) GetMessageName() string          { return "mfib_signal_dump" }
-func (*MfibSignalDump) GetCrcString() string            { return "51077d14" }
-func (*MfibSignalDump) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *MfibSignalDump) Reset()               { *m = MfibSignalDump{} }
+func (*MfibSignalDump) GetMessageName() string { return "mfib_signal_dump" }
+func (*MfibSignalDump) GetCrcString() string   { return "51077d14" }
+func (*MfibSignalDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *MfibSignalDump) Size() int {
+func (m *MfibSignalDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        return size
 }
 func (m *MfibSignalDump) 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 *MfibSignalDump) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
+func (m *MfibSignalDump) Unmarshal(b []byte) error {
        return nil
 }
 
-// SetIPFlowHash represents VPP binary API message 'set_ip_flow_hash'.
+// SetIPFlowHash defines message 'set_ip_flow_hash'.
 type SetIPFlowHash struct {
        VrfID     uint32 `binapi:"u32,name=vrf_id" json:"vrf_id,omitempty"`
        IsIPv6    bool   `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
@@ -5199,231 +3667,129 @@ type SetIPFlowHash struct {
        Symmetric bool   `binapi:"bool,name=symmetric" json:"symmetric,omitempty"`
 }
 
-func (m *SetIPFlowHash) Reset()                        { *m = SetIPFlowHash{} }
-func (*SetIPFlowHash) GetMessageName() string          { return "set_ip_flow_hash" }
-func (*SetIPFlowHash) GetCrcString() string            { return "084ee09e" }
-func (*SetIPFlowHash) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *SetIPFlowHash) Reset()               { *m = SetIPFlowHash{} }
+func (*SetIPFlowHash) GetMessageName() string { return "set_ip_flow_hash" }
+func (*SetIPFlowHash) GetCrcString() string   { return "084ee09e" }
+func (*SetIPFlowHash) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *SetIPFlowHash) Size() int {
+func (m *SetIPFlowHash) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.VrfID
-       size += 4
-       // field[1] m.IsIPv6
-       size += 1
-       // field[1] m.Src
-       size += 1
-       // field[1] m.Dst
-       size += 1
-       // field[1] m.Sport
-       size += 1
-       // field[1] m.Dport
-       size += 1
-       // field[1] m.Proto
-       size += 1
-       // field[1] m.Reverse
-       size += 1
-       // field[1] m.Symmetric
-       size += 1
+       size += 4 // m.VrfID
+       size += 1 // m.IsIPv6
+       size += 1 // m.Src
+       size += 1 // m.Dst
+       size += 1 // m.Sport
+       size += 1 // m.Dport
+       size += 1 // m.Proto
+       size += 1 // m.Reverse
+       size += 1 // m.Symmetric
        return size
 }
 func (m *SetIPFlowHash) 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.VrfID
-       o.PutUint32(buf[pos:pos+4], uint32(m.VrfID))
-       pos += 4
-       // field[1] m.IsIPv6
-       if m.IsIPv6 {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Src
-       if m.Src {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Dst
-       if m.Dst {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Sport
-       if m.Sport {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Dport
-       if m.Dport {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Proto
-       if m.Proto {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Reverse
-       if m.Reverse {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Symmetric
-       if m.Symmetric {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *SetIPFlowHash) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.VrfID
-       m.VrfID = uint32(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IsIPv6
-       m.IsIPv6 = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Src
-       m.Src = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Dst
-       m.Dst = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Sport
-       m.Sport = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Dport
-       m.Dport = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Proto
-       m.Proto = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Reverse
-       m.Reverse = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Symmetric
-       m.Symmetric = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.VrfID)
+       buf.EncodeBool(m.IsIPv6)
+       buf.EncodeBool(m.Src)
+       buf.EncodeBool(m.Dst)
+       buf.EncodeBool(m.Sport)
+       buf.EncodeBool(m.Dport)
+       buf.EncodeBool(m.Proto)
+       buf.EncodeBool(m.Reverse)
+       buf.EncodeBool(m.Symmetric)
+       return buf.Bytes(), nil
+}
+func (m *SetIPFlowHash) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.VrfID = buf.DecodeUint32()
+       m.IsIPv6 = buf.DecodeBool()
+       m.Src = buf.DecodeBool()
+       m.Dst = buf.DecodeBool()
+       m.Sport = buf.DecodeBool()
+       m.Dport = buf.DecodeBool()
+       m.Proto = buf.DecodeBool()
+       m.Reverse = buf.DecodeBool()
+       m.Symmetric = buf.DecodeBool()
        return nil
 }
 
-// SetIPFlowHashReply represents VPP binary API message 'set_ip_flow_hash_reply'.
+// SetIPFlowHashReply defines message 'set_ip_flow_hash_reply'.
 type SetIPFlowHashReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (m *SetIPFlowHashReply) Reset()                        { *m = SetIPFlowHashReply{} }
-func (*SetIPFlowHashReply) GetMessageName() string          { return "set_ip_flow_hash_reply" }
-func (*SetIPFlowHashReply) GetCrcString() string            { return "e8d4e804" }
-func (*SetIPFlowHashReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (m *SetIPFlowHashReply) Reset()               { *m = SetIPFlowHashReply{} }
+func (*SetIPFlowHashReply) GetMessageName() string { return "set_ip_flow_hash_reply" }
+func (*SetIPFlowHashReply) GetCrcString() string   { return "e8d4e804" }
+func (*SetIPFlowHashReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *SetIPFlowHashReply) Size() int {
+func (m *SetIPFlowHashReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *SetIPFlowHashReply) 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
-       return buf, nil
-}
-func (m *SetIPFlowHashReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *SetIPFlowHashReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// SwInterfaceIP6EnableDisable represents VPP binary API message 'sw_interface_ip6_enable_disable'.
+// SwInterfaceIP6EnableDisable defines message 'sw_interface_ip6_enable_disable'.
 type SwInterfaceIP6EnableDisable struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        Enable    bool           `binapi:"bool,name=enable" json:"enable,omitempty"`
 }
 
-func (m *SwInterfaceIP6EnableDisable) Reset()                        { *m = SwInterfaceIP6EnableDisable{} }
-func (*SwInterfaceIP6EnableDisable) GetMessageName() string          { return "sw_interface_ip6_enable_disable" }
-func (*SwInterfaceIP6EnableDisable) GetCrcString() string            { return "ae6cfcfb" }
-func (*SwInterfaceIP6EnableDisable) GetMessageType() api.MessageType { return api.RequestMessage }
+func (m *SwInterfaceIP6EnableDisable) Reset()               { *m = SwInterfaceIP6EnableDisable{} }
+func (*SwInterfaceIP6EnableDisable) GetMessageName() string { return "sw_interface_ip6_enable_disable" }
+func (*SwInterfaceIP6EnableDisable) GetCrcString() string   { return "ae6cfcfb" }
+func (*SwInterfaceIP6EnableDisable) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *SwInterfaceIP6EnableDisable) Size() int {
+func (m *SwInterfaceIP6EnableDisable) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.Enable
-       size += 1
+       size += 4 // m.SwIfIndex
+       size += 1 // m.Enable
        return size
 }
 func (m *SwInterfaceIP6EnableDisable) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.Enable
-       if m.Enable {
-               buf[pos] = 1
-       }
-       pos += 1
-       return buf, nil
-}
-func (m *SwInterfaceIP6EnableDisable) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.Enable
-       m.Enable = tmp[pos] != 0
-       pos += 1
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBool(m.Enable)
+       return buf.Bytes(), nil
+}
+func (m *SwInterfaceIP6EnableDisable) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       m.Enable = buf.DecodeBool()
        return nil
 }
 
-// SwInterfaceIP6EnableDisableReply represents VPP binary API message 'sw_interface_ip6_enable_disable_reply'.
+// SwInterfaceIP6EnableDisableReply defines message 'sw_interface_ip6_enable_disable_reply'.
 type SwInterfaceIP6EnableDisableReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -5432,46 +3798,33 @@ func (m *SwInterfaceIP6EnableDisableReply) Reset() { *m = SwInterfaceIP6EnableDi
 func (*SwInterfaceIP6EnableDisableReply) GetMessageName() string {
        return "sw_interface_ip6_enable_disable_reply"
 }
-func (*SwInterfaceIP6EnableDisableReply) GetCrcString() string            { return "e8d4e804" }
-func (*SwInterfaceIP6EnableDisableReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+func (*SwInterfaceIP6EnableDisableReply) GetCrcString() string { return "e8d4e804" }
+func (*SwInterfaceIP6EnableDisableReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
 
-func (m *SwInterfaceIP6EnableDisableReply) Size() int {
+func (m *SwInterfaceIP6EnableDisableReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *SwInterfaceIP6EnableDisableReply) 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
-       return buf, nil
-}
-func (m *SwInterfaceIP6EnableDisableReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *SwInterfaceIP6EnableDisableReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
-// SwInterfaceIP6SetLinkLocalAddress represents VPP binary API message 'sw_interface_ip6_set_link_local_address'.
+// SwInterfaceIP6SetLinkLocalAddress defines message 'sw_interface_ip6_set_link_local_address'.
 type SwInterfaceIP6SetLinkLocalAddress struct {
        SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
        IP        IP6Address     `binapi:"ip6_address,name=ip" json:"ip,omitempty"`
@@ -5481,62 +3834,36 @@ func (m *SwInterfaceIP6SetLinkLocalAddress) Reset() { *m = SwInterfaceIP6SetLink
 func (*SwInterfaceIP6SetLinkLocalAddress) GetMessageName() string {
        return "sw_interface_ip6_set_link_local_address"
 }
-func (*SwInterfaceIP6SetLinkLocalAddress) GetCrcString() string            { return "2931d9fa" }
-func (*SwInterfaceIP6SetLinkLocalAddress) GetMessageType() api.MessageType { return api.RequestMessage }
+func (*SwInterfaceIP6SetLinkLocalAddress) GetCrcString() string { return "2931d9fa" }
+func (*SwInterfaceIP6SetLinkLocalAddress) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
 
-func (m *SwInterfaceIP6SetLinkLocalAddress) Size() int {
+func (m *SwInterfaceIP6SetLinkLocalAddress) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.SwIfIndex
-       size += 4
-       // field[1] m.IP
-       size += 16
+       size += 4      // m.SwIfIndex
+       size += 1 * 16 // m.IP
        return size
 }
 func (m *SwInterfaceIP6SetLinkLocalAddress) 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.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       // field[1] m.IP
-       for i := 0; i < 16; i++ {
-               var x uint8
-               if i < len(m.IP) {
-                       x = uint8(m.IP[i])
-               }
-               buf[pos] = uint8(x)
-               pos += 1
-       }
-       return buf, nil
-}
-func (m *SwInterfaceIP6SetLinkLocalAddress) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       // field[1] m.IP
-       for i := 0; i < len(m.IP); i++ {
-               m.IP[i] = uint8(tmp[pos])
-               pos += 1
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeBytes(m.IP[:], 16)
+       return buf.Bytes(), nil
+}
+func (m *SwInterfaceIP6SetLinkLocalAddress) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = InterfaceIndex(buf.DecodeUint32())
+       copy(m.IP[:], buf.DecodeBytes(16))
        return nil
 }
 
-// SwInterfaceIP6SetLinkLocalAddressReply represents VPP binary API message 'sw_interface_ip6_set_link_local_address_reply'.
+// SwInterfaceIP6SetLinkLocalAddressReply defines message 'sw_interface_ip6_set_link_local_address_reply'.
 type SwInterfaceIP6SetLinkLocalAddressReply struct {
        Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
@@ -5552,104 +3879,89 @@ func (*SwInterfaceIP6SetLinkLocalAddressReply) GetMessageType() api.MessageType
        return api.ReplyMessage
 }
 
-func (m *SwInterfaceIP6SetLinkLocalAddressReply) Size() int {
+func (m *SwInterfaceIP6SetLinkLocalAddressReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       // field[1] m.Retval
-       size += 4
+       size += 4 // m.Retval
        return size
 }
 func (m *SwInterfaceIP6SetLinkLocalAddressReply) 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
-       return buf, nil
-}
-func (m *SwInterfaceIP6SetLinkLocalAddressReply) 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
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *SwInterfaceIP6SetLinkLocalAddressReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
 func init() { file_ip_binapi_init() }
 func file_ip_binapi_init() {
-       api.RegisterMessage((*IoamDisable)(nil), "ip.IoamDisable")
-       api.RegisterMessage((*IoamDisableReply)(nil), "ip.IoamDisableReply")
-       api.RegisterMessage((*IoamEnable)(nil), "ip.IoamEnable")
-       api.RegisterMessage((*IoamEnableReply)(nil), "ip.IoamEnableReply")
-       api.RegisterMessage((*IPAddressDetails)(nil), "ip.IPAddressDetails")
-       api.RegisterMessage((*IPAddressDump)(nil), "ip.IPAddressDump")
-       api.RegisterMessage((*IPContainerProxyAddDel)(nil), "ip.IPContainerProxyAddDel")
-       api.RegisterMessage((*IPContainerProxyAddDelReply)(nil), "ip.IPContainerProxyAddDelReply")
-       api.RegisterMessage((*IPContainerProxyDetails)(nil), "ip.IPContainerProxyDetails")
-       api.RegisterMessage((*IPContainerProxyDump)(nil), "ip.IPContainerProxyDump")
-       api.RegisterMessage((*IPDetails)(nil), "ip.IPDetails")
-       api.RegisterMessage((*IPDump)(nil), "ip.IPDump")
-       api.RegisterMessage((*IPMrouteAddDel)(nil), "ip.IPMrouteAddDel")
-       api.RegisterMessage((*IPMrouteAddDelReply)(nil), "ip.IPMrouteAddDelReply")
-       api.RegisterMessage((*IPMrouteDetails)(nil), "ip.IPMrouteDetails")
-       api.RegisterMessage((*IPMrouteDump)(nil), "ip.IPMrouteDump")
-       api.RegisterMessage((*IPMtableDetails)(nil), "ip.IPMtableDetails")
-       api.RegisterMessage((*IPMtableDump)(nil), "ip.IPMtableDump")
-       api.RegisterMessage((*IPPuntPolice)(nil), "ip.IPPuntPolice")
-       api.RegisterMessage((*IPPuntPoliceReply)(nil), "ip.IPPuntPoliceReply")
-       api.RegisterMessage((*IPPuntRedirect)(nil), "ip.IPPuntRedirect")
-       api.RegisterMessage((*IPPuntRedirectDetails)(nil), "ip.IPPuntRedirectDetails")
-       api.RegisterMessage((*IPPuntRedirectDump)(nil), "ip.IPPuntRedirectDump")
-       api.RegisterMessage((*IPPuntRedirectReply)(nil), "ip.IPPuntRedirectReply")
-       api.RegisterMessage((*IPReassemblyEnableDisable)(nil), "ip.IPReassemblyEnableDisable")
-       api.RegisterMessage((*IPReassemblyEnableDisableReply)(nil), "ip.IPReassemblyEnableDisableReply")
-       api.RegisterMessage((*IPReassemblyGet)(nil), "ip.IPReassemblyGet")
-       api.RegisterMessage((*IPReassemblyGetReply)(nil), "ip.IPReassemblyGetReply")
-       api.RegisterMessage((*IPReassemblySet)(nil), "ip.IPReassemblySet")
-       api.RegisterMessage((*IPReassemblySetReply)(nil), "ip.IPReassemblySetReply")
-       api.RegisterMessage((*IPRouteAddDel)(nil), "ip.IPRouteAddDel")
-       api.RegisterMessage((*IPRouteAddDelReply)(nil), "ip.IPRouteAddDelReply")
-       api.RegisterMessage((*IPRouteDetails)(nil), "ip.IPRouteDetails")
-       api.RegisterMessage((*IPRouteDump)(nil), "ip.IPRouteDump")
-       api.RegisterMessage((*IPSourceAndPortRangeCheckAddDel)(nil), "ip.IPSourceAndPortRangeCheckAddDel")
-       api.RegisterMessage((*IPSourceAndPortRangeCheckAddDelReply)(nil), "ip.IPSourceAndPortRangeCheckAddDelReply")
-       api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDel)(nil), "ip.IPSourceAndPortRangeCheckInterfaceAddDel")
-       api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil), "ip.IPSourceAndPortRangeCheckInterfaceAddDelReply")
-       api.RegisterMessage((*IPSourceCheckInterfaceAddDel)(nil), "ip.IPSourceCheckInterfaceAddDel")
-       api.RegisterMessage((*IPSourceCheckInterfaceAddDelReply)(nil), "ip.IPSourceCheckInterfaceAddDelReply")
-       api.RegisterMessage((*IPTableAddDel)(nil), "ip.IPTableAddDel")
-       api.RegisterMessage((*IPTableAddDelReply)(nil), "ip.IPTableAddDelReply")
-       api.RegisterMessage((*IPTableDetails)(nil), "ip.IPTableDetails")
-       api.RegisterMessage((*IPTableDump)(nil), "ip.IPTableDump")
-       api.RegisterMessage((*IPTableFlush)(nil), "ip.IPTableFlush")
-       api.RegisterMessage((*IPTableFlushReply)(nil), "ip.IPTableFlushReply")
-       api.RegisterMessage((*IPTableReplaceBegin)(nil), "ip.IPTableReplaceBegin")
-       api.RegisterMessage((*IPTableReplaceBeginReply)(nil), "ip.IPTableReplaceBeginReply")
-       api.RegisterMessage((*IPTableReplaceEnd)(nil), "ip.IPTableReplaceEnd")
-       api.RegisterMessage((*IPTableReplaceEndReply)(nil), "ip.IPTableReplaceEndReply")
-       api.RegisterMessage((*IPUnnumberedDetails)(nil), "ip.IPUnnumberedDetails")
-       api.RegisterMessage((*IPUnnumberedDump)(nil), "ip.IPUnnumberedDump")
-       api.RegisterMessage((*MfibSignalDetails)(nil), "ip.MfibSignalDetails")
-       api.RegisterMessage((*MfibSignalDump)(nil), "ip.MfibSignalDump")
-       api.RegisterMessage((*SetIPFlowHash)(nil), "ip.SetIPFlowHash")
-       api.RegisterMessage((*SetIPFlowHashReply)(nil), "ip.SetIPFlowHashReply")
-       api.RegisterMessage((*SwInterfaceIP6EnableDisable)(nil), "ip.SwInterfaceIP6EnableDisable")
-       api.RegisterMessage((*SwInterfaceIP6EnableDisableReply)(nil), "ip.SwInterfaceIP6EnableDisableReply")
-       api.RegisterMessage((*SwInterfaceIP6SetLinkLocalAddress)(nil), "ip.SwInterfaceIP6SetLinkLocalAddress")
-       api.RegisterMessage((*SwInterfaceIP6SetLinkLocalAddressReply)(nil), "ip.SwInterfaceIP6SetLinkLocalAddressReply")
+       api.RegisterMessage((*IoamDisable)(nil), "ioam_disable_6b16a45e")
+       api.RegisterMessage((*IoamDisableReply)(nil), "ioam_disable_reply_e8d4e804")
+       api.RegisterMessage((*IoamEnable)(nil), "ioam_enable_51ccd868")
+       api.RegisterMessage((*IoamEnableReply)(nil), "ioam_enable_reply_e8d4e804")
+       api.RegisterMessage((*IPAddressDetails)(nil), "ip_address_details_b1199745")
+       api.RegisterMessage((*IPAddressDump)(nil), "ip_address_dump_2d033de4")
+       api.RegisterMessage((*IPContainerProxyAddDel)(nil), "ip_container_proxy_add_del_91189f40")
+       api.RegisterMessage((*IPContainerProxyAddDelReply)(nil), "ip_container_proxy_add_del_reply_e8d4e804")
+       api.RegisterMessage((*IPContainerProxyDetails)(nil), "ip_container_proxy_details_0ee460e8")
+       api.RegisterMessage((*IPContainerProxyDump)(nil), "ip_container_proxy_dump_51077d14")
+       api.RegisterMessage((*IPDetails)(nil), "ip_details_eb152d07")
+       api.RegisterMessage((*IPDump)(nil), "ip_dump_98d231ca")
+       api.RegisterMessage((*IPMrouteAddDel)(nil), "ip_mroute_add_del_f6627d17")
+       api.RegisterMessage((*IPMrouteAddDelReply)(nil), "ip_mroute_add_del_reply_1992deab")
+       api.RegisterMessage((*IPMrouteDetails)(nil), "ip_mroute_details_c1cb4b44")
+       api.RegisterMessage((*IPMrouteDump)(nil), "ip_mroute_dump_b9d2e09e")
+       api.RegisterMessage((*IPMtableDetails)(nil), "ip_mtable_details_b9d2e09e")
+       api.RegisterMessage((*IPMtableDump)(nil), "ip_mtable_dump_51077d14")
+       api.RegisterMessage((*IPPuntPolice)(nil), "ip_punt_police_db867cea")
+       api.RegisterMessage((*IPPuntPoliceReply)(nil), "ip_punt_police_reply_e8d4e804")
+       api.RegisterMessage((*IPPuntRedirect)(nil), "ip_punt_redirect_a9a5592c")
+       api.RegisterMessage((*IPPuntRedirectDetails)(nil), "ip_punt_redirect_details_3924f5d3")
+       api.RegisterMessage((*IPPuntRedirectDump)(nil), "ip_punt_redirect_dump_2d033de4")
+       api.RegisterMessage((*IPPuntRedirectReply)(nil), "ip_punt_redirect_reply_e8d4e804")
+       api.RegisterMessage((*IPReassemblyEnableDisable)(nil), "ip_reassembly_enable_disable_885c85a6")
+       api.RegisterMessage((*IPReassemblyEnableDisableReply)(nil), "ip_reassembly_enable_disable_reply_e8d4e804")
+       api.RegisterMessage((*IPReassemblyGet)(nil), "ip_reassembly_get_ea13ff63")
+       api.RegisterMessage((*IPReassemblyGetReply)(nil), "ip_reassembly_get_reply_d5eb8d34")
+       api.RegisterMessage((*IPReassemblySet)(nil), "ip_reassembly_set_16467d25")
+       api.RegisterMessage((*IPReassemblySetReply)(nil), "ip_reassembly_set_reply_e8d4e804")
+       api.RegisterMessage((*IPRouteAddDel)(nil), "ip_route_add_del_c1ff832d")
+       api.RegisterMessage((*IPRouteAddDelReply)(nil), "ip_route_add_del_reply_1992deab")
+       api.RegisterMessage((*IPRouteDetails)(nil), "ip_route_details_d1ffaae1")
+       api.RegisterMessage((*IPRouteDump)(nil), "ip_route_dump_b9d2e09e")
+       api.RegisterMessage((*IPSourceAndPortRangeCheckAddDel)(nil), "ip_source_and_port_range_check_add_del_8bfc76f2")
+       api.RegisterMessage((*IPSourceAndPortRangeCheckAddDelReply)(nil), "ip_source_and_port_range_check_add_del_reply_e8d4e804")
+       api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDel)(nil), "ip_source_and_port_range_check_interface_add_del_e1ba8987")
+       api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil), "ip_source_and_port_range_check_interface_add_del_reply_e8d4e804")
+       api.RegisterMessage((*IPSourceCheckInterfaceAddDel)(nil), "ip_source_check_interface_add_del_6612356b")
+       api.RegisterMessage((*IPSourceCheckInterfaceAddDelReply)(nil), "ip_source_check_interface_add_del_reply_e8d4e804")
+       api.RegisterMessage((*IPTableAddDel)(nil), "ip_table_add_del_0ffdaec0")
+       api.RegisterMessage((*IPTableAddDelReply)(nil), "ip_table_add_del_reply_e8d4e804")
+       api.RegisterMessage((*IPTableDetails)(nil), "ip_table_details_c79fca0f")
+       api.RegisterMessage((*IPTableDump)(nil), "ip_table_dump_51077d14")
+       api.RegisterMessage((*IPTableFlush)(nil), "ip_table_flush_b9d2e09e")
+       api.RegisterMessage((*IPTableFlushReply)(nil), "ip_table_flush_reply_e8d4e804")
+       api.RegisterMessage((*IPTableReplaceBegin)(nil), "ip_table_replace_begin_b9d2e09e")
+       api.RegisterMessage((*IPTableReplaceBeginReply)(nil), "ip_table_replace_begin_reply_e8d4e804")
+       api.RegisterMessage((*IPTableReplaceEnd)(nil), "ip_table_replace_end_b9d2e09e")
+       api.RegisterMessage((*IPTableReplaceEndReply)(nil), "ip_table_replace_end_reply_e8d4e804")
+       api.RegisterMessage((*IPUnnumberedDetails)(nil), "ip_unnumbered_details_aa12a483")
+       api.RegisterMessage((*IPUnnumberedDump)(nil), "ip_unnumbered_dump_f9e6675e")
+       api.RegisterMessage((*MfibSignalDetails)(nil), "mfib_signal_details_64398a9a")
+       api.RegisterMessage((*MfibSignalDump)(nil), "mfib_signal_dump_51077d14")
+       api.RegisterMessage((*SetIPFlowHash)(nil), "set_ip_flow_hash_084ee09e")
+       api.RegisterMessage((*SetIPFlowHashReply)(nil), "set_ip_flow_hash_reply_e8d4e804")
+       api.RegisterMessage((*SwInterfaceIP6EnableDisable)(nil), "sw_interface_ip6_enable_disable_ae6cfcfb")
+       api.RegisterMessage((*SwInterfaceIP6EnableDisableReply)(nil), "sw_interface_ip6_enable_disable_reply_e8d4e804")
+       api.RegisterMessage((*SwInterfaceIP6SetLinkLocalAddress)(nil), "sw_interface_ip6_set_link_local_address_2931d9fa")
+       api.RegisterMessage((*SwInterfaceIP6SetLinkLocalAddressReply)(nil), "sw_interface_ip6_set_link_local_address_reply_e8d4e804")
 }
 
 // Messages returns list of all messages in this module.
@@ -5717,14 +4029,3 @@ func AllMessages() []api.Message {
                (*SwInterfaceIP6SetLinkLocalAddressReply)(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