diff --git a/vpp-manager/images/ubuntu-build/Dockerfile b/vpp-manager/images/ubuntu-build/Dockerfile index d4bc7d42..55066994 100644 --- a/vpp-manager/images/ubuntu-build/Dockerfile +++ b/vpp-manager/images/ubuntu-build/Dockerfile @@ -23,12 +23,13 @@ RUN apt-get update \ nasm \ iperf ethtool \ libpcap-dev \ - python3-virtualenv \ - libssl-dev \ - clang clang-format-11 \ + python3-virtualenv \ + libssl-dev \ + clang clang-format-11 \ libffi7 \ enchant-2 \ - tshark + tshark \ + libllvm15 libclang-cpp15 clang-format-15 libonig5 libjq1 jq libunwind8 liblzma-dev libunwind-dev WORKDIR / diff --git a/vpp-manager/images/ubuntu/Dockerfile b/vpp-manager/images/ubuntu/Dockerfile index afa6b5cb..a70cc2ac 100644 --- a/vpp-manager/images/ubuntu/Dockerfile +++ b/vpp-manager/images/ubuntu/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update \ && apt-get install -y openssl libapr1 libnuma1 \ libmbedcrypto7 libmbedtls14 libmbedx509-1 libsubunit0 \ iproute2 ifupdown ethtool libnl-3-dev libnl-route-3-dev \ - libpcap0.8 \ + libpcap0.8 libunwind8 \ && rm -rf /var/lib/apt/lists/* # set work directory diff --git a/vpplink/generated/bindings/ikev2/ikev2.ba.go b/vpplink/generated/bindings/ikev2/ikev2.ba.go index fdea70d3..1a12f9f4 100644 --- a/vpplink/generated/bindings/ikev2/ikev2.ba.go +++ b/vpplink/generated/bindings/ikev2/ikev2.ba.go @@ -3,7 +3,7 @@ // Package ikev2 contains generated bindings for API file ikev2.api. // // Contents: -// - 50 messages +// - 56 messages package ikev2 import ( @@ -23,7 +23,7 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "ikev2" APIVersion = "1.0.1" - VersionCrc = 0x8eb2437c + VersionCrc = 0x388d5d85 ) // Child SA details @@ -31,7 +31,6 @@ const ( // - child_sa - child SA data // // Ikev2ChildSaDetails defines message 'ikev2_child_sa_details'. -// InProgress: the message form may change in the future versions type Ikev2ChildSaDetails struct { Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` ChildSa ikev2_types.Ikev2ChildSa `binapi:"ikev2_child_sa,name=child_sa" json:"child_sa,omitempty"` @@ -184,7 +183,6 @@ func (m *Ikev2ChildSaDetails) Unmarshal(b []byte) error { // - sa_index - index of specific sa // // Ikev2ChildSaDump defines message 'ikev2_child_sa_dump'. -// InProgress: the message form may change in the future versions type Ikev2ChildSaDump struct { SaIndex uint32 `binapi:"u32,name=sa_index" json:"sa_index,omitempty"` } @@ -217,6 +215,200 @@ func (m *Ikev2ChildSaDump) Unmarshal(b []byte) error { return nil } +// Child SA details +// - retval - return code +// - child_sa - child SA data +// +// Ikev2ChildSaV2Details defines message 'ikev2_child_sa_v2_details'. +// InProgress: the message form may change in the future versions +type Ikev2ChildSaV2Details struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` + ChildSa ikev2_types.Ikev2ChildSaV2 `binapi:"ikev2_child_sa_v2,name=child_sa" json:"child_sa,omitempty"` +} + +func (m *Ikev2ChildSaV2Details) Reset() { *m = Ikev2ChildSaV2Details{} } +func (*Ikev2ChildSaV2Details) GetMessageName() string { return "ikev2_child_sa_v2_details" } +func (*Ikev2ChildSaV2Details) GetCrcString() string { return "1db62aa2" } +func (*Ikev2ChildSaV2Details) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *Ikev2ChildSaV2Details) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + size += 4 // m.ChildSa.SaIndex + size += 4 // m.ChildSa.ChildSaIndex + size += 4 // m.ChildSa.ISpi + size += 4 // m.ChildSa.RSpi + size += 1 * 64 // m.ChildSa.Keys.SkD + size += 1 // m.ChildSa.Keys.SkDLen + size += 1 * 64 // m.ChildSa.Keys.SkAi + size += 1 // m.ChildSa.Keys.SkAiLen + size += 1 * 64 // m.ChildSa.Keys.SkAr + size += 1 // m.ChildSa.Keys.SkArLen + size += 1 * 64 // m.ChildSa.Keys.SkEi + size += 1 // m.ChildSa.Keys.SkEiLen + size += 1 * 64 // m.ChildSa.Keys.SkEr + size += 1 // m.ChildSa.Keys.SkErLen + size += 1 * 64 // m.ChildSa.Keys.SkPi + size += 1 // m.ChildSa.Keys.SkPiLen + size += 1 * 64 // m.ChildSa.Keys.SkPr + size += 1 // m.ChildSa.Keys.SkPrLen + size += 1 // m.ChildSa.Encryption.TransformType + size += 2 // m.ChildSa.Encryption.TransformID + size += 2 // m.ChildSa.Encryption.KeyLen + size += 2 // m.ChildSa.Encryption.KeyTrunc + size += 2 // m.ChildSa.Encryption.BlockSize + size += 1 // m.ChildSa.Encryption.DhGroup + size += 1 // m.ChildSa.Integrity.TransformType + size += 2 // m.ChildSa.Integrity.TransformID + size += 2 // m.ChildSa.Integrity.KeyLen + size += 2 // m.ChildSa.Integrity.KeyTrunc + size += 2 // m.ChildSa.Integrity.BlockSize + size += 1 // m.ChildSa.Integrity.DhGroup + size += 1 // m.ChildSa.Esn.TransformType + size += 2 // m.ChildSa.Esn.TransformID + size += 2 // m.ChildSa.Esn.KeyLen + size += 2 // m.ChildSa.Esn.KeyTrunc + size += 2 // m.ChildSa.Esn.BlockSize + size += 1 // m.ChildSa.Esn.DhGroup + size += 8 // m.ChildSa.Uptime + return size +} +func (m *Ikev2ChildSaV2Details) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeInt32(m.Retval) + buf.EncodeUint32(m.ChildSa.SaIndex) + buf.EncodeUint32(m.ChildSa.ChildSaIndex) + buf.EncodeUint32(m.ChildSa.ISpi) + buf.EncodeUint32(m.ChildSa.RSpi) + buf.EncodeBytes(m.ChildSa.Keys.SkD, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkDLen) + buf.EncodeBytes(m.ChildSa.Keys.SkAi, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkAiLen) + buf.EncodeBytes(m.ChildSa.Keys.SkAr, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkArLen) + buf.EncodeBytes(m.ChildSa.Keys.SkEi, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkEiLen) + buf.EncodeBytes(m.ChildSa.Keys.SkEr, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkErLen) + buf.EncodeBytes(m.ChildSa.Keys.SkPi, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkPiLen) + buf.EncodeBytes(m.ChildSa.Keys.SkPr, 64) + buf.EncodeUint8(m.ChildSa.Keys.SkPrLen) + buf.EncodeUint8(m.ChildSa.Encryption.TransformType) + buf.EncodeUint16(m.ChildSa.Encryption.TransformID) + buf.EncodeUint16(m.ChildSa.Encryption.KeyLen) + buf.EncodeUint16(m.ChildSa.Encryption.KeyTrunc) + buf.EncodeUint16(m.ChildSa.Encryption.BlockSize) + buf.EncodeUint8(m.ChildSa.Encryption.DhGroup) + buf.EncodeUint8(m.ChildSa.Integrity.TransformType) + buf.EncodeUint16(m.ChildSa.Integrity.TransformID) + buf.EncodeUint16(m.ChildSa.Integrity.KeyLen) + buf.EncodeUint16(m.ChildSa.Integrity.KeyTrunc) + buf.EncodeUint16(m.ChildSa.Integrity.BlockSize) + buf.EncodeUint8(m.ChildSa.Integrity.DhGroup) + buf.EncodeUint8(m.ChildSa.Esn.TransformType) + buf.EncodeUint16(m.ChildSa.Esn.TransformID) + buf.EncodeUint16(m.ChildSa.Esn.KeyLen) + buf.EncodeUint16(m.ChildSa.Esn.KeyTrunc) + buf.EncodeUint16(m.ChildSa.Esn.BlockSize) + buf.EncodeUint8(m.ChildSa.Esn.DhGroup) + buf.EncodeFloat64(m.ChildSa.Uptime) + return buf.Bytes(), nil +} +func (m *Ikev2ChildSaV2Details) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + m.ChildSa.SaIndex = buf.DecodeUint32() + m.ChildSa.ChildSaIndex = buf.DecodeUint32() + m.ChildSa.ISpi = buf.DecodeUint32() + m.ChildSa.RSpi = buf.DecodeUint32() + m.ChildSa.Keys.SkD = make([]byte, 64) + copy(m.ChildSa.Keys.SkD, buf.DecodeBytes(len(m.ChildSa.Keys.SkD))) + m.ChildSa.Keys.SkDLen = buf.DecodeUint8() + m.ChildSa.Keys.SkAi = make([]byte, 64) + copy(m.ChildSa.Keys.SkAi, buf.DecodeBytes(len(m.ChildSa.Keys.SkAi))) + m.ChildSa.Keys.SkAiLen = buf.DecodeUint8() + m.ChildSa.Keys.SkAr = make([]byte, 64) + copy(m.ChildSa.Keys.SkAr, buf.DecodeBytes(len(m.ChildSa.Keys.SkAr))) + m.ChildSa.Keys.SkArLen = buf.DecodeUint8() + m.ChildSa.Keys.SkEi = make([]byte, 64) + copy(m.ChildSa.Keys.SkEi, buf.DecodeBytes(len(m.ChildSa.Keys.SkEi))) + m.ChildSa.Keys.SkEiLen = buf.DecodeUint8() + m.ChildSa.Keys.SkEr = make([]byte, 64) + copy(m.ChildSa.Keys.SkEr, buf.DecodeBytes(len(m.ChildSa.Keys.SkEr))) + m.ChildSa.Keys.SkErLen = buf.DecodeUint8() + m.ChildSa.Keys.SkPi = make([]byte, 64) + copy(m.ChildSa.Keys.SkPi, buf.DecodeBytes(len(m.ChildSa.Keys.SkPi))) + m.ChildSa.Keys.SkPiLen = buf.DecodeUint8() + m.ChildSa.Keys.SkPr = make([]byte, 64) + copy(m.ChildSa.Keys.SkPr, buf.DecodeBytes(len(m.ChildSa.Keys.SkPr))) + m.ChildSa.Keys.SkPrLen = buf.DecodeUint8() + m.ChildSa.Encryption.TransformType = buf.DecodeUint8() + m.ChildSa.Encryption.TransformID = buf.DecodeUint16() + m.ChildSa.Encryption.KeyLen = buf.DecodeUint16() + m.ChildSa.Encryption.KeyTrunc = buf.DecodeUint16() + m.ChildSa.Encryption.BlockSize = buf.DecodeUint16() + m.ChildSa.Encryption.DhGroup = buf.DecodeUint8() + m.ChildSa.Integrity.TransformType = buf.DecodeUint8() + m.ChildSa.Integrity.TransformID = buf.DecodeUint16() + m.ChildSa.Integrity.KeyLen = buf.DecodeUint16() + m.ChildSa.Integrity.KeyTrunc = buf.DecodeUint16() + m.ChildSa.Integrity.BlockSize = buf.DecodeUint16() + m.ChildSa.Integrity.DhGroup = buf.DecodeUint8() + m.ChildSa.Esn.TransformType = buf.DecodeUint8() + m.ChildSa.Esn.TransformID = buf.DecodeUint16() + m.ChildSa.Esn.KeyLen = buf.DecodeUint16() + m.ChildSa.Esn.KeyTrunc = buf.DecodeUint16() + m.ChildSa.Esn.BlockSize = buf.DecodeUint16() + m.ChildSa.Esn.DhGroup = buf.DecodeUint8() + m.ChildSa.Uptime = buf.DecodeFloat64() + return nil +} + +// Dump child SA of specific SA +// - sa_index - index of specific sa +// +// Ikev2ChildSaV2Dump defines message 'ikev2_child_sa_v2_dump'. +// InProgress: the message form may change in the future versions +type Ikev2ChildSaV2Dump struct { + SaIndex uint32 `binapi:"u32,name=sa_index" json:"sa_index,omitempty"` +} + +func (m *Ikev2ChildSaV2Dump) Reset() { *m = Ikev2ChildSaV2Dump{} } +func (*Ikev2ChildSaV2Dump) GetMessageName() string { return "ikev2_child_sa_v2_dump" } +func (*Ikev2ChildSaV2Dump) GetCrcString() string { return "01eab609" } +func (*Ikev2ChildSaV2Dump) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *Ikev2ChildSaV2Dump) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.SaIndex + return size +} +func (m *Ikev2ChildSaV2Dump) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeUint32(m.SaIndex) + return buf.Bytes(), nil +} +func (m *Ikev2ChildSaV2Dump) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.SaIndex = buf.DecodeUint32() + return nil +} + // IKEv2: Initiate the delete Child SA exchange // - ispi - Child SA initiator SPI // @@ -1552,7 +1744,6 @@ func (m *Ikev2ProfileSetUDPEncapReply) Unmarshal(b []byte) error { // - sa - SA data // // Ikev2SaDetails defines message 'ikev2_sa_details'. -// InProgress: the message form may change in the future versions type Ikev2SaDetails struct { Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` Sa ikev2_types.Ikev2Sa `binapi:"ikev2_sa,name=sa" json:"sa,omitempty"` @@ -1769,7 +1960,6 @@ func (m *Ikev2SaDetails) Unmarshal(b []byte) error { // Dump all SAs // Ikev2SaDump defines message 'ikev2_sa_dump'. -// InProgress: the message form may change in the future versions type Ikev2SaDump struct{} func (m *Ikev2SaDump) Reset() { *m = Ikev2SaDump{} } @@ -1796,6 +1986,511 @@ func (m *Ikev2SaDump) Unmarshal(b []byte) error { return nil } +// Details about IKE SA +// - retval - return code +// - sa - SA data +// +// Ikev2SaV2Details defines message 'ikev2_sa_v2_details'. +type Ikev2SaV2Details struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` + Sa ikev2_types.Ikev2SaV2 `binapi:"ikev2_sa_v2,name=sa" json:"sa,omitempty"` +} + +func (m *Ikev2SaV2Details) Reset() { *m = Ikev2SaV2Details{} } +func (*Ikev2SaV2Details) GetMessageName() string { return "ikev2_sa_v2_details" } +func (*Ikev2SaV2Details) GetCrcString() string { return "a616e604" } +func (*Ikev2SaV2Details) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *Ikev2SaV2Details) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + size += 4 // m.Sa.SaIndex + size += 64 // m.Sa.ProfileName + size += 4 // m.Sa.State + size += 8 // m.Sa.Ispi + size += 8 // m.Sa.Rspi + size += 1 // m.Sa.Iaddr.Af + size += 1 * 16 // m.Sa.Iaddr.Un + size += 1 // m.Sa.Raddr.Af + size += 1 * 16 // m.Sa.Raddr.Un + size += 1 * 64 // m.Sa.Keys.SkD + size += 1 // m.Sa.Keys.SkDLen + size += 1 * 64 // m.Sa.Keys.SkAi + size += 1 // m.Sa.Keys.SkAiLen + size += 1 * 64 // m.Sa.Keys.SkAr + size += 1 // m.Sa.Keys.SkArLen + size += 1 * 64 // m.Sa.Keys.SkEi + size += 1 // m.Sa.Keys.SkEiLen + size += 1 * 64 // m.Sa.Keys.SkEr + size += 1 // m.Sa.Keys.SkErLen + size += 1 * 64 // m.Sa.Keys.SkPi + size += 1 // m.Sa.Keys.SkPiLen + size += 1 * 64 // m.Sa.Keys.SkPr + size += 1 // m.Sa.Keys.SkPrLen + size += 1 // m.Sa.IID.Type + size += 1 // m.Sa.IID.DataLen + size += 64 // m.Sa.IID.Data + size += 1 // m.Sa.RID.Type + size += 1 // m.Sa.RID.DataLen + size += 64 // m.Sa.RID.Data + size += 1 // m.Sa.Encryption.TransformType + size += 2 // m.Sa.Encryption.TransformID + size += 2 // m.Sa.Encryption.KeyLen + size += 2 // m.Sa.Encryption.KeyTrunc + size += 2 // m.Sa.Encryption.BlockSize + size += 1 // m.Sa.Encryption.DhGroup + size += 1 // m.Sa.Integrity.TransformType + size += 2 // m.Sa.Integrity.TransformID + size += 2 // m.Sa.Integrity.KeyLen + size += 2 // m.Sa.Integrity.KeyTrunc + size += 2 // m.Sa.Integrity.BlockSize + size += 1 // m.Sa.Integrity.DhGroup + size += 1 // m.Sa.Prf.TransformType + size += 2 // m.Sa.Prf.TransformID + size += 2 // m.Sa.Prf.KeyLen + size += 2 // m.Sa.Prf.KeyTrunc + size += 2 // m.Sa.Prf.BlockSize + size += 1 // m.Sa.Prf.DhGroup + size += 1 // m.Sa.Dh.TransformType + size += 2 // m.Sa.Dh.TransformID + size += 2 // m.Sa.Dh.KeyLen + size += 2 // m.Sa.Dh.KeyTrunc + size += 2 // m.Sa.Dh.BlockSize + size += 1 // m.Sa.Dh.DhGroup + size += 2 // m.Sa.Stats.NKeepalives + size += 2 // m.Sa.Stats.NRekeyReq + size += 2 // m.Sa.Stats.NSaInitReq + size += 2 // m.Sa.Stats.NSaAuthReq + size += 2 // m.Sa.Stats.NRetransmit + size += 2 // m.Sa.Stats.NInitSaRetransmit + return size +} +func (m *Ikev2SaV2Details) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeInt32(m.Retval) + buf.EncodeUint32(m.Sa.SaIndex) + buf.EncodeString(m.Sa.ProfileName, 64) + buf.EncodeUint32(uint32(m.Sa.State)) + buf.EncodeUint64(m.Sa.Ispi) + buf.EncodeUint64(m.Sa.Rspi) + buf.EncodeUint8(uint8(m.Sa.Iaddr.Af)) + buf.EncodeBytes(m.Sa.Iaddr.Un.XXX_UnionData[:], 16) + buf.EncodeUint8(uint8(m.Sa.Raddr.Af)) + buf.EncodeBytes(m.Sa.Raddr.Un.XXX_UnionData[:], 16) + buf.EncodeBytes(m.Sa.Keys.SkD, 64) + buf.EncodeUint8(m.Sa.Keys.SkDLen) + buf.EncodeBytes(m.Sa.Keys.SkAi, 64) + buf.EncodeUint8(m.Sa.Keys.SkAiLen) + buf.EncodeBytes(m.Sa.Keys.SkAr, 64) + buf.EncodeUint8(m.Sa.Keys.SkArLen) + buf.EncodeBytes(m.Sa.Keys.SkEi, 64) + buf.EncodeUint8(m.Sa.Keys.SkEiLen) + buf.EncodeBytes(m.Sa.Keys.SkEr, 64) + buf.EncodeUint8(m.Sa.Keys.SkErLen) + buf.EncodeBytes(m.Sa.Keys.SkPi, 64) + buf.EncodeUint8(m.Sa.Keys.SkPiLen) + buf.EncodeBytes(m.Sa.Keys.SkPr, 64) + buf.EncodeUint8(m.Sa.Keys.SkPrLen) + buf.EncodeUint8(m.Sa.IID.Type) + buf.EncodeUint8(m.Sa.IID.DataLen) + buf.EncodeString(m.Sa.IID.Data, 64) + buf.EncodeUint8(m.Sa.RID.Type) + buf.EncodeUint8(m.Sa.RID.DataLen) + buf.EncodeString(m.Sa.RID.Data, 64) + buf.EncodeUint8(m.Sa.Encryption.TransformType) + buf.EncodeUint16(m.Sa.Encryption.TransformID) + buf.EncodeUint16(m.Sa.Encryption.KeyLen) + buf.EncodeUint16(m.Sa.Encryption.KeyTrunc) + buf.EncodeUint16(m.Sa.Encryption.BlockSize) + buf.EncodeUint8(m.Sa.Encryption.DhGroup) + buf.EncodeUint8(m.Sa.Integrity.TransformType) + buf.EncodeUint16(m.Sa.Integrity.TransformID) + buf.EncodeUint16(m.Sa.Integrity.KeyLen) + buf.EncodeUint16(m.Sa.Integrity.KeyTrunc) + buf.EncodeUint16(m.Sa.Integrity.BlockSize) + buf.EncodeUint8(m.Sa.Integrity.DhGroup) + buf.EncodeUint8(m.Sa.Prf.TransformType) + buf.EncodeUint16(m.Sa.Prf.TransformID) + buf.EncodeUint16(m.Sa.Prf.KeyLen) + buf.EncodeUint16(m.Sa.Prf.KeyTrunc) + buf.EncodeUint16(m.Sa.Prf.BlockSize) + buf.EncodeUint8(m.Sa.Prf.DhGroup) + buf.EncodeUint8(m.Sa.Dh.TransformType) + buf.EncodeUint16(m.Sa.Dh.TransformID) + buf.EncodeUint16(m.Sa.Dh.KeyLen) + buf.EncodeUint16(m.Sa.Dh.KeyTrunc) + buf.EncodeUint16(m.Sa.Dh.BlockSize) + buf.EncodeUint8(m.Sa.Dh.DhGroup) + buf.EncodeUint16(m.Sa.Stats.NKeepalives) + buf.EncodeUint16(m.Sa.Stats.NRekeyReq) + buf.EncodeUint16(m.Sa.Stats.NSaInitReq) + buf.EncodeUint16(m.Sa.Stats.NSaAuthReq) + buf.EncodeUint16(m.Sa.Stats.NRetransmit) + buf.EncodeUint16(m.Sa.Stats.NInitSaRetransmit) + return buf.Bytes(), nil +} +func (m *Ikev2SaV2Details) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + m.Sa.SaIndex = buf.DecodeUint32() + m.Sa.ProfileName = buf.DecodeString(64) + m.Sa.State = ikev2_types.Ikev2State(buf.DecodeUint32()) + m.Sa.Ispi = buf.DecodeUint64() + m.Sa.Rspi = buf.DecodeUint64() + m.Sa.Iaddr.Af = ip_types.AddressFamily(buf.DecodeUint8()) + copy(m.Sa.Iaddr.Un.XXX_UnionData[:], buf.DecodeBytes(16)) + m.Sa.Raddr.Af = ip_types.AddressFamily(buf.DecodeUint8()) + copy(m.Sa.Raddr.Un.XXX_UnionData[:], buf.DecodeBytes(16)) + m.Sa.Keys.SkD = make([]byte, 64) + copy(m.Sa.Keys.SkD, buf.DecodeBytes(len(m.Sa.Keys.SkD))) + m.Sa.Keys.SkDLen = buf.DecodeUint8() + m.Sa.Keys.SkAi = make([]byte, 64) + copy(m.Sa.Keys.SkAi, buf.DecodeBytes(len(m.Sa.Keys.SkAi))) + m.Sa.Keys.SkAiLen = buf.DecodeUint8() + m.Sa.Keys.SkAr = make([]byte, 64) + copy(m.Sa.Keys.SkAr, buf.DecodeBytes(len(m.Sa.Keys.SkAr))) + m.Sa.Keys.SkArLen = buf.DecodeUint8() + m.Sa.Keys.SkEi = make([]byte, 64) + copy(m.Sa.Keys.SkEi, buf.DecodeBytes(len(m.Sa.Keys.SkEi))) + m.Sa.Keys.SkEiLen = buf.DecodeUint8() + m.Sa.Keys.SkEr = make([]byte, 64) + copy(m.Sa.Keys.SkEr, buf.DecodeBytes(len(m.Sa.Keys.SkEr))) + m.Sa.Keys.SkErLen = buf.DecodeUint8() + m.Sa.Keys.SkPi = make([]byte, 64) + copy(m.Sa.Keys.SkPi, buf.DecodeBytes(len(m.Sa.Keys.SkPi))) + m.Sa.Keys.SkPiLen = buf.DecodeUint8() + m.Sa.Keys.SkPr = make([]byte, 64) + copy(m.Sa.Keys.SkPr, buf.DecodeBytes(len(m.Sa.Keys.SkPr))) + m.Sa.Keys.SkPrLen = buf.DecodeUint8() + m.Sa.IID.Type = buf.DecodeUint8() + m.Sa.IID.DataLen = buf.DecodeUint8() + m.Sa.IID.Data = buf.DecodeString(64) + m.Sa.RID.Type = buf.DecodeUint8() + m.Sa.RID.DataLen = buf.DecodeUint8() + m.Sa.RID.Data = buf.DecodeString(64) + m.Sa.Encryption.TransformType = buf.DecodeUint8() + m.Sa.Encryption.TransformID = buf.DecodeUint16() + m.Sa.Encryption.KeyLen = buf.DecodeUint16() + m.Sa.Encryption.KeyTrunc = buf.DecodeUint16() + m.Sa.Encryption.BlockSize = buf.DecodeUint16() + m.Sa.Encryption.DhGroup = buf.DecodeUint8() + m.Sa.Integrity.TransformType = buf.DecodeUint8() + m.Sa.Integrity.TransformID = buf.DecodeUint16() + m.Sa.Integrity.KeyLen = buf.DecodeUint16() + m.Sa.Integrity.KeyTrunc = buf.DecodeUint16() + m.Sa.Integrity.BlockSize = buf.DecodeUint16() + m.Sa.Integrity.DhGroup = buf.DecodeUint8() + m.Sa.Prf.TransformType = buf.DecodeUint8() + m.Sa.Prf.TransformID = buf.DecodeUint16() + m.Sa.Prf.KeyLen = buf.DecodeUint16() + m.Sa.Prf.KeyTrunc = buf.DecodeUint16() + m.Sa.Prf.BlockSize = buf.DecodeUint16() + m.Sa.Prf.DhGroup = buf.DecodeUint8() + m.Sa.Dh.TransformType = buf.DecodeUint8() + m.Sa.Dh.TransformID = buf.DecodeUint16() + m.Sa.Dh.KeyLen = buf.DecodeUint16() + m.Sa.Dh.KeyTrunc = buf.DecodeUint16() + m.Sa.Dh.BlockSize = buf.DecodeUint16() + m.Sa.Dh.DhGroup = buf.DecodeUint8() + m.Sa.Stats.NKeepalives = buf.DecodeUint16() + m.Sa.Stats.NRekeyReq = buf.DecodeUint16() + m.Sa.Stats.NSaInitReq = buf.DecodeUint16() + m.Sa.Stats.NSaAuthReq = buf.DecodeUint16() + m.Sa.Stats.NRetransmit = buf.DecodeUint16() + m.Sa.Stats.NInitSaRetransmit = buf.DecodeUint16() + return nil +} + +// Dump all SAs +// Ikev2SaV2Dump defines message 'ikev2_sa_v2_dump'. +type Ikev2SaV2Dump struct{} + +func (m *Ikev2SaV2Dump) Reset() { *m = Ikev2SaV2Dump{} } +func (*Ikev2SaV2Dump) GetMessageName() string { return "ikev2_sa_v2_dump" } +func (*Ikev2SaV2Dump) GetCrcString() string { return "51077d14" } +func (*Ikev2SaV2Dump) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *Ikev2SaV2Dump) Size() (size int) { + if m == nil { + return 0 + } + return size +} +func (m *Ikev2SaV2Dump) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + return buf.Bytes(), nil +} +func (m *Ikev2SaV2Dump) Unmarshal(b []byte) error { + return nil +} + +// Details about IKE SA +// - retval - return code +// - sa - SA data +// +// Ikev2SaV3Details defines message 'ikev2_sa_v3_details'. +// InProgress: the message form may change in the future versions +type Ikev2SaV3Details struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` + Sa ikev2_types.Ikev2SaV3 `binapi:"ikev2_sa_v3,name=sa" json:"sa,omitempty"` +} + +func (m *Ikev2SaV3Details) Reset() { *m = Ikev2SaV3Details{} } +func (*Ikev2SaV3Details) GetMessageName() string { return "ikev2_sa_v3_details" } +func (*Ikev2SaV3Details) GetCrcString() string { return "85c9a941" } +func (*Ikev2SaV3Details) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *Ikev2SaV3Details) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + size += 4 // m.Sa.SaIndex + size += 64 // m.Sa.ProfileName + size += 4 // m.Sa.State + size += 8 // m.Sa.Ispi + size += 8 // m.Sa.Rspi + size += 1 // m.Sa.Iaddr.Af + size += 1 * 16 // m.Sa.Iaddr.Un + size += 1 // m.Sa.Raddr.Af + size += 1 * 16 // m.Sa.Raddr.Un + size += 1 * 64 // m.Sa.Keys.SkD + size += 1 // m.Sa.Keys.SkDLen + size += 1 * 64 // m.Sa.Keys.SkAi + size += 1 // m.Sa.Keys.SkAiLen + size += 1 * 64 // m.Sa.Keys.SkAr + size += 1 // m.Sa.Keys.SkArLen + size += 1 * 64 // m.Sa.Keys.SkEi + size += 1 // m.Sa.Keys.SkEiLen + size += 1 * 64 // m.Sa.Keys.SkEr + size += 1 // m.Sa.Keys.SkErLen + size += 1 * 64 // m.Sa.Keys.SkPi + size += 1 // m.Sa.Keys.SkPiLen + size += 1 * 64 // m.Sa.Keys.SkPr + size += 1 // m.Sa.Keys.SkPrLen + size += 1 // m.Sa.IID.Type + size += 1 // m.Sa.IID.DataLen + size += 64 // m.Sa.IID.Data + size += 1 // m.Sa.RID.Type + size += 1 // m.Sa.RID.DataLen + size += 64 // m.Sa.RID.Data + size += 1 // m.Sa.Encryption.TransformType + size += 2 // m.Sa.Encryption.TransformID + size += 2 // m.Sa.Encryption.KeyLen + size += 2 // m.Sa.Encryption.KeyTrunc + size += 2 // m.Sa.Encryption.BlockSize + size += 1 // m.Sa.Encryption.DhGroup + size += 1 // m.Sa.Integrity.TransformType + size += 2 // m.Sa.Integrity.TransformID + size += 2 // m.Sa.Integrity.KeyLen + size += 2 // m.Sa.Integrity.KeyTrunc + size += 2 // m.Sa.Integrity.BlockSize + size += 1 // m.Sa.Integrity.DhGroup + size += 1 // m.Sa.Prf.TransformType + size += 2 // m.Sa.Prf.TransformID + size += 2 // m.Sa.Prf.KeyLen + size += 2 // m.Sa.Prf.KeyTrunc + size += 2 // m.Sa.Prf.BlockSize + size += 1 // m.Sa.Prf.DhGroup + size += 1 // m.Sa.Dh.TransformType + size += 2 // m.Sa.Dh.TransformID + size += 2 // m.Sa.Dh.KeyLen + size += 2 // m.Sa.Dh.KeyTrunc + size += 2 // m.Sa.Dh.BlockSize + size += 1 // m.Sa.Dh.DhGroup + size += 2 // m.Sa.Stats.NKeepalives + size += 2 // m.Sa.Stats.NRekeyReq + size += 2 // m.Sa.Stats.NSaInitReq + size += 2 // m.Sa.Stats.NSaAuthReq + size += 2 // m.Sa.Stats.NRetransmit + size += 2 // m.Sa.Stats.NInitSaRetransmit + size += 8 // m.Sa.Uptime + return size +} +func (m *Ikev2SaV3Details) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeInt32(m.Retval) + buf.EncodeUint32(m.Sa.SaIndex) + buf.EncodeString(m.Sa.ProfileName, 64) + buf.EncodeUint32(uint32(m.Sa.State)) + buf.EncodeUint64(m.Sa.Ispi) + buf.EncodeUint64(m.Sa.Rspi) + buf.EncodeUint8(uint8(m.Sa.Iaddr.Af)) + buf.EncodeBytes(m.Sa.Iaddr.Un.XXX_UnionData[:], 16) + buf.EncodeUint8(uint8(m.Sa.Raddr.Af)) + buf.EncodeBytes(m.Sa.Raddr.Un.XXX_UnionData[:], 16) + buf.EncodeBytes(m.Sa.Keys.SkD, 64) + buf.EncodeUint8(m.Sa.Keys.SkDLen) + buf.EncodeBytes(m.Sa.Keys.SkAi, 64) + buf.EncodeUint8(m.Sa.Keys.SkAiLen) + buf.EncodeBytes(m.Sa.Keys.SkAr, 64) + buf.EncodeUint8(m.Sa.Keys.SkArLen) + buf.EncodeBytes(m.Sa.Keys.SkEi, 64) + buf.EncodeUint8(m.Sa.Keys.SkEiLen) + buf.EncodeBytes(m.Sa.Keys.SkEr, 64) + buf.EncodeUint8(m.Sa.Keys.SkErLen) + buf.EncodeBytes(m.Sa.Keys.SkPi, 64) + buf.EncodeUint8(m.Sa.Keys.SkPiLen) + buf.EncodeBytes(m.Sa.Keys.SkPr, 64) + buf.EncodeUint8(m.Sa.Keys.SkPrLen) + buf.EncodeUint8(m.Sa.IID.Type) + buf.EncodeUint8(m.Sa.IID.DataLen) + buf.EncodeString(m.Sa.IID.Data, 64) + buf.EncodeUint8(m.Sa.RID.Type) + buf.EncodeUint8(m.Sa.RID.DataLen) + buf.EncodeString(m.Sa.RID.Data, 64) + buf.EncodeUint8(m.Sa.Encryption.TransformType) + buf.EncodeUint16(m.Sa.Encryption.TransformID) + buf.EncodeUint16(m.Sa.Encryption.KeyLen) + buf.EncodeUint16(m.Sa.Encryption.KeyTrunc) + buf.EncodeUint16(m.Sa.Encryption.BlockSize) + buf.EncodeUint8(m.Sa.Encryption.DhGroup) + buf.EncodeUint8(m.Sa.Integrity.TransformType) + buf.EncodeUint16(m.Sa.Integrity.TransformID) + buf.EncodeUint16(m.Sa.Integrity.KeyLen) + buf.EncodeUint16(m.Sa.Integrity.KeyTrunc) + buf.EncodeUint16(m.Sa.Integrity.BlockSize) + buf.EncodeUint8(m.Sa.Integrity.DhGroup) + buf.EncodeUint8(m.Sa.Prf.TransformType) + buf.EncodeUint16(m.Sa.Prf.TransformID) + buf.EncodeUint16(m.Sa.Prf.KeyLen) + buf.EncodeUint16(m.Sa.Prf.KeyTrunc) + buf.EncodeUint16(m.Sa.Prf.BlockSize) + buf.EncodeUint8(m.Sa.Prf.DhGroup) + buf.EncodeUint8(m.Sa.Dh.TransformType) + buf.EncodeUint16(m.Sa.Dh.TransformID) + buf.EncodeUint16(m.Sa.Dh.KeyLen) + buf.EncodeUint16(m.Sa.Dh.KeyTrunc) + buf.EncodeUint16(m.Sa.Dh.BlockSize) + buf.EncodeUint8(m.Sa.Dh.DhGroup) + buf.EncodeUint16(m.Sa.Stats.NKeepalives) + buf.EncodeUint16(m.Sa.Stats.NRekeyReq) + buf.EncodeUint16(m.Sa.Stats.NSaInitReq) + buf.EncodeUint16(m.Sa.Stats.NSaAuthReq) + buf.EncodeUint16(m.Sa.Stats.NRetransmit) + buf.EncodeUint16(m.Sa.Stats.NInitSaRetransmit) + buf.EncodeFloat64(m.Sa.Uptime) + return buf.Bytes(), nil +} +func (m *Ikev2SaV3Details) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + m.Sa.SaIndex = buf.DecodeUint32() + m.Sa.ProfileName = buf.DecodeString(64) + m.Sa.State = ikev2_types.Ikev2State(buf.DecodeUint32()) + m.Sa.Ispi = buf.DecodeUint64() + m.Sa.Rspi = buf.DecodeUint64() + m.Sa.Iaddr.Af = ip_types.AddressFamily(buf.DecodeUint8()) + copy(m.Sa.Iaddr.Un.XXX_UnionData[:], buf.DecodeBytes(16)) + m.Sa.Raddr.Af = ip_types.AddressFamily(buf.DecodeUint8()) + copy(m.Sa.Raddr.Un.XXX_UnionData[:], buf.DecodeBytes(16)) + m.Sa.Keys.SkD = make([]byte, 64) + copy(m.Sa.Keys.SkD, buf.DecodeBytes(len(m.Sa.Keys.SkD))) + m.Sa.Keys.SkDLen = buf.DecodeUint8() + m.Sa.Keys.SkAi = make([]byte, 64) + copy(m.Sa.Keys.SkAi, buf.DecodeBytes(len(m.Sa.Keys.SkAi))) + m.Sa.Keys.SkAiLen = buf.DecodeUint8() + m.Sa.Keys.SkAr = make([]byte, 64) + copy(m.Sa.Keys.SkAr, buf.DecodeBytes(len(m.Sa.Keys.SkAr))) + m.Sa.Keys.SkArLen = buf.DecodeUint8() + m.Sa.Keys.SkEi = make([]byte, 64) + copy(m.Sa.Keys.SkEi, buf.DecodeBytes(len(m.Sa.Keys.SkEi))) + m.Sa.Keys.SkEiLen = buf.DecodeUint8() + m.Sa.Keys.SkEr = make([]byte, 64) + copy(m.Sa.Keys.SkEr, buf.DecodeBytes(len(m.Sa.Keys.SkEr))) + m.Sa.Keys.SkErLen = buf.DecodeUint8() + m.Sa.Keys.SkPi = make([]byte, 64) + copy(m.Sa.Keys.SkPi, buf.DecodeBytes(len(m.Sa.Keys.SkPi))) + m.Sa.Keys.SkPiLen = buf.DecodeUint8() + m.Sa.Keys.SkPr = make([]byte, 64) + copy(m.Sa.Keys.SkPr, buf.DecodeBytes(len(m.Sa.Keys.SkPr))) + m.Sa.Keys.SkPrLen = buf.DecodeUint8() + m.Sa.IID.Type = buf.DecodeUint8() + m.Sa.IID.DataLen = buf.DecodeUint8() + m.Sa.IID.Data = buf.DecodeString(64) + m.Sa.RID.Type = buf.DecodeUint8() + m.Sa.RID.DataLen = buf.DecodeUint8() + m.Sa.RID.Data = buf.DecodeString(64) + m.Sa.Encryption.TransformType = buf.DecodeUint8() + m.Sa.Encryption.TransformID = buf.DecodeUint16() + m.Sa.Encryption.KeyLen = buf.DecodeUint16() + m.Sa.Encryption.KeyTrunc = buf.DecodeUint16() + m.Sa.Encryption.BlockSize = buf.DecodeUint16() + m.Sa.Encryption.DhGroup = buf.DecodeUint8() + m.Sa.Integrity.TransformType = buf.DecodeUint8() + m.Sa.Integrity.TransformID = buf.DecodeUint16() + m.Sa.Integrity.KeyLen = buf.DecodeUint16() + m.Sa.Integrity.KeyTrunc = buf.DecodeUint16() + m.Sa.Integrity.BlockSize = buf.DecodeUint16() + m.Sa.Integrity.DhGroup = buf.DecodeUint8() + m.Sa.Prf.TransformType = buf.DecodeUint8() + m.Sa.Prf.TransformID = buf.DecodeUint16() + m.Sa.Prf.KeyLen = buf.DecodeUint16() + m.Sa.Prf.KeyTrunc = buf.DecodeUint16() + m.Sa.Prf.BlockSize = buf.DecodeUint16() + m.Sa.Prf.DhGroup = buf.DecodeUint8() + m.Sa.Dh.TransformType = buf.DecodeUint8() + m.Sa.Dh.TransformID = buf.DecodeUint16() + m.Sa.Dh.KeyLen = buf.DecodeUint16() + m.Sa.Dh.KeyTrunc = buf.DecodeUint16() + m.Sa.Dh.BlockSize = buf.DecodeUint16() + m.Sa.Dh.DhGroup = buf.DecodeUint8() + m.Sa.Stats.NKeepalives = buf.DecodeUint16() + m.Sa.Stats.NRekeyReq = buf.DecodeUint16() + m.Sa.Stats.NSaInitReq = buf.DecodeUint16() + m.Sa.Stats.NSaAuthReq = buf.DecodeUint16() + m.Sa.Stats.NRetransmit = buf.DecodeUint16() + m.Sa.Stats.NInitSaRetransmit = buf.DecodeUint16() + m.Sa.Uptime = buf.DecodeFloat64() + return nil +} + +// Dump all SAs +// Ikev2SaV3Dump defines message 'ikev2_sa_v3_dump'. +// InProgress: the message form may change in the future versions +type Ikev2SaV3Dump struct{} + +func (m *Ikev2SaV3Dump) Reset() { *m = Ikev2SaV3Dump{} } +func (*Ikev2SaV3Dump) GetMessageName() string { return "ikev2_sa_v3_dump" } +func (*Ikev2SaV3Dump) GetCrcString() string { return "51077d14" } +func (*Ikev2SaV3Dump) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *Ikev2SaV3Dump) Size() (size int) { + if m == nil { + return 0 + } + return size +} +func (m *Ikev2SaV3Dump) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + return buf.Bytes(), nil +} +func (m *Ikev2SaV3Dump) Unmarshal(b []byte) error { + return nil +} + // IKEv2: Set IKEv2 ESP transforms in SA_INIT proposal (RFC 7296) // - name - IKEv2 profile name // - tr - ESP transforms @@ -2485,6 +3180,8 @@ func init() { file_ikev2_binapi_init() } func file_ikev2_binapi_init() { api.RegisterMessage((*Ikev2ChildSaDetails)(nil), "ikev2_child_sa_details_ff67741f") api.RegisterMessage((*Ikev2ChildSaDump)(nil), "ikev2_child_sa_dump_01eab609") + api.RegisterMessage((*Ikev2ChildSaV2Details)(nil), "ikev2_child_sa_v2_details_1db62aa2") + api.RegisterMessage((*Ikev2ChildSaV2Dump)(nil), "ikev2_child_sa_v2_dump_01eab609") api.RegisterMessage((*Ikev2InitiateDelChildSa)(nil), "ikev2_initiate_del_child_sa_7f004d2e") api.RegisterMessage((*Ikev2InitiateDelChildSaReply)(nil), "ikev2_initiate_del_child_sa_reply_e8d4e804") api.RegisterMessage((*Ikev2InitiateDelIkeSa)(nil), "ikev2_initiate_del_ike_sa_8d125bdd") @@ -2517,6 +3214,10 @@ func file_ikev2_binapi_init() { api.RegisterMessage((*Ikev2ProfileSetUDPEncapReply)(nil), "ikev2_profile_set_udp_encap_reply_e8d4e804") api.RegisterMessage((*Ikev2SaDetails)(nil), "ikev2_sa_details_937c22d5") api.RegisterMessage((*Ikev2SaDump)(nil), "ikev2_sa_dump_51077d14") + api.RegisterMessage((*Ikev2SaV2Details)(nil), "ikev2_sa_v2_details_a616e604") + api.RegisterMessage((*Ikev2SaV2Dump)(nil), "ikev2_sa_v2_dump_51077d14") + api.RegisterMessage((*Ikev2SaV3Details)(nil), "ikev2_sa_v3_details_85c9a941") + api.RegisterMessage((*Ikev2SaV3Dump)(nil), "ikev2_sa_v3_dump_51077d14") api.RegisterMessage((*Ikev2SetEspTransforms)(nil), "ikev2_set_esp_transforms_a63dc205") api.RegisterMessage((*Ikev2SetEspTransformsReply)(nil), "ikev2_set_esp_transforms_reply_e8d4e804") api.RegisterMessage((*Ikev2SetIkeTransforms)(nil), "ikev2_set_ike_transforms_076d7378") @@ -2540,6 +3241,8 @@ func AllMessages() []api.Message { return []api.Message{ (*Ikev2ChildSaDetails)(nil), (*Ikev2ChildSaDump)(nil), + (*Ikev2ChildSaV2Details)(nil), + (*Ikev2ChildSaV2Dump)(nil), (*Ikev2InitiateDelChildSa)(nil), (*Ikev2InitiateDelChildSaReply)(nil), (*Ikev2InitiateDelIkeSa)(nil), @@ -2572,6 +3275,10 @@ func AllMessages() []api.Message { (*Ikev2ProfileSetUDPEncapReply)(nil), (*Ikev2SaDetails)(nil), (*Ikev2SaDump)(nil), + (*Ikev2SaV2Details)(nil), + (*Ikev2SaV2Dump)(nil), + (*Ikev2SaV3Details)(nil), + (*Ikev2SaV3Dump)(nil), (*Ikev2SetEspTransforms)(nil), (*Ikev2SetEspTransformsReply)(nil), (*Ikev2SetIkeTransforms)(nil), diff --git a/vpplink/generated/bindings/ikev2/ikev2_rpc.ba.go b/vpplink/generated/bindings/ikev2/ikev2_rpc.ba.go index 92901ff0..e85ffbbc 100644 --- a/vpplink/generated/bindings/ikev2/ikev2_rpc.ba.go +++ b/vpplink/generated/bindings/ikev2/ikev2_rpc.ba.go @@ -14,6 +14,7 @@ import ( // RPCService defines RPC service ikev2. type RPCService interface { Ikev2ChildSaDump(ctx context.Context, in *Ikev2ChildSaDump) (RPCService_Ikev2ChildSaDumpClient, error) + Ikev2ChildSaV2Dump(ctx context.Context, in *Ikev2ChildSaV2Dump) (RPCService_Ikev2ChildSaV2DumpClient, error) Ikev2InitiateDelChildSa(ctx context.Context, in *Ikev2InitiateDelChildSa) (*Ikev2InitiateDelChildSaReply, error) Ikev2InitiateDelIkeSa(ctx context.Context, in *Ikev2InitiateDelIkeSa) (*Ikev2InitiateDelIkeSaReply, error) Ikev2InitiateRekeyChildSa(ctx context.Context, in *Ikev2InitiateRekeyChildSa) (*Ikev2InitiateRekeyChildSaReply, error) @@ -30,6 +31,8 @@ type RPCService interface { Ikev2ProfileSetTs(ctx context.Context, in *Ikev2ProfileSetTs) (*Ikev2ProfileSetTsReply, error) Ikev2ProfileSetUDPEncap(ctx context.Context, in *Ikev2ProfileSetUDPEncap) (*Ikev2ProfileSetUDPEncapReply, error) Ikev2SaDump(ctx context.Context, in *Ikev2SaDump) (RPCService_Ikev2SaDumpClient, error) + Ikev2SaV2Dump(ctx context.Context, in *Ikev2SaV2Dump) (RPCService_Ikev2SaV2DumpClient, error) + Ikev2SaV3Dump(ctx context.Context, in *Ikev2SaV3Dump) (RPCService_Ikev2SaV3DumpClient, error) Ikev2SetEspTransforms(ctx context.Context, in *Ikev2SetEspTransforms) (*Ikev2SetEspTransformsReply, error) Ikev2SetIkeTransforms(ctx context.Context, in *Ikev2SetIkeTransforms) (*Ikev2SetIkeTransformsReply, error) Ikev2SetLocalKey(ctx context.Context, in *Ikev2SetLocalKey) (*Ikev2SetLocalKeyReply, error) @@ -91,6 +94,49 @@ func (c *serviceClient_Ikev2ChildSaDumpClient) Recv() (*Ikev2ChildSaDetails, err } } +func (c *serviceClient) Ikev2ChildSaV2Dump(ctx context.Context, in *Ikev2ChildSaV2Dump) (RPCService_Ikev2ChildSaV2DumpClient, error) { + stream, err := c.conn.NewStream(ctx) + if err != nil { + return nil, err + } + x := &serviceClient_Ikev2ChildSaV2DumpClient{stream} + if err := x.Stream.SendMsg(in); err != nil { + return nil, err + } + if err = x.Stream.SendMsg(&memclnt.ControlPing{}); err != nil { + return nil, err + } + return x, nil +} + +type RPCService_Ikev2ChildSaV2DumpClient interface { + Recv() (*Ikev2ChildSaV2Details, error) + api.Stream +} + +type serviceClient_Ikev2ChildSaV2DumpClient struct { + api.Stream +} + +func (c *serviceClient_Ikev2ChildSaV2DumpClient) Recv() (*Ikev2ChildSaV2Details, error) { + msg, err := c.Stream.RecvMsg() + if err != nil { + return nil, err + } + switch m := msg.(type) { + case *Ikev2ChildSaV2Details: + return m, nil + case *memclnt.ControlPingReply: + err = c.Stream.Close() + if err != nil { + return nil, err + } + return nil, io.EOF + default: + return nil, fmt.Errorf("unexpected message: %T %v", m, m) + } +} + func (c *serviceClient) Ikev2InitiateDelChildSa(ctx context.Context, in *Ikev2InitiateDelChildSa) (*Ikev2InitiateDelChildSaReply, error) { out := new(Ikev2InitiateDelChildSaReply) err := c.conn.Invoke(ctx, in, out) @@ -303,6 +349,92 @@ func (c *serviceClient_Ikev2SaDumpClient) Recv() (*Ikev2SaDetails, error) { } } +func (c *serviceClient) Ikev2SaV2Dump(ctx context.Context, in *Ikev2SaV2Dump) (RPCService_Ikev2SaV2DumpClient, error) { + stream, err := c.conn.NewStream(ctx) + if err != nil { + return nil, err + } + x := &serviceClient_Ikev2SaV2DumpClient{stream} + if err := x.Stream.SendMsg(in); err != nil { + return nil, err + } + if err = x.Stream.SendMsg(&memclnt.ControlPing{}); err != nil { + return nil, err + } + return x, nil +} + +type RPCService_Ikev2SaV2DumpClient interface { + Recv() (*Ikev2SaV2Details, error) + api.Stream +} + +type serviceClient_Ikev2SaV2DumpClient struct { + api.Stream +} + +func (c *serviceClient_Ikev2SaV2DumpClient) Recv() (*Ikev2SaV2Details, error) { + msg, err := c.Stream.RecvMsg() + if err != nil { + return nil, err + } + switch m := msg.(type) { + case *Ikev2SaV2Details: + return m, nil + case *memclnt.ControlPingReply: + err = c.Stream.Close() + if err != nil { + return nil, err + } + return nil, io.EOF + default: + return nil, fmt.Errorf("unexpected message: %T %v", m, m) + } +} + +func (c *serviceClient) Ikev2SaV3Dump(ctx context.Context, in *Ikev2SaV3Dump) (RPCService_Ikev2SaV3DumpClient, error) { + stream, err := c.conn.NewStream(ctx) + if err != nil { + return nil, err + } + x := &serviceClient_Ikev2SaV3DumpClient{stream} + if err := x.Stream.SendMsg(in); err != nil { + return nil, err + } + if err = x.Stream.SendMsg(&memclnt.ControlPing{}); err != nil { + return nil, err + } + return x, nil +} + +type RPCService_Ikev2SaV3DumpClient interface { + Recv() (*Ikev2SaV3Details, error) + api.Stream +} + +type serviceClient_Ikev2SaV3DumpClient struct { + api.Stream +} + +func (c *serviceClient_Ikev2SaV3DumpClient) Recv() (*Ikev2SaV3Details, error) { + msg, err := c.Stream.RecvMsg() + if err != nil { + return nil, err + } + switch m := msg.(type) { + case *Ikev2SaV3Details: + return m, nil + case *memclnt.ControlPingReply: + err = c.Stream.Close() + if err != nil { + return nil, err + } + return nil, io.EOF + default: + return nil, fmt.Errorf("unexpected message: %T %v", m, m) + } +} + func (c *serviceClient) Ikev2SetEspTransforms(ctx context.Context, in *Ikev2SetEspTransforms) (*Ikev2SetEspTransformsReply, error) { out := new(Ikev2SetEspTransformsReply) err := c.conn.Invoke(ctx, in, out) diff --git a/vpplink/generated/bindings/ikev2_types/ikev2_types.ba.go b/vpplink/generated/bindings/ikev2_types/ikev2_types.ba.go index 37c8e10f..81324d2f 100644 --- a/vpplink/generated/bindings/ikev2_types/ikev2_types.ba.go +++ b/vpplink/generated/bindings/ikev2_types/ikev2_types.ba.go @@ -3,10 +3,13 @@ // Package ikev2_types contains generated bindings for API file ikev2_types.api. // // Contents: -// - 12 structs +// - 1 enum +// - 15 structs package ikev2_types import ( + "strconv" + interface_types "github.com/projectcalico/vpp-dataplane/v3/vpplink/generated/bindings/interface_types" ip_types "github.com/projectcalico/vpp-dataplane/v3/vpplink/generated/bindings/ip_types" api "go.fd.io/govpp/api" @@ -21,9 +24,54 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "ikev2_types" APIVersion = "1.0.0" - VersionCrc = 0xe7510e + VersionCrc = 0x64c72418 +) + +// Ikev2State defines enum 'ikev2_state'. +type Ikev2State uint32 + +const ( + UNKNOWN Ikev2State = 0 + SA_INIT Ikev2State = 1 + DELETED Ikev2State = 2 + AUTH_FAILED Ikev2State = 3 + AUTHENTICATED Ikev2State = 4 + NOTIFY_AND_DELETE Ikev2State = 5 + TS_UNACCEPTABLE Ikev2State = 6 + NO_PROPOSAL_CHOSEN Ikev2State = 7 +) + +var ( + Ikev2State_name = map[uint32]string{ + 0: "UNKNOWN", + 1: "SA_INIT", + 2: "DELETED", + 3: "AUTH_FAILED", + 4: "AUTHENTICATED", + 5: "NOTIFY_AND_DELETE", + 6: "TS_UNACCEPTABLE", + 7: "NO_PROPOSAL_CHOSEN", + } + Ikev2State_value = map[string]uint32{ + "UNKNOWN": 0, + "SA_INIT": 1, + "DELETED": 2, + "AUTH_FAILED": 3, + "AUTHENTICATED": 4, + "NOTIFY_AND_DELETE": 5, + "TS_UNACCEPTABLE": 6, + "NO_PROPOSAL_CHOSEN": 7, + } ) +func (x Ikev2State) String() string { + s, ok := Ikev2State_name[uint32(x)] + if ok { + return s + } + return "Ikev2State(" + strconv.Itoa(int(x)) + ")" +} + // Ikev2Auth defines type 'ikev2_auth'. type Ikev2Auth struct { Method uint8 `binapi:"u8,name=method" json:"method,omitempty"` @@ -44,6 +92,19 @@ type Ikev2ChildSa struct { Esn Ikev2SaTransform `binapi:"ikev2_sa_transform,name=esn" json:"esn,omitempty"` } +// Ikev2ChildSaV2 defines type 'ikev2_child_sa_v2'. +type Ikev2ChildSaV2 struct { + SaIndex uint32 `binapi:"u32,name=sa_index" json:"sa_index,omitempty"` + ChildSaIndex uint32 `binapi:"u32,name=child_sa_index" json:"child_sa_index,omitempty"` + ISpi uint32 `binapi:"u32,name=i_spi" json:"i_spi,omitempty"` + RSpi uint32 `binapi:"u32,name=r_spi" json:"r_spi,omitempty"` + Keys Ikev2Keys `binapi:"ikev2_keys,name=keys" json:"keys,omitempty"` + Encryption Ikev2SaTransform `binapi:"ikev2_sa_transform,name=encryption" json:"encryption,omitempty"` + Integrity Ikev2SaTransform `binapi:"ikev2_sa_transform,name=integrity" json:"integrity,omitempty"` + Esn Ikev2SaTransform `binapi:"ikev2_sa_transform,name=esn" json:"esn,omitempty"` + Uptime float64 `binapi:"f64,name=uptime" json:"uptime,omitempty"` +} + // Ikev2EspTransforms defines type 'ikev2_esp_transforms'. type Ikev2EspTransforms struct { CryptoAlg uint8 `binapi:"u8,name=crypto_alg" json:"crypto_alg,omitempty"` @@ -149,6 +210,45 @@ type Ikev2SaTransform struct { DhGroup uint8 `binapi:"u8,name=dh_group" json:"dh_group,omitempty"` } +// Ikev2SaV2 defines type 'ikev2_sa_v2'. +type Ikev2SaV2 struct { + SaIndex uint32 `binapi:"u32,name=sa_index" json:"sa_index,omitempty"` + ProfileName string `binapi:"string[64],name=profile_name" json:"profile_name,omitempty"` + State Ikev2State `binapi:"ikev2_state,name=state" json:"state,omitempty"` + Ispi uint64 `binapi:"u64,name=ispi" json:"ispi,omitempty"` + Rspi uint64 `binapi:"u64,name=rspi" json:"rspi,omitempty"` + Iaddr ip_types.Address `binapi:"address,name=iaddr" json:"iaddr,omitempty"` + Raddr ip_types.Address `binapi:"address,name=raddr" json:"raddr,omitempty"` + Keys Ikev2Keys `binapi:"ikev2_keys,name=keys" json:"keys,omitempty"` + IID Ikev2ID `binapi:"ikev2_id,name=i_id" json:"i_id,omitempty"` + RID Ikev2ID `binapi:"ikev2_id,name=r_id" json:"r_id,omitempty"` + Encryption Ikev2SaTransform `binapi:"ikev2_sa_transform,name=encryption" json:"encryption,omitempty"` + Integrity Ikev2SaTransform `binapi:"ikev2_sa_transform,name=integrity" json:"integrity,omitempty"` + Prf Ikev2SaTransform `binapi:"ikev2_sa_transform,name=prf" json:"prf,omitempty"` + Dh Ikev2SaTransform `binapi:"ikev2_sa_transform,name=dh" json:"dh,omitempty"` + Stats Ikev2SaStats `binapi:"ikev2_sa_stats,name=stats" json:"stats,omitempty"` +} + +// Ikev2SaV3 defines type 'ikev2_sa_v3'. +type Ikev2SaV3 struct { + SaIndex uint32 `binapi:"u32,name=sa_index" json:"sa_index,omitempty"` + ProfileName string `binapi:"string[64],name=profile_name" json:"profile_name,omitempty"` + State Ikev2State `binapi:"ikev2_state,name=state" json:"state,omitempty"` + Ispi uint64 `binapi:"u64,name=ispi" json:"ispi,omitempty"` + Rspi uint64 `binapi:"u64,name=rspi" json:"rspi,omitempty"` + Iaddr ip_types.Address `binapi:"address,name=iaddr" json:"iaddr,omitempty"` + Raddr ip_types.Address `binapi:"address,name=raddr" json:"raddr,omitempty"` + Keys Ikev2Keys `binapi:"ikev2_keys,name=keys" json:"keys,omitempty"` + IID Ikev2ID `binapi:"ikev2_id,name=i_id" json:"i_id,omitempty"` + RID Ikev2ID `binapi:"ikev2_id,name=r_id" json:"r_id,omitempty"` + Encryption Ikev2SaTransform `binapi:"ikev2_sa_transform,name=encryption" json:"encryption,omitempty"` + Integrity Ikev2SaTransform `binapi:"ikev2_sa_transform,name=integrity" json:"integrity,omitempty"` + Prf Ikev2SaTransform `binapi:"ikev2_sa_transform,name=prf" json:"prf,omitempty"` + Dh Ikev2SaTransform `binapi:"ikev2_sa_transform,name=dh" json:"dh,omitempty"` + Stats Ikev2SaStats `binapi:"ikev2_sa_stats,name=stats" json:"stats,omitempty"` + Uptime float64 `binapi:"f64,name=uptime" json:"uptime,omitempty"` +} + // Ikev2Ts defines type 'ikev2_ts'. type Ikev2Ts struct { SaIndex uint32 `binapi:"u32,name=sa_index" json:"sa_index,omitempty"` diff --git a/vpplink/generated/bindings/ip/ip.ba.go b/vpplink/generated/bindings/ip/ip.ba.go index 061f5393..8ed33e4c 100644 --- a/vpplink/generated/bindings/ip/ip.ba.go +++ b/vpplink/generated/bindings/ip/ip.ba.go @@ -5,7 +5,7 @@ // Contents: // - 3 enums // - 7 structs -// - 93 messages +// - 95 messages package ip import ( @@ -29,7 +29,7 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "ip" APIVersion = "3.2.0" - VersionCrc = 0xbd2f873b + VersionCrc = 0x4645df38 ) // IPReassType defines enum 'ip_reass_type'. @@ -3774,6 +3774,93 @@ func (m *IPTableAddDelReply) Unmarshal(b []byte) error { return nil } +// Add / del table request - version 2 +// +// A table can be added multiple times, but need be deleted only once. +// - table - the FIB table to add or del +// - create_mfib - whether to create mfib or not +// - is_add - add or del +// +// IPTableAddDelV2 defines message 'ip_table_add_del_v2'. +type IPTableAddDelV2 struct { + Table IPTable `binapi:"ip_table,name=table" json:"table,omitempty"` + CreateMfib bool `binapi:"bool,name=create_mfib,default=true" json:"create_mfib,omitempty"` + IsAdd bool `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"` +} + +func (m *IPTableAddDelV2) Reset() { *m = IPTableAddDelV2{} } +func (*IPTableAddDelV2) GetMessageName() string { return "ip_table_add_del_v2" } +func (*IPTableAddDelV2) GetCrcString() string { return "14e5081f" } +func (*IPTableAddDelV2) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *IPTableAddDelV2) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Table.TableID + size += 1 // m.Table.IsIP6 + size += 64 // m.Table.Name + size += 1 // m.CreateMfib + size += 1 // m.IsAdd + return size +} +func (m *IPTableAddDelV2) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeUint32(m.Table.TableID) + buf.EncodeBool(m.Table.IsIP6) + buf.EncodeString(m.Table.Name, 64) + buf.EncodeBool(m.CreateMfib) + buf.EncodeBool(m.IsAdd) + return buf.Bytes(), nil +} +func (m *IPTableAddDelV2) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Table.TableID = buf.DecodeUint32() + m.Table.IsIP6 = buf.DecodeBool() + m.Table.Name = buf.DecodeString(64) + m.CreateMfib = buf.DecodeBool() + m.IsAdd = buf.DecodeBool() + return nil +} + +// IPTableAddDelV2Reply defines message 'ip_table_add_del_v2_reply'. +type IPTableAddDelV2Reply struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` +} + +func (m *IPTableAddDelV2Reply) Reset() { *m = IPTableAddDelV2Reply{} } +func (*IPTableAddDelV2Reply) GetMessageName() string { return "ip_table_add_del_v2_reply" } +func (*IPTableAddDelV2Reply) GetCrcString() string { return "e8d4e804" } +func (*IPTableAddDelV2Reply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *IPTableAddDelV2Reply) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + return size +} +func (m *IPTableAddDelV2Reply) 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 *IPTableAddDelV2Reply) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + return nil +} + // Allocate an unused table // // A table can be added multiple times. @@ -5000,6 +5087,8 @@ func file_ip_binapi_init() { api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil), "ip_source_and_port_range_check_interface_add_del_reply_e8d4e804") api.RegisterMessage((*IPTableAddDel)(nil), "ip_table_add_del_0ffdaec0") api.RegisterMessage((*IPTableAddDelReply)(nil), "ip_table_add_del_reply_e8d4e804") + api.RegisterMessage((*IPTableAddDelV2)(nil), "ip_table_add_del_v2_14e5081f") + api.RegisterMessage((*IPTableAddDelV2Reply)(nil), "ip_table_add_del_v2_reply_e8d4e804") api.RegisterMessage((*IPTableAllocate)(nil), "ip_table_allocate_b9d2e09e") api.RegisterMessage((*IPTableAllocateReply)(nil), "ip_table_allocate_reply_1728303a") api.RegisterMessage((*IPTableDetails)(nil), "ip_table_details_c79fca0f") @@ -5098,6 +5187,8 @@ func AllMessages() []api.Message { (*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil), (*IPTableAddDel)(nil), (*IPTableAddDelReply)(nil), + (*IPTableAddDelV2)(nil), + (*IPTableAddDelV2Reply)(nil), (*IPTableAllocate)(nil), (*IPTableAllocateReply)(nil), (*IPTableDetails)(nil), diff --git a/vpplink/generated/bindings/ip/ip_rpc.ba.go b/vpplink/generated/bindings/ip/ip_rpc.ba.go index 713bbcff..ef476d55 100644 --- a/vpplink/generated/bindings/ip/ip_rpc.ba.go +++ b/vpplink/generated/bindings/ip/ip_rpc.ba.go @@ -45,6 +45,7 @@ type RPCService interface { IPSourceAndPortRangeCheckAddDel(ctx context.Context, in *IPSourceAndPortRangeCheckAddDel) (*IPSourceAndPortRangeCheckAddDelReply, error) IPSourceAndPortRangeCheckInterfaceAddDel(ctx context.Context, in *IPSourceAndPortRangeCheckInterfaceAddDel) (*IPSourceAndPortRangeCheckInterfaceAddDelReply, error) IPTableAddDel(ctx context.Context, in *IPTableAddDel) (*IPTableAddDelReply, error) + IPTableAddDelV2(ctx context.Context, in *IPTableAddDelV2) (*IPTableAddDelV2Reply, error) IPTableAllocate(ctx context.Context, in *IPTableAllocate) (*IPTableAllocateReply, error) IPTableDump(ctx context.Context, in *IPTableDump) (RPCService_IPTableDumpClient, error) IPTableFlush(ctx context.Context, in *IPTableFlush) (*IPTableFlushReply, error) @@ -698,6 +699,15 @@ func (c *serviceClient) IPTableAddDel(ctx context.Context, in *IPTableAddDel) (* return out, api.RetvalToVPPApiError(out.Retval) } +func (c *serviceClient) IPTableAddDelV2(ctx context.Context, in *IPTableAddDelV2) (*IPTableAddDelV2Reply, error) { + out := new(IPTableAddDelV2Reply) + err := c.conn.Invoke(ctx, in, out) + if err != nil { + return nil, err + } + return out, api.RetvalToVPPApiError(out.Retval) +} + func (c *serviceClient) IPTableAllocate(ctx context.Context, in *IPTableAllocate) (*IPTableAllocateReply, error) { out := new(IPTableAllocateReply) err := c.conn.Invoke(ctx, in, out) diff --git a/vpplink/generated/bindings/memclnt/memclnt.ba.go b/vpplink/generated/bindings/memclnt/memclnt.ba.go index 7cd75e11..fcffc958 100644 --- a/vpplink/generated/bindings/memclnt/memclnt.ba.go +++ b/vpplink/generated/bindings/memclnt/memclnt.ba.go @@ -4,7 +4,7 @@ // // Contents: // - 2 structs -// - 26 messages +// - 28 messages package memclnt import ( @@ -21,7 +21,7 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "memclnt" APIVersion = "2.1.0" - VersionCrc = 0x21d36234 + VersionCrc = 0xb197c551 ) // MessageTableEntry defines type 'message_table_entry'. @@ -207,6 +207,70 @@ func (m *ControlPingReply) Unmarshal(b []byte) error { return nil } +// GetAPIJSON defines message 'get_api_json'. +type GetAPIJSON struct{} + +func (m *GetAPIJSON) Reset() { *m = GetAPIJSON{} } +func (*GetAPIJSON) GetMessageName() string { return "get_api_json" } +func (*GetAPIJSON) GetCrcString() string { return "51077d14" } +func (*GetAPIJSON) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *GetAPIJSON) Size() (size int) { + if m == nil { + return 0 + } + return size +} +func (m *GetAPIJSON) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + return buf.Bytes(), nil +} +func (m *GetAPIJSON) Unmarshal(b []byte) error { + return nil +} + +// GetAPIJSONReply defines message 'get_api_json_reply'. +type GetAPIJSONReply struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` + JSON string `binapi:"string[],name=json" json:"json,omitempty"` +} + +func (m *GetAPIJSONReply) Reset() { *m = GetAPIJSONReply{} } +func (*GetAPIJSONReply) GetMessageName() string { return "get_api_json_reply" } +func (*GetAPIJSONReply) GetCrcString() string { return "ea715b59" } +func (*GetAPIJSONReply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *GetAPIJSONReply) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + size += 4 + len(m.JSON) // m.JSON + return size +} +func (m *GetAPIJSONReply) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeInt32(m.Retval) + buf.EncodeString(m.JSON, 0) + return buf.Bytes(), nil +} +func (m *GetAPIJSONReply) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + m.JSON = buf.DecodeString(0) + return nil +} + // /* // - Lookup message-ID base by name // @@ -1137,6 +1201,8 @@ func file_memclnt_binapi_init() { api.RegisterMessage((*APIVersionsReply)(nil), "api_versions_reply_5f0d99d6") api.RegisterMessage((*ControlPing)(nil), "control_ping_51077d14") api.RegisterMessage((*ControlPingReply)(nil), "control_ping_reply_f6b0b8ca") + api.RegisterMessage((*GetAPIJSON)(nil), "get_api_json_51077d14") + api.RegisterMessage((*GetAPIJSONReply)(nil), "get_api_json_reply_ea715b59") api.RegisterMessage((*GetFirstMsgID)(nil), "get_first_msg_id_ebf79a66") api.RegisterMessage((*GetFirstMsgIDReply)(nil), "get_first_msg_id_reply_7d337472") api.RegisterMessage((*MemclntCreate)(nil), "memclnt_create_9c5e1c2f") @@ -1168,6 +1234,8 @@ func AllMessages() []api.Message { (*APIVersionsReply)(nil), (*ControlPing)(nil), (*ControlPingReply)(nil), + (*GetAPIJSON)(nil), + (*GetAPIJSONReply)(nil), (*GetFirstMsgID)(nil), (*GetFirstMsgIDReply)(nil), (*MemclntCreate)(nil), diff --git a/vpplink/generated/bindings/memclnt/memclnt_rpc.ba.go b/vpplink/generated/bindings/memclnt/memclnt_rpc.ba.go index c8efe37e..fb2028e3 100644 --- a/vpplink/generated/bindings/memclnt/memclnt_rpc.ba.go +++ b/vpplink/generated/bindings/memclnt/memclnt_rpc.ba.go @@ -12,6 +12,7 @@ import ( type RPCService interface { APIVersions(ctx context.Context, in *APIVersions) (*APIVersionsReply, error) ControlPing(ctx context.Context, in *ControlPing) (*ControlPingReply, error) + GetAPIJSON(ctx context.Context, in *GetAPIJSON) (*GetAPIJSONReply, error) GetFirstMsgID(ctx context.Context, in *GetFirstMsgID) (*GetFirstMsgIDReply, error) MemclntCreate(ctx context.Context, in *MemclntCreate) (*MemclntCreateReply, error) MemclntCreateV2(ctx context.Context, in *MemclntCreateV2) (*MemclntCreateV2Reply, error) @@ -53,6 +54,15 @@ func (c *serviceClient) ControlPing(ctx context.Context, in *ControlPing) (*Cont return out, api.RetvalToVPPApiError(out.Retval) } +func (c *serviceClient) GetAPIJSON(ctx context.Context, in *GetAPIJSON) (*GetAPIJSONReply, error) { + out := new(GetAPIJSONReply) + err := c.conn.Invoke(ctx, in, out) + if err != nil { + return nil, err + } + return out, api.RetvalToVPPApiError(out.Retval) +} + func (c *serviceClient) GetFirstMsgID(ctx context.Context, in *GetFirstMsgID) (*GetFirstMsgIDReply, error) { out := new(GetFirstMsgIDReply) err := c.conn.Invoke(ctx, in, out) diff --git a/vpplink/generated/bindings/rdma/rdma.ba.go b/vpplink/generated/bindings/rdma/rdma.ba.go index 499a3c5b..1ac0507b 100644 --- a/vpplink/generated/bindings/rdma/rdma.ba.go +++ b/vpplink/generated/bindings/rdma/rdma.ba.go @@ -4,7 +4,7 @@ // // Contents: // - 3 enums -// - 8 messages +// - 10 messages package rdma import ( @@ -24,7 +24,7 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "rdma" APIVersion = "3.0.0" - VersionCrc = 0xdab70fa9 + VersionCrc = 0x351383c2 ) // RdmaMode defines enum 'rdma_mode'. @@ -341,7 +341,7 @@ func (m *RdmaCreateV2Reply) Unmarshal(b []byte) error { return nil } -// - client_index - opaque cookie to identify the sender +// Same as v4, just not an autoendian (expect buggy handling of flag values). // - host_if - Linux netdev interface name // - name - new rdma interface name // - rxq_num - number of receive queues (optional) @@ -354,6 +354,7 @@ func (m *RdmaCreateV2Reply) Unmarshal(b []byte) error { // - rss6 (optional) - IPv6 RSS // // RdmaCreateV3 defines message 'rdma_create_v3'. +// Deprecated: the message will be removed in the future versions type RdmaCreateV3 struct { HostIf string `binapi:"string[64],name=host_if" json:"host_if,omitempty"` Name string `binapi:"string[64],name=name" json:"name,omitempty"` @@ -462,6 +463,127 @@ func (m *RdmaCreateV3Reply) Unmarshal(b []byte) error { return nil } +// - client_index - opaque cookie to identify the sender +// - host_if - Linux netdev interface name +// - name - new rdma interface name +// - rxq_num - number of receive queues (optional) +// - rxq_size - receive queue size (optional) +// - txq_size - transmit queue size (optional) +// - mode - operation mode (optional) +// - no_multi_seg (optional) - disable chained buffer RX +// - max_pktlen (optional) - maximal RX packet size. +// - rss4 (optional) - IPv4 RSS +// - rss6 (optional) - IPv6 RSS +// +// RdmaCreateV4 defines message 'rdma_create_v4'. +type RdmaCreateV4 struct { + HostIf string `binapi:"string[64],name=host_if" json:"host_if,omitempty"` + Name string `binapi:"string[64],name=name" json:"name,omitempty"` + RxqNum uint16 `binapi:"u16,name=rxq_num,default=1" json:"rxq_num,omitempty"` + RxqSize uint16 `binapi:"u16,name=rxq_size,default=1024" json:"rxq_size,omitempty"` + TxqSize uint16 `binapi:"u16,name=txq_size,default=1024" json:"txq_size,omitempty"` + Mode RdmaMode `binapi:"rdma_mode,name=mode,default=0" json:"mode,omitempty"` + NoMultiSeg bool `binapi:"bool,name=no_multi_seg,default=0" json:"no_multi_seg,omitempty"` + MaxPktlen uint16 `binapi:"u16,name=max_pktlen,default=0" json:"max_pktlen,omitempty"` + Rss4 RdmaRss4 `binapi:"rdma_rss4,name=rss4,default=0" json:"rss4,omitempty"` + Rss6 RdmaRss6 `binapi:"rdma_rss6,name=rss6,default=0" json:"rss6,omitempty"` +} + +func (m *RdmaCreateV4) Reset() { *m = RdmaCreateV4{} } +func (*RdmaCreateV4) GetMessageName() string { return "rdma_create_v4" } +func (*RdmaCreateV4) GetCrcString() string { return "c6287ea8" } +func (*RdmaCreateV4) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *RdmaCreateV4) Size() (size int) { + if m == nil { + return 0 + } + size += 64 // m.HostIf + size += 64 // m.Name + size += 2 // m.RxqNum + size += 2 // m.RxqSize + size += 2 // m.TxqSize + size += 4 // m.Mode + size += 1 // m.NoMultiSeg + size += 2 // m.MaxPktlen + size += 4 // m.Rss4 + size += 4 // m.Rss6 + return size +} +func (m *RdmaCreateV4) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeString(m.HostIf, 64) + buf.EncodeString(m.Name, 64) + buf.EncodeUint16(m.RxqNum) + buf.EncodeUint16(m.RxqSize) + buf.EncodeUint16(m.TxqSize) + buf.EncodeUint32(uint32(m.Mode)) + buf.EncodeBool(m.NoMultiSeg) + buf.EncodeUint16(m.MaxPktlen) + buf.EncodeUint32(uint32(m.Rss4)) + buf.EncodeUint32(uint32(m.Rss6)) + return buf.Bytes(), nil +} +func (m *RdmaCreateV4) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.HostIf = buf.DecodeString(64) + m.Name = buf.DecodeString(64) + m.RxqNum = buf.DecodeUint16() + m.RxqSize = buf.DecodeUint16() + m.TxqSize = buf.DecodeUint16() + m.Mode = RdmaMode(buf.DecodeUint32()) + m.NoMultiSeg = buf.DecodeBool() + m.MaxPktlen = buf.DecodeUint16() + m.Rss4 = RdmaRss4(buf.DecodeUint32()) + m.Rss6 = RdmaRss6(buf.DecodeUint32()) + return nil +} + +// - client_index - opaque cookie to identify the sender +// - sw_if_index - interface index +// +// RdmaCreateV4Reply defines message 'rdma_create_v4_reply'. +type RdmaCreateV4Reply 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 *RdmaCreateV4Reply) Reset() { *m = RdmaCreateV4Reply{} } +func (*RdmaCreateV4Reply) GetMessageName() string { return "rdma_create_v4_reply" } +func (*RdmaCreateV4Reply) GetCrcString() string { return "5383d31f" } +func (*RdmaCreateV4Reply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *RdmaCreateV4Reply) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + size += 4 // m.SwIfIndex + return size +} +func (m *RdmaCreateV4Reply) 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 *RdmaCreateV4Reply) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32()) + return nil +} + // - client_index - opaque cookie to identify the sender // - sw_if_index - interface index // @@ -539,6 +661,8 @@ func file_rdma_binapi_init() { api.RegisterMessage((*RdmaCreateV2Reply)(nil), "rdma_create_v2_reply_5383d31f") api.RegisterMessage((*RdmaCreateV3)(nil), "rdma_create_v3_c6287ea8") api.RegisterMessage((*RdmaCreateV3Reply)(nil), "rdma_create_v3_reply_5383d31f") + api.RegisterMessage((*RdmaCreateV4)(nil), "rdma_create_v4_c6287ea8") + api.RegisterMessage((*RdmaCreateV4Reply)(nil), "rdma_create_v4_reply_5383d31f") api.RegisterMessage((*RdmaDelete)(nil), "rdma_delete_f9e6675e") api.RegisterMessage((*RdmaDeleteReply)(nil), "rdma_delete_reply_e8d4e804") } @@ -552,6 +676,8 @@ func AllMessages() []api.Message { (*RdmaCreateV2Reply)(nil), (*RdmaCreateV3)(nil), (*RdmaCreateV3Reply)(nil), + (*RdmaCreateV4)(nil), + (*RdmaCreateV4Reply)(nil), (*RdmaDelete)(nil), (*RdmaDeleteReply)(nil), } diff --git a/vpplink/generated/bindings/rdma/rdma_rpc.ba.go b/vpplink/generated/bindings/rdma/rdma_rpc.ba.go index 77db494e..93c3e432 100644 --- a/vpplink/generated/bindings/rdma/rdma_rpc.ba.go +++ b/vpplink/generated/bindings/rdma/rdma_rpc.ba.go @@ -13,6 +13,7 @@ type RPCService interface { RdmaCreate(ctx context.Context, in *RdmaCreate) (*RdmaCreateReply, error) RdmaCreateV2(ctx context.Context, in *RdmaCreateV2) (*RdmaCreateV2Reply, error) RdmaCreateV3(ctx context.Context, in *RdmaCreateV3) (*RdmaCreateV3Reply, error) + RdmaCreateV4(ctx context.Context, in *RdmaCreateV4) (*RdmaCreateV4Reply, error) RdmaDelete(ctx context.Context, in *RdmaDelete) (*RdmaDeleteReply, error) } @@ -51,6 +52,15 @@ func (c *serviceClient) RdmaCreateV3(ctx context.Context, in *RdmaCreateV3) (*Rd return out, api.RetvalToVPPApiError(out.Retval) } +func (c *serviceClient) RdmaCreateV4(ctx context.Context, in *RdmaCreateV4) (*RdmaCreateV4Reply, error) { + out := new(RdmaCreateV4Reply) + err := c.conn.Invoke(ctx, in, out) + if err != nil { + return nil, err + } + return out, api.RetvalToVPPApiError(out.Retval) +} + func (c *serviceClient) RdmaDelete(ctx context.Context, in *RdmaDelete) (*RdmaDeleteReply, error) { out := new(RdmaDeleteReply) err := c.conn.Invoke(ctx, in, out) diff --git a/vpplink/generated/bindings/session/session.ba.go b/vpplink/generated/bindings/session/session.ba.go index aac6ab6d..829f52fa 100644 --- a/vpplink/generated/bindings/session/session.ba.go +++ b/vpplink/generated/bindings/session/session.ba.go @@ -3,8 +3,9 @@ // Package session contains generated bindings for API file session.api. // // Contents: -// - 2 enums -// - 26 messages +// - 3 enums +// - 1 struct +// - 32 messages package session import ( @@ -24,10 +25,43 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "session" - APIVersion = "4.0.0" - VersionCrc = 0x37cc4b71 + APIVersion = "4.0.1" + VersionCrc = 0xd5122da9 ) +// RtBackendEngine defines enum 'rt_backend_engine'. +type RtBackendEngine uint8 + +const ( + RT_BACKEND_ENGINE_API_DISABLE RtBackendEngine = 0 + RT_BACKEND_ENGINE_API_RULE_TABLE RtBackendEngine = 1 + RT_BACKEND_ENGINE_API_NONE RtBackendEngine = 2 + RT_BACKEND_ENGINE_API_SDL RtBackendEngine = 3 +) + +var ( + RtBackendEngine_name = map[uint8]string{ + 0: "RT_BACKEND_ENGINE_API_DISABLE", + 1: "RT_BACKEND_ENGINE_API_RULE_TABLE", + 2: "RT_BACKEND_ENGINE_API_NONE", + 3: "RT_BACKEND_ENGINE_API_SDL", + } + RtBackendEngine_value = map[string]uint8{ + "RT_BACKEND_ENGINE_API_DISABLE": 0, + "RT_BACKEND_ENGINE_API_RULE_TABLE": 1, + "RT_BACKEND_ENGINE_API_NONE": 2, + "RT_BACKEND_ENGINE_API_SDL": 3, + } +) + +func (x RtBackendEngine) String() string { + s, ok := RtBackendEngine_name[uint8(x)] + if ok { + return s + } + return "RtBackendEngine(" + strconv.Itoa(int(x)) + ")" +} + // SessionRuleScope defines enum 'session_rule_scope'. type SessionRuleScope uint32 @@ -94,6 +128,13 @@ func (x TransportProto) String() string { return "TransportProto(" + strconv.Itoa(int(x)) + ")" } +// SdlRule defines type 'sdl_rule'. +type SdlRule struct { + Lcl ip_types.Prefix `binapi:"prefix,name=lcl" json:"lcl,omitempty"` + ActionIndex uint32 `binapi:"u32,name=action_index" json:"action_index,omitempty"` + Tag string `binapi:"string[64],name=tag" json:"tag,omitempty"` +} + // Add certificate and key // - engine - crypto engine // - cert_len - cert length (comes first) @@ -1011,6 +1052,7 @@ func (m *ApplicationDetachReply) Unmarshal(b []byte) error { // - is_enable - disable session layer if 0, enable otherwise // // SessionEnableDisable defines message 'session_enable_disable'. +// Deprecated: the message will be removed in the future versions type SessionEnableDisable struct { IsEnable bool `binapi:"bool,name=is_enable,default=true" json:"is_enable,omitempty"` } @@ -1044,6 +1086,7 @@ func (m *SessionEnableDisable) Unmarshal(b []byte) error { } // SessionEnableDisableReply defines message 'session_enable_disable_reply'. +// Deprecated: the message will be removed in the future versions type SessionEnableDisableReply struct { Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` } @@ -1076,6 +1119,72 @@ func (m *SessionEnableDisableReply) Unmarshal(b []byte) error { return nil } +// SessionEnableDisableV2 defines message 'session_enable_disable_v2'. +type SessionEnableDisableV2 struct { + RtEngineType RtBackendEngine `binapi:"rt_backend_engine,name=rt_engine_type" json:"rt_engine_type,omitempty"` +} + +func (m *SessionEnableDisableV2) Reset() { *m = SessionEnableDisableV2{} } +func (*SessionEnableDisableV2) GetMessageName() string { return "session_enable_disable_v2" } +func (*SessionEnableDisableV2) GetCrcString() string { return "f09fbf32" } +func (*SessionEnableDisableV2) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *SessionEnableDisableV2) Size() (size int) { + if m == nil { + return 0 + } + size += 1 // m.RtEngineType + return size +} +func (m *SessionEnableDisableV2) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeUint8(uint8(m.RtEngineType)) + return buf.Bytes(), nil +} +func (m *SessionEnableDisableV2) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.RtEngineType = RtBackendEngine(buf.DecodeUint8()) + return nil +} + +// SessionEnableDisableV2Reply defines message 'session_enable_disable_v2_reply'. +type SessionEnableDisableV2Reply struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` +} + +func (m *SessionEnableDisableV2Reply) Reset() { *m = SessionEnableDisableV2Reply{} } +func (*SessionEnableDisableV2Reply) GetMessageName() string { return "session_enable_disable_v2_reply" } +func (*SessionEnableDisableV2Reply) GetCrcString() string { return "e8d4e804" } +func (*SessionEnableDisableV2Reply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *SessionEnableDisableV2Reply) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + return size +} +func (m *SessionEnableDisableV2Reply) 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 *SessionEnableDisableV2Reply) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + return nil +} + // add/del session rule // // client to vpp direction only @@ -1403,6 +1512,198 @@ func (m *SessionSapiEnableDisableReply) Unmarshal(b []byte) error { return nil } +// SessionSdlAddDel defines message 'session_sdl_add_del'. +type SessionSdlAddDel struct { + AppnsIndex uint32 `binapi:"u32,name=appns_index" json:"appns_index,omitempty"` + IsAdd bool `binapi:"bool,name=is_add" json:"is_add,omitempty"` + Count uint32 `binapi:"u32,name=count" json:"-"` + R []SdlRule `binapi:"sdl_rule[count],name=r" json:"r,omitempty"` +} + +func (m *SessionSdlAddDel) Reset() { *m = SessionSdlAddDel{} } +func (*SessionSdlAddDel) GetMessageName() string { return "session_sdl_add_del" } +func (*SessionSdlAddDel) GetCrcString() string { return "faeb89fc" } +func (*SessionSdlAddDel) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *SessionSdlAddDel) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.AppnsIndex + size += 1 // m.IsAdd + size += 4 // m.Count + for j1 := 0; j1 < len(m.R); j1++ { + var s1 SdlRule + _ = s1 + if j1 < len(m.R) { + s1 = m.R[j1] + } + size += 1 // s1.Lcl.Address.Af + size += 1 * 16 // s1.Lcl.Address.Un + size += 1 // s1.Lcl.Len + size += 4 // s1.ActionIndex + size += 64 // s1.Tag + } + return size +} +func (m *SessionSdlAddDel) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeUint32(m.AppnsIndex) + buf.EncodeBool(m.IsAdd) + buf.EncodeUint32(uint32(len(m.R))) + for j0 := 0; j0 < len(m.R); j0++ { + var v0 SdlRule // R + if j0 < len(m.R) { + v0 = m.R[j0] + } + buf.EncodeUint8(uint8(v0.Lcl.Address.Af)) + buf.EncodeBytes(v0.Lcl.Address.Un.XXX_UnionData[:], 16) + buf.EncodeUint8(v0.Lcl.Len) + buf.EncodeUint32(v0.ActionIndex) + buf.EncodeString(v0.Tag, 64) + } + return buf.Bytes(), nil +} +func (m *SessionSdlAddDel) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.AppnsIndex = buf.DecodeUint32() + m.IsAdd = buf.DecodeBool() + m.Count = buf.DecodeUint32() + m.R = make([]SdlRule, m.Count) + for j0 := 0; j0 < len(m.R); j0++ { + m.R[j0].Lcl.Address.Af = ip_types.AddressFamily(buf.DecodeUint8()) + copy(m.R[j0].Lcl.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16)) + m.R[j0].Lcl.Len = buf.DecodeUint8() + m.R[j0].ActionIndex = buf.DecodeUint32() + m.R[j0].Tag = buf.DecodeString(64) + } + return nil +} + +// SessionSdlAddDelReply defines message 'session_sdl_add_del_reply'. +type SessionSdlAddDelReply struct { + Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"` +} + +func (m *SessionSdlAddDelReply) Reset() { *m = SessionSdlAddDelReply{} } +func (*SessionSdlAddDelReply) GetMessageName() string { return "session_sdl_add_del_reply" } +func (*SessionSdlAddDelReply) GetCrcString() string { return "e8d4e804" } +func (*SessionSdlAddDelReply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *SessionSdlAddDelReply) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.Retval + return size +} +func (m *SessionSdlAddDelReply) 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 *SessionSdlAddDelReply) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Retval = buf.DecodeInt32() + return nil +} + +// Session sdl details +// - lcl - local prefix +// - action_index - the only action defined now is forward to +// application with index action_index +// - appns_index - application namespace where rule is to be applied to +// - tag - tag +// +// SessionSdlDetails defines message 'session_sdl_details'. +type SessionSdlDetails struct { + Lcl ip_types.Prefix `binapi:"prefix,name=lcl" json:"lcl,omitempty"` + ActionIndex uint32 `binapi:"u32,name=action_index" json:"action_index,omitempty"` + AppnsIndex uint32 `binapi:"u32,name=appns_index" json:"appns_index,omitempty"` + Tag string `binapi:"string[64],name=tag" json:"tag,omitempty"` +} + +func (m *SessionSdlDetails) Reset() { *m = SessionSdlDetails{} } +func (*SessionSdlDetails) GetMessageName() string { return "session_sdl_details" } +func (*SessionSdlDetails) GetCrcString() string { return "9a8ef5d0" } +func (*SessionSdlDetails) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *SessionSdlDetails) Size() (size int) { + if m == nil { + return 0 + } + size += 1 // m.Lcl.Address.Af + size += 1 * 16 // m.Lcl.Address.Un + size += 1 // m.Lcl.Len + size += 4 // m.ActionIndex + size += 4 // m.AppnsIndex + size += 64 // m.Tag + return size +} +func (m *SessionSdlDetails) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeUint8(uint8(m.Lcl.Address.Af)) + buf.EncodeBytes(m.Lcl.Address.Un.XXX_UnionData[:], 16) + buf.EncodeUint8(m.Lcl.Len) + buf.EncodeUint32(m.ActionIndex) + buf.EncodeUint32(m.AppnsIndex) + buf.EncodeString(m.Tag, 64) + return buf.Bytes(), nil +} +func (m *SessionSdlDetails) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.Lcl.Address.Af = ip_types.AddressFamily(buf.DecodeUint8()) + copy(m.Lcl.Address.Un.XXX_UnionData[:], buf.DecodeBytes(16)) + m.Lcl.Len = buf.DecodeUint8() + m.ActionIndex = buf.DecodeUint32() + m.AppnsIndex = buf.DecodeUint32() + m.Tag = buf.DecodeString(64) + return nil +} + +// Dump session sdl +// SessionSdlDump defines message 'session_sdl_dump'. +type SessionSdlDump struct{} + +func (m *SessionSdlDump) Reset() { *m = SessionSdlDump{} } +func (*SessionSdlDump) GetMessageName() string { return "session_sdl_dump" } +func (*SessionSdlDump) GetCrcString() string { return "51077d14" } +func (*SessionSdlDump) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *SessionSdlDump) Size() (size int) { + if m == nil { + return 0 + } + return size +} +func (m *SessionSdlDump) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + return buf.Bytes(), nil +} +func (m *SessionSdlDump) Unmarshal(b []byte) error { + return nil +} + func init() { file_session_binapi_init() } func file_session_binapi_init() { api.RegisterMessage((*AppAddCertKeyPair)(nil), "app_add_cert_key_pair_02eb8016") @@ -1425,12 +1726,18 @@ func file_session_binapi_init() { api.RegisterMessage((*ApplicationDetachReply)(nil), "application_detach_reply_e8d4e804") api.RegisterMessage((*SessionEnableDisable)(nil), "session_enable_disable_c264d7bf") api.RegisterMessage((*SessionEnableDisableReply)(nil), "session_enable_disable_reply_e8d4e804") + api.RegisterMessage((*SessionEnableDisableV2)(nil), "session_enable_disable_v2_f09fbf32") + api.RegisterMessage((*SessionEnableDisableV2Reply)(nil), "session_enable_disable_v2_reply_e8d4e804") api.RegisterMessage((*SessionRuleAddDel)(nil), "session_rule_add_del_82a90af5") api.RegisterMessage((*SessionRuleAddDelReply)(nil), "session_rule_add_del_reply_e8d4e804") api.RegisterMessage((*SessionRulesDetails)(nil), "session_rules_details_4ef746e7") api.RegisterMessage((*SessionRulesDump)(nil), "session_rules_dump_51077d14") api.RegisterMessage((*SessionSapiEnableDisable)(nil), "session_sapi_enable_disable_c264d7bf") api.RegisterMessage((*SessionSapiEnableDisableReply)(nil), "session_sapi_enable_disable_reply_e8d4e804") + api.RegisterMessage((*SessionSdlAddDel)(nil), "session_sdl_add_del_faeb89fc") + api.RegisterMessage((*SessionSdlAddDelReply)(nil), "session_sdl_add_del_reply_e8d4e804") + api.RegisterMessage((*SessionSdlDetails)(nil), "session_sdl_details_9a8ef5d0") + api.RegisterMessage((*SessionSdlDump)(nil), "session_sdl_dump_51077d14") } // Messages returns list of all messages in this module. @@ -1456,11 +1763,17 @@ func AllMessages() []api.Message { (*ApplicationDetachReply)(nil), (*SessionEnableDisable)(nil), (*SessionEnableDisableReply)(nil), + (*SessionEnableDisableV2)(nil), + (*SessionEnableDisableV2Reply)(nil), (*SessionRuleAddDel)(nil), (*SessionRuleAddDelReply)(nil), (*SessionRulesDetails)(nil), (*SessionRulesDump)(nil), (*SessionSapiEnableDisable)(nil), (*SessionSapiEnableDisableReply)(nil), + (*SessionSdlAddDel)(nil), + (*SessionSdlAddDelReply)(nil), + (*SessionSdlDetails)(nil), + (*SessionSdlDump)(nil), } } diff --git a/vpplink/generated/bindings/session/session_rpc.ba.go b/vpplink/generated/bindings/session/session_rpc.ba.go index 14f3acf6..00105a6d 100644 --- a/vpplink/generated/bindings/session/session_rpc.ba.go +++ b/vpplink/generated/bindings/session/session_rpc.ba.go @@ -23,9 +23,12 @@ type RPCService interface { AppWorkerAddDel(ctx context.Context, in *AppWorkerAddDel) (*AppWorkerAddDelReply, error) ApplicationDetach(ctx context.Context, in *ApplicationDetach) (*ApplicationDetachReply, error) SessionEnableDisable(ctx context.Context, in *SessionEnableDisable) (*SessionEnableDisableReply, error) + SessionEnableDisableV2(ctx context.Context, in *SessionEnableDisableV2) (*SessionEnableDisableV2Reply, error) SessionRuleAddDel(ctx context.Context, in *SessionRuleAddDel) (*SessionRuleAddDelReply, error) SessionRulesDump(ctx context.Context, in *SessionRulesDump) (RPCService_SessionRulesDumpClient, error) SessionSapiEnableDisable(ctx context.Context, in *SessionSapiEnableDisable) (*SessionSapiEnableDisableReply, error) + SessionSdlAddDel(ctx context.Context, in *SessionSdlAddDel) (*SessionSdlAddDelReply, error) + SessionSdlDump(ctx context.Context, in *SessionSdlDump) (RPCService_SessionSdlDumpClient, error) } type serviceClient struct { @@ -126,6 +129,15 @@ func (c *serviceClient) SessionEnableDisable(ctx context.Context, in *SessionEna return out, api.RetvalToVPPApiError(out.Retval) } +func (c *serviceClient) SessionEnableDisableV2(ctx context.Context, in *SessionEnableDisableV2) (*SessionEnableDisableV2Reply, error) { + out := new(SessionEnableDisableV2Reply) + err := c.conn.Invoke(ctx, in, out) + if err != nil { + return nil, err + } + return out, api.RetvalToVPPApiError(out.Retval) +} + func (c *serviceClient) SessionRuleAddDel(ctx context.Context, in *SessionRuleAddDel) (*SessionRuleAddDelReply, error) { out := new(SessionRuleAddDelReply) err := c.conn.Invoke(ctx, in, out) @@ -186,3 +198,55 @@ func (c *serviceClient) SessionSapiEnableDisable(ctx context.Context, in *Sessio } return out, api.RetvalToVPPApiError(out.Retval) } + +func (c *serviceClient) SessionSdlAddDel(ctx context.Context, in *SessionSdlAddDel) (*SessionSdlAddDelReply, error) { + out := new(SessionSdlAddDelReply) + err := c.conn.Invoke(ctx, in, out) + if err != nil { + return nil, err + } + return out, api.RetvalToVPPApiError(out.Retval) +} + +func (c *serviceClient) SessionSdlDump(ctx context.Context, in *SessionSdlDump) (RPCService_SessionSdlDumpClient, error) { + stream, err := c.conn.NewStream(ctx) + if err != nil { + return nil, err + } + x := &serviceClient_SessionSdlDumpClient{stream} + if err := x.Stream.SendMsg(in); err != nil { + return nil, err + } + if err = x.Stream.SendMsg(&memclnt.ControlPing{}); err != nil { + return nil, err + } + return x, nil +} + +type RPCService_SessionSdlDumpClient interface { + Recv() (*SessionSdlDetails, error) + api.Stream +} + +type serviceClient_SessionSdlDumpClient struct { + api.Stream +} + +func (c *serviceClient_SessionSdlDumpClient) Recv() (*SessionSdlDetails, error) { + msg, err := c.Stream.RecvMsg() + if err != nil { + return nil, err + } + switch m := msg.(type) { + case *SessionSdlDetails: + return m, nil + case *memclnt.ControlPingReply: + err = c.Stream.Close() + if err != nil { + return nil, err + } + return nil, io.EOF + default: + return nil, fmt.Errorf("unexpected message: %T %v", m, m) + } +} diff --git a/vpplink/generated/bindings/urpf/urpf.ba.go b/vpplink/generated/bindings/urpf/urpf.ba.go index 232e76c4..f51a5c41 100644 --- a/vpplink/generated/bindings/urpf/urpf.ba.go +++ b/vpplink/generated/bindings/urpf/urpf.ba.go @@ -4,7 +4,7 @@ // // Contents: // - 1 enum -// - 4 messages +// - 6 messages package urpf import ( @@ -26,7 +26,7 @@ const _ = api.GoVppAPIPackageIsVersion2 const ( APIFile = "urpf" APIVersion = "1.0.0" - VersionCrc = 0xd0c7b3c9 + VersionCrc = 0x88759016 ) // UrpfMode defines enum 'urpf_mode'. @@ -59,6 +59,93 @@ func (x UrpfMode) String() string { return "UrpfMode(" + strconv.Itoa(int(x)) + ")" } +// @brief uRPF enabled interface details +// UrpfInterfaceDetails defines message 'urpf_interface_details'. +type UrpfInterfaceDetails struct { + SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"` + IsInput bool `binapi:"bool,name=is_input" json:"is_input,omitempty"` + Mode UrpfMode `binapi:"urpf_mode,name=mode" json:"mode,omitempty"` + Af ip_types.AddressFamily `binapi:"address_family,name=af" json:"af,omitempty"` + TableID uint32 `binapi:"u32,name=table_id" json:"table_id,omitempty"` +} + +func (m *UrpfInterfaceDetails) Reset() { *m = UrpfInterfaceDetails{} } +func (*UrpfInterfaceDetails) GetMessageName() string { return "urpf_interface_details" } +func (*UrpfInterfaceDetails) GetCrcString() string { return "f94b5374" } +func (*UrpfInterfaceDetails) GetMessageType() api.MessageType { + return api.ReplyMessage +} + +func (m *UrpfInterfaceDetails) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.SwIfIndex + size += 1 // m.IsInput + size += 1 // m.Mode + size += 1 // m.Af + size += 4 // m.TableID + return size +} +func (m *UrpfInterfaceDetails) Marshal(b []byte) ([]byte, error) { + if b == nil { + b = make([]byte, m.Size()) + } + buf := codec.NewBuffer(b) + buf.EncodeUint32(uint32(m.SwIfIndex)) + buf.EncodeBool(m.IsInput) + buf.EncodeUint8(uint8(m.Mode)) + buf.EncodeUint8(uint8(m.Af)) + buf.EncodeUint32(m.TableID) + return buf.Bytes(), nil +} +func (m *UrpfInterfaceDetails) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32()) + m.IsInput = buf.DecodeBool() + m.Mode = UrpfMode(buf.DecodeUint8()) + m.Af = ip_types.AddressFamily(buf.DecodeUint8()) + m.TableID = buf.DecodeUint32() + return nil +} + +// @brief Dump uRPF enabled interface(s) in zero or more urpf_interface_details replies +// - sw_if_index - sw_if_index of a specific interface, or -1 (default) +// to return all uRPF enabled interfaces +// +// UrpfInterfaceDump defines message 'urpf_interface_dump'. +type UrpfInterfaceDump struct { + SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index,default=4294967295" json:"sw_if_index,omitempty"` +} + +func (m *UrpfInterfaceDump) Reset() { *m = UrpfInterfaceDump{} } +func (*UrpfInterfaceDump) GetMessageName() string { return "urpf_interface_dump" } +func (*UrpfInterfaceDump) GetCrcString() string { return "f9e6675e" } +func (*UrpfInterfaceDump) GetMessageType() api.MessageType { + return api.RequestMessage +} + +func (m *UrpfInterfaceDump) Size() (size int) { + if m == nil { + return 0 + } + size += 4 // m.SwIfIndex + return size +} +func (m *UrpfInterfaceDump) 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 *UrpfInterfaceDump) Unmarshal(b []byte) error { + buf := codec.NewBuffer(b) + m.SwIfIndex = interface_types.InterfaceIndex(buf.DecodeUint32()) + return nil +} + // * @brief Enable uRPF on a given interface in a given direction // - - mode - Mode // - - af - Address Family @@ -234,6 +321,8 @@ func (m *UrpfUpdateV2Reply) Unmarshal(b []byte) error { func init() { file_urpf_binapi_init() } func file_urpf_binapi_init() { + api.RegisterMessage((*UrpfInterfaceDetails)(nil), "urpf_interface_details_f94b5374") + api.RegisterMessage((*UrpfInterfaceDump)(nil), "urpf_interface_dump_f9e6675e") api.RegisterMessage((*UrpfUpdate)(nil), "urpf_update_cc274cd1") api.RegisterMessage((*UrpfUpdateReply)(nil), "urpf_update_reply_e8d4e804") api.RegisterMessage((*UrpfUpdateV2)(nil), "urpf_update_v2_b873d028") @@ -243,6 +332,8 @@ func file_urpf_binapi_init() { // Messages returns list of all messages in this module. func AllMessages() []api.Message { return []api.Message{ + (*UrpfInterfaceDetails)(nil), + (*UrpfInterfaceDump)(nil), (*UrpfUpdate)(nil), (*UrpfUpdateReply)(nil), (*UrpfUpdateV2)(nil), diff --git a/vpplink/generated/bindings/urpf/urpf_rpc.ba.go b/vpplink/generated/bindings/urpf/urpf_rpc.ba.go index 889acd94..f252acc7 100644 --- a/vpplink/generated/bindings/urpf/urpf_rpc.ba.go +++ b/vpplink/generated/bindings/urpf/urpf_rpc.ba.go @@ -4,12 +4,16 @@ package urpf import ( "context" + "fmt" + "io" + memclnt "github.com/projectcalico/vpp-dataplane/v3/vpplink/generated/bindings/memclnt" api "go.fd.io/govpp/api" ) // RPCService defines RPC service urpf. type RPCService interface { + UrpfInterfaceDump(ctx context.Context, in *UrpfInterfaceDump) (RPCService_UrpfInterfaceDumpClient, error) UrpfUpdate(ctx context.Context, in *UrpfUpdate) (*UrpfUpdateReply, error) UrpfUpdateV2(ctx context.Context, in *UrpfUpdateV2) (*UrpfUpdateV2Reply, error) } @@ -22,6 +26,49 @@ func NewServiceClient(conn api.Connection) RPCService { return &serviceClient{conn} } +func (c *serviceClient) UrpfInterfaceDump(ctx context.Context, in *UrpfInterfaceDump) (RPCService_UrpfInterfaceDumpClient, error) { + stream, err := c.conn.NewStream(ctx) + if err != nil { + return nil, err + } + x := &serviceClient_UrpfInterfaceDumpClient{stream} + if err := x.Stream.SendMsg(in); err != nil { + return nil, err + } + if err = x.Stream.SendMsg(&memclnt.ControlPing{}); err != nil { + return nil, err + } + return x, nil +} + +type RPCService_UrpfInterfaceDumpClient interface { + Recv() (*UrpfInterfaceDetails, error) + api.Stream +} + +type serviceClient_UrpfInterfaceDumpClient struct { + api.Stream +} + +func (c *serviceClient_UrpfInterfaceDumpClient) Recv() (*UrpfInterfaceDetails, error) { + msg, err := c.Stream.RecvMsg() + if err != nil { + return nil, err + } + switch m := msg.(type) { + case *UrpfInterfaceDetails: + return m, nil + case *memclnt.ControlPingReply: + err = c.Stream.Close() + if err != nil { + return nil, err + } + return nil, io.EOF + default: + return nil, fmt.Errorf("unexpected message: %T %v", m, m) + } +} + func (c *serviceClient) UrpfUpdate(ctx context.Context, in *UrpfUpdate) (*UrpfUpdateReply, error) { out := new(UrpfUpdateReply) err := c.conn.Invoke(ctx, in, out) diff --git a/vpplink/generated/bindings/virtio/virtio.ba.go b/vpplink/generated/bindings/virtio/virtio.ba.go index c1869795..d293d805 100644 --- a/vpplink/generated/bindings/virtio/virtio.ba.go +++ b/vpplink/generated/bindings/virtio/virtio.ba.go @@ -39,6 +39,7 @@ const ( VIRTIO_API_FLAG_PACKED VirtioFlags = 8 VIRTIO_API_FLAG_IN_ORDER VirtioFlags = 16 VIRTIO_API_FLAG_BUFFERING VirtioFlags = 32 + VIRTIO_API_FLAG_RSS VirtioFlags = 64 ) var ( @@ -49,6 +50,7 @@ var ( 8: "VIRTIO_API_FLAG_PACKED", 16: "VIRTIO_API_FLAG_IN_ORDER", 32: "VIRTIO_API_FLAG_BUFFERING", + 64: "VIRTIO_API_FLAG_RSS", } VirtioFlags_value = map[string]uint32{ "VIRTIO_API_FLAG_GSO": 1, @@ -57,6 +59,7 @@ var ( "VIRTIO_API_FLAG_PACKED": 8, "VIRTIO_API_FLAG_IN_ORDER": 16, "VIRTIO_API_FLAG_BUFFERING": 32, + "VIRTIO_API_FLAG_RSS": 64, } ) diff --git a/vpplink/generated/generate.log b/vpplink/generated/generate.log index daab51d9..14a5ebfd 100755 --- a/vpplink/generated/generate.log +++ b/vpplink/generated/generate.log @@ -1,11 +1,19 @@ -VPP Version : 24.02-rc0~186-g7dcba520c +VPP Version : 24.10.0-7~g2517ec5e9 Binapi-generator version : v0.10.0-dev -VPP Base commit : eae5a2e91 gerrit:34726/3 interface: add buffer stats api +VPP Base commit : b91e15387 misc: Initial changes for stable/2410 branch ------------------ Cherry picked commits -------------------- +ip: add support for checksum in IP midchain capo: Calico Policies plugin acl: acl-plugin custom policies cnat: [WIP] no k8s maglev from pods pbl: Port based balancer -gerrit:40244/1 udp: update rx sw_if_index to ip-local selected one +gerrit:revert:39675/5 Revert "ip-neighbor: do not use sas to determine NS source address" gerrit:34726/3 interface: add buffer stats api +misc: VPP 24.10 Release Notes +build: fix dpdk mellanox driver build setting +octeon: fix pause flow control for lbk/sdp devices +octeon: enable h/w vlan tagging support +vppinfra: exclude clib_dt_node_add_child on FreeBSD +dpdk: Enable dpdk build on FreeBSD +misc: Initial changes for stable/2410 branch ------------------------------------------------------------- diff --git a/vpplink/generated/patches/0005-partial-revert-arthur-gso.patch b/vpplink/generated/patches/0005-partial-revert-arthur-gso.patch new file mode 100644 index 00000000..03419ab2 --- /dev/null +++ b/vpplink/generated/patches/0005-partial-revert-arthur-gso.patch @@ -0,0 +1,103 @@ +From a5efb646c1e2575abe427f8f5f211a988464cde1 Mon Sep 17 00:00:00 2001 +From: Mohsin Kazmi +Date: Mon, 28 Oct 2024 16:44:11 +0000 +Subject: [PATCH] ip: add support for checksum in IP midchain + +Type: fix + +This is a temporary patch which should not be merged +in upstream VPP. +It only reverts partial support of the patch added by +https://gerrit.fd.io/r/c/vpp/+/32695 + +Today, virtual interfaces on egress does not support +checksum and GSO offload packets which are +encapsulated in tunnel. + +Signed-off-by: Mohsin Kazmi +Change-Id: Ib8c98bedc227419154aaaf1bebed46890ab69026 +--- + +diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c +index ff74b52..e18e688 100644 +--- a/src/vnet/ip/ip4_forward.c ++++ b/src/vnet/ip/ip4_forward.c +@@ -2225,6 +2225,9 @@ + adj0->ia_cfg_index); + + next[0] = next_index; ++ if (is_midchain) ++ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */, ++ 0 /* is_ip6 */); + } + else + { +@@ -2247,6 +2250,9 @@ + &next_index, b[1], + adj1->ia_cfg_index); + next[1] = next_index; ++ if (is_midchain) ++ vnet_calc_checksums_inline (vm, b[1], 1 /* is_ip4 */, ++ 0 /* is_ip6 */); + } + else + { +@@ -2396,6 +2402,8 @@ + + if (is_midchain) + { ++ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */, ++ 0 /* is_ip6 */); + /* Guess we are only writing on ipv4 header. */ + vnet_rewrite_one_header (adj0[0], ip0, sizeof (ip4_header_t)); + } +@@ -2499,6 +2507,8 @@ + + if (is_midchain) + { ++ vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */, ++ 0 /* is_ip6 */); + /* Guess we are only writing on ipv4 header. */ + vnet_rewrite_one_header (adj0[0], ip0, sizeof (ip4_header_t)); + } +diff --git a/src/vnet/ip/ip6_forward.c b/src/vnet/ip/ip6_forward.c +index 31adc90..e697018 100644 +--- a/src/vnet/ip/ip6_forward.c ++++ b/src/vnet/ip/ip6_forward.c +@@ -1955,9 +1955,17 @@ + } + + if (is_midchain) +- /* Guess we are only writing on ipv6 header. */ +- vnet_rewrite_two_headers (adj0[0], adj1[0], ip0, ip1, +- sizeof (ip6_header_t)); ++ { ++ /* before we paint on the next header, update the L4 ++ * checksums if required, since there's no offload on a tunnel */ ++ vnet_calc_checksums_inline (vm, p0, 0 /* is_ip4 */, ++ 1 /* is_ip6 */); ++ vnet_calc_checksums_inline (vm, p1, 0 /* is_ip4 */, ++ 1 /* is_ip6 */); ++ /* Guess we are only writing on ipv6 header. */ ++ vnet_rewrite_two_headers (adj0[0], adj1[0], ip0, ip1, ++ sizeof (ip6_header_t)); ++ } + else + /* Guess we are only writing on simple Ethernet header. */ + vnet_rewrite_two_headers (adj0[0], adj1[0], +@@ -2085,8 +2093,13 @@ + adj0->ia_cfg_index); + + if (is_midchain) +- /* Guess we are only writing on ip6 header. */ +- vnet_rewrite_one_header (adj0[0], ip0, sizeof (ip6_header_t)); ++ { ++ vnet_calc_checksums_inline (vm, p0, 0 /* is_ip4 */, ++ 1 /* is_ip6 */); ++ /* Guess we are only writing on ip6 header. */ ++ vnet_rewrite_one_header (adj0[0], ip0, ++ sizeof (ip6_header_t)); ++ } + else + /* Guess we are only writing on simple Ethernet header. */ + vnet_rewrite_one_header (adj0[0], ip0, diff --git a/vpplink/generated/vpp_clone_current.sh b/vpplink/generated/vpp_clone_current.sh index 41ca5f2f..d61d6a90 100755 --- a/vpplink/generated/vpp_clone_current.sh +++ b/vpplink/generated/vpp_clone_current.sh @@ -92,10 +92,14 @@ function git_clone_cd_and_reset () # --------------- Things to cherry pick --------------- -git_clone_cd_and_reset "$1" 2ae8f79b5087c8da7d30283693f22ca710a60347 # cnat: undo fib_entry_contribute_forwarding +# VPP 24.10 released on 30/Oct/2024 +git_clone_cd_and_reset "$1" cfa0953251cbab435307baf3dcd249fd95afaf1f # misc: VPP 24.10 Release Notes git_cherry_pick refs/changes/26/34726/3 # 34726: interface: add buffer stats api | https://gerrit.fd.io/r/c/vpp/+/34726 -git_cherry_pick refs/changes/44/40244/1 # 40244: udp: update rx sw_if_index to ip-local selected one | https://gerrit.fd.io/r/c/vpp/+/40244 + +# This is the commit which broke IPv6 from v3.28.0 onwards. +git_revert refs/changes/75/39675/5 # ip-neighbor: do not use sas to determine NS source address + # --------------- private plugins --------------- # Generated with 'git format-patch --zero-commit -o ./patches/ HEAD^^^' @@ -103,3 +107,4 @@ git_apply_private 0001-pbl-Port-based-balancer.patch git_apply_private 0002-cnat-WIP-no-k8s-maglev-from-pods.patch git_apply_private 0003-acl-acl-plugin-custom-policies.patch git_apply_private 0004-capo-Calico-Policies-plugin.patch +git_apply_private 0005-partial-revert-arthur-gso.patch