Binary API generator improvements
[govpp.git] / examples / binapi / acl / acl.ba.go
index a00918e..f191c78 100644 (file)
-// Code generated by GoVPP binapi-generator. DO NOT EDIT.
+// Code generated by GoVPP's binapi-generator. DO NOT EDIT.
+// versions:
+//  binapi-generator: v0.4.0-dev
+//  VPP:              20.05-release
 // source: /usr/share/vpp/api/plugins/acl.api.json
 
 /*
-Package acl is a generated from VPP binary API module 'acl'.
-
- The acl module consists of:
-         2 types
-        36 messages
-        18 services
+Package acl contains generated code for VPP API file acl.api (2.0.0).
+
+It consists of:
+         7 aliases
+        11 enums
+        38 messages
+         8 types
+         1 union
 */
 package acl
 
-import api "git.fd.io/govpp.git/api"
-import bytes "bytes"
-import context "context"
-import strconv "strconv"
-import struc "github.com/lunixbochs/struc"
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = api.RegisterMessage
-var _ = bytes.NewBuffer
-var _ = context.Background
-var _ = strconv.Itoa
-var _ = struc.Pack
+import (
+       "bytes"
+       "context"
+       "encoding/binary"
+       "fmt"
+       "io"
+       "math"
+       "net"
+       "strconv"
+       "strings"
+
+       api "git.fd.io/govpp.git/api"
+       codec "git.fd.io/govpp.git/codec"
+       struc "github.com/lunixbochs/struc"
+
+       interface_types "git.fd.io/govpp.git/examples/binapi/interface_types"
+       ip_types "git.fd.io/govpp.git/examples/binapi/ip_types"
+)
 
 // 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.GoVppAPIPackageIsVersion1 // please upgrade the GoVPP api package
+const _ = api.GoVppAPIPackageIsVersion2 // please upgrade the GoVPP api package
 
 const (
        // ModuleName is the name of this module.
        ModuleName = "acl"
        // APIVersion is the API version of this module.
-       APIVersion = "1.0.1"
+       APIVersion = "2.0.0"
        // VersionCrc is the CRC of this module.
-       VersionCrc = 0x8ed22cb9
+       VersionCrc = 0x68c4cb37
 )
 
-/* Types */
+// ACLAction represents VPP binary API enum 'acl_action'.
+type ACLAction uint8
 
-// ACLRule represents VPP binary API type 'acl_rule':
-type ACLRule struct {
-       IsPermit               uint8
-       IsIPv6                 uint8
-       SrcIPAddr              []byte `struc:"[16]byte"`
-       SrcIPPrefixLen         uint8
-       DstIPAddr              []byte `struc:"[16]byte"`
-       DstIPPrefixLen         uint8
-       Proto                  uint8
-       SrcportOrIcmptypeFirst uint16
-       SrcportOrIcmptypeLast  uint16
-       DstportOrIcmpcodeFirst uint16
-       DstportOrIcmpcodeLast  uint16
-       TCPFlagsMask           uint8
-       TCPFlagsValue          uint8
-}
+const (
+       ACL_ACTION_API_DENY           ACLAction = 0
+       ACL_ACTION_API_PERMIT         ACLAction = 1
+       ACL_ACTION_API_PERMIT_REFLECT ACLAction = 2
+)
+
+var (
+       ACLAction_name = map[uint8]string{
+               0: "ACL_ACTION_API_DENY",
+               1: "ACL_ACTION_API_PERMIT",
+               2: "ACL_ACTION_API_PERMIT_REFLECT",
+       }
+       ACLAction_value = map[string]uint8{
+               "ACL_ACTION_API_DENY":           0,
+               "ACL_ACTION_API_PERMIT":         1,
+               "ACL_ACTION_API_PERMIT_REFLECT": 2,
+       }
+)
 
-func (*ACLRule) GetTypeName() string {
-       return "acl_rule"
+func (x ACLAction) String() string {
+       s, ok := ACLAction_name[uint8(x)]
+       if ok {
+               return s
+       }
+       return "ACLAction(" + strconv.Itoa(int(x)) + ")"
 }
-func (*ACLRule) GetCrcString() string {
-       return "6f99bf4d"
+
+// MacAddress represents VPP binary API alias 'mac_address'.
+type MacAddress [6]uint8
+
+func ParseMAC(mac string) (parsed MacAddress, err error) {
+       var hw net.HardwareAddr
+       if hw, err = net.ParseMAC(mac); err != nil {
+               return
+       }
+       copy(parsed[:], hw[:])
+       return
 }
 
-// MacipACLRule represents VPP binary API type 'macip_acl_rule':
-type MacipACLRule struct {
-       IsPermit       uint8
-       IsIPv6         uint8
-       SrcMac         []byte `struc:"[6]byte"`
-       SrcMacMask     []byte `struc:"[6]byte"`
-       SrcIPAddr      []byte `struc:"[16]byte"`
-       SrcIPPrefixLen uint8
+func (m *MacAddress) ToString() string {
+       return net.HardwareAddr(m[:]).String()
 }
 
-func (*MacipACLRule) GetTypeName() string {
-       return "macip_acl_rule"
+// ACLRule represents VPP binary API type 'acl_rule'.
+type ACLRule struct {
+       IsPermit               ACLAction        `binapi:"acl_action,name=is_permit" json:"is_permit,omitempty"`
+       SrcPrefix              ip_types.Prefix  `binapi:"prefix,name=src_prefix" json:"src_prefix,omitempty"`
+       DstPrefix              ip_types.Prefix  `binapi:"prefix,name=dst_prefix" json:"dst_prefix,omitempty"`
+       Proto                  ip_types.IPProto `binapi:"ip_proto,name=proto" json:"proto,omitempty"`
+       SrcportOrIcmptypeFirst uint16           `binapi:"u16,name=srcport_or_icmptype_first" json:"srcport_or_icmptype_first,omitempty"`
+       SrcportOrIcmptypeLast  uint16           `binapi:"u16,name=srcport_or_icmptype_last" json:"srcport_or_icmptype_last,omitempty"`
+       DstportOrIcmpcodeFirst uint16           `binapi:"u16,name=dstport_or_icmpcode_first" json:"dstport_or_icmpcode_first,omitempty"`
+       DstportOrIcmpcodeLast  uint16           `binapi:"u16,name=dstport_or_icmpcode_last" json:"dstport_or_icmpcode_last,omitempty"`
+       TCPFlagsMask           uint8            `binapi:"u8,name=tcp_flags_mask" json:"tcp_flags_mask,omitempty"`
+       TCPFlagsValue          uint8            `binapi:"u8,name=tcp_flags_value" json:"tcp_flags_value,omitempty"`
 }
-func (*MacipACLRule) GetCrcString() string {
-       return "70589f1e"
+
+func (*ACLRule) GetTypeName() string { return "acl_rule" }
+
+// MacipACLRule represents VPP binary API type 'macip_acl_rule'.
+type MacipACLRule struct {
+       IsPermit   ACLAction       `binapi:"acl_action,name=is_permit" json:"is_permit,omitempty"`
+       SrcMac     MacAddress      `binapi:"mac_address,name=src_mac" json:"src_mac,omitempty"`
+       SrcMacMask MacAddress      `binapi:"mac_address,name=src_mac_mask" json:"src_mac_mask,omitempty"`
+       SrcPrefix  ip_types.Prefix `binapi:"prefix,name=src_prefix" json:"src_prefix,omitempty"`
 }
 
-/* Messages */
+func (*MacipACLRule) GetTypeName() string { return "macip_acl_rule" }
 
-// ACLAddReplace represents VPP binary API message 'acl_add_replace':
+// ACLAddReplace represents VPP binary API message 'acl_add_replace'.
 type ACLAddReplace struct {
-       ACLIndex uint32
-       Tag      []byte `struc:"[64]byte"`
-       Count    uint32 `struc:"sizeof=R"`
-       R        []ACLRule
+       ACLIndex uint32    `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
+       Tag      string    `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       Count    uint32    `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=R"`
+       R        []ACLRule `binapi:"acl_rule[count],name=r" json:"r,omitempty"`
 }
 
-func (*ACLAddReplace) GetMessageName() string {
-       return "acl_add_replace"
-}
-func (*ACLAddReplace) GetCrcString() string {
-       return "e839997e"
-}
-func (*ACLAddReplace) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *ACLAddReplace) Reset()                        { *m = ACLAddReplace{} }
+func (*ACLAddReplace) GetMessageName() string          { return "acl_add_replace" }
+func (*ACLAddReplace) GetCrcString() string            { return "1cabdeab" }
+func (*ACLAddReplace) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLAddReplace) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Tag
+       size += 64
+       // field[1] m.Count
+       size += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var s1 ACLRule
+               _ = s1
+               if j1 < len(m.R) {
+                       s1 = m.R[j1]
+               }
+               // field[2] s1.IsPermit
+               size += 1
+               // field[2] s1.SrcPrefix
+               // field[3] s1.SrcPrefix.Address
+               // field[4] s1.SrcPrefix.Address.Af
+               size += 1
+               // field[4] s1.SrcPrefix.Address.Un
+               size += 16
+               // field[3] s1.SrcPrefix.Len
+               size += 1
+               // field[2] s1.DstPrefix
+               // field[3] s1.DstPrefix.Address
+               // field[4] s1.DstPrefix.Address.Af
+               size += 1
+               // field[4] s1.DstPrefix.Address.Un
+               size += 16
+               // field[3] s1.DstPrefix.Len
+               size += 1
+               // field[2] s1.Proto
+               size += 1
+               // field[2] s1.SrcportOrIcmptypeFirst
+               size += 2
+               // field[2] s1.SrcportOrIcmptypeLast
+               size += 2
+               // field[2] s1.DstportOrIcmpcodeFirst
+               size += 2
+               // field[2] s1.DstportOrIcmpcodeLast
+               size += 2
+               // field[2] s1.TCPFlagsMask
+               size += 1
+               // field[2] s1.TCPFlagsValue
+               size += 1
+       }
+       return size
+}
+func (m *ACLAddReplace) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Tag
+       copy(buf[pos:pos+64], m.Tag)
+       pos += 64
+       // field[1] m.Count
+       o.PutUint32(buf[pos:pos+4], uint32(len(m.R)))
+       pos += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var v1 ACLRule
+               if j1 < len(m.R) {
+                       v1 = m.R[j1]
+               }
+               // field[2] v1.IsPermit
+               buf[pos] = uint8(v1.IsPermit)
+               pos += 1
+               // field[2] v1.SrcPrefix
+               // field[3] v1.SrcPrefix.Address
+               // field[4] v1.SrcPrefix.Address.Af
+               buf[pos] = uint8(v1.SrcPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.SrcPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.SrcPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.SrcPrefix.Len
+               buf[pos] = uint8(v1.SrcPrefix.Len)
+               pos += 1
+               // field[2] v1.DstPrefix
+               // field[3] v1.DstPrefix.Address
+               // field[4] v1.DstPrefix.Address.Af
+               buf[pos] = uint8(v1.DstPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.DstPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.DstPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.DstPrefix.Len
+               buf[pos] = uint8(v1.DstPrefix.Len)
+               pos += 1
+               // field[2] v1.Proto
+               buf[pos] = uint8(v1.Proto)
+               pos += 1
+               // field[2] v1.SrcportOrIcmptypeFirst
+               o.PutUint16(buf[pos:pos+2], uint16(v1.SrcportOrIcmptypeFirst))
+               pos += 2
+               // field[2] v1.SrcportOrIcmptypeLast
+               o.PutUint16(buf[pos:pos+2], uint16(v1.SrcportOrIcmptypeLast))
+               pos += 2
+               // field[2] v1.DstportOrIcmpcodeFirst
+               o.PutUint16(buf[pos:pos+2], uint16(v1.DstportOrIcmpcodeFirst))
+               pos += 2
+               // field[2] v1.DstportOrIcmpcodeLast
+               o.PutUint16(buf[pos:pos+2], uint16(v1.DstportOrIcmpcodeLast))
+               pos += 2
+               // field[2] v1.TCPFlagsMask
+               buf[pos] = uint8(v1.TCPFlagsMask)
+               pos += 1
+               // field[2] v1.TCPFlagsValue
+               buf[pos] = uint8(v1.TCPFlagsValue)
+               pos += 1
+       }
+       return buf, nil
+}
+func (m *ACLAddReplace) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Tag
+       {
+               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
+               m.Tag = codec.DecodeString(tmp[pos : pos+nul])
+               pos += 64
+       }
+       // field[1] m.Count
+       m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.R
+       m.R = make([]ACLRule, int(m.Count))
+       for j1 := 0; j1 < int(m.Count); j1++ {
+               // field[2] m.R[j1].IsPermit
+               m.R[j1].IsPermit = ACLAction(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcPrefix
+               // field[3] m.R[j1].SrcPrefix.Address
+               // field[4] m.R[j1].SrcPrefix.Address.Af
+               m.R[j1].SrcPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].SrcPrefix.Address.Un
+               copy(m.R[j1].SrcPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].SrcPrefix.Len
+               m.R[j1].SrcPrefix.Len = uint8(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].DstPrefix
+               // field[3] m.R[j1].DstPrefix.Address
+               // field[4] m.R[j1].DstPrefix.Address.Af
+               m.R[j1].DstPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].DstPrefix.Address.Un
+               copy(m.R[j1].DstPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].DstPrefix.Len
+               m.R[j1].DstPrefix.Len = uint8(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].Proto
+               m.R[j1].Proto = ip_types.IPProto(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcportOrIcmptypeFirst
+               m.R[j1].SrcportOrIcmptypeFirst = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].SrcportOrIcmptypeLast
+               m.R[j1].SrcportOrIcmptypeLast = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].DstportOrIcmpcodeFirst
+               m.R[j1].DstportOrIcmpcodeFirst = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].DstportOrIcmpcodeLast
+               m.R[j1].DstportOrIcmpcodeLast = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].TCPFlagsMask
+               m.R[j1].TCPFlagsMask = uint8(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].TCPFlagsValue
+               m.R[j1].TCPFlagsValue = uint8(tmp[pos])
+               pos += 1
+       }
+       return nil
 }
 
