Refactoring and fixes
[govpp.git] / binapi / ipsec / ipsec.ba.go
index 564c457..45f49b0 100644 (file)
@@ -1,25 +1,27 @@
 // Code generated by GoVPP's binapi-generator. DO NOT EDIT.
 // versions:
 //  binapi-generator: v0.4.0-dev
-//  VPP:              20.05-release
+//  VPP:              21.06-release
 // source: /usr/share/vpp/api/core/ipsec.api.json
 
 // Package ipsec contains generated bindings for API file ipsec.api.
 //
 // Contents:
 //   1 enum
-//   2 structs
-//  30 messages
+//   3 structs
+//  42 messages
 //
 package ipsec
 
 import (
+       "strconv"
+
        api "git.fd.io/govpp.git/api"
        interface_types "git.fd.io/govpp.git/binapi/interface_types"
        ip_types "git.fd.io/govpp.git/binapi/ip_types"
        ipsec_types "git.fd.io/govpp.git/binapi/ipsec_types"
+       tunnel_types "git.fd.io/govpp.git/binapi/tunnel_types"
        codec "git.fd.io/govpp.git/codec"
-       "strconv"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -30,8 +32,8 @@ const _ = api.GoVppAPIPackageIsVersion2
 
 const (
        APIFile    = "ipsec"
-       APIVersion = "3.0.2"
-       VersionCrc = 0x6a839805
+       APIVersion = "5.0.1"
+       VersionCrc = 0x196d64b0
 )
 
 // IpsecSpdAction defines enum 'ipsec_spd_action'.
@@ -67,6 +69,13 @@ func (x IpsecSpdAction) String() string {
        return "IpsecSpdAction(" + strconv.Itoa(int(x)) + ")"
 }
 
+// IpsecItf defines type 'ipsec_itf'.
+type IpsecItf struct {
+       UserInstance uint32                         `binapi:"u32,name=user_instance,default=4294967295" json:"user_instance,omitempty"`
+       Mode         tunnel_types.TunnelMode        `binapi:"tunnel_mode,name=mode" json:"mode,omitempty"`
+       SwIfIndex    interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+}
+
 // IpsecSpdEntry defines type 'ipsec_spd_entry'.
 type IpsecSpdEntry struct {
        SpdID              uint32           `binapi:"u32,name=spd_id" json:"spd_id,omitempty"`
@@ -109,11 +118,10 @@ func (*IpsecBackendDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecBackendDetails) Size() int {
+func (m *IpsecBackendDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 128 // m.Name
        size += 4   // m.Protocol
        size += 1   // m.Index
@@ -121,15 +129,13 @@ func (m *IpsecBackendDetails) Size() int {
        return size
 }
 func (m *IpsecBackendDetails) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeString(m.Name, 128)
        buf.EncodeUint32(uint32(m.Protocol))
-       buf.EncodeUint8(uint8(m.Index))
+       buf.EncodeUint8(m.Index)
        buf.EncodeBool(m.Active)
        return buf.Bytes(), nil
 }
@@ -152,20 +158,17 @@ func (*IpsecBackendDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecBackendDump) Size() int {
+func (m *IpsecBackendDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        return size
 }
 func (m *IpsecBackendDump) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        return buf.Bytes(), nil
 }
 func (m *IpsecBackendDump) Unmarshal(b []byte) error {
@@ -186,26 +189,23 @@ func (*IpsecInterfaceAddDelSpd) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecInterfaceAddDelSpd) Size() int {
+func (m *IpsecInterfaceAddDelSpd) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 1 // m.IsAdd
        size += 4 // m.SwIfIndex
        size += 4 // m.SpdID
        return size
 }
 func (m *IpsecInterfaceAddDelSpd) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeBool(m.IsAdd)
        buf.EncodeUint32(uint32(m.SwIfIndex))
-       buf.EncodeUint32(uint32(m.SpdID))
+       buf.EncodeUint32(m.SpdID)
        return buf.Bytes(), nil
 }
 func (m *IpsecInterfaceAddDelSpd) Unmarshal(b []byte) error {
@@ -216,67 +216,856 @@ func (m *IpsecInterfaceAddDelSpd) Unmarshal(b []byte) error {
        return nil
 }
 
-// IpsecInterfaceAddDelSpdReply defines message 'ipsec_interface_add_del_spd_reply'.
-type IpsecInterfaceAddDelSpdReply struct {
-       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+// IpsecInterfaceAddDelSpdReply defines message 'ipsec_interface_add_del_spd_reply'.
+type IpsecInterfaceAddDelSpdReply struct {
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *IpsecInterfaceAddDelSpdReply) Reset() { *m = IpsecInterfaceAddDelSpdReply{} }
+func (*IpsecInterfaceAddDelSpdReply) GetMessageName() string {
+       return "ipsec_interface_add_del_spd_reply"
+}
+func (*IpsecInterfaceAddDelSpdReply) GetCrcString() string { return "e8d4e804" }
+func (*IpsecInterfaceAddDelSpdReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecInterfaceAddDelSpdReply) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.Retval
+       return size
+}
+func (m *IpsecInterfaceAddDelSpdReply) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IpsecInterfaceAddDelSpdReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
+       return nil
+}
+
+// IpsecItfCreate defines message 'ipsec_itf_create'.
+type IpsecItfCreate struct {
+       Itf IpsecItf `binapi:"ipsec_itf,name=itf" json:"itf,omitempty"`
+}
+
+func (m *IpsecItfCreate) Reset()               { *m = IpsecItfCreate{} }
+func (*IpsecItfCreate) GetMessageName() string { return "ipsec_itf_create" }
+func (*IpsecItfCreate) GetCrcString() string   { return "6f50b3bc" }
+func (*IpsecItfCreate) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecItfCreate) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.Itf.UserInstance
+       size += 1 // m.Itf.Mode
+       size += 4 // m.Itf.SwIfIndex
+       return size
+}
+func (m *IpsecItfCreate) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Itf.UserInstance)
+       buf.EncodeUint8(uint8(m.Itf.Mode))
+       buf.EncodeUint32(uint32(m.Itf.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IpsecItfCreate) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Itf.UserInstance = buf.DecodeUint32()
+       m.Itf.Mode = tunnel_types.TunnelMode(buf.DecodeUint8())
+       m.Itf.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       return nil
+}
+
+// IpsecItfCreateReply defines message 'ipsec_itf_create_reply'.
+type IpsecItfCreateReply struct {
+       Retval    int32                          `binapi:"i32,name=retval" json:"retval,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+}
+
+func (m *IpsecItfCreateReply) Reset()               { *m = IpsecItfCreateReply{} }
+func (*IpsecItfCreateReply) GetMessageName() string { return "ipsec_itf_create_reply" }
+func (*IpsecItfCreateReply) GetCrcString() string   { return "5383d31f" }
+func (*IpsecItfCreateReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecItfCreateReply) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.Retval
+       size += 4 // m.SwIfIndex
+       return size
+}
+func (m *IpsecItfCreateReply) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IpsecItfCreateReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
+       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       return nil
+}
+
+// IpsecItfDelete defines message 'ipsec_itf_delete'.
+type IpsecItfDelete struct {
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+}
+
+func (m *IpsecItfDelete) Reset()               { *m = IpsecItfDelete{} }
+func (*IpsecItfDelete) GetMessageName() string { return "ipsec_itf_delete" }
+func (*IpsecItfDelete) GetCrcString() string   { return "f9e6675e" }
+func (*IpsecItfDelete) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecItfDelete) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.SwIfIndex
+       return size
+}
+func (m *IpsecItfDelete) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IpsecItfDelete) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       return nil
+}
+
+// IpsecItfDeleteReply defines message 'ipsec_itf_delete_reply'.
+type IpsecItfDeleteReply struct {
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *IpsecItfDeleteReply) Reset()               { *m = IpsecItfDeleteReply{} }
+func (*IpsecItfDeleteReply) GetMessageName() string { return "ipsec_itf_delete_reply" }
+func (*IpsecItfDeleteReply) GetCrcString() string   { return "e8d4e804" }
+func (*IpsecItfDeleteReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecItfDeleteReply) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.Retval
+       return size
+}
+func (m *IpsecItfDeleteReply) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IpsecItfDeleteReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
+       return nil
+}
+
+// IpsecItfDetails defines message 'ipsec_itf_details'.
+type IpsecItfDetails struct {
+       Itf IpsecItf `binapi:"ipsec_itf,name=itf" json:"itf,omitempty"`
+}
+
+func (m *IpsecItfDetails) Reset()               { *m = IpsecItfDetails{} }
+func (*IpsecItfDetails) GetMessageName() string { return "ipsec_itf_details" }
+func (*IpsecItfDetails) GetCrcString() string   { return "548a73b8" }
+func (*IpsecItfDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecItfDetails) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.Itf.UserInstance
+       size += 1 // m.Itf.Mode
+       size += 4 // m.Itf.SwIfIndex
+       return size
+}
+func (m *IpsecItfDetails) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Itf.UserInstance)
+       buf.EncodeUint8(uint8(m.Itf.Mode))
+       buf.EncodeUint32(uint32(m.Itf.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IpsecItfDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Itf.UserInstance = buf.DecodeUint32()
+       m.Itf.Mode = tunnel_types.TunnelMode(buf.DecodeUint8())
+       m.Itf.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       return nil
+}
+
+// IpsecItfDump defines message 'ipsec_itf_dump'.
+type IpsecItfDump struct {
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+}
+
+func (m *IpsecItfDump) Reset()               { *m = IpsecItfDump{} }
+func (*IpsecItfDump) GetMessageName() string { return "ipsec_itf_dump" }
+func (*IpsecItfDump) GetCrcString() string   { return "f9e6675e" }
+func (*IpsecItfDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecItfDump) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.SwIfIndex
+       return size
+}
+func (m *IpsecItfDump) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       return buf.Bytes(), nil
+}
+func (m *IpsecItfDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       return nil
+}
+
+// IpsecSaDetails defines message 'ipsec_sa_details'.
+// Deprecated: the message will be removed in the future versions
+type IpsecSaDetails struct {
+       Entry          ipsec_types.IpsecSadEntry      `binapi:"ipsec_sad_entry,name=entry" json:"entry,omitempty"`
+       SwIfIndex      interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Salt           uint32                         `binapi:"u32,name=salt" json:"salt,omitempty"`
+       SeqOutbound    uint64                         `binapi:"u64,name=seq_outbound" json:"seq_outbound,omitempty"`
+       LastSeqInbound uint64                         `binapi:"u64,name=last_seq_inbound" json:"last_seq_inbound,omitempty"`
+       ReplayWindow   uint64                         `binapi:"u64,name=replay_window" json:"replay_window,omitempty"`
+       StatIndex      uint32                         `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
+}
+
+func (m *IpsecSaDetails) Reset()               { *m = IpsecSaDetails{} }
+func (*IpsecSaDetails) GetMessageName() string { return "ipsec_sa_details" }
+func (*IpsecSaDetails) GetCrcString() string   { return "345d14a7" }
+func (*IpsecSaDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecSaDetails) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4       // m.Entry.SadID
+       size += 4       // m.Entry.Spi
+       size += 4       // m.Entry.Protocol
+       size += 4       // m.Entry.CryptoAlgorithm
+       size += 1       // m.Entry.CryptoKey.Length
+       size += 1 * 128 // m.Entry.CryptoKey.Data
+       size += 4       // m.Entry.IntegrityAlgorithm
+       size += 1       // m.Entry.IntegrityKey.Length
+       size += 1 * 128 // m.Entry.IntegrityKey.Data
+       size += 4       // m.Entry.Flags
+       size += 1       // m.Entry.TunnelSrc.Af
+       size += 1 * 16  // m.Entry.TunnelSrc.Un
+       size += 1       // m.Entry.TunnelDst.Af
+       size += 1 * 16  // m.Entry.TunnelDst.Un
+       size += 4       // m.Entry.TxTableID
+       size += 4       // m.Entry.Salt
+       size += 2       // m.Entry.UDPSrcPort
+       size += 2       // m.Entry.UDPDstPort
+       size += 4       // m.SwIfIndex
+       size += 4       // m.Salt
+       size += 8       // m.SeqOutbound
+       size += 8       // m.LastSeqInbound
+       size += 8       // m.ReplayWindow
+       size += 4       // m.StatIndex
+       return size
+}
+func (m *IpsecSaDetails) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Entry.SadID)
+       buf.EncodeUint32(m.Entry.Spi)
+       buf.EncodeUint32(uint32(m.Entry.Protocol))
+       buf.EncodeUint32(uint32(m.Entry.CryptoAlgorithm))
+       buf.EncodeUint8(m.Entry.CryptoKey.Length)
+       buf.EncodeBytes(m.Entry.CryptoKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.IntegrityAlgorithm))
+       buf.EncodeUint8(m.Entry.IntegrityKey.Length)
+       buf.EncodeBytes(m.Entry.IntegrityKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.Flags))
+       buf.EncodeUint8(uint8(m.Entry.TunnelSrc.Af))
+       buf.EncodeBytes(m.Entry.TunnelSrc.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.TunnelDst.Af))
+       buf.EncodeBytes(m.Entry.TunnelDst.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint32(m.Entry.TxTableID)
+       buf.EncodeUint32(m.Entry.Salt)
+       buf.EncodeUint16(m.Entry.UDPSrcPort)
+       buf.EncodeUint16(m.Entry.UDPDstPort)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(m.Salt)
+       buf.EncodeUint64(m.SeqOutbound)
+       buf.EncodeUint64(m.LastSeqInbound)
+       buf.EncodeUint64(m.ReplayWindow)
+       buf.EncodeUint32(m.StatIndex)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSaDetails) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Entry.SadID = buf.DecodeUint32()
+       m.Entry.Spi = buf.DecodeUint32()
+       m.Entry.Protocol = ipsec_types.IpsecProto(buf.DecodeUint32())
+       m.Entry.CryptoAlgorithm = ipsec_types.IpsecCryptoAlg(buf.DecodeUint32())
+       m.Entry.CryptoKey.Length = buf.DecodeUint8()
+       m.Entry.CryptoKey.Data = make([]byte, 128)
+       copy(m.Entry.CryptoKey.Data, buf.DecodeBytes(len(m.Entry.CryptoKey.Data)))
+       m.Entry.IntegrityAlgorithm = ipsec_types.IpsecIntegAlg(buf.DecodeUint32())
+       m.Entry.IntegrityKey.Length = buf.DecodeUint8()
+       m.Entry.IntegrityKey.Data = make([]byte, 128)
+       copy(m.Entry.IntegrityKey.Data, buf.DecodeBytes(len(m.Entry.IntegrityKey.Data)))
+       m.Entry.Flags = ipsec_types.IpsecSadFlags(buf.DecodeUint32())
+       m.Entry.TunnelSrc.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.TunnelSrc.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TunnelDst.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.TunnelDst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TxTableID = buf.DecodeUint32()
+       m.Entry.Salt = buf.DecodeUint32()
+       m.Entry.UDPSrcPort = buf.DecodeUint16()
+       m.Entry.UDPDstPort = buf.DecodeUint16()
+       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       m.Salt = buf.DecodeUint32()
+       m.SeqOutbound = buf.DecodeUint64()
+       m.LastSeqInbound = buf.DecodeUint64()
+       m.ReplayWindow = buf.DecodeUint64()
+       m.StatIndex = buf.DecodeUint32()
+       return nil
+}
+
+// IpsecSaDump defines message 'ipsec_sa_dump'.
+// Deprecated: the message will be removed in the future versions
+type IpsecSaDump struct {
+       SaID uint32 `binapi:"u32,name=sa_id" json:"sa_id,omitempty"`
+}
+
+func (m *IpsecSaDump) Reset()               { *m = IpsecSaDump{} }
+func (*IpsecSaDump) GetMessageName() string { return "ipsec_sa_dump" }
+func (*IpsecSaDump) GetCrcString() string   { return "2076c2f4" }
+func (*IpsecSaDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecSaDump) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.SaID
+       return size
+}
+func (m *IpsecSaDump) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SaID)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSaDump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SaID = buf.DecodeUint32()
+       return nil
+}
+
+// IpsecSaV2Details defines message 'ipsec_sa_v2_details'.
+type IpsecSaV2Details struct {
+       Entry          ipsec_types.IpsecSadEntryV2    `binapi:"ipsec_sad_entry_v2,name=entry" json:"entry,omitempty"`
+       SwIfIndex      interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Salt           uint32                         `binapi:"u32,name=salt" json:"salt,omitempty"`
+       SeqOutbound    uint64                         `binapi:"u64,name=seq_outbound" json:"seq_outbound,omitempty"`
+       LastSeqInbound uint64                         `binapi:"u64,name=last_seq_inbound" json:"last_seq_inbound,omitempty"`
+       ReplayWindow   uint64                         `binapi:"u64,name=replay_window" json:"replay_window,omitempty"`
+       StatIndex      uint32                         `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
+}
+
+func (m *IpsecSaV2Details) Reset()               { *m = IpsecSaV2Details{} }
+func (*IpsecSaV2Details) GetMessageName() string { return "ipsec_sa_v2_details" }
+func (*IpsecSaV2Details) GetCrcString() string   { return "e2130051" }
+func (*IpsecSaV2Details) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecSaV2Details) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4       // m.Entry.SadID
+       size += 4       // m.Entry.Spi
+       size += 4       // m.Entry.Protocol
+       size += 4       // m.Entry.CryptoAlgorithm
+       size += 1       // m.Entry.CryptoKey.Length
+       size += 1 * 128 // m.Entry.CryptoKey.Data
+       size += 4       // m.Entry.IntegrityAlgorithm
+       size += 1       // m.Entry.IntegrityKey.Length
+       size += 1 * 128 // m.Entry.IntegrityKey.Data
+       size += 4       // m.Entry.Flags
+       size += 1       // m.Entry.TunnelSrc.Af
+       size += 1 * 16  // m.Entry.TunnelSrc.Un
+       size += 1       // m.Entry.TunnelDst.Af
+       size += 1 * 16  // m.Entry.TunnelDst.Un
+       size += 1       // m.Entry.TunnelFlags
+       size += 1       // m.Entry.Dscp
+       size += 4       // m.Entry.TxTableID
+       size += 4       // m.Entry.Salt
+       size += 2       // m.Entry.UDPSrcPort
+       size += 2       // m.Entry.UDPDstPort
+       size += 4       // m.SwIfIndex
+       size += 4       // m.Salt
+       size += 8       // m.SeqOutbound
+       size += 8       // m.LastSeqInbound
+       size += 8       // m.ReplayWindow
+       size += 4       // m.StatIndex
+       return size
+}
+func (m *IpsecSaV2Details) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Entry.SadID)
+       buf.EncodeUint32(m.Entry.Spi)
+       buf.EncodeUint32(uint32(m.Entry.Protocol))
+       buf.EncodeUint32(uint32(m.Entry.CryptoAlgorithm))
+       buf.EncodeUint8(m.Entry.CryptoKey.Length)
+       buf.EncodeBytes(m.Entry.CryptoKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.IntegrityAlgorithm))
+       buf.EncodeUint8(m.Entry.IntegrityKey.Length)
+       buf.EncodeBytes(m.Entry.IntegrityKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.Flags))
+       buf.EncodeUint8(uint8(m.Entry.TunnelSrc.Af))
+       buf.EncodeBytes(m.Entry.TunnelSrc.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.TunnelDst.Af))
+       buf.EncodeBytes(m.Entry.TunnelDst.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.TunnelFlags))
+       buf.EncodeUint8(uint8(m.Entry.Dscp))
+       buf.EncodeUint32(m.Entry.TxTableID)
+       buf.EncodeUint32(m.Entry.Salt)
+       buf.EncodeUint16(m.Entry.UDPSrcPort)
+       buf.EncodeUint16(m.Entry.UDPDstPort)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint32(m.Salt)
+       buf.EncodeUint64(m.SeqOutbound)
+       buf.EncodeUint64(m.LastSeqInbound)
+       buf.EncodeUint64(m.ReplayWindow)
+       buf.EncodeUint32(m.StatIndex)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSaV2Details) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Entry.SadID = buf.DecodeUint32()
+       m.Entry.Spi = buf.DecodeUint32()
+       m.Entry.Protocol = ipsec_types.IpsecProto(buf.DecodeUint32())
+       m.Entry.CryptoAlgorithm = ipsec_types.IpsecCryptoAlg(buf.DecodeUint32())
+       m.Entry.CryptoKey.Length = buf.DecodeUint8()
+       m.Entry.CryptoKey.Data = make([]byte, 128)
+       copy(m.Entry.CryptoKey.Data, buf.DecodeBytes(len(m.Entry.CryptoKey.Data)))
+       m.Entry.IntegrityAlgorithm = ipsec_types.IpsecIntegAlg(buf.DecodeUint32())
+       m.Entry.IntegrityKey.Length = buf.DecodeUint8()
+       m.Entry.IntegrityKey.Data = make([]byte, 128)
+       copy(m.Entry.IntegrityKey.Data, buf.DecodeBytes(len(m.Entry.IntegrityKey.Data)))
+       m.Entry.Flags = ipsec_types.IpsecSadFlags(buf.DecodeUint32())
+       m.Entry.TunnelSrc.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.TunnelSrc.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TunnelDst.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.TunnelDst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TunnelFlags = tunnel_types.TunnelEncapDecapFlags(buf.DecodeUint8())
+       m.Entry.Dscp = ip_types.IPDscp(buf.DecodeUint8())
+       m.Entry.TxTableID = buf.DecodeUint32()
+       m.Entry.Salt = buf.DecodeUint32()
+       m.Entry.UDPSrcPort = buf.DecodeUint16()
+       m.Entry.UDPDstPort = buf.DecodeUint16()
+       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       m.Salt = buf.DecodeUint32()
+       m.SeqOutbound = buf.DecodeUint64()
+       m.LastSeqInbound = buf.DecodeUint64()
+       m.ReplayWindow = buf.DecodeUint64()
+       m.StatIndex = buf.DecodeUint32()
+       return nil
+}
+
+// IpsecSaV2Dump defines message 'ipsec_sa_v2_dump'.
+type IpsecSaV2Dump struct {
+       SaID uint32 `binapi:"u32,name=sa_id" json:"sa_id,omitempty"`
+}
+
+func (m *IpsecSaV2Dump) Reset()               { *m = IpsecSaV2Dump{} }
+func (*IpsecSaV2Dump) GetMessageName() string { return "ipsec_sa_v2_dump" }
+func (*IpsecSaV2Dump) GetCrcString() string   { return "2076c2f4" }
+func (*IpsecSaV2Dump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecSaV2Dump) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.SaID
+       return size
+}
+func (m *IpsecSaV2Dump) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SaID)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSaV2Dump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SaID = buf.DecodeUint32()
+       return nil
+}
+
+// IpsecSaV3Details defines message 'ipsec_sa_v3_details'.
+type IpsecSaV3Details struct {
+       Entry          ipsec_types.IpsecSadEntryV3    `binapi:"ipsec_sad_entry_v3,name=entry" json:"entry,omitempty"`
+       SwIfIndex      interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SeqOutbound    uint64                         `binapi:"u64,name=seq_outbound" json:"seq_outbound,omitempty"`
+       LastSeqInbound uint64                         `binapi:"u64,name=last_seq_inbound" json:"last_seq_inbound,omitempty"`
+       ReplayWindow   uint64                         `binapi:"u64,name=replay_window" json:"replay_window,omitempty"`
+       StatIndex      uint32                         `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
+}
+
+func (m *IpsecSaV3Details) Reset()               { *m = IpsecSaV3Details{} }
+func (*IpsecSaV3Details) GetMessageName() string { return "ipsec_sa_v3_details" }
+func (*IpsecSaV3Details) GetCrcString() string   { return "2fc991ee" }
+func (*IpsecSaV3Details) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecSaV3Details) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4       // m.Entry.SadID
+       size += 4       // m.Entry.Spi
+       size += 4       // m.Entry.Protocol
+       size += 4       // m.Entry.CryptoAlgorithm
+       size += 1       // m.Entry.CryptoKey.Length
+       size += 1 * 128 // m.Entry.CryptoKey.Data
+       size += 4       // m.Entry.IntegrityAlgorithm
+       size += 1       // m.Entry.IntegrityKey.Length
+       size += 1 * 128 // m.Entry.IntegrityKey.Data
+       size += 4       // m.Entry.Flags
+       size += 4       // m.Entry.Tunnel.Instance
+       size += 1       // m.Entry.Tunnel.Src.Af
+       size += 1 * 16  // m.Entry.Tunnel.Src.Un
+       size += 1       // m.Entry.Tunnel.Dst.Af
+       size += 1 * 16  // m.Entry.Tunnel.Dst.Un
+       size += 4       // m.Entry.Tunnel.SwIfIndex
+       size += 4       // m.Entry.Tunnel.TableID
+       size += 1       // m.Entry.Tunnel.EncapDecapFlags
+       size += 1       // m.Entry.Tunnel.Mode
+       size += 1       // m.Entry.Tunnel.Flags
+       size += 1       // m.Entry.Tunnel.Dscp
+       size += 1       // m.Entry.Tunnel.HopLimit
+       size += 4       // m.Entry.Salt
+       size += 2       // m.Entry.UDPSrcPort
+       size += 2       // m.Entry.UDPDstPort
+       size += 4       // m.SwIfIndex
+       size += 8       // m.SeqOutbound
+       size += 8       // m.LastSeqInbound
+       size += 8       // m.ReplayWindow
+       size += 4       // m.StatIndex
+       return size
+}
+func (m *IpsecSaV3Details) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Entry.SadID)
+       buf.EncodeUint32(m.Entry.Spi)
+       buf.EncodeUint32(uint32(m.Entry.Protocol))
+       buf.EncodeUint32(uint32(m.Entry.CryptoAlgorithm))
+       buf.EncodeUint8(m.Entry.CryptoKey.Length)
+       buf.EncodeBytes(m.Entry.CryptoKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.IntegrityAlgorithm))
+       buf.EncodeUint8(m.Entry.IntegrityKey.Length)
+       buf.EncodeBytes(m.Entry.IntegrityKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.Flags))
+       buf.EncodeUint32(m.Entry.Tunnel.Instance)
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Src.Af))
+       buf.EncodeBytes(m.Entry.Tunnel.Src.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Dst.Af))
+       buf.EncodeBytes(m.Entry.Tunnel.Dst.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint32(uint32(m.Entry.Tunnel.SwIfIndex))
+       buf.EncodeUint32(m.Entry.Tunnel.TableID)
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.EncapDecapFlags))
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Mode))
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Flags))
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Dscp))
+       buf.EncodeUint8(m.Entry.Tunnel.HopLimit)
+       buf.EncodeUint32(m.Entry.Salt)
+       buf.EncodeUint16(m.Entry.UDPSrcPort)
+       buf.EncodeUint16(m.Entry.UDPDstPort)
+       buf.EncodeUint32(uint32(m.SwIfIndex))
+       buf.EncodeUint64(m.SeqOutbound)
+       buf.EncodeUint64(m.LastSeqInbound)
+       buf.EncodeUint64(m.ReplayWindow)
+       buf.EncodeUint32(m.StatIndex)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSaV3Details) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Entry.SadID = buf.DecodeUint32()
+       m.Entry.Spi = buf.DecodeUint32()
+       m.Entry.Protocol = ipsec_types.IpsecProto(buf.DecodeUint32())
+       m.Entry.CryptoAlgorithm = ipsec_types.IpsecCryptoAlg(buf.DecodeUint32())
+       m.Entry.CryptoKey.Length = buf.DecodeUint8()
+       m.Entry.CryptoKey.Data = make([]byte, 128)
+       copy(m.Entry.CryptoKey.Data, buf.DecodeBytes(len(m.Entry.CryptoKey.Data)))
+       m.Entry.IntegrityAlgorithm = ipsec_types.IpsecIntegAlg(buf.DecodeUint32())
+       m.Entry.IntegrityKey.Length = buf.DecodeUint8()
+       m.Entry.IntegrityKey.Data = make([]byte, 128)
+       copy(m.Entry.IntegrityKey.Data, buf.DecodeBytes(len(m.Entry.IntegrityKey.Data)))
+       m.Entry.Flags = ipsec_types.IpsecSadFlags(buf.DecodeUint32())
+       m.Entry.Tunnel.Instance = buf.DecodeUint32()
+       m.Entry.Tunnel.Src.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.Tunnel.Src.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.Tunnel.Dst.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.Tunnel.Dst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.Tunnel.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       m.Entry.Tunnel.TableID = buf.DecodeUint32()
+       m.Entry.Tunnel.EncapDecapFlags = tunnel_types.TunnelEncapDecapFlags(buf.DecodeUint8())
+       m.Entry.Tunnel.Mode = tunnel_types.TunnelMode(buf.DecodeUint8())
+       m.Entry.Tunnel.Flags = tunnel_types.TunnelFlags(buf.DecodeUint8())
+       m.Entry.Tunnel.Dscp = ip_types.IPDscp(buf.DecodeUint8())
+       m.Entry.Tunnel.HopLimit = buf.DecodeUint8()
+       m.Entry.Salt = buf.DecodeUint32()
+       m.Entry.UDPSrcPort = buf.DecodeUint16()
+       m.Entry.UDPDstPort = buf.DecodeUint16()
+       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       m.SeqOutbound = buf.DecodeUint64()
+       m.LastSeqInbound = buf.DecodeUint64()
+       m.ReplayWindow = buf.DecodeUint64()
+       m.StatIndex = buf.DecodeUint32()
+       return nil
+}
+
+// IpsecSaV3Dump defines message 'ipsec_sa_v3_dump'.
+type IpsecSaV3Dump struct {
+       SaID uint32 `binapi:"u32,name=sa_id" json:"sa_id,omitempty"`
+}
+
+func (m *IpsecSaV3Dump) Reset()               { *m = IpsecSaV3Dump{} }
+func (*IpsecSaV3Dump) GetMessageName() string { return "ipsec_sa_v3_dump" }
+func (*IpsecSaV3Dump) GetCrcString() string   { return "2076c2f4" }
+func (*IpsecSaV3Dump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecSaV3Dump) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.SaID
+       return size
+}
+func (m *IpsecSaV3Dump) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SaID)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSaV3Dump) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.SaID = buf.DecodeUint32()
+       return nil
+}
+
+// IpsecSadEntryAddDel defines message 'ipsec_sad_entry_add_del'.
+// Deprecated: the message will be removed in the future versions
+type IpsecSadEntryAddDel struct {
+       IsAdd bool                      `binapi:"bool,name=is_add" json:"is_add,omitempty"`
+       Entry ipsec_types.IpsecSadEntry `binapi:"ipsec_sad_entry,name=entry" json:"entry,omitempty"`
+}
+
+func (m *IpsecSadEntryAddDel) Reset()               { *m = IpsecSadEntryAddDel{} }
+func (*IpsecSadEntryAddDel) GetMessageName() string { return "ipsec_sad_entry_add_del" }
+func (*IpsecSadEntryAddDel) GetCrcString() string   { return "ab64b5c6" }
+func (*IpsecSadEntryAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecSadEntryAddDel) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 1       // m.IsAdd
+       size += 4       // m.Entry.SadID
+       size += 4       // m.Entry.Spi
+       size += 4       // m.Entry.Protocol
+       size += 4       // m.Entry.CryptoAlgorithm
+       size += 1       // m.Entry.CryptoKey.Length
+       size += 1 * 128 // m.Entry.CryptoKey.Data
+       size += 4       // m.Entry.IntegrityAlgorithm
+       size += 1       // m.Entry.IntegrityKey.Length
+       size += 1 * 128 // m.Entry.IntegrityKey.Data
+       size += 4       // m.Entry.Flags
+       size += 1       // m.Entry.TunnelSrc.Af
+       size += 1 * 16  // m.Entry.TunnelSrc.Un
+       size += 1       // m.Entry.TunnelDst.Af
+       size += 1 * 16  // m.Entry.TunnelDst.Un
+       size += 4       // m.Entry.TxTableID
+       size += 4       // m.Entry.Salt
+       size += 2       // m.Entry.UDPSrcPort
+       size += 2       // m.Entry.UDPDstPort
+       return size
+}
+func (m *IpsecSadEntryAddDel) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeUint32(m.Entry.SadID)
+       buf.EncodeUint32(m.Entry.Spi)
+       buf.EncodeUint32(uint32(m.Entry.Protocol))
+       buf.EncodeUint32(uint32(m.Entry.CryptoAlgorithm))
+       buf.EncodeUint8(m.Entry.CryptoKey.Length)
+       buf.EncodeBytes(m.Entry.CryptoKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.IntegrityAlgorithm))
+       buf.EncodeUint8(m.Entry.IntegrityKey.Length)
+       buf.EncodeBytes(m.Entry.IntegrityKey.Data, 128)
+       buf.EncodeUint32(uint32(m.Entry.Flags))
+       buf.EncodeUint8(uint8(m.Entry.TunnelSrc.Af))
+       buf.EncodeBytes(m.Entry.TunnelSrc.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.TunnelDst.Af))
+       buf.EncodeBytes(m.Entry.TunnelDst.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint32(m.Entry.TxTableID)
+       buf.EncodeUint32(m.Entry.Salt)
+       buf.EncodeUint16(m.Entry.UDPSrcPort)
+       buf.EncodeUint16(m.Entry.UDPDstPort)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSadEntryAddDel) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
+       m.Entry.SadID = buf.DecodeUint32()
+       m.Entry.Spi = buf.DecodeUint32()
+       m.Entry.Protocol = ipsec_types.IpsecProto(buf.DecodeUint32())
+       m.Entry.CryptoAlgorithm = ipsec_types.IpsecCryptoAlg(buf.DecodeUint32())
+       m.Entry.CryptoKey.Length = buf.DecodeUint8()
+       m.Entry.CryptoKey.Data = make([]byte, 128)
+       copy(m.Entry.CryptoKey.Data, buf.DecodeBytes(len(m.Entry.CryptoKey.Data)))
+       m.Entry.IntegrityAlgorithm = ipsec_types.IpsecIntegAlg(buf.DecodeUint32())
+       m.Entry.IntegrityKey.Length = buf.DecodeUint8()
+       m.Entry.IntegrityKey.Data = make([]byte, 128)
+       copy(m.Entry.IntegrityKey.Data, buf.DecodeBytes(len(m.Entry.IntegrityKey.Data)))
+       m.Entry.Flags = ipsec_types.IpsecSadFlags(buf.DecodeUint32())
+       m.Entry.TunnelSrc.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.TunnelSrc.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TunnelDst.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.TunnelDst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TxTableID = buf.DecodeUint32()
+       m.Entry.Salt = buf.DecodeUint32()
+       m.Entry.UDPSrcPort = buf.DecodeUint16()
+       m.Entry.UDPDstPort = buf.DecodeUint16()
+       return nil
+}
+
+// IpsecSadEntryAddDelReply defines message 'ipsec_sad_entry_add_del_reply'.
+// Deprecated: the message will be removed in the future versions
+type IpsecSadEntryAddDelReply struct {
+       Retval    int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
+       StatIndex uint32 `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
 }
 
-func (m *IpsecInterfaceAddDelSpdReply) Reset() { *m = IpsecInterfaceAddDelSpdReply{} }
-func (*IpsecInterfaceAddDelSpdReply) GetMessageName() string {
-       return "ipsec_interface_add_del_spd_reply"
-}
-func (*IpsecInterfaceAddDelSpdReply) GetCrcString() string { return "e8d4e804" }
-func (*IpsecInterfaceAddDelSpdReply) GetMessageType() api.MessageType {
+func (m *IpsecSadEntryAddDelReply) Reset()               { *m = IpsecSadEntryAddDelReply{} }
+func (*IpsecSadEntryAddDelReply) GetMessageName() string { return "ipsec_sad_entry_add_del_reply" }
+func (*IpsecSadEntryAddDelReply) GetCrcString() string   { return "9ffac24b" }
+func (*IpsecSadEntryAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecInterfaceAddDelSpdReply) Size() int {
+func (m *IpsecSadEntryAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
+       size += 4 // m.StatIndex
        return size
 }
-func (m *IpsecInterfaceAddDelSpdReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
+func (m *IpsecSadEntryAddDelReply) Marshal(b []byte) ([]byte, error) {
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       buf.EncodeUint32(m.StatIndex)
        return buf.Bytes(), nil
 }
-func (m *IpsecInterfaceAddDelSpdReply) Unmarshal(b []byte) error {
+func (m *IpsecSadEntryAddDelReply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
+       m.StatIndex = buf.DecodeUint32()
        return nil
 }
 
-// IpsecSaDetails defines message 'ipsec_sa_details'.
-type IpsecSaDetails struct {
-       Entry          ipsec_types.IpsecSadEntry      `binapi:"ipsec_sad_entry,name=entry" json:"entry,omitempty"`
-       SwIfIndex      interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Salt           uint32                         `binapi:"u32,name=salt" json:"salt,omitempty"`
-       SeqOutbound    uint64                         `binapi:"u64,name=seq_outbound" json:"seq_outbound,omitempty"`
-       LastSeqInbound uint64                         `binapi:"u64,name=last_seq_inbound" json:"last_seq_inbound,omitempty"`
-       ReplayWindow   uint64                         `binapi:"u64,name=replay_window" json:"replay_window,omitempty"`
-       StatIndex      uint32                         `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
+// IpsecSadEntryAddDelV2 defines message 'ipsec_sad_entry_add_del_v2'.
+type IpsecSadEntryAddDelV2 struct {
+       IsAdd bool                        `binapi:"bool,name=is_add" json:"is_add,omitempty"`
+       Entry ipsec_types.IpsecSadEntryV2 `binapi:"ipsec_sad_entry_v2,name=entry" json:"entry,omitempty"`
 }
 
-func (m *IpsecSaDetails) Reset()               { *m = IpsecSaDetails{} }
-func (*IpsecSaDetails) GetMessageName() string { return "ipsec_sa_details" }
-func (*IpsecSaDetails) GetCrcString() string   { return "b30c7f41" }
-func (*IpsecSaDetails) GetMessageType() api.MessageType {
-       return api.ReplyMessage
+func (m *IpsecSadEntryAddDelV2) Reset()               { *m = IpsecSadEntryAddDelV2{} }
+func (*IpsecSadEntryAddDelV2) GetMessageName() string { return "ipsec_sad_entry_add_del_v2" }
+func (*IpsecSadEntryAddDelV2) GetCrcString() string   { return "aca78b27" }
+func (*IpsecSadEntryAddDelV2) GetMessageType() api.MessageType {
+       return api.RequestMessage
 }
 
-func (m *IpsecSaDetails) Size() int {
+func (m *IpsecSadEntryAddDelV2) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
+       size += 1       // m.IsAdd
        size += 4       // m.Entry.SadID
        size += 4       // m.Entry.Spi
        size += 4       // m.Entry.Protocol
@@ -291,134 +1080,124 @@ func (m *IpsecSaDetails) Size() int {
        size += 1 * 16  // m.Entry.TunnelSrc.Un
        size += 1       // m.Entry.TunnelDst.Af
        size += 1 * 16  // m.Entry.TunnelDst.Un
+       size += 1       // m.Entry.TunnelFlags
+       size += 1       // m.Entry.Dscp
        size += 4       // m.Entry.TxTableID
        size += 4       // m.Entry.Salt
        size += 2       // m.Entry.UDPSrcPort
        size += 2       // m.Entry.UDPDstPort
-       size += 4       // m.SwIfIndex
-       size += 4       // m.Salt
-       size += 8       // m.SeqOutbound
-       size += 8       // m.LastSeqInbound
-       size += 8       // m.ReplayWindow
-       size += 4       // m.StatIndex
        return size
 }
-func (m *IpsecSaDetails) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
+func (m *IpsecSadEntryAddDelV2) Marshal(b []byte) ([]byte, error) {
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Entry.SadID))
-       buf.EncodeUint32(uint32(m.Entry.Spi))
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.IsAdd)
+       buf.EncodeUint32(m.Entry.SadID)
+       buf.EncodeUint32(m.Entry.Spi)
        buf.EncodeUint32(uint32(m.Entry.Protocol))
        buf.EncodeUint32(uint32(m.Entry.CryptoAlgorithm))
-       buf.EncodeUint8(uint8(m.Entry.CryptoKey.Length))
-       buf.EncodeBytes(m.Entry.CryptoKey.Data[:], 128)
+       buf.EncodeUint8(m.Entry.CryptoKey.Length)
+       buf.EncodeBytes(m.Entry.CryptoKey.Data, 128)
        buf.EncodeUint32(uint32(m.Entry.IntegrityAlgorithm))
-       buf.EncodeUint8(uint8(m.Entry.IntegrityKey.Length))
-       buf.EncodeBytes(m.Entry.IntegrityKey.Data[:], 128)
+       buf.EncodeUint8(m.Entry.IntegrityKey.Length)
+       buf.EncodeBytes(m.Entry.IntegrityKey.Data, 128)
        buf.EncodeUint32(uint32(m.Entry.Flags))
        buf.EncodeUint8(uint8(m.Entry.TunnelSrc.Af))
-       buf.EncodeBytes(m.Entry.TunnelSrc.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.TunnelSrc.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.TunnelDst.Af))
-       buf.EncodeBytes(m.Entry.TunnelDst.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint32(uint32(m.Entry.TxTableID))
-       buf.EncodeUint32(uint32(m.Entry.Salt))
-       buf.EncodeUint16(uint16(m.Entry.UDPSrcPort))
-       buf.EncodeUint16(uint16(m.Entry.UDPDstPort))
-       buf.EncodeUint32(uint32(m.SwIfIndex))
-       buf.EncodeUint32(uint32(m.Salt))
-       buf.EncodeUint64(uint64(m.SeqOutbound))
-       buf.EncodeUint64(uint64(m.LastSeqInbound))
-       buf.EncodeUint64(uint64(m.ReplayWindow))
-       buf.EncodeUint32(uint32(m.StatIndex))
+       buf.EncodeBytes(m.Entry.TunnelDst.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.TunnelFlags))
+       buf.EncodeUint8(uint8(m.Entry.Dscp))
+       buf.EncodeUint32(m.Entry.TxTableID)
+       buf.EncodeUint32(m.Entry.Salt)
+       buf.EncodeUint16(m.Entry.UDPSrcPort)
+       buf.EncodeUint16(m.Entry.UDPDstPort)
        return buf.Bytes(), nil
 }
