+// IpsecSadEntryAdd defines message 'ipsec_sad_entry_add'.
+type IpsecSadEntryAdd struct {
+ Entry ipsec_types.IpsecSadEntryV3 `binapi:"ipsec_sad_entry_v3,name=entry" json:"entry,omitempty"`
+}
+
+func (m *IpsecSadEntryAdd) Reset() { *m = IpsecSadEntryAdd{} }
+func (*IpsecSadEntryAdd) GetMessageName() string { return "ipsec_sad_entry_add" }
+func (*IpsecSadEntryAdd) GetCrcString() string { return "50229353" }
+func (*IpsecSadEntryAdd) GetMessageType() api.MessageType {
+ return api.RequestMessage
+}
+
+func (m *IpsecSadEntryAdd) 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
+ return size
+}
+func (m *IpsecSadEntryAdd) 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)
+ return buf.Bytes(), nil
+}
+func (m *IpsecSadEntryAdd) 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()
+ return nil
+}
+