-// ACLAddReplaceReply represents VPP binary API message 'acl_add_replace_reply':
+// ACLAddReplaceReply represents VPP binary API message 'acl_add_replace_reply'.
 type ACLAddReplaceReply struct {
-       ACLIndex uint32
-       Retval   int32
+       ACLIndex uint32 `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
+       Retval   int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*ACLAddReplaceReply) GetMessageName() string {
-       return "acl_add_replace_reply"
-}
-func (*ACLAddReplaceReply) GetCrcString() string {
-       return "ac407b0c"
-}
-func (*ACLAddReplaceReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *ACLAddReplaceReply) Reset()                        { *m = ACLAddReplaceReply{} }
+func (*ACLAddReplaceReply) GetMessageName() string          { return "acl_add_replace_reply" }
+func (*ACLAddReplaceReply) GetCrcString() string            { return "ac407b0c" }
+func (*ACLAddReplaceReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// ACLDel represents VPP binary API message 'acl_del':
+func (m *ACLAddReplaceReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *ACLAddReplaceReply) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Retval
+       o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
+       pos += 4
+       return buf, nil
+}
+func (m *ACLAddReplaceReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Retval
+       m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLDel represents VPP binary API message 'acl_del'.
 type ACLDel struct {
-       ACLIndex uint32
+       ACLIndex uint32 `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
 }
 
-func (*ACLDel) GetMessageName() string {
-       return "acl_del"
-}
-func (*ACLDel) GetCrcString() string {
-       return "ef34fea4"
-}
-func (*ACLDel) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *ACLDel) Reset()                        { *m = ACLDel{} }
+func (*ACLDel) GetMessageName() string          { return "acl_del" }
+func (*ACLDel) GetCrcString() string            { return "ef34fea4" }
+func (*ACLDel) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// ACLDelReply represents VPP binary API message 'acl_del_reply':
+func (m *ACLDel) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       return size
+}
+func (m *ACLDel) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       return buf, nil
+}
+func (m *ACLDel) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLDelReply represents VPP binary API message 'acl_del_reply'.
 type ACLDelReply struct {
-       Retval int32
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*ACLDelReply) GetMessageName() string {
-       return "acl_del_reply"
-}
-func (*ACLDelReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*ACLDelReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *ACLDelReply) Reset()                        { *m = ACLDelReply{} }
+func (*ACLDelReply) GetMessageName() string          { return "acl_del_reply" }
+func (*ACLDelReply) GetCrcString() string            { return "e8d4e804" }
+func (*ACLDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// ACLDetails represents VPP binary API message 'acl_details':
+func (m *ACLDelReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *ACLDelReply) 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 *ACLDelReply) 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
+       return nil
+}
+
+// ACLDetails represents VPP binary API message 'acl_details'.
 type ACLDetails struct {
-       ACLIndex uint32
-       Tag      []byte `struc:"[64]byte"`
-       Count    uint32 `struc:"sizeof=R"`
-       R        []ACLRule
+       ACLIndex uint32    `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
+       Tag      string    `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       Count    uint32    `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=R"`
+       R        []ACLRule `binapi:"acl_rule[count],name=r" json:"r,omitempty"`
 }
 
-func (*ACLDetails) GetMessageName() string {
-       return "acl_details"
-}
-func (*ACLDetails) GetCrcString() string {
-       return "5bd895be"
-}
-func (*ACLDetails) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (m *ACLDetails) Reset()                        { *m = ACLDetails{} }
+func (*ACLDetails) GetMessageName() string          { return "acl_details" }
+func (*ACLDetails) GetCrcString() string            { return "7a97f21c" }
+func (*ACLDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *ACLDetails) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Tag
+       size += 64
+       // field[1] m.Count
+       size += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var s1 ACLRule
+               _ = s1
+               if j1 < len(m.R) {
+                       s1 = m.R[j1]
+               }
+               // field[2] s1.IsPermit
+               size += 1
+               // field[2] s1.SrcPrefix
+               // field[3] s1.SrcPrefix.Address
+               // field[4] s1.SrcPrefix.Address.Af
+               size += 1
+               // field[4] s1.SrcPrefix.Address.Un
+               size += 16
+               // field[3] s1.SrcPrefix.Len
+               size += 1
+               // field[2] s1.DstPrefix
+               // field[3] s1.DstPrefix.Address
+               // field[4] s1.DstPrefix.Address.Af
+               size += 1
+               // field[4] s1.DstPrefix.Address.Un
+               size += 16
+               // field[3] s1.DstPrefix.Len
+               size += 1
+               // field[2] s1.Proto
+               size += 1
+               // field[2] s1.SrcportOrIcmptypeFirst
+               size += 2
+               // field[2] s1.SrcportOrIcmptypeLast
+               size += 2
+               // field[2] s1.DstportOrIcmpcodeFirst
+               size += 2
+               // field[2] s1.DstportOrIcmpcodeLast
+               size += 2
+               // field[2] s1.TCPFlagsMask
+               size += 1
+               // field[2] s1.TCPFlagsValue
+               size += 1
+       }
+       return size
+}
+func (m *ACLDetails) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Tag
+       copy(buf[pos:pos+64], m.Tag)
+       pos += 64
+       // field[1] m.Count
+       o.PutUint32(buf[pos:pos+4], uint32(len(m.R)))
+       pos += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var v1 ACLRule
+               if j1 < len(m.R) {
+                       v1 = m.R[j1]
+               }
+               // field[2] v1.IsPermit
+               buf[pos] = uint8(v1.IsPermit)
+               pos += 1
+               // field[2] v1.SrcPrefix
+               // field[3] v1.SrcPrefix.Address
+               // field[4] v1.SrcPrefix.Address.Af
+               buf[pos] = uint8(v1.SrcPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.SrcPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.SrcPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.SrcPrefix.Len
+               buf[pos] = uint8(v1.SrcPrefix.Len)
+               pos += 1
+               // field[2] v1.DstPrefix
+               // field[3] v1.DstPrefix.Address
+               // field[4] v1.DstPrefix.Address.Af
+               buf[pos] = uint8(v1.DstPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.DstPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.DstPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.DstPrefix.Len
+               buf[pos] = uint8(v1.DstPrefix.Len)
+               pos += 1
+               // field[2] v1.Proto
+               buf[pos] = uint8(v1.Proto)
+               pos += 1
+               // field[2] v1.SrcportOrIcmptypeFirst
+               o.PutUint16(buf[pos:pos+2], uint16(v1.SrcportOrIcmptypeFirst))
+               pos += 2
+               // field[2] v1.SrcportOrIcmptypeLast
+               o.PutUint16(buf[pos:pos+2], uint16(v1.SrcportOrIcmptypeLast))
+               pos += 2
+               // field[2] v1.DstportOrIcmpcodeFirst
+               o.PutUint16(buf[pos:pos+2], uint16(v1.DstportOrIcmpcodeFirst))
+               pos += 2
+               // field[2] v1.DstportOrIcmpcodeLast
+               o.PutUint16(buf[pos:pos+2], uint16(v1.DstportOrIcmpcodeLast))
+               pos += 2
+               // field[2] v1.TCPFlagsMask
+               buf[pos] = uint8(v1.TCPFlagsMask)
+               pos += 1
+               // field[2] v1.TCPFlagsValue
+               buf[pos] = uint8(v1.TCPFlagsValue)
+               pos += 1
+       }
+       return buf, nil
+}
+func (m *ACLDetails) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Tag
+       {
+               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
+               m.Tag = codec.DecodeString(tmp[pos : pos+nul])
+               pos += 64
+       }
+       // field[1] m.Count
+       m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.R
+       m.R = make([]ACLRule, int(m.Count))
+       for j1 := 0; j1 < int(m.Count); j1++ {
+               // field[2] m.R[j1].IsPermit
+               m.R[j1].IsPermit = ACLAction(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcPrefix
+               // field[3] m.R[j1].SrcPrefix.Address
+               // field[4] m.R[j1].SrcPrefix.Address.Af
+               m.R[j1].SrcPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].SrcPrefix.Address.Un
+               copy(m.R[j1].SrcPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].SrcPrefix.Len
+               m.R[j1].SrcPrefix.Len = uint8(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].DstPrefix
+               // field[3] m.R[j1].DstPrefix.Address
+               // field[4] m.R[j1].DstPrefix.Address.Af
+               m.R[j1].DstPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].DstPrefix.Address.Un
+               copy(m.R[j1].DstPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].DstPrefix.Len
+               m.R[j1].DstPrefix.Len = uint8(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].Proto
+               m.R[j1].Proto = ip_types.IPProto(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcportOrIcmptypeFirst
+               m.R[j1].SrcportOrIcmptypeFirst = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].SrcportOrIcmptypeLast
+               m.R[j1].SrcportOrIcmptypeLast = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].DstportOrIcmpcodeFirst
+               m.R[j1].DstportOrIcmpcodeFirst = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].DstportOrIcmpcodeLast
+               m.R[j1].DstportOrIcmpcodeLast = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+               // field[2] m.R[j1].TCPFlagsMask
+               m.R[j1].TCPFlagsMask = uint8(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].TCPFlagsValue
+               m.R[j1].TCPFlagsValue = uint8(tmp[pos])
+               pos += 1
+       }
+       return nil
 }
 