-func (m *IpsecSaDetails) Unmarshal(b []byte) error {
+func (m *IpsecSadEntryAddDelV2) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
+       m.IsAdd = buf.DecodeBool()
        m.Entry.SadID = buf.DecodeUint32()
        m.Entry.Spi = buf.DecodeUint32()
        m.Entry.Protocol = ipsec_types.IpsecProto(buf.DecodeUint32())
        m.Entry.CryptoAlgorithm = ipsec_types.IpsecCryptoAlg(buf.DecodeUint32())
        m.Entry.CryptoKey.Length = buf.DecodeUint8()
-       copy(m.Entry.CryptoKey.Data[:], buf.DecodeBytes(128))
+       m.Entry.CryptoKey.Data = make([]byte, 128)
+       copy(m.Entry.CryptoKey.Data, buf.DecodeBytes(len(m.Entry.CryptoKey.Data)))
        m.Entry.IntegrityAlgorithm = ipsec_types.IpsecIntegAlg(buf.DecodeUint32())
        m.Entry.IntegrityKey.Length = buf.DecodeUint8()
-       copy(m.Entry.IntegrityKey.Data[:], buf.DecodeBytes(128))
+       m.Entry.IntegrityKey.Data = make([]byte, 128)
+       copy(m.Entry.IntegrityKey.Data, buf.DecodeBytes(len(m.Entry.IntegrityKey.Data)))
        m.Entry.Flags = ipsec_types.IpsecSadFlags(buf.DecodeUint32())
        m.Entry.TunnelSrc.Af = ip_types.AddressFamily(buf.DecodeUint8())
        copy(m.Entry.TunnelSrc.Un.XXX_UnionData[:], buf.DecodeBytes(16))
        m.Entry.TunnelDst.Af = ip_types.AddressFamily(buf.DecodeUint8())
        copy(m.Entry.TunnelDst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.TunnelFlags = tunnel_types.TunnelEncapDecapFlags(buf.DecodeUint8())
+       m.Entry.Dscp = ip_types.IPDscp(buf.DecodeUint8())
        m.Entry.TxTableID = buf.DecodeUint32()
        m.Entry.Salt = buf.DecodeUint32()
        m.Entry.UDPSrcPort = buf.DecodeUint16()
        m.Entry.UDPDstPort = buf.DecodeUint16()
-       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
-       m.Salt = buf.DecodeUint32()
-       m.SeqOutbound = buf.DecodeUint64()
-       m.LastSeqInbound = buf.DecodeUint64()
-       m.ReplayWindow = buf.DecodeUint64()
-       m.StatIndex = buf.DecodeUint32()
        return nil
 }
 
-// IpsecSaDump defines message 'ipsec_sa_dump'.
-type IpsecSaDump struct {
-       SaID uint32 `binapi:"u32,name=sa_id" json:"sa_id,omitempty"`
+// IpsecSadEntryAddDelV2Reply defines message 'ipsec_sad_entry_add_del_v2_reply'.
+type IpsecSadEntryAddDelV2Reply struct {
+       Retval    int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
+       StatIndex uint32 `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
 }
 
-func (m *IpsecSaDump) Reset()               { *m = IpsecSaDump{} }
-func (*IpsecSaDump) GetMessageName() string { return "ipsec_sa_dump" }
-func (*IpsecSaDump) GetCrcString() string   { return "2076c2f4" }
-func (*IpsecSaDump) GetMessageType() api.MessageType {
-       return api.RequestMessage
+func (m *IpsecSadEntryAddDelV2Reply) Reset()               { *m = IpsecSadEntryAddDelV2Reply{} }
+func (*IpsecSadEntryAddDelV2Reply) GetMessageName() string { return "ipsec_sad_entry_add_del_v2_reply" }
+func (*IpsecSadEntryAddDelV2Reply) GetCrcString() string   { return "9ffac24b" }
+func (*IpsecSadEntryAddDelV2Reply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
 }
 
-func (m *IpsecSaDump) Size() int {
+func (m *IpsecSadEntryAddDelV2Reply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
-       size += 4 // m.SaID
+       size += 4 // m.Retval
+       size += 4 // m.StatIndex
        return size
 }
-func (m *IpsecSaDump) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
+func (m *IpsecSadEntryAddDelV2Reply) Marshal(b []byte) ([]byte, error) {
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.SaID))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       buf.EncodeUint32(m.StatIndex)
        return buf.Bytes(), nil
 }
-func (m *IpsecSaDump) Unmarshal(b []byte) error {
+func (m *IpsecSadEntryAddDelV2Reply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.SaID = buf.DecodeUint32()
+       m.Retval = buf.DecodeInt32()
+       m.StatIndex = buf.DecodeUint32()
        return nil
 }
 
-// IpsecSadEntryAddDel defines message 'ipsec_sad_entry_add_del'.
-type IpsecSadEntryAddDel struct {
-       IsAdd bool                      `binapi:"bool,name=is_add" json:"is_add,omitempty"`
-       Entry ipsec_types.IpsecSadEntry `binapi:"ipsec_sad_entry,name=entry" json:"entry,omitempty"`
+// IpsecSadEntryAddDelV3 defines message 'ipsec_sad_entry_add_del_v3'.
+type IpsecSadEntryAddDelV3 struct {
+       IsAdd bool                        `binapi:"bool,name=is_add" json:"is_add,omitempty"`
+       Entry ipsec_types.IpsecSadEntryV3 `binapi:"ipsec_sad_entry_v3,name=entry" json:"entry,omitempty"`
 }
 
-func (m *IpsecSadEntryAddDel) Reset()               { *m = IpsecSadEntryAddDel{} }
-func (*IpsecSadEntryAddDel) GetMessageName() string { return "ipsec_sad_entry_add_del" }
-func (*IpsecSadEntryAddDel) GetCrcString() string   { return "b8def364" }
-func (*IpsecSadEntryAddDel) GetMessageType() api.MessageType {
+func (m *IpsecSadEntryAddDelV3) Reset()               { *m = IpsecSadEntryAddDelV3{} }
+func (*IpsecSadEntryAddDelV3) GetMessageName() string { return "ipsec_sad_entry_add_del_v3" }
+func (*IpsecSadEntryAddDelV3) GetCrcString() string   { return "c77ebd92" }
+func (*IpsecSadEntryAddDelV3) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSadEntryAddDel) Size() int {
+func (m *IpsecSadEntryAddDelV3) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 1       // m.IsAdd
        size += 4       // m.Entry.SadID
        size += 4       // m.Entry.Spi
@@ -430,45 +1209,57 @@ func (m *IpsecSadEntryAddDel) Size() int {
        size += 1       // m.Entry.IntegrityKey.Length
        size += 1 * 128 // m.Entry.IntegrityKey.Data
        size += 4       // m.Entry.Flags
-       size += 1       // m.Entry.TunnelSrc.Af
-       size += 1 * 16  // m.Entry.TunnelSrc.Un
-       size += 1       // m.Entry.TunnelDst.Af
-       size += 1 * 16  // m.Entry.TunnelDst.Un
-       size += 4       // m.Entry.TxTableID
+       size += 4       // m.Entry.Tunnel.Instance
+       size += 1       // m.Entry.Tunnel.Src.Af
+       size += 1 * 16  // m.Entry.Tunnel.Src.Un
+       size += 1       // m.Entry.Tunnel.Dst.Af
+       size += 1 * 16  // m.Entry.Tunnel.Dst.Un
+       size += 4       // m.Entry.Tunnel.SwIfIndex
+       size += 4       // m.Entry.Tunnel.TableID
+       size += 1       // m.Entry.Tunnel.EncapDecapFlags
+       size += 1       // m.Entry.Tunnel.Mode
+       size += 1       // m.Entry.Tunnel.Flags
+       size += 1       // m.Entry.Tunnel.Dscp
+       size += 1       // m.Entry.Tunnel.HopLimit
        size += 4       // m.Entry.Salt
        size += 2       // m.Entry.UDPSrcPort
        size += 2       // m.Entry.UDPDstPort
        return size
 }
-func (m *IpsecSadEntryAddDel) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
+func (m *IpsecSadEntryAddDelV3) Marshal(b []byte) ([]byte, error) {
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeBool(m.IsAdd)
-       buf.EncodeUint32(uint32(m.Entry.SadID))
-       buf.EncodeUint32(uint32(m.Entry.Spi))
+       buf.EncodeUint32(m.Entry.SadID)
+       buf.EncodeUint32(m.Entry.Spi)
        buf.EncodeUint32(uint32(m.Entry.Protocol))
        buf.EncodeUint32(uint32(m.Entry.CryptoAlgorithm))
-       buf.EncodeUint8(uint8(m.Entry.CryptoKey.Length))
-       buf.EncodeBytes(m.Entry.CryptoKey.Data[:], 128)
+       buf.EncodeUint8(m.Entry.CryptoKey.Length)
+       buf.EncodeBytes(m.Entry.CryptoKey.Data, 128)
        buf.EncodeUint32(uint32(m.Entry.IntegrityAlgorithm))
-       buf.EncodeUint8(uint8(m.Entry.IntegrityKey.Length))
-       buf.EncodeBytes(m.Entry.IntegrityKey.Data[:], 128)
+       buf.EncodeUint8(m.Entry.IntegrityKey.Length)
+       buf.EncodeBytes(m.Entry.IntegrityKey.Data, 128)
        buf.EncodeUint32(uint32(m.Entry.Flags))
-       buf.EncodeUint8(uint8(m.Entry.TunnelSrc.Af))
-       buf.EncodeBytes(m.Entry.TunnelSrc.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint8(uint8(m.Entry.TunnelDst.Af))
-       buf.EncodeBytes(m.Entry.TunnelDst.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint32(uint32(m.Entry.TxTableID))
-       buf.EncodeUint32(uint32(m.Entry.Salt))
-       buf.EncodeUint16(uint16(m.Entry.UDPSrcPort))
-       buf.EncodeUint16(uint16(m.Entry.UDPDstPort))
+       buf.EncodeUint32(m.Entry.Tunnel.Instance)
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Src.Af))
+       buf.EncodeBytes(m.Entry.Tunnel.Src.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Dst.Af))
+       buf.EncodeBytes(m.Entry.Tunnel.Dst.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint32(uint32(m.Entry.Tunnel.SwIfIndex))
+       buf.EncodeUint32(m.Entry.Tunnel.TableID)
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.EncapDecapFlags))
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Mode))
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Flags))
+       buf.EncodeUint8(uint8(m.Entry.Tunnel.Dscp))
+       buf.EncodeUint8(m.Entry.Tunnel.HopLimit)
+       buf.EncodeUint32(m.Entry.Salt)
+       buf.EncodeUint16(m.Entry.UDPSrcPort)
+       buf.EncodeUint16(m.Entry.UDPDstPort)
        return buf.Bytes(), nil
 }
-func (m *IpsecSadEntryAddDel) Unmarshal(b []byte) error {
+func (m *IpsecSadEntryAddDelV3) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
        m.IsAdd = buf.DecodeBool()
        m.Entry.SadID = buf.DecodeUint32()
@@ -476,58 +1267,64 @@ func (m *IpsecSadEntryAddDel) Unmarshal(b []byte) error {
        m.Entry.Protocol = ipsec_types.IpsecProto(buf.DecodeUint32())
        m.Entry.CryptoAlgorithm = ipsec_types.IpsecCryptoAlg(buf.DecodeUint32())
        m.Entry.CryptoKey.Length = buf.DecodeUint8()
-       copy(m.Entry.CryptoKey.Data[:], buf.DecodeBytes(128))
+       m.Entry.CryptoKey.Data = make([]byte, 128)
+       copy(m.Entry.CryptoKey.Data, buf.DecodeBytes(len(m.Entry.CryptoKey.Data)))
        m.Entry.IntegrityAlgorithm = ipsec_types.IpsecIntegAlg(buf.DecodeUint32())
        m.Entry.IntegrityKey.Length = buf.DecodeUint8()
-       copy(m.Entry.IntegrityKey.Data[:], buf.DecodeBytes(128))
+       m.Entry.IntegrityKey.Data = make([]byte, 128)
+       copy(m.Entry.IntegrityKey.Data, buf.DecodeBytes(len(m.Entry.IntegrityKey.Data)))
        m.Entry.Flags = ipsec_types.IpsecSadFlags(buf.DecodeUint32())
-       m.Entry.TunnelSrc.Af = ip_types.AddressFamily(buf.DecodeUint8())
-       copy(m.Entry.TunnelSrc.Un.XXX_UnionData[:], buf.DecodeBytes(16))
-       m.Entry.TunnelDst.Af = ip_types.AddressFamily(buf.DecodeUint8())
-       copy(m.Entry.TunnelDst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
-       m.Entry.TxTableID = buf.DecodeUint32()
+       m.Entry.Tunnel.Instance = buf.DecodeUint32()
+       m.Entry.Tunnel.Src.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.Tunnel.Src.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.Tunnel.Dst.Af = ip_types.AddressFamily(buf.DecodeUint8())
+       copy(m.Entry.Tunnel.Dst.Un.XXX_UnionData[:], buf.DecodeBytes(16))
+       m.Entry.Tunnel.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
+       m.Entry.Tunnel.TableID = buf.DecodeUint32()
+       m.Entry.Tunnel.EncapDecapFlags = tunnel_types.TunnelEncapDecapFlags(buf.DecodeUint8())
+       m.Entry.Tunnel.Mode = tunnel_types.TunnelMode(buf.DecodeUint8())
+       m.Entry.Tunnel.Flags = tunnel_types.TunnelFlags(buf.DecodeUint8())
+       m.Entry.Tunnel.Dscp = ip_types.IPDscp(buf.DecodeUint8())
+       m.Entry.Tunnel.HopLimit = buf.DecodeUint8()
        m.Entry.Salt = buf.DecodeUint32()
        m.Entry.UDPSrcPort = buf.DecodeUint16()
        m.Entry.UDPDstPort = buf.DecodeUint16()
        return nil
 }
 
-// IpsecSadEntryAddDelReply defines message 'ipsec_sad_entry_add_del_reply'.
-type IpsecSadEntryAddDelReply struct {
+// IpsecSadEntryAddDelV3Reply defines message 'ipsec_sad_entry_add_del_v3_reply'.
+type IpsecSadEntryAddDelV3Reply struct {
        Retval    int32  `binapi:"i32,name=retval" json:"retval,omitempty"`
        StatIndex uint32 `binapi:"u32,name=stat_index" json:"stat_index,omitempty"`
 }
 
-func (m *IpsecSadEntryAddDelReply) Reset()               { *m = IpsecSadEntryAddDelReply{} }
-func (*IpsecSadEntryAddDelReply) GetMessageName() string { return "ipsec_sad_entry_add_del_reply" }
-func (*IpsecSadEntryAddDelReply) GetCrcString() string   { return "9ffac24b" }
-func (*IpsecSadEntryAddDelReply) GetMessageType() api.MessageType {
+func (m *IpsecSadEntryAddDelV3Reply) Reset()               { *m = IpsecSadEntryAddDelV3Reply{} }
+func (*IpsecSadEntryAddDelV3Reply) GetMessageName() string { return "ipsec_sad_entry_add_del_v3_reply" }
+func (*IpsecSadEntryAddDelV3Reply) GetCrcString() string   { return "9ffac24b" }
+func (*IpsecSadEntryAddDelV3Reply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSadEntryAddDelReply) Size() int {
+func (m *IpsecSadEntryAddDelV3Reply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
        size += 4 // m.StatIndex
        return size
 }
-func (m *IpsecSadEntryAddDelReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
+func (m *IpsecSadEntryAddDelV3Reply) Marshal(b []byte) ([]byte, error) {
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
-       buf.EncodeUint32(uint32(m.StatIndex))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       buf.EncodeUint32(m.StatIndex)
        return buf.Bytes(), nil
 }
-func (m *IpsecSadEntryAddDelReply) Unmarshal(b []byte) error {
+func (m *IpsecSadEntryAddDelV3Reply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
        m.StatIndex = buf.DecodeUint32()
        return nil
 }
@@ -545,24 +1342,21 @@ func (*IpsecSelectBackend) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSelectBackend) Size() int {
+func (m *IpsecSelectBackend) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Protocol
        size += 1 // m.Index
        return size
 }
 func (m *IpsecSelectBackend) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeUint32(uint32(m.Protocol))
-       buf.EncodeUint8(uint8(m.Index))
+       buf.EncodeUint8(m.Index)
        return buf.Bytes(), nil
 }
 func (m *IpsecSelectBackend) Unmarshal(b []byte) error {
@@ -584,27 +1378,90 @@ func (*IpsecSelectBackendReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSelectBackendReply) Size() int {
+func (m *IpsecSelectBackendReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
        return size
 }
 func (m *IpsecSelectBackendReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
        return buf.Bytes(), nil
 }
 func (m *IpsecSelectBackendReply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
+       return nil
+}
+
+// IpsecSetAsyncMode defines message 'ipsec_set_async_mode'.
+type IpsecSetAsyncMode struct {
+       AsyncEnable bool `binapi:"bool,name=async_enable" json:"async_enable,omitempty"`
+}
+
+func (m *IpsecSetAsyncMode) Reset()               { *m = IpsecSetAsyncMode{} }
+func (*IpsecSetAsyncMode) GetMessageName() string { return "ipsec_set_async_mode" }
+func (*IpsecSetAsyncMode) GetCrcString() string   { return "a6465f7c" }
+func (*IpsecSetAsyncMode) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+func (m *IpsecSetAsyncMode) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 1 // m.AsyncEnable
+       return size
+}
+func (m *IpsecSetAsyncMode) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeBool(m.AsyncEnable)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSetAsyncMode) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.AsyncEnable = buf.DecodeBool()
+       return nil
+}
+
+// IpsecSetAsyncModeReply defines message 'ipsec_set_async_mode_reply'.
+type IpsecSetAsyncModeReply struct {
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *IpsecSetAsyncModeReply) Reset()               { *m = IpsecSetAsyncModeReply{} }
+func (*IpsecSetAsyncModeReply) GetMessageName() string { return "ipsec_set_async_mode_reply" }
+func (*IpsecSetAsyncModeReply) GetCrcString() string   { return "e8d4e804" }
+func (*IpsecSetAsyncModeReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func (m *IpsecSetAsyncModeReply) Size() (size int) {
+       if m == nil {
+               return 0
+       }
+       size += 4 // m.Retval
+       return size
+}
+func (m *IpsecSetAsyncModeReply) Marshal(b []byte) ([]byte, error) {
+       if b == nil {
+               b = make([]byte, m.Size())
+       }
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       return buf.Bytes(), nil
+}
+func (m *IpsecSetAsyncModeReply) Unmarshal(b []byte) error {
+       buf := codec.NewBuffer(b)
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
@@ -621,24 +1478,21 @@ func (*IpsecSpdAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSpdAddDel) Size() int {
+func (m *IpsecSpdAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 1 // m.IsAdd
        size += 4 // m.SpdID
        return size
 }
 func (m *IpsecSpdAddDel) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeBool(m.IsAdd)
-       buf.EncodeUint32(uint32(m.SpdID))
+       buf.EncodeUint32(m.SpdID)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdAddDel) Unmarshal(b []byte) error {
@@ -660,27 +1514,24 @@ func (*IpsecSpdAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSpdAddDelReply) Size() int {
+func (m *IpsecSpdAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
        return size
 }
 func (m *IpsecSpdAddDelReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdAddDelReply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
@@ -691,16 +1542,15 @@ type IpsecSpdDetails struct {
 
 func (m *IpsecSpdDetails) Reset()               { *m = IpsecSpdDetails{} }
 func (*IpsecSpdDetails) GetMessageName() string { return "ipsec_spd_details" }
-func (*IpsecSpdDetails) GetCrcString() string   { return "f2222790" }
+func (*IpsecSpdDetails) GetCrcString() string   { return "5813d7a2" }
 func (*IpsecSpdDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSpdDetails) Size() int {
+func (m *IpsecSpdDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4      // m.Entry.SpdID
        size += 4      // m.Entry.Priority
        size += 1      // m.Entry.IsOutbound
@@ -722,36 +1572,34 @@ func (m *IpsecSpdDetails) Size() int {
        return size
 }
 func (m *IpsecSpdDetails) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Entry.SpdID))
-       buf.EncodeUint32(uint32(m.Entry.Priority))
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.Entry.SpdID)
+       buf.EncodeInt32(m.Entry.Priority)
        buf.EncodeBool(m.Entry.IsOutbound)
-       buf.EncodeUint32(uint32(m.Entry.SaID))
+       buf.EncodeUint32(m.Entry.SaID)
        buf.EncodeUint32(uint32(m.Entry.Policy))
-       buf.EncodeUint8(uint8(m.Entry.Protocol))
+       buf.EncodeUint8(m.Entry.Protocol)
        buf.EncodeUint8(uint8(m.Entry.RemoteAddressStart.Af))
-       buf.EncodeBytes(m.Entry.RemoteAddressStart.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.RemoteAddressStart.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.RemoteAddressStop.Af))
-       buf.EncodeBytes(m.Entry.RemoteAddressStop.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.RemoteAddressStop.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.LocalAddressStart.Af))
-       buf.EncodeBytes(m.Entry.LocalAddressStart.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.LocalAddressStart.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.LocalAddressStop.Af))
-       buf.EncodeBytes(m.Entry.LocalAddressStop.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint16(uint16(m.Entry.RemotePortStart))
-       buf.EncodeUint16(uint16(m.Entry.RemotePortStop))
-       buf.EncodeUint16(uint16(m.Entry.LocalPortStart))
-       buf.EncodeUint16(uint16(m.Entry.LocalPortStop))
+       buf.EncodeBytes(m.Entry.LocalAddressStop.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint16(m.Entry.RemotePortStart)
+       buf.EncodeUint16(m.Entry.RemotePortStop)
+       buf.EncodeUint16(m.Entry.LocalPortStart)
+       buf.EncodeUint16(m.Entry.LocalPortStop)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdDetails) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
        m.Entry.SpdID = buf.DecodeUint32()
-       m.Entry.Priority = int32(buf.DecodeUint32())
+       m.Entry.Priority = buf.DecodeInt32()
        m.Entry.IsOutbound = buf.DecodeBool()
        m.Entry.SaID = buf.DecodeUint32()
        m.Entry.Policy = IpsecSpdAction(buf.DecodeUint32())
@@ -784,24 +1632,21 @@ func (*IpsecSpdDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSpdDump) Size() int {
+func (m *IpsecSpdDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.SpdID
        size += 4 // m.SaID
        return size
 }
 func (m *IpsecSpdDump) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.SpdID))
-       buf.EncodeUint32(uint32(m.SaID))
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SpdID)
+       buf.EncodeUint32(m.SaID)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdDump) Unmarshal(b []byte) error {
@@ -819,16 +1664,15 @@ type IpsecSpdEntryAddDel struct {
 
 func (m *IpsecSpdEntryAddDel) Reset()               { *m = IpsecSpdEntryAddDel{} }
 func (*IpsecSpdEntryAddDel) GetMessageName() string { return "ipsec_spd_entry_add_del" }
-func (*IpsecSpdEntryAddDel) GetCrcString() string   { return "9f384b8d" }
+func (*IpsecSpdEntryAddDel) GetCrcString() string   { return "338b7411" }
 func (*IpsecSpdEntryAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSpdEntryAddDel) Size() int {
+func (m *IpsecSpdEntryAddDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 1      // m.IsAdd
        size += 4      // m.Entry.SpdID
        size += 4      // m.Entry.Priority
@@ -851,38 +1695,36 @@ func (m *IpsecSpdEntryAddDel) Size() int {
        return size
 }
 func (m *IpsecSpdEntryAddDel) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeBool(m.IsAdd)
-       buf.EncodeUint32(uint32(m.Entry.SpdID))
-       buf.EncodeUint32(uint32(m.Entry.Priority))
+       buf.EncodeUint32(m.Entry.SpdID)
+       buf.EncodeInt32(m.Entry.Priority)
        buf.EncodeBool(m.Entry.IsOutbound)
-       buf.EncodeUint32(uint32(m.Entry.SaID))
+       buf.EncodeUint32(m.Entry.SaID)
        buf.EncodeUint32(uint32(m.Entry.Policy))
-       buf.EncodeUint8(uint8(m.Entry.Protocol))
+       buf.EncodeUint8(m.Entry.Protocol)
        buf.EncodeUint8(uint8(m.Entry.RemoteAddressStart.Af))
-       buf.EncodeBytes(m.Entry.RemoteAddressStart.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.RemoteAddressStart.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.RemoteAddressStop.Af))
-       buf.EncodeBytes(m.Entry.RemoteAddressStop.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.RemoteAddressStop.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.LocalAddressStart.Af))
-       buf.EncodeBytes(m.Entry.LocalAddressStart.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Entry.LocalAddressStart.Un.XXX_UnionData[:], 16)
        buf.EncodeUint8(uint8(m.Entry.LocalAddressStop.Af))
-       buf.EncodeBytes(m.Entry.LocalAddressStop.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint16(uint16(m.Entry.RemotePortStart))
-       buf.EncodeUint16(uint16(m.Entry.RemotePortStop))
-       buf.EncodeUint16(uint16(m.Entry.LocalPortStart))
-       buf.EncodeUint16(uint16(m.Entry.LocalPortStop))
+       buf.EncodeBytes(m.Entry.LocalAddressStop.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint16(m.Entry.RemotePortStart)
+       buf.EncodeUint16(m.Entry.RemotePortStop)
+       buf.EncodeUint16(m.Entry.LocalPortStart)
+       buf.EncodeUint16(m.Entry.LocalPortStop)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdEntryAddDel) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
        m.IsAdd = buf.DecodeBool()
        m.Entry.SpdID = buf.DecodeUint32()
-       m.Entry.Priority = int32(buf.DecodeUint32())
+       m.Entry.Priority = buf.DecodeInt32()
        m.Entry.IsOutbound = buf.DecodeBool()
        m.Entry.SaID = buf.DecodeUint32()
        m.Entry.Policy = IpsecSpdAction(buf.DecodeUint32())
@@ -915,29 +1757,26 @@ func (*IpsecSpdEntryAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSpdEntryAddDelReply) Size() int {
+func (m *IpsecSpdEntryAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
        size += 4 // m.StatIndex
        return size
 }
 func (m *IpsecSpdEntryAddDelReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
-       buf.EncodeUint32(uint32(m.StatIndex))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
+       buf.EncodeUint32(m.StatIndex)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdEntryAddDelReply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
        m.StatIndex = buf.DecodeUint32()
        return nil
 }
@@ -955,23 +1794,20 @@ func (*IpsecSpdInterfaceDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSpdInterfaceDetails) Size() int {
+func (m *IpsecSpdInterfaceDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.SpdIndex
        size += 4 // m.SwIfIndex
        return size
 }
 func (m *IpsecSpdInterfaceDetails) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.SpdIndex))
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SpdIndex)
        buf.EncodeUint32(uint32(m.SwIfIndex))
        return buf.Bytes(), nil
 }
@@ -995,24 +1831,21 @@ func (*IpsecSpdInterfaceDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSpdInterfaceDump) Size() int {
+func (m *IpsecSpdInterfaceDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.SpdIndex
        size += 1 // m.SpdIndexValid
        return size
 }
 func (m *IpsecSpdInterfaceDump) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.SpdIndex))
-       buf.EncodeUint8(uint8(m.SpdIndexValid))
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SpdIndex)
+       buf.EncodeUint8(m.SpdIndexValid)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdInterfaceDump) Unmarshal(b []byte) error {
@@ -1035,24 +1868,21 @@ func (*IpsecSpdsDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecSpdsDetails) Size() int {
+func (m *IpsecSpdsDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.SpdID
        size += 4 // m.Npolicies
        return size
 }
 func (m *IpsecSpdsDetails) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.SpdID))
-       buf.EncodeUint32(uint32(m.Npolicies))
+       buf := codec.NewBuffer(b)
+       buf.EncodeUint32(m.SpdID)
+       buf.EncodeUint32(m.Npolicies)
        return buf.Bytes(), nil
 }
 func (m *IpsecSpdsDetails) Unmarshal(b []byte) error {
@@ -1072,269 +1902,20 @@ func (*IpsecSpdsDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecSpdsDump) Size() int {
+func (m *IpsecSpdsDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        return size
 }
 func (m *IpsecSpdsDump) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
-       if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
-       }
-       return buf.Bytes(), nil
-}
-func (m *IpsecSpdsDump) Unmarshal(b []byte) error {
-       return nil
-}
-
-// IpsecTunnelIfAddDel defines message 'ipsec_tunnel_if_add_del'.
-type IpsecTunnelIfAddDel struct {
-       IsAdd              bool             `binapi:"bool,name=is_add" json:"is_add,omitempty"`
-       Esn                bool             `binapi:"bool,name=esn" json:"esn,omitempty"`
-       AntiReplay         bool             `binapi:"bool,name=anti_replay" json:"anti_replay,omitempty"`
-       LocalIP            ip_types.Address `binapi:"address,name=local_ip" json:"local_ip,omitempty"`
-       RemoteIP           ip_types.Address `binapi:"address,name=remote_ip" json:"remote_ip,omitempty"`
-       LocalSpi           uint32           `binapi:"u32,name=local_spi" json:"local_spi,omitempty"`
-       RemoteSpi          uint32           `binapi:"u32,name=remote_spi" json:"remote_spi,omitempty"`
-       CryptoAlg          uint8            `binapi:"u8,name=crypto_alg" json:"crypto_alg,omitempty"`
-       LocalCryptoKeyLen  uint8            `binapi:"u8,name=local_crypto_key_len" json:"local_crypto_key_len,omitempty"`
-       LocalCryptoKey     []byte           `binapi:"u8[128],name=local_crypto_key" json:"local_crypto_key,omitempty"`
-       RemoteCryptoKeyLen uint8            `binapi:"u8,name=remote_crypto_key_len" json:"remote_crypto_key_len,omitempty"`
-       RemoteCryptoKey    []byte           `binapi:"u8[128],name=remote_crypto_key" json:"remote_crypto_key,omitempty"`
-       IntegAlg           uint8            `binapi:"u8,name=integ_alg" json:"integ_alg,omitempty"`
-       LocalIntegKeyLen   uint8            `binapi:"u8,name=local_integ_key_len" json:"local_integ_key_len,omitempty"`
-       LocalIntegKey      []byte           `binapi:"u8[128],name=local_integ_key" json:"local_integ_key,omitempty"`
-       RemoteIntegKeyLen  uint8            `binapi:"u8,name=remote_integ_key_len" json:"remote_integ_key_len,omitempty"`
-       RemoteIntegKey     []byte           `binapi:"u8[128],name=remote_integ_key" json:"remote_integ_key,omitempty"`
-       Renumber           bool             `binapi:"bool,name=renumber" json:"renumber,omitempty"`
-       ShowInstance       uint32           `binapi:"u32,name=show_instance" json:"show_instance,omitempty"`
-       UDPEncap           bool             `binapi:"bool,name=udp_encap" json:"udp_encap,omitempty"`
-       TxTableID          uint32           `binapi:"u32,name=tx_table_id" json:"tx_table_id,omitempty"`
-       Salt               uint32           `binapi:"u32,name=salt" json:"salt,omitempty"`
-}
-
-func (m *IpsecTunnelIfAddDel) Reset()               { *m = IpsecTunnelIfAddDel{} }
-func (*IpsecTunnelIfAddDel) GetMessageName() string { return "ipsec_tunnel_if_add_del" }
-func (*IpsecTunnelIfAddDel) GetCrcString() string   { return "2b135e68" }
-func (*IpsecTunnelIfAddDel) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
-
-func (m *IpsecTunnelIfAddDel) Size() int {
-       if m == nil {
-               return 0
-       }
-       var size int
-       size += 1       // m.IsAdd
-       size += 1       // m.Esn
-       size += 1       // m.AntiReplay
-       size += 1       // m.LocalIP.Af
-       size += 1 * 16  // m.LocalIP.Un
-       size += 1       // m.RemoteIP.Af
-       size += 1 * 16  // m.RemoteIP.Un
-       size += 4       // m.LocalSpi
-       size += 4       // m.RemoteSpi
-       size += 1       // m.CryptoAlg
-       size += 1       // m.LocalCryptoKeyLen
-       size += 1 * 128 // m.LocalCryptoKey
-       size += 1       // m.RemoteCryptoKeyLen
-       size += 1 * 128 // m.RemoteCryptoKey
-       size += 1       // m.IntegAlg
-       size += 1       // m.LocalIntegKeyLen
-       size += 1 * 128 // m.LocalIntegKey
-       size += 1       // m.RemoteIntegKeyLen
-       size += 1 * 128 // m.RemoteIntegKey
-       size += 1       // m.Renumber
-       size += 4       // m.ShowInstance
-       size += 1       // m.UDPEncap
-       size += 4       // m.TxTableID
-       size += 4       // m.Salt
-       return size
-}
-func (m *IpsecTunnelIfAddDel) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
-       if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
-       }
-       buf.EncodeBool(m.IsAdd)
-       buf.EncodeBool(m.Esn)
-       buf.EncodeBool(m.AntiReplay)
-       buf.EncodeUint8(uint8(m.LocalIP.Af))
-       buf.EncodeBytes(m.LocalIP.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint8(uint8(m.RemoteIP.Af))
-       buf.EncodeBytes(m.RemoteIP.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint32(uint32(m.LocalSpi))
-       buf.EncodeUint32(uint32(m.RemoteSpi))
-       buf.EncodeUint8(uint8(m.CryptoAlg))
-       buf.EncodeUint8(uint8(m.LocalCryptoKeyLen))
-       buf.EncodeBytes(m.LocalCryptoKey[:], 128)
-       buf.EncodeUint8(uint8(m.RemoteCryptoKeyLen))
-       buf.EncodeBytes(m.RemoteCryptoKey[:], 128)
-       buf.EncodeUint8(uint8(m.IntegAlg))
-       buf.EncodeUint8(uint8(m.LocalIntegKeyLen))
-       buf.EncodeBytes(m.LocalIntegKey[:], 128)
-       buf.EncodeUint8(uint8(m.RemoteIntegKeyLen))
-       buf.EncodeBytes(m.RemoteIntegKey[:], 128)
-       buf.EncodeBool(m.Renumber)
-       buf.EncodeUint32(uint32(m.ShowInstance))
-       buf.EncodeBool(m.UDPEncap)
-       buf.EncodeUint32(uint32(m.TxTableID))
-       buf.EncodeUint32(uint32(m.Salt))
-       return buf.Bytes(), nil
-}
-func (m *IpsecTunnelIfAddDel) Unmarshal(b []byte) error {
-       buf := codec.NewBuffer(b)
-       m.IsAdd = buf.DecodeBool()
-       m.Esn = buf.DecodeBool()
-       m.AntiReplay = buf.DecodeBool()
-       m.LocalIP.Af = ip_types.AddressFamily(buf.DecodeUint8())
-       copy(m.LocalIP.Un.XXX_UnionData[:], buf.DecodeBytes(16))
-       m.RemoteIP.Af = ip_types.AddressFamily(buf.DecodeUint8())
-       copy(m.RemoteIP.Un.XXX_UnionData[:], buf.DecodeBytes(16))
-       m.LocalSpi = buf.DecodeUint32()
-       m.RemoteSpi = buf.DecodeUint32()
-       m.CryptoAlg = buf.DecodeUint8()
-       m.LocalCryptoKeyLen = buf.DecodeUint8()
-       copy(m.LocalCryptoKey[:], buf.DecodeBytes(128))
-       m.RemoteCryptoKeyLen = buf.DecodeUint8()
-       copy(m.RemoteCryptoKey[:], buf.DecodeBytes(128))
-       m.IntegAlg = buf.DecodeUint8()
-       m.LocalIntegKeyLen = buf.DecodeUint8()
-       copy(m.LocalIntegKey[:], buf.DecodeBytes(128))
-       m.RemoteIntegKeyLen = buf.DecodeUint8()
-       copy(m.RemoteIntegKey[:], buf.DecodeBytes(128))
-       m.Renumber = buf.DecodeBool()
-       m.ShowInstance = buf.DecodeUint32()
-       m.UDPEncap = buf.DecodeBool()
-       m.TxTableID = buf.DecodeUint32()
-       m.Salt = buf.DecodeUint32()
-       return nil
-}
-
-// IpsecTunnelIfAddDelReply defines message 'ipsec_tunnel_if_add_del_reply'.
-type IpsecTunnelIfAddDelReply struct {
-       Retval    int32                          `binapi:"i32,name=retval" json:"retval,omitempty"`
-       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-}
-
-func (m *IpsecTunnelIfAddDelReply) Reset()               { *m = IpsecTunnelIfAddDelReply{} }
-func (*IpsecTunnelIfAddDelReply) GetMessageName() string { return "ipsec_tunnel_if_add_del_reply" }
-func (*IpsecTunnelIfAddDelReply) GetCrcString() string   { return "5383d31f" }
-func (*IpsecTunnelIfAddDelReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
-
-func (m *IpsecTunnelIfAddDelReply) Size() int {
-       if m == nil {
-               return 0
-       }
-       var size int
-       size += 4 // m.Retval
-       size += 4 // m.SwIfIndex
-       return size
-}
-func (m *IpsecTunnelIfAddDelReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
-       if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
-       }
-       buf.EncodeUint32(uint32(m.Retval))
-       buf.EncodeUint32(uint32(m.SwIfIndex))
-       return buf.Bytes(), nil
-}
-func (m *IpsecTunnelIfAddDelReply) Unmarshal(b []byte) error {
-       buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
-       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
-       return nil
-}
-
-// IpsecTunnelIfSetSa defines message 'ipsec_tunnel_if_set_sa'.
-type IpsecTunnelIfSetSa struct {
-       SwIfIndex  interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       SaID       uint32                         `binapi:"u32,name=sa_id" json:"sa_id,omitempty"`
-       IsOutbound uint8                          `binapi:"u8,name=is_outbound" json:"is_outbound,omitempty"`
-}
-
-func (m *IpsecTunnelIfSetSa) Reset()               { *m = IpsecTunnelIfSetSa{} }
-func (*IpsecTunnelIfSetSa) GetMessageName() string { return "ipsec_tunnel_if_set_sa" }
-func (*IpsecTunnelIfSetSa) GetCrcString() string   { return "f2f87112" }
-func (*IpsecTunnelIfSetSa) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
-
-func (m *IpsecTunnelIfSetSa) Size() int {
-       if m == nil {
-               return 0
-       }
-       var size int
-       size += 4 // m.SwIfIndex
-       size += 4 // m.SaID
-       size += 1 // m.IsOutbound
-       return size
-}
-func (m *IpsecTunnelIfSetSa) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.SwIfIndex))
-       buf.EncodeUint32(uint32(m.SaID))
-       buf.EncodeUint8(uint8(m.IsOutbound))
-       return buf.Bytes(), nil
-}
-func (m *IpsecTunnelIfSetSa) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32())
-       m.SaID = buf.DecodeUint32()
-       m.IsOutbound = buf.DecodeUint8()
-       return nil
-}
-
-// IpsecTunnelIfSetSaReply defines message 'ipsec_tunnel_if_set_sa_reply'.
-type IpsecTunnelIfSetSaReply struct {
-       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
-}
-
-func (m *IpsecTunnelIfSetSaReply) Reset()               { *m = IpsecTunnelIfSetSaReply{} }
-func (*IpsecTunnelIfSetSaReply) GetMessageName() string { return "ipsec_tunnel_if_set_sa_reply" }
-func (*IpsecTunnelIfSetSaReply) GetCrcString() string   { return "e8d4e804" }
-func (*IpsecTunnelIfSetSaReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
-
-func (m *IpsecTunnelIfSetSaReply) Size() int {
-       if m == nil {
-               return 0
-       }
-       var size int
-       size += 4 // m.Retval
-       return size
-}
-func (m *IpsecTunnelIfSetSaReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
-       if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
-       }
-       buf.EncodeUint32(uint32(m.Retval))
        return buf.Bytes(), nil
 }
-func (m *IpsecTunnelIfSetSaReply) Unmarshal(b []byte) error {
-       buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+func (m *IpsecSpdsDump) Unmarshal(b []byte) error {
        return nil
 }
 
@@ -1346,31 +1927,28 @@ type IpsecTunnelProtectDel struct {
 
 func (m *IpsecTunnelProtectDel) Reset()               { *m = IpsecTunnelProtectDel{} }
 func (*IpsecTunnelProtectDel) GetMessageName() string { return "ipsec_tunnel_protect_del" }
-func (*IpsecTunnelProtectDel) GetCrcString() string   { return "ddd2ba36" }
+func (*IpsecTunnelProtectDel) GetCrcString() string   { return "cd239930" }
 func (*IpsecTunnelProtectDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecTunnelProtectDel) Size() int {
+func (m *IpsecTunnelProtectDel) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4      // m.SwIfIndex
        size += 1      // m.Nh.Af
        size += 1 * 16 // m.Nh.Un
        return size
 }
 func (m *IpsecTunnelProtectDel) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeUint32(uint32(m.SwIfIndex))
        buf.EncodeUint8(uint8(m.Nh.Af))
-       buf.EncodeBytes(m.Nh.Un.XXX_UnionData[:], 0)
+       buf.EncodeBytes(m.Nh.Un.XXX_UnionData[:], 16)
        return buf.Bytes(), nil
 }
 func (m *IpsecTunnelProtectDel) Unmarshal(b []byte) error {
@@ -1393,27 +1971,24 @@ func (*IpsecTunnelProtectDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecTunnelProtectDelReply) Size() int {
+func (m *IpsecTunnelProtectDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
        return size
 }
 func (m *IpsecTunnelProtectDelReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
        return buf.Bytes(), nil
 }
 func (m *IpsecTunnelProtectDelReply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
@@ -1424,16 +1999,15 @@ type IpsecTunnelProtectDetails struct {
 
 func (m *IpsecTunnelProtectDetails) Reset()               { *m = IpsecTunnelProtectDetails{} }
 func (*IpsecTunnelProtectDetails) GetMessageName() string { return "ipsec_tunnel_protect_details" }
-func (*IpsecTunnelProtectDetails) GetCrcString() string   { return "ac6c823b" }
+func (*IpsecTunnelProtectDetails) GetCrcString() string   { return "21663a50" }
 func (*IpsecTunnelProtectDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecTunnelProtectDetails) Size() int {
+func (m *IpsecTunnelProtectDetails) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4                   // m.Tun.SwIfIndex
        size += 1                   // m.Tun.Nh.Af
        size += 1 * 16              // m.Tun.Nh.Un
@@ -1443,23 +2017,21 @@ func (m *IpsecTunnelProtectDetails) Size() int {
        return size
 }
 func (m *IpsecTunnelProtectDetails) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeUint32(uint32(m.Tun.SwIfIndex))
        buf.EncodeUint8(uint8(m.Tun.Nh.Af))
-       buf.EncodeBytes(m.Tun.Nh.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint32(uint32(m.Tun.SaOut))
+       buf.EncodeBytes(m.Tun.Nh.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint32(m.Tun.SaOut)
        buf.EncodeUint8(uint8(len(m.Tun.SaIn)))
        for i := 0; i < len(m.Tun.SaIn); i++ {
                var x uint32
                if i < len(m.Tun.SaIn) {
                        x = uint32(m.Tun.SaIn[i])
                }
-               buf.EncodeUint32(uint32(x))
+               buf.EncodeUint32(x)
        }
        return buf.Bytes(), nil
 }
@@ -1489,21 +2061,18 @@ func (*IpsecTunnelProtectDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecTunnelProtectDump) Size() int {
+func (m *IpsecTunnelProtectDump) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.SwIfIndex
        return size
 }
 func (m *IpsecTunnelProtectDump) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeUint32(uint32(m.SwIfIndex))
        return buf.Bytes(), nil
 }
@@ -1520,16 +2089,15 @@ type IpsecTunnelProtectUpdate struct {
 
 func (m *IpsecTunnelProtectUpdate) Reset()               { *m = IpsecTunnelProtectUpdate{} }
 func (*IpsecTunnelProtectUpdate) GetMessageName() string { return "ipsec_tunnel_protect_update" }
-func (*IpsecTunnelProtectUpdate) GetCrcString() string   { return "143f155d" }
+func (*IpsecTunnelProtectUpdate) GetCrcString() string   { return "30d5f133" }
 func (*IpsecTunnelProtectUpdate) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-func (m *IpsecTunnelProtectUpdate) Size() int {
+func (m *IpsecTunnelProtectUpdate) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4                      // m.Tunnel.SwIfIndex
        size += 1                      // m.Tunnel.Nh.Af
        size += 1 * 16                 // m.Tunnel.Nh.Un
@@ -1539,23 +2107,21 @@ func (m *IpsecTunnelProtectUpdate) Size() int {
        return size
 }
 func (m *IpsecTunnelProtectUpdate) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
+       buf := codec.NewBuffer(b)
        buf.EncodeUint32(uint32(m.Tunnel.SwIfIndex))
        buf.EncodeUint8(uint8(m.Tunnel.Nh.Af))
-       buf.EncodeBytes(m.Tunnel.Nh.Un.XXX_UnionData[:], 0)
-       buf.EncodeUint32(uint32(m.Tunnel.SaOut))
+       buf.EncodeBytes(m.Tunnel.Nh.Un.XXX_UnionData[:], 16)
+       buf.EncodeUint32(m.Tunnel.SaOut)
        buf.EncodeUint8(uint8(len(m.Tunnel.SaIn)))
        for i := 0; i < len(m.Tunnel.SaIn); i++ {
                var x uint32
                if i < len(m.Tunnel.SaIn) {
                        x = uint32(m.Tunnel.SaIn[i])
                }
-               buf.EncodeUint32(uint32(x))
+               buf.EncodeUint32(x)
        }
        return buf.Bytes(), nil
 }
@@ -1587,27 +2153,24 @@ func (*IpsecTunnelProtectUpdateReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecTunnelProtectUpdateReply) Size() int {
+func (m *IpsecTunnelProtectUpdateReply) Size() (size int) {
        if m == nil {
                return 0
        }
-       var size int
        size += 4 // m.Retval
        return size
 }
 func (m *IpsecTunnelProtectUpdateReply) Marshal(b []byte) ([]byte, error) {
-       var buf *codec.Buffer
        if b == nil {
-               buf = codec.NewBuffer(make([]byte, m.Size()))
-       } else {
-               buf = codec.NewBuffer(b)
+               b = make([]byte, m.Size())
        }
-       buf.EncodeUint32(uint32(m.Retval))
+       buf := codec.NewBuffer(b)
+       buf.EncodeInt32(m.Retval)
        return buf.Bytes(), nil
 }
 func (m *IpsecTunnelProtectUpdateReply) Unmarshal(b []byte) error {
        buf := codec.NewBuffer(b)
-       m.Retval = int32(buf.DecodeUint32())
+       m.Retval = buf.DecodeInt32()
        return nil
 }
 
@@ -1617,31 +2180,43 @@ func file_ipsec_binapi_init() {
        api.RegisterMessage((*IpsecBackendDump)(nil), "ipsec_backend_dump_51077d14")
        api.RegisterMessage((*IpsecInterfaceAddDelSpd)(nil), "ipsec_interface_add_del_spd_80f80cbb")
        api.RegisterMessage((*IpsecInterfaceAddDelSpdReply)(nil), "ipsec_interface_add_del_spd_reply_e8d4e804")
-       api.RegisterMessage((*IpsecSaDetails)(nil), "ipsec_sa_details_b30c7f41")
+       api.RegisterMessage((*IpsecItfCreate)(nil), "ipsec_itf_create_6f50b3bc")
+       api.RegisterMessage((*IpsecItfCreateReply)(nil), "ipsec_itf_create_reply_5383d31f")
+       api.RegisterMessage((*IpsecItfDelete)(nil), "ipsec_itf_delete_f9e6675e")
+       api.RegisterMessage((*IpsecItfDeleteReply)(nil), "ipsec_itf_delete_reply_e8d4e804")
+       api.RegisterMessage((*IpsecItfDetails)(nil), "ipsec_itf_details_548a73b8")
+       api.RegisterMessage((*IpsecItfDump)(nil), "ipsec_itf_dump_f9e6675e")
+       api.RegisterMessage((*IpsecSaDetails)(nil), "ipsec_sa_details_345d14a7")
        api.RegisterMessage((*IpsecSaDump)(nil), "ipsec_sa_dump_2076c2f4")
-       api.RegisterMessage((*IpsecSadEntryAddDel)(nil), "ipsec_sad_entry_add_del_b8def364")
+       api.RegisterMessage((*IpsecSaV2Details)(nil), "ipsec_sa_v2_details_e2130051")
+       api.RegisterMessage((*IpsecSaV2Dump)(nil), "ipsec_sa_v2_dump_2076c2f4")
+       api.RegisterMessage((*IpsecSaV3Details)(nil), "ipsec_sa_v3_details_2fc991ee")
+       api.RegisterMessage((*IpsecSaV3Dump)(nil), "ipsec_sa_v3_dump_2076c2f4")
+       api.RegisterMessage((*IpsecSadEntryAddDel)(nil), "ipsec_sad_entry_add_del_ab64b5c6")
        api.RegisterMessage((*IpsecSadEntryAddDelReply)(nil), "ipsec_sad_entry_add_del_reply_9ffac24b")
+       api.RegisterMessage((*IpsecSadEntryAddDelV2)(nil), "ipsec_sad_entry_add_del_v2_aca78b27")
+       api.RegisterMessage((*IpsecSadEntryAddDelV2Reply)(nil), "ipsec_sad_entry_add_del_v2_reply_9ffac24b")
+       api.RegisterMessage((*IpsecSadEntryAddDelV3)(nil), "ipsec_sad_entry_add_del_v3_c77ebd92")
+       api.RegisterMessage((*IpsecSadEntryAddDelV3Reply)(nil), "ipsec_sad_entry_add_del_v3_reply_9ffac24b")
        api.RegisterMessage((*IpsecSelectBackend)(nil), "ipsec_select_backend_5bcfd3b7")
        api.RegisterMessage((*IpsecSelectBackendReply)(nil), "ipsec_select_backend_reply_e8d4e804")
+       api.RegisterMessage((*IpsecSetAsyncMode)(nil), "ipsec_set_async_mode_a6465f7c")
+       api.RegisterMessage((*IpsecSetAsyncModeReply)(nil), "ipsec_set_async_mode_reply_e8d4e804")
        api.RegisterMessage((*IpsecSpdAddDel)(nil), "ipsec_spd_add_del_20e89a95")
        api.RegisterMessage((*IpsecSpdAddDelReply)(nil), "ipsec_spd_add_del_reply_e8d4e804")
-       api.RegisterMessage((*IpsecSpdDetails)(nil), "ipsec_spd_details_f2222790")
+       api.RegisterMessage((*IpsecSpdDetails)(nil), "ipsec_spd_details_5813d7a2")
        api.RegisterMessage((*IpsecSpdDump)(nil), "ipsec_spd_dump_afefbf7d")
-       api.RegisterMessage((*IpsecSpdEntryAddDel)(nil), "ipsec_spd_entry_add_del_9f384b8d")
+       api.RegisterMessage((*IpsecSpdEntryAddDel)(nil), "ipsec_spd_entry_add_del_338b7411")
        api.RegisterMessage((*IpsecSpdEntryAddDelReply)(nil), "ipsec_spd_entry_add_del_reply_9ffac24b")
        api.RegisterMessage((*IpsecSpdInterfaceDetails)(nil), "ipsec_spd_interface_details_7a0bcf3e")
        api.RegisterMessage((*IpsecSpdInterfaceDump)(nil), "ipsec_spd_interface_dump_8971de19")
        api.RegisterMessage((*IpsecSpdsDetails)(nil), "ipsec_spds_details_a04bb254")
        api.RegisterMessage((*IpsecSpdsDump)(nil), "ipsec_spds_dump_51077d14")
-       api.RegisterMessage((*IpsecTunnelIfAddDel)(nil), "ipsec_tunnel_if_add_del_2b135e68")
-       api.RegisterMessage((*IpsecTunnelIfAddDelReply)(nil), "ipsec_tunnel_if_add_del_reply_5383d31f")
-       api.RegisterMessage((*IpsecTunnelIfSetSa)(nil), "ipsec_tunnel_if_set_sa_f2f87112")
-       api.RegisterMessage((*IpsecTunnelIfSetSaReply)(nil), "ipsec_tunnel_if_set_sa_reply_e8d4e804")
-       api.RegisterMessage((*IpsecTunnelProtectDel)(nil), "ipsec_tunnel_protect_del_ddd2ba36")
+       api.RegisterMessage((*IpsecTunnelProtectDel)(nil), "ipsec_tunnel_protect_del_cd239930")
        api.RegisterMessage((*IpsecTunnelProtectDelReply)(nil), "ipsec_tunnel_protect_del_reply_e8d4e804")
-       api.RegisterMessage((*IpsecTunnelProtectDetails)(nil), "ipsec_tunnel_protect_details_ac6c823b")
+       api.RegisterMessage((*IpsecTunnelProtectDetails)(nil), "ipsec_tunnel_protect_details_21663a50")
        api.RegisterMessage((*IpsecTunnelProtectDump)(nil), "ipsec_tunnel_protect_dump_f9e6675e")
-       api.RegisterMessage((*IpsecTunnelProtectUpdate)(nil), "ipsec_tunnel_protect_update_143f155d")
+       api.RegisterMessage((*IpsecTunnelProtectUpdate)(nil), "ipsec_tunnel_protect_update_30d5f133")
        api.RegisterMessage((*IpsecTunnelProtectUpdateReply)(nil), "ipsec_tunnel_protect_update_reply_e8d4e804")
 }
 
@@ -1652,12 +2227,28 @@ func AllMessages() []api.Message {
                (*IpsecBackendDump)(nil),
                (*IpsecInterfaceAddDelSpd)(nil),
                (*IpsecInterfaceAddDelSpdReply)(nil),
+               (*IpsecItfCreate)(nil),
+               (*IpsecItfCreateReply)(nil),
+               (*IpsecItfDelete)(nil),
+               (*IpsecItfDeleteReply)(nil),
+               (*IpsecItfDetails)(nil),
+               (*IpsecItfDump)(nil),
                (*IpsecSaDetails)(nil),
                (*IpsecSaDump)(nil),
+               (*IpsecSaV2Details)(nil),
+               (*IpsecSaV2Dump)(nil),
+               (*IpsecSaV3Details)(nil),
+               (*IpsecSaV3Dump)(nil),
                (*IpsecSadEntryAddDel)(nil),
                (*IpsecSadEntryAddDelReply)(nil),
+               (*IpsecSadEntryAddDelV2)(nil),
+               (*IpsecSadEntryAddDelV2Reply)(nil),
+               (*IpsecSadEntryAddDelV3)(nil),
+               (*IpsecSadEntryAddDelV3Reply)(nil),
                (*IpsecSelectBackend)(nil),
                (*IpsecSelectBackendReply)(nil),
+               (*IpsecSetAsyncMode)(nil),
+               (*IpsecSetAsyncModeReply)(nil),
                (*IpsecSpdAddDel)(nil),
                (*IpsecSpdAddDelReply)(nil),
                (*IpsecSpdDetails)(nil),
@@ -1668,10 +2259,6 @@ func AllMessages() []api.Message {
                (*IpsecSpdInterfaceDump)(nil),
                (*IpsecSpdsDetails)(nil),
                (*IpsecSpdsDump)(nil),
-               (*IpsecTunnelIfAddDel)(nil),
-               (*IpsecTunnelIfAddDelReply)(nil),
-               (*IpsecTunnelIfSetSa)(nil),
-               (*IpsecTunnelIfSetSaReply)(nil),
                (*IpsecTunnelProtectDel)(nil),
                (*IpsecTunnelProtectDelReply)(nil),
                (*IpsecTunnelProtectDetails)(nil),