regenerate binapi
[govpp.git] / binapi / ipsec / ipsec.ba.go
index 0ed6714..6479df4 100644 (file)
@@ -1,15 +1,15 @@
 // Code generated by GoVPP's binapi-generator. DO NOT EDIT.
 // versions:
-//  binapi-generator: v0.4.0
-//  VPP:              20.05.1-release
+//  binapi-generator: v0.3.5-56-gc0da1f2-dirty
+//  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
 
@@ -20,6 +20,7 @@ import (
        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"
 )
 
@@ -31,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'.
@@ -68,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"`
@@ -222,49 +230,842 @@ func (*IpsecInterfaceAddDelSpdReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-func (m *IpsecInterfaceAddDelSpdReply) Size() (size int) {
+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 *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 *IpsecSadEntryAddDelReply) Size() (size int) {
        if m == nil {
                return 0
        }
        size += 4 // m.Retval
+       size += 4 // m.StatIndex
        return size
 }
-func (m *IpsecInterfaceAddDelSpdReply) Marshal(b []byte) ([]byte, error) {
+func (m *IpsecSadEntryAddDelReply) Marshal(b []byte) ([]byte, error) {
        if b == nil {
                b = make([]byte, m.Size())
        }
        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 = 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() (size int) {
+func (m *IpsecSadEntryAddDelV2) 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
@@ -279,23 +1080,20 @@ func (m *IpsecSaDetails) Size() (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) {
+func (m *IpsecSadEntryAddDelV2) 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))
@@ -310,20 +1108,17 @@ func (m *IpsecSaDetails) Marshal(b []byte) ([]byte, error) {
        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 *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())
@@ -340,66 +1135,66 @@ func (m *IpsecSaDetails) Unmarshal(b []byte) error {
        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() (size int) {
+func (m *IpsecSadEntryAddDelV2Reply) Size() (size int) {
        if m == nil {
                return 0
        }
-       size += 4 // m.SaID
+       size += 4 // m.Retval
+       size += 4 // m.StatIndex
        return size
 }
-func (m *IpsecSaDump) Marshal(b []byte) ([]byte, error) {
+func (m *IpsecSadEntryAddDelV2Reply) Marshal(b []byte) ([]byte, error) {
        if b == nil {
                b = make([]byte, m.Size())
        }
        buf := codec.NewBuffer(b)
-       buf.EncodeUint32(m.SaID)
+       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() (size int) {
+func (m *IpsecSadEntryAddDelV3) Size() (size int) {
        if m == nil {
                return 0
        }
@@ -414,17 +1209,24 @@ func (m *IpsecSadEntryAddDel) Size() (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) {
+func (m *IpsecSadEntryAddDelV3) Marshal(b []byte) ([]byte, error) {
        if b == nil {
                b = make([]byte, m.Size())
        }
@@ -440,17 +1242,24 @@ func (m *IpsecSadEntryAddDel) Marshal(b []byte) ([]byte, error) {
        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.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()
@@ -465,31 +1274,38 @@ func (m *IpsecSadEntryAddDel) Unmarshal(b []byte) error {
        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() (size int) {
+func (m *IpsecSadEntryAddDelV3Reply) Size() (size int) {
        if m == nil {
                return 0
        }
@@ -497,7 +1313,7 @@ func (m *IpsecSadEntryAddDelReply) Size() (size int) {
        size += 4 // m.StatIndex
        return size
 }
-func (m *IpsecSadEntryAddDelReply) Marshal(b []byte) ([]byte, error) {
+func (m *IpsecSadEntryAddDelV3Reply) Marshal(b []byte) ([]byte, error) {
        if b == nil {
                b = make([]byte, m.Size())
        }
@@ -506,7 +1322,7 @@ func (m *IpsecSadEntryAddDelReply) Marshal(b []byte) ([]byte, error) {
        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 = buf.DecodeInt32()
        m.StatIndex = buf.DecodeUint32()
@@ -583,6 +1399,72 @@ func (m *IpsecSelectBackendReply) Unmarshal(b []byte) error {
        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
+}
+
 // IpsecSpdAddDel defines message 'ipsec_spd_add_del'.
 type IpsecSpdAddDel struct {
        IsAdd bool   `binapi:"bool,name=is_add" json:"is_add,omitempty"`
@@ -660,7 +1542,7 @@ 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
 }
@@ -782,7 +1664,7 @@ 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
 }
@@ -1037,244 +1919,6 @@ 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() (size int) {
-       if m == nil {
-               return 0
-       }
-       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) {
-       if b == nil {
-               b = make([]byte, m.Size())
-       }
-       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[:], 16)
-       buf.EncodeUint8(uint8(m.RemoteIP.Af))
-       buf.EncodeBytes(m.RemoteIP.Un.XXX_UnionData[:], 16)
-       buf.EncodeUint32(m.LocalSpi)
-       buf.EncodeUint32(m.RemoteSpi)
-       buf.EncodeUint8(m.CryptoAlg)
-       buf.EncodeUint8(m.LocalCryptoKeyLen)
-       buf.EncodeBytes(m.LocalCryptoKey, 128)
-       buf.EncodeUint8(m.RemoteCryptoKeyLen)
-       buf.EncodeBytes(m.RemoteCryptoKey, 128)
-       buf.EncodeUint8(m.IntegAlg)
-       buf.EncodeUint8(m.LocalIntegKeyLen)
-       buf.EncodeBytes(m.LocalIntegKey, 128)
-       buf.EncodeUint8(m.RemoteIntegKeyLen)
-       buf.EncodeBytes(m.RemoteIntegKey, 128)
-       buf.EncodeBool(m.Renumber)
-       buf.EncodeUint32(m.ShowInstance)
-       buf.EncodeBool(m.UDPEncap)
-       buf.EncodeUint32(m.TxTableID)
-       buf.EncodeUint32(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()
-       m.LocalCryptoKey = make([]byte, 128)
-       copy(m.LocalCryptoKey, buf.DecodeBytes(len(m.LocalCryptoKey)))
-       m.RemoteCryptoKeyLen = buf.DecodeUint8()
-       m.RemoteCryptoKey = make([]byte, 128)
-       copy(m.RemoteCryptoKey, buf.DecodeBytes(len(m.RemoteCryptoKey)))
-       m.IntegAlg = buf.DecodeUint8()
-       m.LocalIntegKeyLen = buf.DecodeUint8()
-       m.LocalIntegKey = make([]byte, 128)
-       copy(m.LocalIntegKey, buf.DecodeBytes(len(m.LocalIntegKey)))
-       m.RemoteIntegKeyLen = buf.DecodeUint8()
-       m.RemoteIntegKey = make([]byte, 128)
-       copy(m.RemoteIntegKey, buf.DecodeBytes(len(m.RemoteIntegKey)))
-       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() (size int) {
-       if m == nil {
-               return 0
-       }
-       size += 4 // m.Retval
-       size += 4 // m.SwIfIndex
-       return size
-}
-func (m *IpsecTunnelIfAddDelReply) 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 *IpsecTunnelIfAddDelReply) Unmarshal(b []byte) error {
-       buf := codec.NewBuffer(b)
-       m.Retval = buf.DecodeInt32()
-       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() (size int) {
-       if m == nil {
-               return 0
-       }
-       size += 4 // m.SwIfIndex
-       size += 4 // m.SaID
-       size += 1 // m.IsOutbound
-       return size
-}
-func (m *IpsecTunnelIfSetSa) Marshal(b []byte) ([]byte, error) {
-       if b == nil {
-               b = make([]byte, m.Size())
-       }
-       buf := codec.NewBuffer(b)
-       buf.EncodeUint32(uint32(m.SwIfIndex))
-       buf.EncodeUint32(m.SaID)
-       buf.EncodeUint8(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() (size int) {
-       if m == nil {
-               return 0
-       }
-       size += 4 // m.Retval
-       return size
-}
-func (m *IpsecTunnelIfSetSaReply) 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 *IpsecTunnelIfSetSaReply) Unmarshal(b []byte) error {
-       buf := codec.NewBuffer(b)
-       m.Retval = buf.DecodeInt32()
-       return nil
-}
-
 // IpsecTunnelProtectDel defines message 'ipsec_tunnel_protect_del'.
 type IpsecTunnelProtectDel struct {
        SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
@@ -1283,7 +1927,7 @@ 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
 }
@@ -1355,7 +1999,7 @@ 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
 }
@@ -1445,7 +2089,7 @@ 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
 }
@@ -1536,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")
 }
 
@@ -1571,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),
@@ -1587,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),