-// ACLDump represents VPP binary API message 'acl_dump':
+// ACLDump represents VPP binary API message 'acl_dump'.
 type ACLDump struct {
-       ACLIndex uint32
+       ACLIndex uint32 `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
 }
 
-func (*ACLDump) GetMessageName() string {
-       return "acl_dump"
-}
-func (*ACLDump) GetCrcString() string {
-       return "ef34fea4"
-}
-func (*ACLDump) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *ACLDump) Reset()                        { *m = ACLDump{} }
+func (*ACLDump) GetMessageName() string          { return "acl_dump" }
+func (*ACLDump) GetCrcString() string            { return "ef34fea4" }
+func (*ACLDump) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// ACLInterfaceAddDel represents VPP binary API message 'acl_interface_add_del':
+func (m *ACLDump) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       return size
+}
+func (m *ACLDump) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       return buf, nil
+}
+func (m *ACLDump) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLInterfaceAddDel represents VPP binary API message 'acl_interface_add_del'.
 type ACLInterfaceAddDel struct {
-       IsAdd     uint8
-       IsInput   uint8
-       SwIfIndex uint32
-       ACLIndex  uint32
+       IsAdd     bool                           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
+       IsInput   bool                           `binapi:"bool,name=is_input" json:"is_input,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       ACLIndex  uint32                         `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
 }
 
-func (*ACLInterfaceAddDel) GetMessageName() string {
-       return "acl_interface_add_del"
-}
-func (*ACLInterfaceAddDel) GetCrcString() string {
-       return "0b2aedd1"
-}
-func (*ACLInterfaceAddDel) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *ACLInterfaceAddDel) Reset()                        { *m = ACLInterfaceAddDel{} }
+func (*ACLInterfaceAddDel) GetMessageName() string          { return "acl_interface_add_del" }
+func (*ACLInterfaceAddDel) GetCrcString() string            { return "4b54bebd" }
+func (*ACLInterfaceAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// ACLInterfaceAddDelReply represents VPP binary API message 'acl_interface_add_del_reply':
+func (m *ACLInterfaceAddDel) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.IsAdd
+       size += 1
+       // field[1] m.IsInput
+       size += 1
+       // field[1] m.SwIfIndex
+       size += 4
+       // field[1] m.ACLIndex
+       size += 4
+       return size
+}
+func (m *ACLInterfaceAddDel) 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.IsInput
+       if m.IsInput {
+               buf[pos] = 1
+       }
+       pos += 1
+       // field[1] m.SwIfIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
+       pos += 4
+       // field[1] m.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       return buf, nil
+}
+func (m *ACLInterfaceAddDel) 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.IsInput
+       m.IsInput = tmp[pos] != 0
+       pos += 1
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLInterfaceAddDelReply represents VPP binary API message 'acl_interface_add_del_reply'.
 type ACLInterfaceAddDelReply struct {
-       Retval int32
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*ACLInterfaceAddDelReply) GetMessageName() string {
-       return "acl_interface_add_del_reply"
-}
-func (*ACLInterfaceAddDelReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*ACLInterfaceAddDelReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *ACLInterfaceAddDelReply) Reset()                        { *m = ACLInterfaceAddDelReply{} }
+func (*ACLInterfaceAddDelReply) GetMessageName() string          { return "acl_interface_add_del_reply" }
+func (*ACLInterfaceAddDelReply) GetCrcString() string            { return "e8d4e804" }
+func (*ACLInterfaceAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// ACLInterfaceEtypeWhitelistDetails represents VPP binary API message 'acl_interface_etype_whitelist_details':
+func (m *ACLInterfaceAddDelReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *ACLInterfaceAddDelReply) 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 *ACLInterfaceAddDelReply) 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
+       return nil
+}
+
+// ACLInterfaceEtypeWhitelistDetails represents VPP binary API message 'acl_interface_etype_whitelist_details'.
 type ACLInterfaceEtypeWhitelistDetails struct {
-       SwIfIndex uint32
-       Count     uint8 `struc:"sizeof=Whitelist"`
-       NInput    uint8
-       Whitelist []uint16
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Count     uint8                          `binapi:"u8,name=count" json:"count,omitempty" struc:"sizeof=Whitelist"`
+       NInput    uint8                          `binapi:"u8,name=n_input" json:"n_input,omitempty"`
+       Whitelist []uint16                       `binapi:"u16[count],name=whitelist" json:"whitelist,omitempty"`
 }
 
+func (m *ACLInterfaceEtypeWhitelistDetails) Reset() { *m = ACLInterfaceEtypeWhitelistDetails{} }
 func (*ACLInterfaceEtypeWhitelistDetails) GetMessageName() string {
        return "acl_interface_etype_whitelist_details"
 }
-func (*ACLInterfaceEtypeWhitelistDetails) GetCrcString() string {
-       return "6a5d4e81"
-}
-func (*ACLInterfaceEtypeWhitelistDetails) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (*ACLInterfaceEtypeWhitelistDetails) GetCrcString() string            { return "cc2bfded" }
+func (*ACLInterfaceEtypeWhitelistDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *ACLInterfaceEtypeWhitelistDetails) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       // field[1] m.Count
+       size += 1
+       // field[1] m.NInput
+       size += 1
+       // field[1] m.Whitelist
+       size += 2 * len(m.Whitelist)
+       return size
+}
+func (m *ACLInterfaceEtypeWhitelistDetails) 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.Count
+       buf[pos] = uint8(len(m.Whitelist))
+       pos += 1
+       // field[1] m.NInput
+       buf[pos] = uint8(m.NInput)
+       pos += 1
+       // field[1] m.Whitelist
+       for i := 0; i < len(m.Whitelist); i++ {
+               var x uint16
+               if i < len(m.Whitelist) {
+                       x = uint16(m.Whitelist[i])
+               }
+               o.PutUint16(buf[pos:pos+2], uint16(x))
+               pos += 2
+       }
+       return buf, nil
+}
+func (m *ACLInterfaceEtypeWhitelistDetails) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Count
+       m.Count = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.NInput
+       m.NInput = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.Whitelist
+       m.Whitelist = make([]uint16, m.Count)
+       for i := 0; i < len(m.Whitelist); i++ {
+               m.Whitelist[i] = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+       }
+       return nil
 }
 
-// ACLInterfaceEtypeWhitelistDump represents VPP binary API message 'acl_interface_etype_whitelist_dump':
+// ACLInterfaceEtypeWhitelistDump represents VPP binary API message 'acl_interface_etype_whitelist_dump'.
 type ACLInterfaceEtypeWhitelistDump struct {
-       SwIfIndex uint32
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
+func (m *ACLInterfaceEtypeWhitelistDump) Reset() { *m = ACLInterfaceEtypeWhitelistDump{} }
 func (*ACLInterfaceEtypeWhitelistDump) GetMessageName() string {
        return "acl_interface_etype_whitelist_dump"
 }
-func (*ACLInterfaceEtypeWhitelistDump) GetCrcString() string {
-       return "529cb13f"
-}
-func (*ACLInterfaceEtypeWhitelistDump) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (*ACLInterfaceEtypeWhitelistDump) GetCrcString() string            { return "f9e6675e" }
+func (*ACLInterfaceEtypeWhitelistDump) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// ACLInterfaceListDetails represents VPP binary API message 'acl_interface_list_details':
+func (m *ACLInterfaceEtypeWhitelistDump) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       return size
+}
+func (m *ACLInterfaceEtypeWhitelistDump) 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 *ACLInterfaceEtypeWhitelistDump) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLInterfaceListDetails represents VPP binary API message 'acl_interface_list_details'.
 type ACLInterfaceListDetails struct {
-       SwIfIndex uint32
-       Count     uint8 `struc:"sizeof=Acls"`
-       NInput    uint8
-       Acls      []uint32
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Count     uint8                          `binapi:"u8,name=count" json:"count,omitempty" struc:"sizeof=Acls"`
+       NInput    uint8                          `binapi:"u8,name=n_input" json:"n_input,omitempty"`
+       Acls      []uint32                       `binapi:"u32[count],name=acls" json:"acls,omitempty"`
 }
 
-func (*ACLInterfaceListDetails) GetMessageName() string {
-       return "acl_interface_list_details"
-}
-func (*ACLInterfaceListDetails) GetCrcString() string {
-       return "d5e80809"
-}
-func (*ACLInterfaceListDetails) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (m *ACLInterfaceListDetails) Reset()                        { *m = ACLInterfaceListDetails{} }
+func (*ACLInterfaceListDetails) GetMessageName() string          { return "acl_interface_list_details" }
+func (*ACLInterfaceListDetails) GetCrcString() string            { return "e695d256" }
+func (*ACLInterfaceListDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *ACLInterfaceListDetails) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       // field[1] m.Count
+       size += 1
+       // field[1] m.NInput
+       size += 1
+       // field[1] m.Acls
+       size += 4 * len(m.Acls)
+       return size
+}
+func (m *ACLInterfaceListDetails) 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.Count
+       buf[pos] = uint8(len(m.Acls))
+       pos += 1
+       // field[1] m.NInput
+       buf[pos] = uint8(m.NInput)
+       pos += 1
+       // field[1] m.Acls
+       for i := 0; i < len(m.Acls); i++ {
+               var x uint32
+               if i < len(m.Acls) {
+                       x = uint32(m.Acls[i])
+               }
+               o.PutUint32(buf[pos:pos+4], uint32(x))
+               pos += 4
+       }
+       return buf, nil
+}
+func (m *ACLInterfaceListDetails) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Count
+       m.Count = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.NInput
+       m.NInput = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.Acls
+       m.Acls = make([]uint32, m.Count)
+       for i := 0; i < len(m.Acls); i++ {
+               m.Acls[i] = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+       }
+       return nil
 }
 
-// ACLInterfaceListDump represents VPP binary API message 'acl_interface_list_dump':
+// ACLInterfaceListDump represents VPP binary API message 'acl_interface_list_dump'.
 type ACLInterfaceListDump struct {
-       SwIfIndex uint32
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index,default=4.294967295e+09" json:"sw_if_index,omitempty"`
 }
 
-func (*ACLInterfaceListDump) GetMessageName() string {
-       return "acl_interface_list_dump"
-}
-func (*ACLInterfaceListDump) GetCrcString() string {
-       return "529cb13f"
-}
-func (*ACLInterfaceListDump) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *ACLInterfaceListDump) Reset()                        { *m = ACLInterfaceListDump{} }
+func (*ACLInterfaceListDump) GetMessageName() string          { return "acl_interface_list_dump" }
+func (*ACLInterfaceListDump) GetCrcString() string            { return "f9e6675e" }
+func (*ACLInterfaceListDump) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// ACLInterfaceSetACLList represents VPP binary API message 'acl_interface_set_acl_list':
+func (m *ACLInterfaceListDump) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       return size
+}
+func (m *ACLInterfaceListDump) 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 *ACLInterfaceListDump) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLInterfaceSetACLList represents VPP binary API message 'acl_interface_set_acl_list'.
 type ACLInterfaceSetACLList struct {
-       SwIfIndex uint32
-       Count     uint8 `struc:"sizeof=Acls"`
-       NInput    uint8
-       Acls      []uint32
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Count     uint8                          `binapi:"u8,name=count" json:"count,omitempty" struc:"sizeof=Acls"`
+       NInput    uint8                          `binapi:"u8,name=n_input" json:"n_input,omitempty"`
+       Acls      []uint32                       `binapi:"u32[count],name=acls" json:"acls,omitempty"`
 }
 
-func (*ACLInterfaceSetACLList) GetMessageName() string {
-       return "acl_interface_set_acl_list"
-}
-func (*ACLInterfaceSetACLList) GetCrcString() string {
-       return "8baece38"
-}
-func (*ACLInterfaceSetACLList) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *ACLInterfaceSetACLList) Reset()                        { *m = ACLInterfaceSetACLList{} }
+func (*ACLInterfaceSetACLList) GetMessageName() string          { return "acl_interface_set_acl_list" }
+func (*ACLInterfaceSetACLList) GetCrcString() string            { return "473982bd" }
+func (*ACLInterfaceSetACLList) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLInterfaceSetACLList) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       // field[1] m.Count
+       size += 1
+       // field[1] m.NInput
+       size += 1
+       // field[1] m.Acls
+       size += 4 * len(m.Acls)
+       return size
+}
+func (m *ACLInterfaceSetACLList) 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.Count
+       buf[pos] = uint8(len(m.Acls))
+       pos += 1
+       // field[1] m.NInput
+       buf[pos] = uint8(m.NInput)
+       pos += 1
+       // field[1] m.Acls
+       for i := 0; i < len(m.Acls); i++ {
+               var x uint32
+               if i < len(m.Acls) {
+                       x = uint32(m.Acls[i])
+               }
+               o.PutUint32(buf[pos:pos+4], uint32(x))
+               pos += 4
+       }
+       return buf, nil
+}
+func (m *ACLInterfaceSetACLList) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Count
+       m.Count = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.NInput
+       m.NInput = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.Acls
+       m.Acls = make([]uint32, m.Count)
+       for i := 0; i < len(m.Acls); i++ {
+               m.Acls[i] = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+       }
+       return nil
 }
 
-// ACLInterfaceSetACLListReply represents VPP binary API message 'acl_interface_set_acl_list_reply':
+// ACLInterfaceSetACLListReply represents VPP binary API message 'acl_interface_set_acl_list_reply'.
 type ACLInterfaceSetACLListReply struct {
-       Retval int32
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
+func (m *ACLInterfaceSetACLListReply) Reset() { *m = ACLInterfaceSetACLListReply{} }
 func (*ACLInterfaceSetACLListReply) GetMessageName() string {
        return "acl_interface_set_acl_list_reply"
 }
-func (*ACLInterfaceSetACLListReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*ACLInterfaceSetACLListReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (*ACLInterfaceSetACLListReply) GetCrcString() string            { return "e8d4e804" }
+func (*ACLInterfaceSetACLListReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// ACLInterfaceSetEtypeWhitelist represents VPP binary API message 'acl_interface_set_etype_whitelist':
+func (m *ACLInterfaceSetACLListReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *ACLInterfaceSetACLListReply) 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 *ACLInterfaceSetACLListReply) 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
+       return nil
+}
+
+// ACLInterfaceSetEtypeWhitelist represents VPP binary API message 'acl_interface_set_etype_whitelist'.
 type ACLInterfaceSetEtypeWhitelist struct {
-       SwIfIndex uint32
-       Count     uint8 `struc:"sizeof=Whitelist"`
-       NInput    uint8
-       Whitelist []uint16
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Count     uint8                          `binapi:"u8,name=count" json:"count,omitempty" struc:"sizeof=Whitelist"`
+       NInput    uint8                          `binapi:"u8,name=n_input" json:"n_input,omitempty"`
+       Whitelist []uint16                       `binapi:"u16[count],name=whitelist" json:"whitelist,omitempty"`
 }
 
+func (m *ACLInterfaceSetEtypeWhitelist) Reset() { *m = ACLInterfaceSetEtypeWhitelist{} }
 func (*ACLInterfaceSetEtypeWhitelist) GetMessageName() string {
        return "acl_interface_set_etype_whitelist"
 }
-func (*ACLInterfaceSetEtypeWhitelist) GetCrcString() string {
-       return "f515efc5"
-}
-func (*ACLInterfaceSetEtypeWhitelist) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (*ACLInterfaceSetEtypeWhitelist) GetCrcString() string            { return "3f5c2d2d" }
+func (*ACLInterfaceSetEtypeWhitelist) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLInterfaceSetEtypeWhitelist) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       // field[1] m.Count
+       size += 1
+       // field[1] m.NInput
+       size += 1
+       // field[1] m.Whitelist
+       size += 2 * len(m.Whitelist)
+       return size
+}
+func (m *ACLInterfaceSetEtypeWhitelist) 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.Count
+       buf[pos] = uint8(len(m.Whitelist))
+       pos += 1
+       // field[1] m.NInput
+       buf[pos] = uint8(m.NInput)
+       pos += 1
+       // field[1] m.Whitelist
+       for i := 0; i < len(m.Whitelist); i++ {
+               var x uint16
+               if i < len(m.Whitelist) {
+                       x = uint16(m.Whitelist[i])
+               }
+               o.PutUint16(buf[pos:pos+2], uint16(x))
+               pos += 2
+       }
+       return buf, nil
+}
+func (m *ACLInterfaceSetEtypeWhitelist) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Count
+       m.Count = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.NInput
+       m.NInput = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.Whitelist
+       m.Whitelist = make([]uint16, m.Count)
+       for i := 0; i < len(m.Whitelist); i++ {
+               m.Whitelist[i] = uint16(o.Uint16(tmp[pos : pos+2]))
+               pos += 2
+       }
+       return nil
 }
 
-// ACLInterfaceSetEtypeWhitelistReply represents VPP binary API message 'acl_interface_set_etype_whitelist_reply':
+// ACLInterfaceSetEtypeWhitelistReply represents VPP binary API message 'acl_interface_set_etype_whitelist_reply'.
 type ACLInterfaceSetEtypeWhitelistReply struct {
-       Retval int32
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
+func (m *ACLInterfaceSetEtypeWhitelistReply) Reset() { *m = ACLInterfaceSetEtypeWhitelistReply{} }
 func (*ACLInterfaceSetEtypeWhitelistReply) GetMessageName() string {
        return "acl_interface_set_etype_whitelist_reply"
 }
-func (*ACLInterfaceSetEtypeWhitelistReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*ACLInterfaceSetEtypeWhitelistReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (*ACLInterfaceSetEtypeWhitelistReply) GetCrcString() string            { return "e8d4e804" }
+func (*ACLInterfaceSetEtypeWhitelistReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// ACLPluginControlPing represents VPP binary API message 'acl_plugin_control_ping':
+func (m *ACLInterfaceSetEtypeWhitelistReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *ACLInterfaceSetEtypeWhitelistReply) 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 *ACLInterfaceSetEtypeWhitelistReply) 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
+       return nil
+}
+
+// ACLPluginControlPing represents VPP binary API message 'acl_plugin_control_ping'.
 type ACLPluginControlPing struct{}
 
-func (*ACLPluginControlPing) GetMessageName() string {
-       return "acl_plugin_control_ping"
-}
-func (*ACLPluginControlPing) GetCrcString() string {
-       return "51077d14"
+func (m *ACLPluginControlPing) Reset()                        { *m = ACLPluginControlPing{} }
+func (*ACLPluginControlPing) GetMessageName() string          { return "acl_plugin_control_ping" }
+func (*ACLPluginControlPing) GetCrcString() string            { return "51077d14" }
+func (*ACLPluginControlPing) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLPluginControlPing) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       return size
+}
+func (m *ACLPluginControlPing) 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
+       }
+       return buf, nil
 }
-func (*ACLPluginControlPing) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *ACLPluginControlPing) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       return nil
 }
 
-// ACLPluginControlPingReply represents VPP binary API message 'acl_plugin_control_ping_reply':
+// ACLPluginControlPingReply represents VPP binary API message 'acl_plugin_control_ping_reply'.
 type ACLPluginControlPingReply struct {
-       Retval      int32
-       ClientIndex uint32
-       VpePID      uint32
+       Retval      int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
+       ClientIndex uint32 `binapi:"u32,name=client_index" json:"client_index,omitempty"`
+       VpePID      uint32 `binapi:"u32,name=vpe_pid" json:"vpe_pid,omitempty"`
 }
 
-func (*ACLPluginControlPingReply) GetMessageName() string {
-       return "acl_plugin_control_ping_reply"
-}
-func (*ACLPluginControlPingReply) GetCrcString() string {
-       return "f6b0b8ca"
-}
-func (*ACLPluginControlPingReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *ACLPluginControlPingReply) Reset()                        { *m = ACLPluginControlPingReply{} }
+func (*ACLPluginControlPingReply) GetMessageName() string          { return "acl_plugin_control_ping_reply" }
+func (*ACLPluginControlPingReply) GetCrcString() string            { return "f6b0b8ca" }
+func (*ACLPluginControlPingReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// ACLPluginGetConnTableMaxEntries represents VPP binary API message 'acl_plugin_get_conn_table_max_entries':
+func (m *ACLPluginControlPingReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       // field[1] m.ClientIndex
+       size += 4
+       // field[1] m.VpePID
+       size += 4
+       return size
+}
+func (m *ACLPluginControlPingReply) Marshal(b []byte) ([]byte, error) {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       var buf []byte
+       if b == nil {
+               buf = make([]byte, m.Size())
+       } else {
+               buf = b
+       }
+       // field[1] m.Retval
+       o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
+       pos += 4
+       // field[1] m.ClientIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ClientIndex))
+       pos += 4
+       // field[1] m.VpePID
+       o.PutUint32(buf[pos:pos+4], uint32(m.VpePID))
+       pos += 4
+       return buf, nil
+}
+func (m *ACLPluginControlPingReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Retval
+       m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.ClientIndex
+       m.ClientIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.VpePID
+       m.VpePID = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLPluginGetConnTableMaxEntries represents VPP binary API message 'acl_plugin_get_conn_table_max_entries'.
 type ACLPluginGetConnTableMaxEntries struct{}
 
+func (m *ACLPluginGetConnTableMaxEntries) Reset() { *m = ACLPluginGetConnTableMaxEntries{} }
 func (*ACLPluginGetConnTableMaxEntries) GetMessageName() string {
        return "acl_plugin_get_conn_table_max_entries"
 }
-func (*ACLPluginGetConnTableMaxEntries) GetCrcString() string {
-       return "51077d14"
+func (*ACLPluginGetConnTableMaxEntries) GetCrcString() string            { return "51077d14" }
+func (*ACLPluginGetConnTableMaxEntries) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLPluginGetConnTableMaxEntries) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       return size
+}
+func (m *ACLPluginGetConnTableMaxEntries) 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
+       }
+       return buf, nil
 }
-func (*ACLPluginGetConnTableMaxEntries) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *ACLPluginGetConnTableMaxEntries) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       return nil
 }
 
-// ACLPluginGetConnTableMaxEntriesReply represents VPP binary API message 'acl_plugin_get_conn_table_max_entries_reply':
+// ACLPluginGetConnTableMaxEntriesReply represents VPP binary API message 'acl_plugin_get_conn_table_max_entries_reply'.
 type ACLPluginGetConnTableMaxEntriesReply struct {
-       ConnTableMaxEntries uint64
+       ConnTableMaxEntries uint64 `binapi:"u64,name=conn_table_max_entries" json:"conn_table_max_entries,omitempty"`
 }
 
+func (m *ACLPluginGetConnTableMaxEntriesReply) Reset() { *m = ACLPluginGetConnTableMaxEntriesReply{} }
 func (*ACLPluginGetConnTableMaxEntriesReply) GetMessageName() string {
        return "acl_plugin_get_conn_table_max_entries_reply"
 }
-func (*ACLPluginGetConnTableMaxEntriesReply) GetCrcString() string {
-       return "7a096d3d"
-}
+func (*ACLPluginGetConnTableMaxEntriesReply) GetCrcString() string { return "7a096d3d" }
 func (*ACLPluginGetConnTableMaxEntriesReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLPluginGetVersion represents VPP binary API message 'acl_plugin_get_version':
+func (m *ACLPluginGetConnTableMaxEntriesReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ConnTableMaxEntries
+       size += 8
+       return size
+}
+func (m *ACLPluginGetConnTableMaxEntriesReply) 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.ConnTableMaxEntries
+       o.PutUint64(buf[pos:pos+8], uint64(m.ConnTableMaxEntries))
+       pos += 8
+       return buf, nil
+}
+func (m *ACLPluginGetConnTableMaxEntriesReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ConnTableMaxEntries
+       m.ConnTableMaxEntries = uint64(o.Uint64(tmp[pos : pos+8]))
+       pos += 8
+       return nil
+}
+
+// ACLPluginGetVersion represents VPP binary API message 'acl_plugin_get_version'.
 type ACLPluginGetVersion struct{}
 
-func (*ACLPluginGetVersion) GetMessageName() string {
-       return "acl_plugin_get_version"
-}
-func (*ACLPluginGetVersion) GetCrcString() string {
-       return "51077d14"
+func (m *ACLPluginGetVersion) Reset()                        { *m = ACLPluginGetVersion{} }
+func (*ACLPluginGetVersion) GetMessageName() string          { return "acl_plugin_get_version" }
+func (*ACLPluginGetVersion) GetCrcString() string            { return "51077d14" }
+func (*ACLPluginGetVersion) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLPluginGetVersion) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       return size
+}
+func (m *ACLPluginGetVersion) 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
+       }
+       return buf, nil
 }
-func (*ACLPluginGetVersion) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *ACLPluginGetVersion) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       return nil
 }
 
-// ACLPluginGetVersionReply represents VPP binary API message 'acl_plugin_get_version_reply':
+// ACLPluginGetVersionReply represents VPP binary API message 'acl_plugin_get_version_reply'.
 type ACLPluginGetVersionReply struct {
-       Major uint32
-       Minor uint32
+       Major uint32 `binapi:"u32,name=major" json:"major,omitempty"`
+       Minor uint32 `binapi:"u32,name=minor" json:"minor,omitempty"`
 }
 
-func (*ACLPluginGetVersionReply) GetMessageName() string {
-       return "acl_plugin_get_version_reply"
-}
-func (*ACLPluginGetVersionReply) GetCrcString() string {
-       return "9b32cf86"
+func (m *ACLPluginGetVersionReply) Reset()                        { *m = ACLPluginGetVersionReply{} }
+func (*ACLPluginGetVersionReply) GetMessageName() string          { return "acl_plugin_get_version_reply" }
+func (*ACLPluginGetVersionReply) GetCrcString() string            { return "9b32cf86" }
+func (*ACLPluginGetVersionReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *ACLPluginGetVersionReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Major
+       size += 4
+       // field[1] m.Minor
+       size += 4
+       return size
+}
+func (m *ACLPluginGetVersionReply) 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.Major
+       o.PutUint32(buf[pos:pos+4], uint32(m.Major))
+       pos += 4
+       // field[1] m.Minor
+       o.PutUint32(buf[pos:pos+4], uint32(m.Minor))
+       pos += 4
+       return buf, nil
+}
+func (m *ACLPluginGetVersionReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Major
+       m.Major = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Minor
+       m.Minor = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// ACLStatsIntfCountersEnable represents VPP binary API message 'acl_stats_intf_counters_enable'.
+type ACLStatsIntfCountersEnable struct {
+       Enable bool `binapi:"bool,name=enable" json:"enable,omitempty"`
+}
+
+func (m *ACLStatsIntfCountersEnable) Reset()                        { *m = ACLStatsIntfCountersEnable{} }
+func (*ACLStatsIntfCountersEnable) GetMessageName() string          { return "acl_stats_intf_counters_enable" }
+func (*ACLStatsIntfCountersEnable) GetCrcString() string            { return "b3e225d2" }
+func (*ACLStatsIntfCountersEnable) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *ACLStatsIntfCountersEnable) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Enable
+       size += 1
+       return size
+}
+func (m *ACLStatsIntfCountersEnable) 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.Enable
+       if m.Enable {
+               buf[pos] = 1
+       }
+       pos += 1
+       return buf, nil
 }
-func (*ACLPluginGetVersionReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (m *ACLStatsIntfCountersEnable) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Enable
+       m.Enable = tmp[pos] != 0
+       pos += 1
+       return nil
 }
 
-// MacipACLAdd represents VPP binary API message 'macip_acl_add':
-type MacipACLAdd struct {
-       Tag   []byte `struc:"[64]byte"`
-       Count uint32 `struc:"sizeof=R"`
-       R     []MacipACLRule
+// ACLStatsIntfCountersEnableReply represents VPP binary API message 'acl_stats_intf_counters_enable_reply'.
+type ACLStatsIntfCountersEnableReply struct {
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*MacipACLAdd) GetMessageName() string {
-       return "macip_acl_add"
+func (m *ACLStatsIntfCountersEnableReply) Reset() { *m = ACLStatsIntfCountersEnableReply{} }
+func (*ACLStatsIntfCountersEnableReply) GetMessageName() string {
+       return "acl_stats_intf_counters_enable_reply"
 }
-func (*MacipACLAdd) GetCrcString() string {
-       return "b3d3d65a"
+func (*ACLStatsIntfCountersEnableReply) GetCrcString() string            { return "e8d4e804" }
+func (*ACLStatsIntfCountersEnableReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *ACLStatsIntfCountersEnableReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *ACLStatsIntfCountersEnableReply) 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 *ACLStatsIntfCountersEnableReply) 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
+       return nil
+}
+
+// MacipACLAdd represents VPP binary API message 'macip_acl_add'.
+type MacipACLAdd struct {
+       Tag   string         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       Count uint32         `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=R"`
+       R     []MacipACLRule `binapi:"macip_acl_rule[count],name=r" json:"r,omitempty"`
 }
-func (*MacipACLAdd) GetMessageType() api.MessageType {
-       return api.RequestMessage
+
+func (m *MacipACLAdd) Reset()                        { *m = MacipACLAdd{} }
+func (*MacipACLAdd) GetMessageName() string          { return "macip_acl_add" }
+func (*MacipACLAdd) GetCrcString() string            { return "d648fd0a" }
+func (*MacipACLAdd) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *MacipACLAdd) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Tag
+       size += 64
+       // field[1] m.Count
+       size += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var s1 MacipACLRule
+               _ = s1
+               if j1 < len(m.R) {
+                       s1 = m.R[j1]
+               }
+               // field[2] s1.IsPermit
+               size += 1
+               // field[2] s1.SrcMac
+               size += 6
+               // field[2] s1.SrcMacMask
+               size += 6
+               // field[2] s1.SrcPrefix
+               // field[3] s1.SrcPrefix.Address
+               // field[4] s1.SrcPrefix.Address.Af
+               size += 1
+               // field[4] s1.SrcPrefix.Address.Un
+               size += 16
+               // field[3] s1.SrcPrefix.Len
+               size += 1
+       }
+       return size
+}
+func (m *MacipACLAdd) 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.Tag
+       copy(buf[pos:pos+64], m.Tag)
+       pos += 64
+       // field[1] m.Count
+       o.PutUint32(buf[pos:pos+4], uint32(len(m.R)))
+       pos += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var v1 MacipACLRule
+               if j1 < len(m.R) {
+                       v1 = m.R[j1]
+               }
+               // field[2] v1.IsPermit
+               buf[pos] = uint8(v1.IsPermit)
+               pos += 1
+               // field[2] v1.SrcMac
+               for i := 0; i < 6; i++ {
+                       var x uint8
+                       if i < len(v1.SrcMac) {
+                               x = uint8(v1.SrcMac[i])
+                       }
+                       buf[pos] = uint8(x)
+                       pos += 1
+               }
+               // field[2] v1.SrcMacMask
+               for i := 0; i < 6; i++ {
+                       var x uint8
+                       if i < len(v1.SrcMacMask) {
+                               x = uint8(v1.SrcMacMask[i])
+                       }
+                       buf[pos] = uint8(x)
+                       pos += 1
+               }
+               // field[2] v1.SrcPrefix
+               // field[3] v1.SrcPrefix.Address
+               // field[4] v1.SrcPrefix.Address.Af
+               buf[pos] = uint8(v1.SrcPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.SrcPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.SrcPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.SrcPrefix.Len
+               buf[pos] = uint8(v1.SrcPrefix.Len)
+               pos += 1
+       }
+       return buf, nil
+}
+func (m *MacipACLAdd) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Tag
+       {
+               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
+               m.Tag = codec.DecodeString(tmp[pos : pos+nul])
+               pos += 64
+       }
+       // field[1] m.Count
+       m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.R
+       m.R = make([]MacipACLRule, int(m.Count))
+       for j1 := 0; j1 < int(m.Count); j1++ {
+               // field[2] m.R[j1].IsPermit
+               m.R[j1].IsPermit = ACLAction(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcMac
+               for i := 0; i < len(m.R[j1].SrcMac); i++ {
+                       m.R[j1].SrcMac[i] = uint8(tmp[pos])
+                       pos += 1
+               }
+               // field[2] m.R[j1].SrcMacMask
+               for i := 0; i < len(m.R[j1].SrcMacMask); i++ {
+                       m.R[j1].SrcMacMask[i] = uint8(tmp[pos])
+                       pos += 1
+               }
+               // field[2] m.R[j1].SrcPrefix
+               // field[3] m.R[j1].SrcPrefix.Address
+               // field[4] m.R[j1].SrcPrefix.Address.Af
+               m.R[j1].SrcPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].SrcPrefix.Address.Un
+               copy(m.R[j1].SrcPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].SrcPrefix.Len
+               m.R[j1].SrcPrefix.Len = uint8(tmp[pos])
+               pos += 1
+       }
+       return nil
 }
 
-// MacipACLAddReplace represents VPP binary API message 'macip_acl_add_replace':
+// MacipACLAddReplace represents VPP binary API message 'macip_acl_add_replace'.
 type MacipACLAddReplace struct {
-       ACLIndex uint32
-       Tag      []byte `struc:"[64]byte"`
-       Count    uint32 `struc:"sizeof=R"`
-       R        []MacipACLRule
+       ACLIndex uint32         `binapi:"u32,name=acl_index,default=4.294967295e+09" json:"acl_index,omitempty"`
+       Tag      string         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       Count    uint32         `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=R"`
+       R        []MacipACLRule `binapi:"macip_acl_rule[count],name=r" json:"r,omitempty"`
 }
 
-func (*MacipACLAddReplace) GetMessageName() string {
-       return "macip_acl_add_replace"
-}
-func (*MacipACLAddReplace) GetCrcString() string {
-       return "a0e8c01b"
-}
-func (*MacipACLAddReplace) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *MacipACLAddReplace) Reset()                        { *m = MacipACLAddReplace{} }
+func (*MacipACLAddReplace) GetMessageName() string          { return "macip_acl_add_replace" }
+func (*MacipACLAddReplace) GetCrcString() string            { return "e34402a7" }
+func (*MacipACLAddReplace) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *MacipACLAddReplace) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Tag
+       size += 64
+       // field[1] m.Count
+       size += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var s1 MacipACLRule
+               _ = s1
+               if j1 < len(m.R) {
+                       s1 = m.R[j1]
+               }
+               // field[2] s1.IsPermit
+               size += 1
+               // field[2] s1.SrcMac
+               size += 6
+               // field[2] s1.SrcMacMask
+               size += 6
+               // field[2] s1.SrcPrefix
+               // field[3] s1.SrcPrefix.Address
+               // field[4] s1.SrcPrefix.Address.Af
+               size += 1
+               // field[4] s1.SrcPrefix.Address.Un
+               size += 16
+               // field[3] s1.SrcPrefix.Len
+               size += 1
+       }
+       return size
+}
+func (m *MacipACLAddReplace) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Tag
+       copy(buf[pos:pos+64], m.Tag)
+       pos += 64
+       // field[1] m.Count
+       o.PutUint32(buf[pos:pos+4], uint32(len(m.R)))
+       pos += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var v1 MacipACLRule
+               if j1 < len(m.R) {
+                       v1 = m.R[j1]
+               }
+               // field[2] v1.IsPermit
+               buf[pos] = uint8(v1.IsPermit)
+               pos += 1
+               // field[2] v1.SrcMac
+               for i := 0; i < 6; i++ {
+                       var x uint8
+                       if i < len(v1.SrcMac) {
+                               x = uint8(v1.SrcMac[i])
+                       }
+                       buf[pos] = uint8(x)
+                       pos += 1
+               }
+               // field[2] v1.SrcMacMask
+               for i := 0; i < 6; i++ {
+                       var x uint8
+                       if i < len(v1.SrcMacMask) {
+                               x = uint8(v1.SrcMacMask[i])
+                       }
+                       buf[pos] = uint8(x)
+                       pos += 1
+               }
+               // field[2] v1.SrcPrefix
+               // field[3] v1.SrcPrefix.Address
+               // field[4] v1.SrcPrefix.Address.Af
+               buf[pos] = uint8(v1.SrcPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.SrcPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.SrcPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.SrcPrefix.Len
+               buf[pos] = uint8(v1.SrcPrefix.Len)
+               pos += 1
+       }
+       return buf, nil
+}
+func (m *MacipACLAddReplace) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Tag
+       {
+               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
+               m.Tag = codec.DecodeString(tmp[pos : pos+nul])
+               pos += 64
+       }
+       // field[1] m.Count
+       m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.R
+       m.R = make([]MacipACLRule, int(m.Count))
+       for j1 := 0; j1 < int(m.Count); j1++ {
+               // field[2] m.R[j1].IsPermit
+               m.R[j1].IsPermit = ACLAction(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcMac
+               for i := 0; i < len(m.R[j1].SrcMac); i++ {
+                       m.R[j1].SrcMac[i] = uint8(tmp[pos])
+                       pos += 1
+               }
+               // field[2] m.R[j1].SrcMacMask
+               for i := 0; i < len(m.R[j1].SrcMacMask); i++ {
+                       m.R[j1].SrcMacMask[i] = uint8(tmp[pos])
+                       pos += 1
+               }
+               // field[2] m.R[j1].SrcPrefix
+               // field[3] m.R[j1].SrcPrefix.Address
+               // field[4] m.R[j1].SrcPrefix.Address.Af
+               m.R[j1].SrcPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].SrcPrefix.Address.Un
+               copy(m.R[j1].SrcPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].SrcPrefix.Len
+               m.R[j1].SrcPrefix.Len = uint8(tmp[pos])
+               pos += 1
+       }
+       return nil
 }
 
-// MacipACLAddReplaceReply represents VPP binary API message 'macip_acl_add_replace_reply':
+// MacipACLAddReplaceReply represents VPP binary API message 'macip_acl_add_replace_reply'.
 type MacipACLAddReplaceReply struct {
-       ACLIndex uint32
-       Retval   int32
+       ACLIndex uint32 `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
+       Retval   int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*MacipACLAddReplaceReply) GetMessageName() string {
-       return "macip_acl_add_replace_reply"
-}
-func (*MacipACLAddReplaceReply) GetCrcString() string {
-       return "ac407b0c"
-}
-func (*MacipACLAddReplaceReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *MacipACLAddReplaceReply) Reset()                        { *m = MacipACLAddReplaceReply{} }
+func (*MacipACLAddReplaceReply) GetMessageName() string          { return "macip_acl_add_replace_reply" }
+func (*MacipACLAddReplaceReply) GetCrcString() string            { return "ac407b0c" }
+func (*MacipACLAddReplaceReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// MacipACLAddReply represents VPP binary API message 'macip_acl_add_reply':
+func (m *MacipACLAddReplaceReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *MacipACLAddReplaceReply) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Retval
+       o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
+       pos += 4
+       return buf, nil
+}
+func (m *MacipACLAddReplaceReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Retval
+       m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// MacipACLAddReply represents VPP binary API message 'macip_acl_add_reply'.
 type MacipACLAddReply struct {
-       ACLIndex uint32
-       Retval   int32
+       ACLIndex uint32 `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
+       Retval   int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*MacipACLAddReply) GetMessageName() string {
-       return "macip_acl_add_reply"
-}
-func (*MacipACLAddReply) GetCrcString() string {
-       return "ac407b0c"
-}
-func (*MacipACLAddReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *MacipACLAddReply) Reset()                        { *m = MacipACLAddReply{} }
+func (*MacipACLAddReply) GetMessageName() string          { return "macip_acl_add_reply" }
+func (*MacipACLAddReply) GetCrcString() string            { return "ac407b0c" }
+func (*MacipACLAddReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// MacipACLDel represents VPP binary API message 'macip_acl_del':
+func (m *MacipACLAddReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *MacipACLAddReply) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Retval
+       o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
+       pos += 4
+       return buf, nil
+}
+func (m *MacipACLAddReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Retval
+       m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// MacipACLDel represents VPP binary API message 'macip_acl_del'.
 type MacipACLDel struct {
-       ACLIndex uint32
+       ACLIndex uint32 `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
 }
 
-func (*MacipACLDel) GetMessageName() string {
-       return "macip_acl_del"
-}
-func (*MacipACLDel) GetCrcString() string {
-       return "ef34fea4"
-}
-func (*MacipACLDel) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *MacipACLDel) Reset()                        { *m = MacipACLDel{} }
+func (*MacipACLDel) GetMessageName() string          { return "macip_acl_del" }
+func (*MacipACLDel) GetCrcString() string            { return "ef34fea4" }
+func (*MacipACLDel) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// MacipACLDelReply represents VPP binary API message 'macip_acl_del_reply':
+func (m *MacipACLDel) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       return size
+}
+func (m *MacipACLDel) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       return buf, nil
+}
+func (m *MacipACLDel) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// MacipACLDelReply represents VPP binary API message 'macip_acl_del_reply'.
 type MacipACLDelReply struct {
-       Retval int32
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
-func (*MacipACLDelReply) GetMessageName() string {
-       return "macip_acl_del_reply"
-}
-func (*MacipACLDelReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*MacipACLDelReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (m *MacipACLDelReply) Reset()                        { *m = MacipACLDelReply{} }
+func (*MacipACLDelReply) GetMessageName() string          { return "macip_acl_del_reply" }
+func (*MacipACLDelReply) GetCrcString() string            { return "e8d4e804" }
+func (*MacipACLDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// MacipACLDetails represents VPP binary API message 'macip_acl_details':
+func (m *MacipACLDelReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *MacipACLDelReply) 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 *MacipACLDelReply) 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
+       return nil
+}
+
+// MacipACLDetails represents VPP binary API message 'macip_acl_details'.
 type MacipACLDetails struct {
-       ACLIndex uint32
-       Tag      []byte `struc:"[64]byte"`
-       Count    uint32 `struc:"sizeof=R"`
-       R        []MacipACLRule
+       ACLIndex uint32         `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
+       Tag      string         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       Count    uint32         `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=R"`
+       R        []MacipACLRule `binapi:"macip_acl_rule[count],name=r" json:"r,omitempty"`
 }
 
-func (*MacipACLDetails) GetMessageName() string {
-       return "macip_acl_details"
-}
-func (*MacipACLDetails) GetCrcString() string {
-       return "dd2b55ba"
-}
-func (*MacipACLDetails) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (m *MacipACLDetails) Reset()                        { *m = MacipACLDetails{} }
+func (*MacipACLDetails) GetMessageName() string          { return "macip_acl_details" }
+func (*MacipACLDetails) GetCrcString() string            { return "57c7482f" }
+func (*MacipACLDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *MacipACLDetails) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       // field[1] m.Tag
+       size += 64
+       // field[1] m.Count
+       size += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var s1 MacipACLRule
+               _ = s1
+               if j1 < len(m.R) {
+                       s1 = m.R[j1]
+               }
+               // field[2] s1.IsPermit
+               size += 1
+               // field[2] s1.SrcMac
+               size += 6
+               // field[2] s1.SrcMacMask
+               size += 6
+               // field[2] s1.SrcPrefix
+               // field[3] s1.SrcPrefix.Address
+               // field[4] s1.SrcPrefix.Address.Af
+               size += 1
+               // field[4] s1.SrcPrefix.Address.Un
+               size += 16
+               // field[3] s1.SrcPrefix.Len
+               size += 1
+       }
+       return size
+}
+func (m *MacipACLDetails) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       // field[1] m.Tag
+       copy(buf[pos:pos+64], m.Tag)
+       pos += 64
+       // field[1] m.Count
+       o.PutUint32(buf[pos:pos+4], uint32(len(m.R)))
+       pos += 4
+       // field[1] m.R
+       for j1 := 0; j1 < len(m.R); j1++ {
+               var v1 MacipACLRule
+               if j1 < len(m.R) {
+                       v1 = m.R[j1]
+               }
+               // field[2] v1.IsPermit
+               buf[pos] = uint8(v1.IsPermit)
+               pos += 1
+               // field[2] v1.SrcMac
+               for i := 0; i < 6; i++ {
+                       var x uint8
+                       if i < len(v1.SrcMac) {
+                               x = uint8(v1.SrcMac[i])
+                       }
+                       buf[pos] = uint8(x)
+                       pos += 1
+               }
+               // field[2] v1.SrcMacMask
+               for i := 0; i < 6; i++ {
+                       var x uint8
+                       if i < len(v1.SrcMacMask) {
+                               x = uint8(v1.SrcMacMask[i])
+                       }
+                       buf[pos] = uint8(x)
+                       pos += 1
+               }
+               // field[2] v1.SrcPrefix
+               // field[3] v1.SrcPrefix.Address
+               // field[4] v1.SrcPrefix.Address.Af
+               buf[pos] = uint8(v1.SrcPrefix.Address.Af)
+               pos += 1
+               // field[4] v1.SrcPrefix.Address.Un
+               copy(buf[pos:pos+16], v1.SrcPrefix.Address.Un.XXX_UnionData[:])
+               pos += 16
+               // field[3] v1.SrcPrefix.Len
+               buf[pos] = uint8(v1.SrcPrefix.Len)
+               pos += 1
+       }
+       return buf, nil
+}
+func (m *MacipACLDetails) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Tag
+       {
+               nul := bytes.Index(tmp[pos:pos+64], []byte{0x00})
+               m.Tag = codec.DecodeString(tmp[pos : pos+nul])
+               pos += 64
+       }
+       // field[1] m.Count
+       m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.R
+       m.R = make([]MacipACLRule, int(m.Count))
+       for j1 := 0; j1 < int(m.Count); j1++ {
+               // field[2] m.R[j1].IsPermit
+               m.R[j1].IsPermit = ACLAction(tmp[pos])
+               pos += 1
+               // field[2] m.R[j1].SrcMac
+               for i := 0; i < len(m.R[j1].SrcMac); i++ {
+                       m.R[j1].SrcMac[i] = uint8(tmp[pos])
+                       pos += 1
+               }
+               // field[2] m.R[j1].SrcMacMask
+               for i := 0; i < len(m.R[j1].SrcMacMask); i++ {
+                       m.R[j1].SrcMacMask[i] = uint8(tmp[pos])
+                       pos += 1
+               }
+               // field[2] m.R[j1].SrcPrefix
+               // field[3] m.R[j1].SrcPrefix.Address
+               // field[4] m.R[j1].SrcPrefix.Address.Af
+               m.R[j1].SrcPrefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+               pos += 1
+               // field[4] m.R[j1].SrcPrefix.Address.Un
+               copy(m.R[j1].SrcPrefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[3] m.R[j1].SrcPrefix.Len
+               m.R[j1].SrcPrefix.Len = uint8(tmp[pos])
+               pos += 1
+       }
+       return nil
 }
 
-// MacipACLDump represents VPP binary API message 'macip_acl_dump':
+// MacipACLDump represents VPP binary API message 'macip_acl_dump'.
 type MacipACLDump struct {
-       ACLIndex uint32
+       ACLIndex uint32 `binapi:"u32,name=acl_index,default=4.294967295e+09" json:"acl_index,omitempty"`
 }
 
-func (*MacipACLDump) GetMessageName() string {
-       return "macip_acl_dump"
-}
-func (*MacipACLDump) GetCrcString() string {
-       return "ef34fea4"
-}
-func (*MacipACLDump) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *MacipACLDump) Reset()                        { *m = MacipACLDump{} }
+func (*MacipACLDump) GetMessageName() string          { return "macip_acl_dump" }
+func (*MacipACLDump) GetCrcString() string            { return "ef34fea4" }
+func (*MacipACLDump) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// MacipACLInterfaceAddDel represents VPP binary API message 'macip_acl_interface_add_del':
+func (m *MacipACLDump) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.ACLIndex
+       size += 4
+       return size
+}
+func (m *MacipACLDump) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       return buf, nil
+}
+func (m *MacipACLDump) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// MacipACLInterfaceAddDel represents VPP binary API message 'macip_acl_interface_add_del'.
 type MacipACLInterfaceAddDel struct {
-       IsAdd     uint8
-       SwIfIndex uint32
-       ACLIndex  uint32
+       IsAdd     bool                           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       ACLIndex  uint32                         `binapi:"u32,name=acl_index" json:"acl_index,omitempty"`
 }
 
-func (*MacipACLInterfaceAddDel) GetMessageName() string {
-       return "macip_acl_interface_add_del"
-}
-func (*MacipACLInterfaceAddDel) GetCrcString() string {
-       return "6a6be97c"
-}
-func (*MacipACLInterfaceAddDel) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *MacipACLInterfaceAddDel) Reset()                        { *m = MacipACLInterfaceAddDel{} }
+func (*MacipACLInterfaceAddDel) GetMessageName() string          { return "macip_acl_interface_add_del" }
+func (*MacipACLInterfaceAddDel) GetCrcString() string            { return "4b8690b1" }
+func (*MacipACLInterfaceAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
 
-// MacipACLInterfaceAddDelReply represents VPP binary API message 'macip_acl_interface_add_del_reply':
+func (m *MacipACLInterfaceAddDel) 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.ACLIndex
+       size += 4
+       return size
+}
+func (m *MacipACLInterfaceAddDel) 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.ACLIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.ACLIndex))
+       pos += 4
+       return buf, nil
+}
+func (m *MacipACLInterfaceAddDel) 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 = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.ACLIndex
+       m.ACLIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// MacipACLInterfaceAddDelReply represents VPP binary API message 'macip_acl_interface_add_del_reply'.
 type MacipACLInterfaceAddDelReply struct {
-       Retval int32
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
 }
 
+func (m *MacipACLInterfaceAddDelReply) Reset() { *m = MacipACLInterfaceAddDelReply{} }
 func (*MacipACLInterfaceAddDelReply) GetMessageName() string {
        return "macip_acl_interface_add_del_reply"
 }
-func (*MacipACLInterfaceAddDelReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*MacipACLInterfaceAddDelReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
+func (*MacipACLInterfaceAddDelReply) GetCrcString() string            { return "e8d4e804" }
+func (*MacipACLInterfaceAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
 
-// MacipACLInterfaceGet represents VPP binary API message 'macip_acl_interface_get':
+func (m *MacipACLInterfaceAddDelReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *MacipACLInterfaceAddDelReply) 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 *MacipACLInterfaceAddDelReply) 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
+       return nil
+}
+
+// MacipACLInterfaceGet represents VPP binary API message 'macip_acl_interface_get'.
 type MacipACLInterfaceGet struct{}
 
-func (*MacipACLInterfaceGet) GetMessageName() string {
-       return "macip_acl_interface_get"
-}
-func (*MacipACLInterfaceGet) GetCrcString() string {
-       return "51077d14"
+func (m *MacipACLInterfaceGet) Reset()                        { *m = MacipACLInterfaceGet{} }
+func (*MacipACLInterfaceGet) GetMessageName() string          { return "macip_acl_interface_get" }
+func (*MacipACLInterfaceGet) GetCrcString() string            { return "51077d14" }
+func (*MacipACLInterfaceGet) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *MacipACLInterfaceGet) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       return size
+}
+func (m *MacipACLInterfaceGet) 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
+       }
+       return buf, nil
 }
-func (*MacipACLInterfaceGet) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *MacipACLInterfaceGet) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       return nil
 }
 
-// MacipACLInterfaceGetReply represents VPP binary API message 'macip_acl_interface_get_reply':
+// MacipACLInterfaceGetReply represents VPP binary API message 'macip_acl_interface_get_reply'.
 type MacipACLInterfaceGetReply struct {
-       Count uint32 `struc:"sizeof=Acls"`
-       Acls  []uint32
+       Count uint32   `binapi:"u32,name=count" json:"count,omitempty" struc:"sizeof=Acls"`
+       Acls  []uint32 `binapi:"u32[count],name=acls" json:"acls,omitempty"`
 }
 
-func (*MacipACLInterfaceGetReply) GetMessageName() string {
-       return "macip_acl_interface_get_reply"
-}
-func (*MacipACLInterfaceGetReply) GetCrcString() string {
-       return "accf9b05"
-}
-func (*MacipACLInterfaceGetReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (m *MacipACLInterfaceGetReply) Reset()                        { *m = MacipACLInterfaceGetReply{} }
+func (*MacipACLInterfaceGetReply) GetMessageName() string          { return "macip_acl_interface_get_reply" }
+func (*MacipACLInterfaceGetReply) GetCrcString() string            { return "accf9b05" }
+func (*MacipACLInterfaceGetReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *MacipACLInterfaceGetReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Count
+       size += 4
+       // field[1] m.Acls
+       size += 4 * len(m.Acls)
+       return size
+}
+func (m *MacipACLInterfaceGetReply) 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.Count
+       o.PutUint32(buf[pos:pos+4], uint32(len(m.Acls)))
+       pos += 4
+       // field[1] m.Acls
+       for i := 0; i < len(m.Acls); i++ {
+               var x uint32
+               if i < len(m.Acls) {
+                       x = uint32(m.Acls[i])
+               }
+               o.PutUint32(buf[pos:pos+4], uint32(x))
+               pos += 4
+       }
+       return buf, nil
+}
+func (m *MacipACLInterfaceGetReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Count
+       m.Count = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Acls
+       m.Acls = make([]uint32, m.Count)
+       for i := 0; i < len(m.Acls); i++ {
+               m.Acls[i] = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+       }
+       return nil
 }
 
-// MacipACLInterfaceListDetails represents VPP binary API message 'macip_acl_interface_list_details':
+// MacipACLInterfaceListDetails represents VPP binary API message 'macip_acl_interface_list_details'.
 type MacipACLInterfaceListDetails struct {
-       SwIfIndex uint32
-       Count     uint8 `struc:"sizeof=Acls"`
-       Acls      []uint32
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Count     uint8                          `binapi:"u8,name=count" json:"count,omitempty" struc:"sizeof=Acls"`
+       Acls      []uint32                       `binapi:"u32[count],name=acls" json:"acls,omitempty"`
 }
 
+func (m *MacipACLInterfaceListDetails) Reset() { *m = MacipACLInterfaceListDetails{} }
 func (*MacipACLInterfaceListDetails) GetMessageName() string {
        return "macip_acl_interface_list_details"
 }
-func (*MacipACLInterfaceListDetails) GetCrcString() string {
-       return "29783fa0"
-}
-func (*MacipACLInterfaceListDetails) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (*MacipACLInterfaceListDetails) GetCrcString() string            { return "a0c5d56d" }
+func (*MacipACLInterfaceListDetails) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *MacipACLInterfaceListDetails) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       // field[1] m.Count
+       size += 1
+       // field[1] m.Acls
+       size += 4 * len(m.Acls)
+       return size
+}
+func (m *MacipACLInterfaceListDetails) 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.Count
+       buf[pos] = uint8(len(m.Acls))
+       pos += 1
+       // field[1] m.Acls
+       for i := 0; i < len(m.Acls); i++ {
+               var x uint32
+               if i < len(m.Acls) {
+                       x = uint32(m.Acls[i])
+               }
+               o.PutUint32(buf[pos:pos+4], uint32(x))
+               pos += 4
+       }
+       return buf, nil
+}
+func (m *MacipACLInterfaceListDetails) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Count
+       m.Count = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.Acls
+       m.Acls = make([]uint32, m.Count)
+       for i := 0; i < len(m.Acls); i++ {
+               m.Acls[i] = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+       }
+       return nil
 }
 
-// MacipACLInterfaceListDump represents VPP binary API message 'macip_acl_interface_list_dump':
+// MacipACLInterfaceListDump represents VPP binary API message 'macip_acl_interface_list_dump'.
 type MacipACLInterfaceListDump struct {
-       SwIfIndex uint32
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
-func (*MacipACLInterfaceListDump) GetMessageName() string {
-       return "macip_acl_interface_list_dump"
-}
-func (*MacipACLInterfaceListDump) GetCrcString() string {
-       return "529cb13f"
-}
-func (*MacipACLInterfaceListDump) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
+func (m *MacipACLInterfaceListDump) Reset()                        { *m = MacipACLInterfaceListDump{} }
+func (*MacipACLInterfaceListDump) GetMessageName() string          { return "macip_acl_interface_list_dump" }
+func (*MacipACLInterfaceListDump) GetCrcString() string            { return "f9e6675e" }
+func (*MacipACLInterfaceListDump) GetMessageType() api.MessageType { return api.RequestMessage }
 
-func init() {
+func (m *MacipACLInterfaceListDump) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.SwIfIndex
+       size += 4
+       return size
+}
+func (m *MacipACLInterfaceListDump) 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 *MacipACLInterfaceListDump) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.SwIfIndex
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+func init() { file_acl_binapi_init() }
+func file_acl_binapi_init() {
        api.RegisterMessage((*ACLAddReplace)(nil), "acl.ACLAddReplace")
        api.RegisterMessage((*ACLAddReplaceReply)(nil), "acl.ACLAddReplaceReply")
        api.RegisterMessage((*ACLDel)(nil), "acl.ACLDel")
@@ -679,6 +2826,8 @@ func init() {
        api.RegisterMessage((*ACLPluginGetConnTableMaxEntriesReply)(nil), "acl.ACLPluginGetConnTableMaxEntriesReply")
        api.RegisterMessage((*ACLPluginGetVersion)(nil), "acl.ACLPluginGetVersion")
        api.RegisterMessage((*ACLPluginGetVersionReply)(nil), "acl.ACLPluginGetVersionReply")
+       api.RegisterMessage((*ACLStatsIntfCountersEnable)(nil), "acl.ACLStatsIntfCountersEnable")
+       api.RegisterMessage((*ACLStatsIntfCountersEnableReply)(nil), "acl.ACLStatsIntfCountersEnableReply")
        api.RegisterMessage((*MacipACLAdd)(nil), "acl.MacipACLAdd")
        api.RegisterMessage((*MacipACLAddReplace)(nil), "acl.MacipACLAddReplace")
        api.RegisterMessage((*MacipACLAddReplaceReply)(nil), "acl.MacipACLAddReplaceReply")
@@ -720,6 +2869,8 @@ func AllMessages() []api.Message {
                (*ACLPluginGetConnTableMaxEntriesReply)(nil),
                (*ACLPluginGetVersion)(nil),
                (*ACLPluginGetVersionReply)(nil),
+               (*ACLStatsIntfCountersEnable)(nil),
+               (*ACLStatsIntfCountersEnableReply)(nil),
                (*MacipACLAdd)(nil),
                (*MacipACLAddReplace)(nil),
                (*MacipACLAddReplaceReply)(nil),
@@ -737,234 +2888,16 @@ func AllMessages() []api.Message {
        }
 }
 
-// Service represents services in VPP binary API.
-type Service interface {
-       DumpACL(ctx context.Context, in *ACLDump) ([]*ACLDetails, error)
-       DumpACLInterfaceEtypeWhitelist(ctx context.Context, in *ACLInterfaceEtypeWhitelistDump) ([]*ACLInterfaceEtypeWhitelistDetails, error)
-       DumpACLInterfaceList(ctx context.Context, in *ACLInterfaceListDump) ([]*ACLInterfaceListDetails, error)
-       DumpMacipACL(ctx context.Context, in *MacipACLDump) ([]*MacipACLDetails, error)
-       DumpMacipACLInterfaceList(ctx context.Context, in *MacipACLInterfaceListDump) ([]*MacipACLInterfaceListDetails, error)
-       ACLAddReplace(ctx context.Context, in *ACLAddReplace) (*ACLAddReplaceReply, error)
-       ACLDel(ctx context.Context, in *ACLDel) (*ACLDelReply, error)
-       ACLInterfaceAddDel(ctx context.Context, in *ACLInterfaceAddDel) (*ACLInterfaceAddDelReply, error)
-       ACLInterfaceSetACLList(ctx context.Context, in *ACLInterfaceSetACLList) (*ACLInterfaceSetACLListReply, error)
-       ACLInterfaceSetEtypeWhitelist(ctx context.Context, in *ACLInterfaceSetEtypeWhitelist) (*ACLInterfaceSetEtypeWhitelistReply, error)
-       ACLPluginControlPing(ctx context.Context, in *ACLPluginControlPing) (*ACLPluginControlPingReply, error)
-       ACLPluginGetConnTableMaxEntries(ctx context.Context, in *ACLPluginGetConnTableMaxEntries) (*ACLPluginGetConnTableMaxEntriesReply, error)
-       ACLPluginGetVersion(ctx context.Context, in *ACLPluginGetVersion) (*ACLPluginGetVersionReply, error)
-       MacipACLAdd(ctx context.Context, in *MacipACLAdd) (*MacipACLAddReply, error)
-       MacipACLAddReplace(ctx context.Context, in *MacipACLAddReplace) (*MacipACLAddReplaceReply, error)
-       MacipACLDel(ctx context.Context, in *MacipACLDel) (*MacipACLDelReply, error)
-       MacipACLInterfaceAddDel(ctx context.Context, in *MacipACLInterfaceAddDel) (*MacipACLInterfaceAddDelReply, error)
-       MacipACLInterfaceGet(ctx context.Context, in *MacipACLInterfaceGet) (*MacipACLInterfaceGetReply, error)
-}
-
-type service struct {
-       ch api.Channel
-}
-
-func NewService(ch api.Channel) Service {
-       return &service{ch}
-}
-
-func (c *service) DumpACL(ctx context.Context, in *ACLDump) ([]*ACLDetails, error) {
-       var dump []*ACLDetails
-       req := c.ch.SendMultiRequest(in)
-       for {
-               m := new(ACLDetails)
-               stop, err := req.ReceiveReply(m)
-               if stop {
-                       break
-               }
-               if err != nil {
-                       return nil, err
-               }
-               dump = append(dump, m)
-       }
-       return dump, nil
-}
-
-func (c *service) DumpACLInterfaceEtypeWhitelist(ctx context.Context, in *ACLInterfaceEtypeWhitelistDump) ([]*ACLInterfaceEtypeWhitelistDetails, error) {
-       var dump []*ACLInterfaceEtypeWhitelistDetails
-       req := c.ch.SendMultiRequest(in)
-       for {
-               m := new(ACLInterfaceEtypeWhitelistDetails)
-               stop, err := req.ReceiveReply(m)
-               if stop {
-                       break
-               }
-               if err != nil {
-                       return nil, err
-               }
-               dump = append(dump, m)
-       }
-       return dump, nil
-}
-
-func (c *service) DumpACLInterfaceList(ctx context.Context, in *ACLInterfaceListDump) ([]*ACLInterfaceListDetails, error) {
-       var dump []*ACLInterfaceListDetails
-       req := c.ch.SendMultiRequest(in)
-       for {
-               m := new(ACLInterfaceListDetails)
-               stop, err := req.ReceiveReply(m)
-               if stop {
-                       break
-               }
-               if err != nil {
-                       return nil, err
-               }
-               dump = append(dump, m)
-       }
-       return dump, nil
-}
-
-func (c *service) DumpMacipACL(ctx context.Context, in *MacipACLDump) ([]*MacipACLDetails, error) {
-       var dump []*MacipACLDetails
-       req := c.ch.SendMultiRequest(in)
-       for {
-               m := new(MacipACLDetails)
-               stop, err := req.ReceiveReply(m)
-               if stop {
-                       break
-               }
-               if err != nil {
-                       return nil, err
-               }
-               dump = append(dump, m)
-       }
-       return dump, nil
-}
-
-func (c *service) DumpMacipACLInterfaceList(ctx context.Context, in *MacipACLInterfaceListDump) ([]*MacipACLInterfaceListDetails, error) {
-       var dump []*MacipACLInterfaceListDetails
-       req := c.ch.SendMultiRequest(in)
-       for {
-               m := new(MacipACLInterfaceListDetails)
-               stop, err := req.ReceiveReply(m)
-               if stop {
-                       break
-               }
-               if err != nil {
-                       return nil, err
-               }
-               dump = append(dump, m)
-       }
-       return dump, nil
-}
-
-func (c *service) ACLAddReplace(ctx context.Context, in *ACLAddReplace) (*ACLAddReplaceReply, error) {
-       out := new(ACLAddReplaceReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLDel(ctx context.Context, in *ACLDel) (*ACLDelReply, error) {
-       out := new(ACLDelReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLInterfaceAddDel(ctx context.Context, in *ACLInterfaceAddDel) (*ACLInterfaceAddDelReply, error) {
-       out := new(ACLInterfaceAddDelReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLInterfaceSetACLList(ctx context.Context, in *ACLInterfaceSetACLList) (*ACLInterfaceSetACLListReply, error) {
-       out := new(ACLInterfaceSetACLListReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLInterfaceSetEtypeWhitelist(ctx context.Context, in *ACLInterfaceSetEtypeWhitelist) (*ACLInterfaceSetEtypeWhitelistReply, error) {
-       out := new(ACLInterfaceSetEtypeWhitelistReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLPluginControlPing(ctx context.Context, in *ACLPluginControlPing) (*ACLPluginControlPingReply, error) {
-       out := new(ACLPluginControlPingReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLPluginGetConnTableMaxEntries(ctx context.Context, in *ACLPluginGetConnTableMaxEntries) (*ACLPluginGetConnTableMaxEntriesReply, error) {
-       out := new(ACLPluginGetConnTableMaxEntriesReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) ACLPluginGetVersion(ctx context.Context, in *ACLPluginGetVersion) (*ACLPluginGetVersionReply, error) {
-       out := new(ACLPluginGetVersionReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) MacipACLAdd(ctx context.Context, in *MacipACLAdd) (*MacipACLAddReply, error) {
-       out := new(MacipACLAddReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) MacipACLAddReplace(ctx context.Context, in *MacipACLAddReplace) (*MacipACLAddReplaceReply, error) {
-       out := new(MacipACLAddReplaceReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) MacipACLDel(ctx context.Context, in *MacipACLDel) (*MacipACLDelReply, error) {
-       out := new(MacipACLDelReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) MacipACLInterfaceAddDel(ctx context.Context, in *MacipACLInterfaceAddDel) (*MacipACLInterfaceAddDelReply, error) {
-       out := new(MacipACLInterfaceAddDelReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
-
-func (c *service) MacipACLInterfaceGet(ctx context.Context, in *MacipACLInterfaceGet) (*MacipACLInterfaceGetReply, error) {
-       out := new(MacipACLInterfaceGetReply)
-       err := c.ch.SendRequest(in).ReceiveReply(out)
-       if err != nil {
-               return nil, err
-       }
-       return out, nil
-}
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = api.RegisterMessage
+var _ = codec.DecodeString
+var _ = bytes.NewBuffer
+var _ = context.Background
+var _ = io.Copy
+var _ = strconv.Itoa
+var _ = strings.Contains
+var _ = struc.Pack
+var _ = binary.BigEndian
+var _ = math.Float32bits
+var _ = net.ParseIP
+var _ = fmt.Errorf