summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--api/attribute.pb.go451
-rw-r--r--api/attribute.proto8
-rw-r--r--cmd/gobgp/global.go89
-rw-r--r--internal/pkg/apiutil/attribute.go6
-rw-r--r--pkg/packet/bgp/bgp.go55
5 files changed, 394 insertions, 215 deletions
diff --git a/api/attribute.pb.go b/api/attribute.pb.go
index 712c3e57..f30a3d61 100644
--- a/api/attribute.pb.go
+++ b/api/attribute.pb.go
@@ -78,6 +78,7 @@ It has these top-level messages:
As4AggregatorAttribute
PmsiTunnelAttribute
TunnelEncapSubTLVEncapsulation
+ TunnelEncapSubTLVWireguard
TunnelEncapSubTLVProtocol
TunnelEncapSubTLVColor
TunnelEncapSubTLVSRPreference
@@ -2321,6 +2322,10 @@ type ExtendedCommunitiesAttribute struct {
// - TwoOctetAsSpecificExtended
// - IPv4AddressSpecificExtended
// - FourOctetAsSpecificExtended
+ // - ValidationExtended
+ // - ColorExtended
+ // - EncapExtended
+ // - DefaultGatewayExtended
// - OpaqueExtended
// - ESILabelExtended
// - MacMobilityExtended
@@ -2453,6 +2458,22 @@ func (m *TunnelEncapSubTLVEncapsulation) GetCookie() []byte {
return nil
}
+type TunnelEncapSubTLVWireguard struct {
+ Peer []byte `protobuf:"bytes,1,opt,name=peer,proto3" json:"peer,omitempty"`
+}
+
+func (m *TunnelEncapSubTLVWireguard) Reset() { *m = TunnelEncapSubTLVWireguard{} }
+func (m *TunnelEncapSubTLVWireguard) String() string { return proto.CompactTextString(m) }
+func (*TunnelEncapSubTLVWireguard) ProtoMessage() {}
+func (*TunnelEncapSubTLVWireguard) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
+
+func (m *TunnelEncapSubTLVWireguard) GetPeer() []byte {
+ if m != nil {
+ return m.Peer
+ }
+ return nil
+}
+
type TunnelEncapSubTLVProtocol struct {
Protocol uint32 `protobuf:"varint,1,opt,name=protocol" json:"protocol,omitempty"`
}
@@ -2460,7 +2481,7 @@ type TunnelEncapSubTLVProtocol struct {
func (m *TunnelEncapSubTLVProtocol) Reset() { *m = TunnelEncapSubTLVProtocol{} }
func (m *TunnelEncapSubTLVProtocol) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVProtocol) ProtoMessage() {}
-func (*TunnelEncapSubTLVProtocol) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
+func (*TunnelEncapSubTLVProtocol) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} }
func (m *TunnelEncapSubTLVProtocol) GetProtocol() uint32 {
if m != nil {
@@ -2476,7 +2497,7 @@ type TunnelEncapSubTLVColor struct {
func (m *TunnelEncapSubTLVColor) Reset() { *m = TunnelEncapSubTLVColor{} }
func (m *TunnelEncapSubTLVColor) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVColor) ProtoMessage() {}
-func (*TunnelEncapSubTLVColor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} }
+func (*TunnelEncapSubTLVColor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} }
func (m *TunnelEncapSubTLVColor) GetColor() uint32 {
if m != nil {
@@ -2493,7 +2514,7 @@ type TunnelEncapSubTLVSRPreference struct {
func (m *TunnelEncapSubTLVSRPreference) Reset() { *m = TunnelEncapSubTLVSRPreference{} }
func (m *TunnelEncapSubTLVSRPreference) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVSRPreference) ProtoMessage() {}
-func (*TunnelEncapSubTLVSRPreference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} }
+func (*TunnelEncapSubTLVSRPreference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} }
func (m *TunnelEncapSubTLVSRPreference) GetFlags() uint32 {
if m != nil {
@@ -2517,7 +2538,7 @@ func (m *TunnelEncapSubTLVSRCandidatePathName) Reset() { *m = TunnelEnca
func (m *TunnelEncapSubTLVSRCandidatePathName) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVSRCandidatePathName) ProtoMessage() {}
func (*TunnelEncapSubTLVSRCandidatePathName) Descriptor() ([]byte, []int) {
- return fileDescriptor0, []int{71}
+ return fileDescriptor0, []int{72}
}
func (m *TunnelEncapSubTLVSRCandidatePathName) GetCandidatePathName() string {
@@ -2534,7 +2555,7 @@ type TunnelEncapSubTLVSRPriority struct {
func (m *TunnelEncapSubTLVSRPriority) Reset() { *m = TunnelEncapSubTLVSRPriority{} }
func (m *TunnelEncapSubTLVSRPriority) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVSRPriority) ProtoMessage() {}
-func (*TunnelEncapSubTLVSRPriority) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} }
+func (*TunnelEncapSubTLVSRPriority) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} }
func (m *TunnelEncapSubTLVSRPriority) GetPriority() uint32 {
if m != nil {
@@ -2553,7 +2574,7 @@ type TunnelEncapSubTLVSRBindingSID struct {
func (m *TunnelEncapSubTLVSRBindingSID) Reset() { *m = TunnelEncapSubTLVSRBindingSID{} }
func (m *TunnelEncapSubTLVSRBindingSID) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVSRBindingSID) ProtoMessage() {}
-func (*TunnelEncapSubTLVSRBindingSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} }
+func (*TunnelEncapSubTLVSRBindingSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
func (m *TunnelEncapSubTLVSRBindingSID) GetBsid() *google_protobuf.Any {
if m != nil {
@@ -2571,7 +2592,7 @@ type SRBindingSID struct {
func (m *SRBindingSID) Reset() { *m = SRBindingSID{} }
func (m *SRBindingSID) String() string { return proto.CompactTextString(m) }
func (*SRBindingSID) ProtoMessage() {}
-func (*SRBindingSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
+func (*SRBindingSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
func (m *SRBindingSID) GetSFlag() bool {
if m != nil {
@@ -2605,7 +2626,7 @@ type SRv6EndPointBehavior struct {
func (m *SRv6EndPointBehavior) Reset() { *m = SRv6EndPointBehavior{} }
func (m *SRv6EndPointBehavior) String() string { return proto.CompactTextString(m) }
func (*SRv6EndPointBehavior) ProtoMessage() {}
-func (*SRv6EndPointBehavior) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
+func (*SRv6EndPointBehavior) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
func (m *SRv6EndPointBehavior) GetBehavior() SRv6Behavior {
if m != nil {
@@ -2653,7 +2674,7 @@ type SRv6BindingSID struct {
func (m *SRv6BindingSID) Reset() { *m = SRv6BindingSID{} }
func (m *SRv6BindingSID) String() string { return proto.CompactTextString(m) }
func (*SRv6BindingSID) ProtoMessage() {}
-func (*SRv6BindingSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
+func (*SRv6BindingSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
func (m *SRv6BindingSID) GetSFlag() bool {
if m != nil {
@@ -2698,7 +2719,7 @@ type TunnelEncapSubTLVSRENLP struct {
func (m *TunnelEncapSubTLVSRENLP) Reset() { *m = TunnelEncapSubTLVSRENLP{} }
func (m *TunnelEncapSubTLVSRENLP) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVSRENLP) ProtoMessage() {}
-func (*TunnelEncapSubTLVSRENLP) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
+func (*TunnelEncapSubTLVSRENLP) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
func (m *TunnelEncapSubTLVSRENLP) GetFlags() uint32 {
if m != nil {
@@ -2722,7 +2743,7 @@ type SRWeight struct {
func (m *SRWeight) Reset() { *m = SRWeight{} }
func (m *SRWeight) String() string { return proto.CompactTextString(m) }
func (*SRWeight) ProtoMessage() {}
-func (*SRWeight) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
+func (*SRWeight) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
func (m *SRWeight) GetFlags() uint32 {
if m != nil {
@@ -2748,7 +2769,7 @@ type SegmentFlags struct {
func (m *SegmentFlags) Reset() { *m = SegmentFlags{} }
func (m *SegmentFlags) String() string { return proto.CompactTextString(m) }
func (*SegmentFlags) ProtoMessage() {}
-func (*SegmentFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
+func (*SegmentFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
func (m *SegmentFlags) GetVFlag() bool {
if m != nil {
@@ -2786,7 +2807,7 @@ type SegmentTypeA struct {
func (m *SegmentTypeA) Reset() { *m = SegmentTypeA{} }
func (m *SegmentTypeA) String() string { return proto.CompactTextString(m) }
func (*SegmentTypeA) ProtoMessage() {}
-func (*SegmentTypeA) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
+func (*SegmentTypeA) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
func (m *SegmentTypeA) GetFlags() *SegmentFlags {
if m != nil {
@@ -2811,7 +2832,7 @@ type SegmentTypeB struct {
func (m *SegmentTypeB) Reset() { *m = SegmentTypeB{} }
func (m *SegmentTypeB) String() string { return proto.CompactTextString(m) }
func (*SegmentTypeB) ProtoMessage() {}
-func (*SegmentTypeB) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
+func (*SegmentTypeB) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} }
func (m *SegmentTypeB) GetFlags() *SegmentFlags {
if m != nil {
@@ -2846,7 +2867,7 @@ func (m *TunnelEncapSubTLVSRSegmentList) Reset() { *m = TunnelEncapSubTL
func (m *TunnelEncapSubTLVSRSegmentList) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVSRSegmentList) ProtoMessage() {}
func (*TunnelEncapSubTLVSRSegmentList) Descriptor() ([]byte, []int) {
- return fileDescriptor0, []int{82}
+ return fileDescriptor0, []int{83}
}
func (m *TunnelEncapSubTLVSRSegmentList) GetWeight() *SRWeight {
@@ -2871,7 +2892,7 @@ func (m *TunnelEncapSubTLVEgressEndpoint) Reset() { *m = TunnelEncapSubT
func (m *TunnelEncapSubTLVEgressEndpoint) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVEgressEndpoint) ProtoMessage() {}
func (*TunnelEncapSubTLVEgressEndpoint) Descriptor() ([]byte, []int) {
- return fileDescriptor0, []int{83}
+ return fileDescriptor0, []int{84}
}
func (m *TunnelEncapSubTLVEgressEndpoint) GetAddress() string {
@@ -2888,7 +2909,7 @@ type TunnelEncapSubTLVUDPDestPort struct {
func (m *TunnelEncapSubTLVUDPDestPort) Reset() { *m = TunnelEncapSubTLVUDPDestPort{} }
func (m *TunnelEncapSubTLVUDPDestPort) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVUDPDestPort) ProtoMessage() {}
-func (*TunnelEncapSubTLVUDPDestPort) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
+func (*TunnelEncapSubTLVUDPDestPort) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
func (m *TunnelEncapSubTLVUDPDestPort) GetPort() uint32 {
if m != nil {
@@ -2905,7 +2926,7 @@ type TunnelEncapSubTLVUnknown struct {
func (m *TunnelEncapSubTLVUnknown) Reset() { *m = TunnelEncapSubTLVUnknown{} }
func (m *TunnelEncapSubTLVUnknown) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapSubTLVUnknown) ProtoMessage() {}
-func (*TunnelEncapSubTLVUnknown) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
+func (*TunnelEncapSubTLVUnknown) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
func (m *TunnelEncapSubTLVUnknown) GetType() uint32 {
if m != nil {
@@ -2935,7 +2956,7 @@ type TunnelEncapTLV struct {
func (m *TunnelEncapTLV) Reset() { *m = TunnelEncapTLV{} }
func (m *TunnelEncapTLV) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapTLV) ProtoMessage() {}
-func (*TunnelEncapTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
+func (*TunnelEncapTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
func (m *TunnelEncapTLV) GetType() uint32 {
if m != nil {
@@ -2958,7 +2979,7 @@ type TunnelEncapAttribute struct {
func (m *TunnelEncapAttribute) Reset() { *m = TunnelEncapAttribute{} }
func (m *TunnelEncapAttribute) String() string { return proto.CompactTextString(m) }
func (*TunnelEncapAttribute) ProtoMessage() {}
-func (*TunnelEncapAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
+func (*TunnelEncapAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
func (m *TunnelEncapAttribute) GetTlvs() []*TunnelEncapTLV {
if m != nil {
@@ -2977,7 +2998,7 @@ type IPv6AddressSpecificExtended struct {
func (m *IPv6AddressSpecificExtended) Reset() { *m = IPv6AddressSpecificExtended{} }
func (m *IPv6AddressSpecificExtended) String() string { return proto.CompactTextString(m) }
func (*IPv6AddressSpecificExtended) ProtoMessage() {}
-func (*IPv6AddressSpecificExtended) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
+func (*IPv6AddressSpecificExtended) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} }
func (m *IPv6AddressSpecificExtended) GetIsTransitive() bool {
if m != nil {
@@ -3016,7 +3037,7 @@ func (m *RedirectIPv6AddressSpecificExtended) Reset() { *m = RedirectIPv
func (m *RedirectIPv6AddressSpecificExtended) String() string { return proto.CompactTextString(m) }
func (*RedirectIPv6AddressSpecificExtended) ProtoMessage() {}
func (*RedirectIPv6AddressSpecificExtended) Descriptor() ([]byte, []int) {
- return fileDescriptor0, []int{89}
+ return fileDescriptor0, []int{90}
}
func (m *RedirectIPv6AddressSpecificExtended) GetAddress() string {
@@ -3044,7 +3065,7 @@ func (m *IP6ExtendedCommunitiesAttribute) Reset() { *m = IP6ExtendedComm
func (m *IP6ExtendedCommunitiesAttribute) String() string { return proto.CompactTextString(m) }
func (*IP6ExtendedCommunitiesAttribute) ProtoMessage() {}
func (*IP6ExtendedCommunitiesAttribute) Descriptor() ([]byte, []int) {
- return fileDescriptor0, []int{90}
+ return fileDescriptor0, []int{91}
}
func (m *IP6ExtendedCommunitiesAttribute) GetCommunities() []*google_protobuf.Any {
@@ -3061,7 +3082,7 @@ type AigpTLVIGPMetric struct {
func (m *AigpTLVIGPMetric) Reset() { *m = AigpTLVIGPMetric{} }
func (m *AigpTLVIGPMetric) String() string { return proto.CompactTextString(m) }
func (*AigpTLVIGPMetric) ProtoMessage() {}
-func (*AigpTLVIGPMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} }
+func (*AigpTLVIGPMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} }
func (m *AigpTLVIGPMetric) GetMetric() uint64 {
if m != nil {
@@ -3078,7 +3099,7 @@ type AigpTLVUnknown struct {
func (m *AigpTLVUnknown) Reset() { *m = AigpTLVUnknown{} }
func (m *AigpTLVUnknown) String() string { return proto.CompactTextString(m) }
func (*AigpTLVUnknown) ProtoMessage() {}
-func (*AigpTLVUnknown) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} }
+func (*AigpTLVUnknown) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} }
func (m *AigpTLVUnknown) GetType() uint32 {
if m != nil {
@@ -3104,7 +3125,7 @@ type AigpAttribute struct {
func (m *AigpAttribute) Reset() { *m = AigpAttribute{} }
func (m *AigpAttribute) String() string { return proto.CompactTextString(m) }
func (*AigpAttribute) ProtoMessage() {}
-func (*AigpAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} }
+func (*AigpAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} }
func (m *AigpAttribute) GetTlvs() []*google_protobuf.Any {
if m != nil {
@@ -3122,7 +3143,7 @@ type LargeCommunity struct {
func (m *LargeCommunity) Reset() { *m = LargeCommunity{} }
func (m *LargeCommunity) String() string { return proto.CompactTextString(m) }
func (*LargeCommunity) ProtoMessage() {}
-func (*LargeCommunity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} }
+func (*LargeCommunity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} }
func (m *LargeCommunity) GetGlobalAdmin() uint32 {
if m != nil {
@@ -3152,7 +3173,7 @@ type LargeCommunitiesAttribute struct {
func (m *LargeCommunitiesAttribute) Reset() { *m = LargeCommunitiesAttribute{} }
func (m *LargeCommunitiesAttribute) String() string { return proto.CompactTextString(m) }
func (*LargeCommunitiesAttribute) ProtoMessage() {}
-func (*LargeCommunitiesAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} }
+func (*LargeCommunitiesAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} }
func (m *LargeCommunitiesAttribute) GetCommunities() []*LargeCommunity {
if m != nil {
@@ -3173,7 +3194,7 @@ type LsNodeFlags struct {
func (m *LsNodeFlags) Reset() { *m = LsNodeFlags{} }
func (m *LsNodeFlags) String() string { return proto.CompactTextString(m) }
func (*LsNodeFlags) ProtoMessage() {}
-func (*LsNodeFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} }
+func (*LsNodeFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} }
func (m *LsNodeFlags) GetOverload() bool {
if m != nil {
@@ -3227,7 +3248,7 @@ type LsIGPFlags struct {
func (m *LsIGPFlags) Reset() { *m = LsIGPFlags{} }
func (m *LsIGPFlags) String() string { return proto.CompactTextString(m) }
func (*LsIGPFlags) ProtoMessage() {}
-func (*LsIGPFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} }
+func (*LsIGPFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} }
func (m *LsIGPFlags) GetDown() bool {
if m != nil {
@@ -3265,7 +3286,7 @@ type LsSrRange struct {
func (m *LsSrRange) Reset() { *m = LsSrRange{} }
func (m *LsSrRange) String() string { return proto.CompactTextString(m) }
func (*LsSrRange) ProtoMessage() {}
-func (*LsSrRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} }
+func (*LsSrRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} }
func (m *LsSrRange) GetBegin() uint32 {
if m != nil {
@@ -3290,7 +3311,7 @@ type LsSrCapabilities struct {
func (m *LsSrCapabilities) Reset() { *m = LsSrCapabilities{} }
func (m *LsSrCapabilities) String() string { return proto.CompactTextString(m) }
func (*LsSrCapabilities) ProtoMessage() {}
-func (*LsSrCapabilities) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} }
+func (*LsSrCapabilities) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} }
func (m *LsSrCapabilities) GetIpv4Supported() bool {
if m != nil {
@@ -3320,7 +3341,7 @@ type LsSrLocalBlock struct {
func (m *LsSrLocalBlock) Reset() { *m = LsSrLocalBlock{} }
func (m *LsSrLocalBlock) String() string { return proto.CompactTextString(m) }
func (*LsSrLocalBlock) ProtoMessage() {}
-func (*LsSrLocalBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} }
+func (*LsSrLocalBlock) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} }
func (m *LsSrLocalBlock) GetRanges() []*LsSrRange {
if m != nil {
@@ -3344,7 +3365,7 @@ type LsAttributeNode struct {
func (m *LsAttributeNode) Reset() { *m = LsAttributeNode{} }
func (m *LsAttributeNode) String() string { return proto.CompactTextString(m) }
func (*LsAttributeNode) ProtoMessage() {}
-func (*LsAttributeNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} }
+func (*LsAttributeNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} }
func (m *LsAttributeNode) GetName() string {
if m != nil {
@@ -3429,7 +3450,7 @@ type LsAttributeLink struct {
func (m *LsAttributeLink) Reset() { *m = LsAttributeLink{} }
func (m *LsAttributeLink) String() string { return proto.CompactTextString(m) }
func (*LsAttributeLink) ProtoMessage() {}
-func (*LsAttributeLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} }
+func (*LsAttributeLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} }
func (m *LsAttributeLink) GetName() string {
if m != nil {
@@ -3538,7 +3559,7 @@ type LsAttributePrefix struct {
func (m *LsAttributePrefix) Reset() { *m = LsAttributePrefix{} }
func (m *LsAttributePrefix) String() string { return proto.CompactTextString(m) }
func (*LsAttributePrefix) ProtoMessage() {}
-func (*LsAttributePrefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} }
+func (*LsAttributePrefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} }
func (m *LsAttributePrefix) GetIgpFlags() *LsIGPFlags {
if m != nil {
@@ -3570,7 +3591,7 @@ type LsAttribute struct {
func (m *LsAttribute) Reset() { *m = LsAttribute{} }
func (m *LsAttribute) String() string { return proto.CompactTextString(m) }
func (*LsAttribute) ProtoMessage() {}
-func (*LsAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} }
+func (*LsAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} }
func (m *LsAttribute) GetNode() *LsAttributeNode {
if m != nil {
@@ -3602,7 +3623,7 @@ type UnknownAttribute struct {
func (m *UnknownAttribute) Reset() { *m = UnknownAttribute{} }
func (m *UnknownAttribute) String() string { return proto.CompactTextString(m) }
func (*UnknownAttribute) ProtoMessage() {}
-func (*UnknownAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} }
+func (*UnknownAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} }
func (m *UnknownAttribute) GetFlags() uint32 {
if m != nil {
@@ -3638,7 +3659,7 @@ type SRv6StructureSubSubTLV struct {
func (m *SRv6StructureSubSubTLV) Reset() { *m = SRv6StructureSubSubTLV{} }
func (m *SRv6StructureSubSubTLV) String() string { return proto.CompactTextString(m) }
func (*SRv6StructureSubSubTLV) ProtoMessage() {}
-func (*SRv6StructureSubSubTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} }
+func (*SRv6StructureSubSubTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} }
func (m *SRv6StructureSubSubTLV) GetLocalBlockLength() uint32 {
if m != nil {
@@ -3690,7 +3711,7 @@ type SRv6SIDFlags struct {
func (m *SRv6SIDFlags) Reset() { *m = SRv6SIDFlags{} }
func (m *SRv6SIDFlags) String() string { return proto.CompactTextString(m) }
func (*SRv6SIDFlags) ProtoMessage() {}
-func (*SRv6SIDFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} }
+func (*SRv6SIDFlags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{108} }
func (m *SRv6SIDFlags) GetFlag_1() bool {
if m != nil {
@@ -3706,7 +3727,7 @@ type SRv6TLV struct {
func (m *SRv6TLV) Reset() { *m = SRv6TLV{} }
func (m *SRv6TLV) String() string { return proto.CompactTextString(m) }
func (*SRv6TLV) ProtoMessage() {}
-func (*SRv6TLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{108} }
+func (*SRv6TLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{109} }
func (m *SRv6TLV) GetTlv() []*google_protobuf.Any {
if m != nil {
@@ -3728,7 +3749,7 @@ type SRv6InformationSubTLV struct {
func (m *SRv6InformationSubTLV) Reset() { *m = SRv6InformationSubTLV{} }
func (m *SRv6InformationSubTLV) String() string { return proto.CompactTextString(m) }
func (*SRv6InformationSubTLV) ProtoMessage() {}
-func (*SRv6InformationSubTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{109} }
+func (*SRv6InformationSubTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{110} }
func (m *SRv6InformationSubTLV) GetSid() []byte {
if m != nil {
@@ -3768,7 +3789,7 @@ type SRv6L3ServiceTLV struct {
func (m *SRv6L3ServiceTLV) Reset() { *m = SRv6L3ServiceTLV{} }
func (m *SRv6L3ServiceTLV) String() string { return proto.CompactTextString(m) }
func (*SRv6L3ServiceTLV) ProtoMessage() {}
-func (*SRv6L3ServiceTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{110} }
+func (*SRv6L3ServiceTLV) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{111} }
func (m *SRv6L3ServiceTLV) GetSubTlvs() map[uint32]*SRv6TLV {
if m != nil {
@@ -3790,7 +3811,7 @@ type PrefixSID struct {
func (m *PrefixSID) Reset() { *m = PrefixSID{} }
func (m *PrefixSID) String() string { return proto.CompactTextString(m) }
func (*PrefixSID) ProtoMessage() {}
-func (*PrefixSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{111} }
+func (*PrefixSID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{112} }
func (m *PrefixSID) GetTlvs() []*google_protobuf.Any {
if m != nil {
@@ -3868,6 +3889,7 @@ func init() {
proto.RegisterType((*As4AggregatorAttribute)(nil), "gobgpapi.As4AggregatorAttribute")
proto.RegisterType((*PmsiTunnelAttribute)(nil), "gobgpapi.PmsiTunnelAttribute")
proto.RegisterType((*TunnelEncapSubTLVEncapsulation)(nil), "gobgpapi.TunnelEncapSubTLVEncapsulation")
+ proto.RegisterType((*TunnelEncapSubTLVWireguard)(nil), "gobgpapi.TunnelEncapSubTLVWireguard")
proto.RegisterType((*TunnelEncapSubTLVProtocol)(nil), "gobgpapi.TunnelEncapSubTLVProtocol")
proto.RegisterType((*TunnelEncapSubTLVColor)(nil), "gobgpapi.TunnelEncapSubTLVColor")
proto.RegisterType((*TunnelEncapSubTLVSRPreference)(nil), "gobgpapi.TunnelEncapSubTLVSRPreference")
@@ -3921,23 +3943,23 @@ func init() {
func init() { proto.RegisterFile("attribute.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
- // 4262 bytes of a gzipped FileDescriptorProto
+ // 4284 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3a, 0x4d, 0x6f, 0x1b, 0x49,
- 0x76, 0xc3, 0x0f, 0x49, 0xd4, 0xe3, 0x87, 0x5a, 0xad, 0x8f, 0x91, 0xe4, 0xcf, 0xed, 0x19, 0xdb,
- 0x8a, 0xec, 0xd1, 0xac, 0x65, 0x0d, 0x77, 0x3c, 0x83, 0x4d, 0x40, 0x8b, 0xb4, 0x87, 0x19, 0x8a,
+ 0x76, 0xcb, 0x0f, 0x49, 0xd4, 0xe3, 0x87, 0x5a, 0xad, 0x8f, 0x91, 0xe4, 0xcf, 0xed, 0x19, 0xdb,
+ 0x8a, 0xec, 0xd1, 0x8c, 0x65, 0x0d, 0x77, 0x3c, 0x83, 0x4d, 0x40, 0x8b, 0xb4, 0x87, 0x19, 0x8a,
0xe2, 0x34, 0x29, 0x79, 0x72, 0xd9, 0x4e, 0xb3, 0xbb, 0xd4, 0xaa, 0x55, 0xb3, 0xbb, 0xb7, 0xab,
0x49, 0x5b, 0x97, 0x0d, 0x90, 0x43, 0x80, 0x45, 0xb0, 0x41, 0x4e, 0xc1, 0x02, 0x7b, 0xc9, 0x25,
0x01, 0x12, 0x04, 0x39, 0xee, 0x25, 0x3f, 0x20, 0xc8, 0x39, 0xbf, 0x25, 0xf7, 0xa0, 0xbe, 0xfa,
0x83, 0xa2, 0x64, 0x7b, 0x3c, 0x03, 0xf8, 0xd6, 0xef, 0xd5, 0xab, 0x57, 0xaf, 0x5e, 0xbd, 0x7a,
0x5f, 0xd5, 0xb0, 0x64, 0x46, 0x51, 0x88, 0x87, 0xe3, 0x08, 0xed, 0x06, 0xa1, 0x1f, 0xf9, 0x6a,
- 0xc9, 0xf1, 0x87, 0x4e, 0x60, 0x06, 0x78, 0x6b, 0xd3, 0xf1, 0x7d, 0xc7, 0x45, 0x9f, 0x33, 0xfc,
- 0x70, 0x7c, 0xfa, 0xb9, 0xe9, 0x5d, 0x70, 0xa2, 0xad, 0x32, 0x23, 0xe2, 0x80, 0xf6, 0x67, 0xb0,
+ 0xc9, 0xf1, 0x87, 0x4e, 0x60, 0x06, 0x78, 0x6b, 0xd3, 0xf1, 0x7d, 0xc7, 0x45, 0x9f, 0x31, 0xfc,
+ 0x70, 0x7c, 0xfa, 0x99, 0xe9, 0x5d, 0x70, 0xa2, 0xad, 0x32, 0x23, 0xe2, 0x80, 0xf6, 0x67, 0xb0,
0x74, 0x14, 0x62, 0x07, 0x7b, 0x0d, 0xc9, 0x4a, 0x5d, 0x87, 0x79, 0x9f, 0xa1, 0x36, 0x72, 0x77,
0x73, 0xdb, 0x55, 0x5d, 0x40, 0xda, 0x53, 0x58, 0x6c, 0x90, 0x3e, 0x72, 0x46, 0xc8, 0x8b, 0x54,
0x15, 0x8a, 0xd1, 0x45, 0x80, 0x04, 0x09, 0xfb, 0x56, 0x37, 0x60, 0xc1, 0x1b, 0x8f, 0x86, 0x28,
0x24, 0x1b, 0xf9, 0xbb, 0x85, 0xed, 0xaa, 0x2e, 0x41, 0xed, 0x19, 0x2c, 0x35, 0x48, 0xcf, 0x8c,
- 0xce, 0x92, 0x55, 0x3e, 0x87, 0x12, 0xe1, 0xbc, 0xc8, 0x46, 0xee, 0x6e, 0x61, 0xbb, 0xbc, 0xb7,
- 0xb2, 0x2b, 0xa5, 0xdf, 0x8d, 0xd7, 0xd1, 0x63, 0x22, 0xed, 0x33, 0x50, 0xba, 0xe8, 0x75, 0xf4,
+ 0xce, 0x92, 0x55, 0x3e, 0x83, 0x12, 0xe1, 0xbc, 0xc8, 0x46, 0xee, 0x6e, 0x61, 0xbb, 0xbc, 0xb7,
+ 0xb2, 0x2b, 0xa5, 0xdf, 0x8d, 0xd7, 0xd1, 0x63, 0x22, 0xed, 0x53, 0x50, 0xba, 0xe8, 0x75, 0xf4,
0x8d, 0x1f, 0x24, 0x4c, 0x36, 0xa1, 0xe4, 0xa1, 0xd7, 0x91, 0x71, 0xe6, 0x07, 0x4c, 0x92, 0x45,
0x7d, 0xc1, 0xe3, 0x34, 0xda, 0x0e, 0xac, 0x1f, 0x8e, 0xdd, 0x08, 0xb7, 0x5e, 0xe3, 0xa8, 0x89,
0x89, 0x95, 0x4c, 0x52, 0xa0, 0x30, 0x42, 0xb6, 0x90, 0x9c, 0x7e, 0x6a, 0x4f, 0x40, 0xed, 0xf8,
@@ -3952,7 +3974,7 @@ var fileDescriptor0 = []byte{
0x7d, 0x03, 0x4b, 0xed, 0x5e, 0x83, 0x4b, 0x46, 0xb7, 0x8e, 0x5f, 0x53, 0xdd, 0x04, 0xec, 0xcb,
0x70, 0x91, 0xb4, 0x93, 0x45, 0x8e, 0xe9, 0x20, 0x8f, 0x9a, 0x10, 0x07, 0xd8, 0x66, 0x17, 0x75,
0x01, 0x69, 0x0e, 0xac, 0x77, 0xcc, 0x21, 0x72, 0x91, 0x3d, 0xcd, 0x70, 0x1d, 0xe6, 0x5d, 0x3a,
- 0x22, 0xf7, 0x24, 0xa0, 0xa9, 0x85, 0xf2, 0x57, 0x2f, 0x54, 0xc8, 0x2c, 0xf4, 0x19, 0x2c, 0xb7,
+ 0x22, 0xf7, 0x24, 0xa0, 0xa9, 0x85, 0xf2, 0x57, 0x2f, 0x54, 0xc8, 0x2c, 0xf4, 0x29, 0x2c, 0xb7,
0x3c, 0xcb, 0x0c, 0xc8, 0xd8, 0x35, 0x23, 0xec, 0x7b, 0xdd, 0x8e, 0xde, 0x4e, 0xab, 0x3b, 0x97,
0x55, 0x77, 0x0f, 0x6e, 0xea, 0xfe, 0x38, 0x42, 0x4d, 0x4c, 0x22, 0xec, 0x39, 0x63, 0x4c, 0xce,
0x50, 0x38, 0x78, 0xe5, 0x1f, 0x59, 0x11, 0x8a, 0x1a, 0x7d, 0x75, 0x15, 0xe6, 0x4c, 0x7b, 0x14,
@@ -3961,10 +3983,10 @@ var fileDescriptor0 = []byte{
0x99, 0xe1, 0x73, 0x7f, 0x1c, 0xfe, 0x70, 0x19, 0x5b, 0xb0, 0xd9, 0x8a, 0xce, 0x50, 0xe8, 0xa1,
0x48, 0x5c, 0xb7, 0xb6, 0x8d, 0xbc, 0x08, 0x9f, 0x62, 0x14, 0xce, 0xbc, 0xe0, 0xab, 0x30, 0x37,
0x31, 0xdd, 0x31, 0x62, 0x9c, 0x2a, 0x3a, 0x07, 0xb4, 0x3f, 0xe5, 0xe0, 0x76, 0xeb, 0xa4, 0xd7,
- 0x95, 0xbc, 0x1a, 0xe3, 0xc8, 0xa7, 0x37, 0xce, 0x9f, 0xa0, 0xf0, 0x82, 0xc9, 0xac, 0x7e, 0x0a,
+ 0x95, 0xbc, 0x1a, 0xe3, 0xc8, 0xa7, 0x37, 0xce, 0x9f, 0xa0, 0xf0, 0x82, 0xc9, 0xac, 0x7e, 0x02,
0xf9, 0x90, 0xdb, 0x5e, 0x79, 0x6f, 0x75, 0x97, 0xbb, 0xa6, 0x5d, 0xe9, 0x9a, 0x76, 0x1b, 0xde,
- 0x85, 0x9e, 0x0f, 0x6d, 0xf5, 0x0b, 0x28, 0x20, 0x82, 0x19, 0xf3, 0xf2, 0xde, 0x27, 0x89, 0x37,
- 0xb8, 0x52, 0x48, 0x9d, 0xd2, 0xab, 0x3f, 0x83, 0x0a, 0x12, 0x14, 0x46, 0x64, 0x3a, 0xcc, 0x12,
+ 0x85, 0x9e, 0x0f, 0x6d, 0xf5, 0x0b, 0x28, 0x20, 0x82, 0x19, 0xf3, 0xf2, 0xde, 0xc7, 0x89, 0x37,
+ 0xb8, 0x52, 0x48, 0x9d, 0xd2, 0xab, 0x3f, 0x87, 0x0a, 0x12, 0x14, 0x46, 0x64, 0x3a, 0xcc, 0x12,
0xaa, 0x7a, 0x59, 0xe2, 0x06, 0xa6, 0x43, 0x05, 0x67, 0xf6, 0xb4, 0x51, 0xe4, 0xba, 0x61, 0x80,
0xf6, 0x7f, 0x39, 0xb8, 0x41, 0x05, 0x3f, 0x6c, 0x1c, 0xd0, 0x93, 0x99, 0xa0, 0x30, 0xc2, 0x04,
0x31, 0xb7, 0xf3, 0x41, 0x48, 0x7d, 0x07, 0xca, 0x23, 0xd3, 0x32, 0xa4, 0xcd, 0x16, 0x99, 0xa9,
@@ -3978,7 +4000,7 @@ var fileDescriptor0 = []byte{
0xb7, 0x00, 0x9c, 0x57, 0xf1, 0xae, 0xe7, 0xf9, 0xae, 0x9d, 0x57, 0x29, 0xf7, 0xc4, 0xef, 0xcb,
0x42, 0xfa, 0xbe, 0xfc, 0x0d, 0xd4, 0xb8, 0x2a, 0x0e, 0xfb, 0xed, 0x1f, 0xd9, 0x3c, 0x28, 0xa3,
0x88, 0xed, 0xf4, 0x6a, 0x46, 0x91, 0xf6, 0x5b, 0xa8, 0xf4, 0xf5, 0x9e, 0xef, 0x62, 0xeb, 0x82,
- 0x39, 0x74, 0x6a, 0xe0, 0xc8, 0x73, 0xa2, 0x33, 0x99, 0xa9, 0x70, 0x48, 0xfd, 0x14, 0xaa, 0x76,
+ 0x39, 0x74, 0x6a, 0xe0, 0xc8, 0x73, 0xa2, 0x33, 0x99, 0xa9, 0x70, 0x48, 0xfd, 0x04, 0xaa, 0x76,
0xda, 0x4d, 0x8a, 0x15, 0xb3, 0x48, 0xba, 0x49, 0xcb, 0x77, 0xfd, 0x50, 0x28, 0x98, 0x03, 0xd4,
0x61, 0x22, 0xcf, 0x0e, 0x7c, 0xec, 0x45, 0x4c, 0xb3, 0x15, 0x3d, 0x86, 0xe9, 0xc5, 0xd9, 0x14,
0xf1, 0x8b, 0xe9, 0xe1, 0xed, 0x42, 0x18, 0x57, 0x52, 0xfe, 0x0d, 0x4a, 0xca, 0x06, 0xba, 0xc2,
@@ -4001,7 +4023,7 @@ var fileDescriptor0 = []byte{
0x6c, 0xfb, 0x9e, 0x6f, 0x23, 0x66, 0x33, 0x25, 0x3d, 0x85, 0x61, 0xee, 0xce, 0x09, 0x8c, 0x90,
0xde, 0x82, 0x90, 0xb2, 0xe0, 0x71, 0xb0, 0x8c, 0x9d, 0x80, 0xdd, 0x8c, 0xb0, 0x6d, 0x6b, 0x7f,
0xc8, 0x53, 0x41, 0x3b, 0xd8, 0x3b, 0x4f, 0x09, 0xaa, 0x41, 0xd5, 0xc5, 0xde, 0xb9, 0xc1, 0x93,
- 0x7c, 0x2c, 0x2b, 0x82, 0x32, 0x45, 0xb2, 0x72, 0xa0, 0x6d, 0xab, 0x9f, 0x42, 0x8d, 0xd1, 0x84,
+ 0x7c, 0x2c, 0x2b, 0x82, 0x32, 0x45, 0xb2, 0x72, 0xa0, 0x6d, 0xab, 0x9f, 0x40, 0x8d, 0xd1, 0x84,
0x68, 0xe4, 0x47, 0x28, 0x91, 0xbf, 0x42, 0xb1, 0x3a, 0x43, 0xb6, 0x6d, 0x75, 0x17, 0x56, 0xb0,
0x17, 0xa1, 0xf0, 0xd4, 0xb4, 0x10, 0x73, 0xaa, 0x06, 0x0e, 0x26, 0xfb, 0xc2, 0xee, 0x97, 0xe3,
0x21, 0xea, 0x2e, 0xda, 0xc1, 0x64, 0x5f, 0x7d, 0x04, 0xaa, 0x87, 0xb0, 0x73, 0x36, 0xf4, 0xc3,
@@ -4025,7 +4047,7 @@ var fileDescriptor0 = []byte{
0x61, 0x78, 0x5d, 0x8c, 0xd3, 0x8c, 0x50, 0x76, 0x42, 0xb8, 0xc3, 0x5f, 0xd4, 0x4b, 0xa2, 0x15,
0x42, 0x68, 0x24, 0xa0, 0x1b, 0xa3, 0xe9, 0xed, 0x35, 0x91, 0x80, 0x91, 0x68, 0x1e, 0xac, 0x1f,
0x06, 0xc7, 0x5e, 0xf8, 0x3e, 0xc2, 0xbc, 0xcb, 0x7a, 0xbf, 0xcf, 0xc1, 0x56, 0x5c, 0x69, 0x13,
- 0x1a, 0xe2, 0xf0, 0x29, 0xb6, 0x5a, 0xaf, 0x23, 0xe4, 0xd9, 0xc8, 0x56, 0x3f, 0x81, 0x2a, 0x26,
+ 0x1a, 0xe2, 0xf0, 0x29, 0xb6, 0x5a, 0xaf, 0x23, 0xe4, 0xd9, 0xc8, 0x56, 0x3f, 0x86, 0x2a, 0x26,
0x46, 0x14, 0x9a, 0x1e, 0xc1, 0x11, 0x9e, 0xf0, 0x83, 0x2e, 0xe9, 0x15, 0x4c, 0x06, 0x31, 0x4e,
0xdd, 0x84, 0x12, 0x19, 0x0f, 0x13, 0xef, 0x53, 0xd5, 0x17, 0xc8, 0x78, 0x48, 0xcf, 0x5e, 0xa4,
0x40, 0x85, 0x38, 0x05, 0xba, 0x03, 0x65, 0x6e, 0xc6, 0xbc, 0x56, 0xe6, 0x29, 0x08, 0xb7, 0xec,
@@ -4033,160 +4055,161 @@ var fileDescriptor0 = []byte{
0x2b, 0x7b, 0x3e, 0x6f, 0x16, 0xed, 0x1f, 0x72, 0x70, 0x23, 0xa9, 0xf8, 0x3f, 0x00, 0x5d, 0xed,
0x80, 0x7a, 0x62, 0xba, 0xd8, 0x66, 0x2d, 0x96, 0x58, 0x8c, 0x55, 0x98, 0x23, 0x91, 0x19, 0xc9,
0xc4, 0x89, 0x03, 0xda, 0x3d, 0xa8, 0x1e, 0xd0, 0x04, 0x3b, 0x4d, 0xc6, 0xd3, 0xef, 0x5c, 0x2a,
- 0xfd, 0xd6, 0x7e, 0x0e, 0x55, 0xd6, 0xb8, 0x89, 0xc9, 0xee, 0x40, 0x39, 0x1a, 0x7b, 0x1e, 0x72,
- 0x8d, 0x54, 0x32, 0x06, 0x1c, 0xc5, 0x22, 0xcb, 0x06, 0xac, 0x37, 0xd1, 0xa9, 0x39, 0x76, 0xa3,
- 0x17, 0x66, 0x84, 0x5e, 0x99, 0x17, 0x72, 0xaa, 0xf6, 0x2d, 0xd4, 0x78, 0x52, 0xf3, 0x6e, 0x1a,
- 0x8a, 0x73, 0x9d, 0x42, 0x3a, 0xd7, 0xd1, 0x41, 0x69, 0xf5, 0xdb, 0x2c, 0xfb, 0x8f, 0xd9, 0x6d,
- 0x83, 0x82, 0x89, 0x41, 0xb0, 0xe7, 0xb8, 0xc8, 0x30, 0xad, 0x14, 0xc7, 0x1a, 0x26, 0x7d, 0x86,
- 0x6e, 0x58, 0x92, 0x27, 0x2f, 0xa8, 0xf2, 0xe9, 0x82, 0x6a, 0x0f, 0x56, 0x5a, 0xfd, 0xf6, 0x28,
- 0xf0, 0xc3, 0x28, 0x95, 0xc4, 0xd3, 0xbb, 0x8c, 0x88, 0x81, 0x19, 0x5e, 0x34, 0x88, 0x4a, 0x88,
- 0x70, 0x3a, 0xed, 0x18, 0x56, 0x0e, 0x4d, 0xeb, 0xd0, 0xe7, 0xf1, 0x37, 0x16, 0x85, 0x56, 0x84,
- 0xc4, 0x20, 0x11, 0xb6, 0xce, 0x2f, 0x84, 0x0c, 0x25, 0x4c, 0xfa, 0x0c, 0xa6, 0x05, 0x18, 0x41,
- 0xbf, 0x19, 0x23, 0xcf, 0x42, 0x86, 0x37, 0x1e, 0xc9, 0x02, 0x4c, 0xe2, 0xba, 0xe3, 0x91, 0x76,
- 0x0f, 0x96, 0x79, 0xb6, 0x74, 0x68, 0x26, 0x06, 0xa5, 0x40, 0x61, 0x64, 0x5a, 0x42, 0x04, 0xfa,
- 0xa9, 0x3d, 0x85, 0x95, 0x41, 0x68, 0x9e, 0x9e, 0x62, 0x4b, 0x37, 0xa3, 0x44, 0xaf, 0xd3, 0x85,
- 0x86, 0x0a, 0xc5, 0x90, 0x5a, 0x00, 0x5d, 0x28, 0xaf, 0xb3, 0x6f, 0xed, 0x5b, 0x58, 0x13, 0x53,
- 0xa9, 0x4e, 0x52, 0xf6, 0xb2, 0x05, 0xa5, 0x08, 0x85, 0x23, 0xec, 0x99, 0xae, 0x94, 0x5c, 0xc2,
- 0xd4, 0x15, 0x13, 0x73, 0x14, 0xb8, 0x9c, 0x55, 0x49, 0x17, 0x90, 0x76, 0x0c, 0x9a, 0x8e, 0x6c,
- 0x1c, 0x22, 0x2b, 0xba, 0xc6, 0x79, 0x4c, 0x8b, 0x35, 0x65, 0xd0, 0xf9, 0x4b, 0x06, 0xfd, 0xd7,
- 0xf0, 0x89, 0x64, 0x7b, 0x9d, 0x0f, 0xb8, 0xb2, 0x91, 0xf8, 0xe6, 0x15, 0x4e, 0x92, 0x15, 0xae,
- 0xbb, 0xca, 0xef, 0x2c, 0xf9, 0xc3, 0x58, 0xbb, 0x3a, 0x1a, 0x99, 0xe1, 0x79, 0xcc, 0x49, 0x85,
- 0xa2, 0x4d, 0x2c, 0x59, 0x02, 0xb1, 0x6f, 0xed, 0x6b, 0x58, 0x3a, 0xf6, 0xce, 0x3d, 0xff, 0x95,
- 0x97, 0x26, 0x7b, 0xcb, 0x76, 0xdf, 0x09, 0xdc, 0x94, 0xb3, 0x66, 0xb6, 0xa8, 0xeb, 0x97, 0x5b,
- 0xd4, 0x57, 0x85, 0x80, 0x4c, 0xe3, 0xfa, 0x00, 0x94, 0x06, 0xd9, 0x7f, 0xcf, 0x47, 0x82, 0x67,
- 0xb0, 0xde, 0x20, 0xfb, 0xef, 0xd7, 0x7b, 0x47, 0xb0, 0xd2, 0x1b, 0x11, 0x3c, 0x60, 0x2e, 0x26,
- 0x61, 0xb0, 0x0a, 0x73, 0xa7, 0xae, 0xe9, 0xc8, 0x53, 0xe1, 0x40, 0xac, 0xb7, 0x7c, 0x56, 0x6f,
- 0xfc, 0xb2, 0x17, 0x52, 0x97, 0x5d, 0xf4, 0xdf, 0x79, 0x4b, 0x21, 0x8f, 0x6d, 0xed, 0x2f, 0xe1,
- 0x36, 0x5f, 0x82, 0xf9, 0xbb, 0xfe, 0x78, 0x38, 0xe8, 0x9c, 0x64, 0x7a, 0xd6, 0xe9, 0x32, 0xac,
- 0xca, 0xcb, 0xb0, 0x75, 0x98, 0xb7, 0x7c, 0xff, 0x1c, 0xcb, 0x23, 0x11, 0x90, 0xf6, 0x0b, 0xd8,
- 0xbc, 0xc4, 0x4b, 0xe6, 0x22, 0xf4, 0x7e, 0xc9, 0x5c, 0x44, 0xf0, 0x8a, 0x61, 0x6d, 0x17, 0xd6,
- 0x2f, 0x4d, 0x64, 0x6e, 0xfa, 0x0a, 0xf7, 0x7c, 0x0c, 0xb7, 0x2e, 0xd1, 0xf7, 0x75, 0x9a, 0x8b,
- 0xa1, 0x90, 0xba, 0x92, 0x2b, 0xb4, 0x74, 0x9b, 0xb7, 0x0a, 0x38, 0x8d, 0xb4, 0xde, 0x04, 0xa3,
- 0x9d, 0xc0, 0xa7, 0x33, 0xd8, 0x1e, 0x98, 0x9e, 0x4d, 0x83, 0x0b, 0xa2, 0x46, 0xd1, 0x35, 0x47,
- 0x88, 0x96, 0x42, 0x96, 0x44, 0x1a, 0x81, 0x19, 0x9d, 0x19, 0x9e, 0x39, 0x42, 0xe2, 0x12, 0x2e,
- 0x5b, 0xd3, 0xf4, 0xda, 0x53, 0xb8, 0x31, 0x53, 0x5c, 0xec, 0x87, 0xb4, 0x78, 0x61, 0x9a, 0xe1,
- 0xdf, 0x89, 0x66, 0x38, 0xac, 0xb5, 0x67, 0xee, 0xf4, 0x19, 0xf6, 0x6c, 0xec, 0x39, 0xfd, 0x76,
- 0x93, 0xe6, 0x93, 0x43, 0x82, 0xaf, 0x2f, 0xc3, 0x19, 0x85, 0xd6, 0x85, 0x4a, 0x66, 0xe6, 0x1a,
- 0xcc, 0x13, 0x83, 0x2a, 0x46, 0xb8, 0xbb, 0x39, 0xf2, 0xdc, 0x35, 0x1d, 0x8a, 0xc6, 0x1c, 0xcd,
- 0x7d, 0xdd, 0x1c, 0x66, 0x68, 0x05, 0x0a, 0x44, 0x14, 0xc6, 0x15, 0x9d, 0x7e, 0x6a, 0x7f, 0xca,
- 0xc1, 0x6a, 0x5f, 0x9f, 0xd4, 0x5b, 0x9e, 0xdd, 0xf3, 0xb1, 0x17, 0x3d, 0x43, 0x67, 0xe6, 0x04,
- 0xfb, 0xa1, 0xba, 0x07, 0xa5, 0xa1, 0xf8, 0x16, 0x09, 0x71, 0x2a, 0x3b, 0xa5, 0x33, 0x24, 0xa5,
- 0x1e, 0xd3, 0xd1, 0xc0, 0x31, 0x74, 0x7d, 0xeb, 0x3c, 0xd5, 0xc4, 0x29, 0x31, 0x44, 0x07, 0x79,
- 0xec, 0x7d, 0xcd, 0xb7, 0x51, 0xaa, 0x25, 0xb5, 0x40, 0x61, 0x31, 0x74, 0x3a, 0xf6, 0x2c, 0x36,
- 0xc4, 0x33, 0x83, 0x05, 0x0a, 0xd3, 0xa1, 0x8f, 0x61, 0xc1, 0x0c, 0x9d, 0x54, 0xeb, 0x71, 0xde,
- 0x0c, 0x9d, 0x0e, 0xf2, 0xb4, 0xff, 0xce, 0x41, 0x8d, 0x89, 0xf1, 0x43, 0x75, 0xb1, 0x06, 0xf3,
- 0x43, 0x8e, 0x2e, 0x70, 0xf4, 0x30, 0xad, 0xa2, 0x62, 0xac, 0x22, 0xf5, 0x57, 0x70, 0x43, 0x76,
- 0xed, 0x0c, 0xb9, 0x55, 0x83, 0x44, 0xe1, 0xd8, 0x8a, 0xc6, 0x21, 0x62, 0x62, 0x95, 0xf7, 0x6e,
- 0x67, 0x95, 0x33, 0xad, 0x4e, 0x7d, 0x53, 0xb2, 0x90, 0x98, 0xbe, 0x64, 0xa0, 0xbd, 0x84, 0x8f,
- 0x67, 0x58, 0x47, 0xab, 0xdb, 0xe9, 0x5d, 0x71, 0x03, 0xee, 0x43, 0x11, 0x79, 0x6e, 0xc0, 0xb6,
- 0x53, 0xdb, 0x53, 0x53, 0xcd, 0xe0, 0x6e, 0xa7, 0xc7, 0xab, 0x14, 0x3a, 0xae, 0x7d, 0x09, 0xa5,
- 0xbe, 0xfe, 0x92, 0x16, 0xe9, 0xd1, 0x15, 0x9c, 0xd6, 0x61, 0xfe, 0x15, 0x1b, 0x17, 0xa7, 0x25,
- 0x20, 0xed, 0xd7, 0x50, 0x11, 0xfe, 0xf0, 0x39, 0xa3, 0x5b, 0x83, 0xf9, 0x49, 0x46, 0xb3, 0x13,
- 0xa9, 0x42, 0x33, 0xa3, 0x59, 0x53, 0xa2, 0x49, 0x46, 0xb3, 0x64, 0x4a, 0xe1, 0xc5, 0x94, 0xc2,
- 0x35, 0x3d, 0x5e, 0x8b, 0x8a, 0xde, 0x50, 0x1f, 0xa5, 0x25, 0x2d, 0x67, 0xac, 0x2e, 0x25, 0x92,
- 0xdc, 0xc1, 0xec, 0x64, 0xe8, 0x3f, 0x73, 0x19, 0xa6, 0xcf, 0xde, 0x91, 0xa9, 0xb0, 0x81, 0xfc,
- 0x5b, 0xdb, 0x40, 0xe1, 0x7d, 0x6d, 0xe0, 0xb7, 0x33, 0x1c, 0x78, 0x5f, 0x17, 0xb2, 0x75, 0x30,
- 0x89, 0xd4, 0x9d, 0xf8, 0xa8, 0xf8, 0x16, 0xd4, 0xf4, 0x62, 0xfc, 0x90, 0xe5, 0xf1, 0xa9, 0x3f,
- 0x4f, 0x85, 0xba, 0xeb, 0x1a, 0x76, 0x49, 0xac, 0xfb, 0x1a, 0xee, 0x5c, 0x0e, 0x20, 0x0e, 0x0d,
- 0x61, 0x2d, 0x21, 0xf3, 0x35, 0x2f, 0x9e, 0x7b, 0x70, 0xf3, 0xd2, 0xe4, 0xe3, 0x66, 0xaf, 0x89,
- 0x48, 0xd4, 0xf3, 0x43, 0xd6, 0xfc, 0x8c, 0xd3, 0xcf, 0xaa, 0xce, 0xbe, 0xb5, 0x26, 0x6c, 0x5c,
- 0x9e, 0xc3, 0xf3, 0x88, 0x77, 0xc8, 0x1f, 0xba, 0x50, 0x4b, 0x71, 0x19, 0x74, 0x4e, 0x66, 0xce,
- 0xa5, 0x75, 0xbd, 0x3b, 0xb9, 0x5e, 0x15, 0x8c, 0x42, 0x6b, 0xc2, 0x6a, 0x8a, 0x5f, 0x12, 0xaf,
- 0x1f, 0x09, 0x0e, 0x3c, 0x6f, 0xd8, 0x48, 0x54, 0x9f, 0x5d, 0x5d, 0x70, 0x11, 0x65, 0x5f, 0xfd,
- 0x03, 0x2c, 0xfb, 0xb2, 0x49, 0x69, 0xfd, 0x27, 0x48, 0x4a, 0xff, 0x0a, 0xee, 0xb4, 0x7b, 0xf5,
- 0x9f, 0x24, 0xab, 0xdb, 0x01, 0xa5, 0x81, 0x1d, 0xaa, 0xe8, 0xf6, 0x8b, 0xde, 0x21, 0x8a, 0x42,
- 0x6c, 0x51, 0x0f, 0x36, 0x62, 0x5f, 0x4c, 0xd0, 0xa2, 0x2e, 0x20, 0xed, 0x2b, 0xa8, 0x09, 0xda,
- 0x77, 0xb7, 0xaa, 0xa7, 0x50, 0xa5, 0x73, 0xd3, 0xdd, 0x8a, 0xf4, 0xf1, 0x5f, 0x67, 0x40, 0x63,
- 0xa8, 0x75, 0x68, 0xe1, 0x25, 0xf7, 0xcd, 0xea, 0x25, 0xc7, 0xf5, 0x87, 0xb1, 0xc6, 0x44, 0x63,
- 0x98, 0xe3, 0x98, 0xca, 0x12, 0x9d, 0xda, 0x66, 0x64, 0x3e, 0xce, 0xe8, 0xb4, 0x49, 0x31, 0x59,
- 0x82, 0x3d, 0xd9, 0xd7, 0x8e, 0x09, 0xf6, 0xb4, 0x97, 0xb0, 0x99, 0x59, 0x36, 0xa3, 0xee, 0xaf,
- 0x66, 0xa9, 0x3b, 0x65, 0xc3, 0x59, 0x81, 0xb3, 0x2a, 0xff, 0x63, 0x0e, 0xca, 0xbc, 0x1d, 0xc7,
- 0x03, 0xc1, 0x16, 0x94, 0xfc, 0x09, 0x0a, 0x5d, 0xdf, 0xb4, 0x65, 0x7d, 0x25, 0x61, 0xf6, 0x7b,
- 0x40, 0x14, 0x99, 0xd6, 0x99, 0xf8, 0x3d, 0xa0, 0xa4, 0xc7, 0x30, 0x7b, 0x09, 0x7b, 0x1d, 0xa1,
- 0x90, 0xd6, 0x65, 0x3c, 0x28, 0xc4, 0x30, 0x6b, 0xf2, 0x0f, 0x43, 0x11, 0x14, 0xe8, 0x27, 0x3d,
- 0x54, 0xde, 0x82, 0x67, 0xc1, 0xb5, 0xa4, 0x0b, 0x88, 0xa6, 0xbd, 0xa2, 0xfb, 0x5c, 0xd2, 0xf3,
- 0x93, 0xba, 0xf6, 0xf7, 0xac, 0x7f, 0xdb, 0x7e, 0xd1, 0x7b, 0x2e, 0xf3, 0x67, 0xdb, 0x7f, 0xe5,
- 0x09, 0xc1, 0xd8, 0xb7, 0x7a, 0x0b, 0xc0, 0xf3, 0x8d, 0xb1, 0xc7, 0x9e, 0xa4, 0x85, 0x58, 0x8b,
- 0x9e, 0x7f, 0xcc, 0x11, 0xf4, 0x2a, 0x4a, 0x73, 0x4e, 0x2e, 0x54, 0x49, 0xaf, 0x08, 0x83, 0xe6,
- 0x36, 0x7f, 0x0f, 0x6a, 0x41, 0xe8, 0x07, 0xa6, 0x43, 0x33, 0x45, 0x8f, 0x10, 0x53, 0xc8, 0x5a,
- 0x8d, 0xb1, 0x5d, 0x42, 0x4c, 0xed, 0x09, 0x2c, 0x76, 0x48, 0x3f, 0xd4, 0x4d, 0xcf, 0x61, 0x96,
- 0x35, 0x44, 0xc9, 0x7f, 0x4f, 0x1c, 0xa0, 0x5b, 0x45, 0x9e, 0xec, 0xfb, 0xd3, 0x4f, 0xed, 0xf7,
- 0xec, 0xd9, 0xa3, 0x1f, 0x1e, 0x98, 0x01, 0x6f, 0x83, 0x63, 0xc4, 0x16, 0xc4, 0xc1, 0x64, 0xdf,
- 0x20, 0xe3, 0x80, 0x3a, 0x4b, 0x24, 0x75, 0x5d, 0xa5, 0xd8, 0xbe, 0x44, 0x0a, 0xb2, 0x7a, 0x8a,
- 0x2c, 0x1f, 0x93, 0xd5, 0x13, 0xb2, 0x87, 0x30, 0x1f, 0x52, 0x99, 0x64, 0x0b, 0x6d, 0x25, 0xdd,
- 0x65, 0x14, 0xf2, 0xea, 0x82, 0x44, 0xfb, 0x25, 0xd4, 0x28, 0x92, 0xbd, 0x59, 0x3c, 0xa3, 0xa9,
- 0x5b, 0x6a, 0x7a, 0xee, 0xcd, 0xd3, 0xff, 0xae, 0x00, 0x4b, 0x9d, 0xc4, 0xf6, 0x58, 0xcb, 0x56,
- 0x85, 0x62, 0x2a, 0xb3, 0x66, 0xdf, 0xea, 0x43, 0x19, 0x8f, 0x79, 0x07, 0x75, 0x6d, 0xba, 0xf9,
- 0x9b, 0x09, 0xc7, 0xf7, 0x61, 0x89, 0x1f, 0x52, 0xf2, 0x2e, 0xc3, 0xfd, 0x1e, 0x3f, 0x3b, 0xf9,
- 0x32, 0xa3, 0x3e, 0x04, 0x75, 0x8a, 0xce, 0x98, 0xd4, 0xc5, 0x53, 0xc8, 0x52, 0x86, 0xf4, 0xa4,
- 0xce, 0x9b, 0x1c, 0x98, 0xb0, 0xc7, 0x22, 0x66, 0x66, 0x15, 0xbd, 0x44, 0x11, 0x8d, 0x10, 0x99,
- 0xec, 0x5d, 0x91, 0x75, 0x7b, 0x98, 0xb1, 0x55, 0x74, 0x01, 0xa9, 0x07, 0xb0, 0x44, 0x42, 0xc3,
- 0x4a, 0x9d, 0x15, 0x7b, 0xd5, 0x9e, 0xea, 0x5e, 0x67, 0x4f, 0x53, 0xaf, 0x91, 0xec, 0xe9, 0x7e,
- 0x02, 0x55, 0x12, 0x1a, 0xa6, 0xeb, 0xd0, 0xe2, 0xe0, 0x6c, 0x44, 0x36, 0x4a, 0x6c, 0x8d, 0x0a,
- 0x09, 0x1b, 0x31, 0x4e, 0xfd, 0x73, 0xa8, 0x91, 0x50, 0x3c, 0x27, 0xb1, 0x14, 0x7a, 0x63, 0x91,
- 0x2d, 0xb4, 0x91, 0x5d, 0x28, 0x39, 0x27, 0x3a, 0x3f, 0x81, 0xb4, 0x3f, 0x16, 0x33, 0x07, 0xd1,
- 0xc1, 0xde, 0xf9, 0xcc, 0x83, 0x98, 0xa1, 0xdb, 0xfc, 0xdb, 0xeb, 0xb6, 0x30, 0x5b, 0xb7, 0xdb,
- 0xa0, 0x88, 0xd7, 0x90, 0x84, 0x2b, 0x3f, 0x86, 0x1a, 0xc7, 0xc7, 0x6c, 0x3f, 0x83, 0x95, 0x69,
- 0x4a, 0x23, 0x7e, 0x8f, 0x52, 0xb2, 0xc4, 0x27, 0x75, 0xea, 0x08, 0x99, 0x17, 0x35, 0x9c, 0xd0,
- 0x1f, 0x07, 0xec, 0x70, 0xaa, 0x3a, 0x30, 0xd4, 0x0b, 0x8a, 0x51, 0x77, 0x60, 0xd9, 0xe6, 0x0d,
- 0x3c, 0x23, 0x42, 0x86, 0x88, 0x0c, 0xfc, 0xc7, 0x83, 0x25, 0x31, 0x30, 0x40, 0x22, 0x74, 0xdc,
- 0x02, 0xc0, 0x4e, 0x20, 0x89, 0x4a, 0xfc, 0xcd, 0x19, 0x3b, 0x41, 0x12, 0x59, 0x84, 0x0d, 0x2c,
- 0x66, 0x6c, 0xe0, 0x26, 0x2c, 0x0e, 0x4d, 0xcf, 0x7e, 0x85, 0xed, 0xe8, 0x6c, 0x03, 0x58, 0x53,
- 0x2a, 0x41, 0xa8, 0x8f, 0x61, 0x35, 0x44, 0x04, 0x85, 0x13, 0x73, 0xe8, 0x22, 0x23, 0x21, 0x2c,
- 0x33, 0xc2, 0x95, 0x64, 0xec, 0x59, 0x7a, 0xca, 0xd8, 0xe3, 0x03, 0xc8, 0x4e, 0x4d, 0xa9, 0xdc,
- 0x2d, 0xd0, 0x29, 0xc9, 0x58, 0x32, 0x65, 0x1b, 0x14, 0x6a, 0x42, 0xf6, 0xaf, 0x4d, 0x0b, 0x79,
- 0xd6, 0x85, 0x41, 0xb3, 0xd5, 0x2a, 0xdb, 0x40, 0x8d, 0x84, 0x0d, 0x89, 0xee, 0x63, 0xde, 0x40,
- 0x0d, 0x5d, 0x87, 0x6c, 0xd4, 0xd8, 0x7f, 0x04, 0x1c, 0xd0, 0xfe, 0x36, 0x07, 0xcb, 0x29, 0xeb,
- 0x10, 0xef, 0x1f, 0x8f, 0x81, 0x6e, 0xdf, 0x48, 0x27, 0xca, 0x99, 0x47, 0x10, 0xe9, 0x68, 0xf5,
- 0x12, 0x76, 0x82, 0xe7, 0xb2, 0x80, 0x10, 0x4a, 0xca, 0x67, 0x94, 0xa4, 0x31, 0x1b, 0x17, 0x2f,
- 0x35, 0x24, 0x7e, 0x8b, 0x2d, 0x13, 0xf1, 0xd6, 0xd2, 0xc7, 0xb6, 0xf6, 0xcf, 0x2c, 0xb6, 0x24,
- 0x71, 0xea, 0x33, 0x28, 0xa6, 0xde, 0x83, 0x36, 0xd3, 0x2b, 0x67, 0x1c, 0x8a, 0xce, 0xc8, 0x28,
- 0xb9, 0x8b, 0xbd, 0x73, 0xe1, 0x41, 0x66, 0x93, 0x53, 0xb3, 0xd7, 0x19, 0x99, 0xfa, 0x24, 0xf3,
- 0x0b, 0x41, 0x79, 0xef, 0xc6, 0xcc, 0x09, 0xe2, 0xc7, 0x1c, 0xf9, 0x47, 0x84, 0x0e, 0x8a, 0x48,
- 0x1f, 0x7e, 0x60, 0xef, 0x66, 0x46, 0xf3, 0xf7, 0xdf, 0xf3, 0xb0, 0x4e, 0xcb, 0x83, 0x38, 0xf9,
- 0xef, 0x8f, 0x87, 0x3c, 0xff, 0x55, 0x1f, 0xc9, 0x4b, 0x16, 0x57, 0xd1, 0xc9, 0xff, 0x28, 0x8a,
- 0x1b, 0x5f, 0xee, 0x0e, 0x7f, 0x42, 0xda, 0x81, 0xe5, 0xe4, 0x15, 0x4d, 0x12, 0xf3, 0xf5, 0x97,
- 0xe2, 0x07, 0x33, 0x41, 0xfb, 0x00, 0x96, 0x68, 0x45, 0x1d, 0x61, 0xdf, 0x33, 0x32, 0xef, 0x51,
- 0x35, 0x89, 0x4e, 0x08, 0xcd, 0xd0, 0x19, 0xd3, 0xaa, 0x40, 0x12, 0xf2, 0x2c, 0xb2, 0x26, 0xd1,
- 0x82, 0xf0, 0x31, 0xac, 0xb2, 0x0c, 0x36, 0xf0, 0x69, 0xc2, 0x9a, 0xb0, 0xe5, 0x55, 0xfa, 0x4a,
- 0x66, 0xec, 0xaa, 0x29, 0xe2, 0xdf, 0x8d, 0xf9, 0x19, 0x53, 0x8e, 0xf8, 0x8f, 0x1c, 0xf7, 0xa0,
- 0xc2, 0x74, 0xd5, 0x6e, 0xc6, 0x85, 0x28, 0xd5, 0xb7, 0xf1, 0x58, 0x16, 0xa2, 0x14, 0x7a, 0xac,
- 0x3d, 0x86, 0x05, 0x4a, 0x46, 0x75, 0x78, 0x1f, 0x0a, 0x91, 0x3b, 0xb9, 0x36, 0x55, 0xa3, 0x04,
- 0xda, 0xbf, 0xe5, 0x61, 0x8d, 0xce, 0x69, 0x7b, 0xa7, 0x7e, 0x38, 0x62, 0x4d, 0x32, 0x71, 0x0a,
- 0xa2, 0xfa, 0xcb, 0x25, 0xd5, 0xdf, 0xa3, 0x6c, 0xb4, 0x9a, 0x6a, 0x84, 0x48, 0xe1, 0xa4, 0x29,
- 0x3c, 0x84, 0xe5, 0x4b, 0xb5, 0xa2, 0xd0, 0xb6, 0x32, 0x5d, 0x01, 0xaa, 0xdf, 0x41, 0x85, 0xa6,
- 0xf9, 0x2c, 0xd5, 0xa7, 0x29, 0x66, 0x91, 0xc9, 0xfd, 0x79, 0x76, 0x85, 0x4b, 0x32, 0xee, 0x0a,
- 0x9b, 0x71, 0x27, 0xa4, 0xe5, 0x45, 0xe1, 0x85, 0x0e, 0x24, 0x46, 0x6c, 0xf5, 0x60, 0x69, 0x6a,
- 0x78, 0x46, 0xf7, 0xef, 0x41, 0x3a, 0xf3, 0x2d, 0xef, 0x2d, 0x67, 0x17, 0xa4, 0xb5, 0x0c, 0x1f,
- 0xff, 0x2a, 0xff, 0x65, 0x4e, 0xfb, 0x97, 0x1c, 0x28, 0x14, 0xdd, 0x79, 0xd2, 0x47, 0xe1, 0x04,
- 0x5b, 0x88, 0xaa, 0xe9, 0x99, 0x28, 0x50, 0x92, 0xc4, 0xf8, 0x41, 0x96, 0x49, 0x9a, 0x7a, 0x37,
- 0x23, 0x2d, 0xab, 0x64, 0xa8, 0xa8, 0x87, 0x50, 0xf9, 0x31, 0xe5, 0xfc, 0x02, 0x16, 0x85, 0x7b,
- 0xe1, 0x3d, 0xb5, 0xb7, 0x4b, 0xda, 0x77, 0x08, 0xfb, 0x9f, 0x40, 0xbc, 0xf0, 0xaa, 0x2b, 0xb0,
- 0xd4, 0xe9, 0x1b, 0x14, 0x34, 0x8e, 0xbb, 0xdf, 0x76, 0x8f, 0x5e, 0x76, 0x95, 0x8f, 0x54, 0x05,
- 0x2a, 0x12, 0xd9, 0x3d, 0x6a, 0xb6, 0x94, 0x5c, 0x1a, 0xd3, 0x69, 0x77, 0xbf, 0x55, 0xf2, 0xea,
- 0x1a, 0x2c, 0x4b, 0x4c, 0x4f, 0x6f, 0x3d, 0x6f, 0x7f, 0x6f, 0x9c, 0xec, 0x2b, 0x85, 0x59, 0xe8,
- 0xba, 0x52, 0xdc, 0xf9, 0x2f, 0xf6, 0xfa, 0x9c, 0x3c, 0xf2, 0xaa, 0x1f, 0xc3, 0x4a, 0xa7, 0x6f,
- 0xf4, 0xf4, 0xa3, 0xc1, 0xd1, 0xc1, 0x51, 0x27, 0xb5, 0xf6, 0xd4, 0x40, 0xbb, 0xdf, 0xee, 0x1b,
- 0x9d, 0xc7, 0x4a, 0x6e, 0xf6, 0xc0, 0x9e, 0x92, 0x9f, 0x1e, 0x38, 0xea, 0xf7, 0x9e, 0x1b, 0x27,
- 0x7b, 0x4a, 0x41, 0x5d, 0x07, 0x35, 0x3d, 0xd0, 0x6c, 0xeb, 0xad, 0x83, 0x81, 0x52, 0x9c, 0xc6,
- 0xf7, 0x07, 0x8d, 0x41, 0xfb, 0x40, 0x99, 0x9b, 0xcd, 0xe8, 0x89, 0x32, 0xbf, 0xf3, 0x1f, 0x73,
- 0xfc, 0x62, 0xc6, 0x76, 0x5c, 0x81, 0x92, 0xde, 0xea, 0xb7, 0xf4, 0x93, 0x56, 0x53, 0xf9, 0x48,
- 0x5d, 0x80, 0x42, 0xab, 0xdb, 0xe4, 0x5a, 0x6a, 0x75, 0x9b, 0xc6, 0xcb, 0xf6, 0xe0, 0x1b, 0xa3,
- 0xd7, 0xef, 0x29, 0xf9, 0x0c, 0xe6, 0xb8, 0xdf, 0x53, 0x0a, 0xea, 0x2a, 0x28, 0x69, 0x1a, 0x86,
- 0x2d, 0xaa, 0x25, 0x28, 0xb6, 0xba, 0xcd, 0xef, 0x95, 0x39, 0x75, 0x19, 0xaa, 0xf4, 0x2b, 0x61,
- 0x32, 0x9f, 0x45, 0x51, 0xfa, 0x05, 0xaa, 0xe6, 0x0c, 0x15, 0x43, 0x97, 0x04, 0x9b, 0x81, 0xb2,
- 0x28, 0xe6, 0x0c, 0x12, 0x36, 0x90, 0x45, 0x51, 0xfa, 0xb2, 0x60, 0x33, 0xc8, 0xb2, 0xa9, 0x08,
- 0x4a, 0xe3, 0x59, 0xdd, 0x68, 0x75, 0x0f, 0x1a, 0xbd, 0xbe, 0x52, 0x53, 0x01, 0xe6, 0x19, 0xea,
- 0x50, 0x59, 0x52, 0xcb, 0xb0, 0x40, 0xbf, 0x9b, 0xdf, 0xd7, 0x15, 0x25, 0x01, 0xf6, 0x95, 0xe5,
- 0x18, 0x18, 0xd4, 0x15, 0x35, 0x01, 0xf6, 0x95, 0x15, 0xaa, 0x31, 0x01, 0xd4, 0x95, 0xd5, 0x64,
- 0xd2, 0x9e, 0xb2, 0x16, 0x0f, 0x7d, 0xbf, 0x77, 0xa2, 0xac, 0x27, 0x84, 0x7b, 0xc7, 0xca, 0xc7,
- 0x29, 0xe8, 0x50, 0xd9, 0x10, 0xe2, 0x26, 0x72, 0x19, 0x3a, 0xb2, 0x95, 0x1b, 0x53, 0x4a, 0x6e,
- 0x2a, 0x37, 0x67, 0x28, 0xb9, 0xa9, 0xdc, 0xca, 0x60, 0x8f, 0x05, 0xf6, 0xb6, 0xba, 0x01, 0xab,
- 0xd3, 0x07, 0xc2, 0x46, 0xee, 0x4c, 0xeb, 0xbd, 0xa9, 0xdc, 0x9d, 0xa5, 0xf7, 0xa6, 0xf2, 0xb3,
- 0x2c, 0x5a, 0x32, 0xd0, 0xd4, 0x4d, 0x58, 0xbb, 0x74, 0x4a, 0x6c, 0xe8, 0x93, 0xe9, 0xc3, 0x68,
- 0x2a, 0x9f, 0xce, 0x3a, 0x8c, 0xa6, 0x72, 0x2f, 0x8b, 0x96, 0x0c, 0xee, 0x0b, 0xde, 0x83, 0xcb,
- 0xbc, 0x1f, 0xec, 0x34, 0xa9, 0xd2, 0x78, 0x6f, 0x94, 0x59, 0xaa, 0x48, 0xa8, 0x94, 0x8f, 0xd4,
- 0x45, 0x98, 0xa3, 0x58, 0x7a, 0x9d, 0xc4, 0x27, 0xbd, 0x40, 0xe2, 0xf3, 0x89, 0x52, 0x90, 0x9f,
- 0xfb, 0x4a, 0x71, 0x38, 0xcf, 0x7c, 0xc7, 0x93, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xa5, 0xe0,
- 0x03, 0xfe, 0x2b, 0x33, 0x00, 0x00,
+ 0xfd, 0xd6, 0x3e, 0x87, 0x2a, 0x6b, 0xdc, 0xc4, 0x64, 0x77, 0xa0, 0x1c, 0x8d, 0x3d, 0x0f, 0xb9,
+ 0x46, 0x2a, 0x19, 0x03, 0x8e, 0x62, 0x91, 0x65, 0x03, 0xd6, 0x9b, 0xe8, 0xd4, 0x1c, 0xbb, 0xd1,
+ 0x0b, 0x33, 0x42, 0xaf, 0xcc, 0x0b, 0x39, 0x55, 0xfb, 0x16, 0x6a, 0x3c, 0xa9, 0x79, 0x37, 0x0d,
+ 0xc5, 0xb9, 0x4e, 0x21, 0x9d, 0xeb, 0xe8, 0xa0, 0xb4, 0xfa, 0x6d, 0x96, 0xfd, 0xc7, 0xec, 0xb6,
+ 0x41, 0xc1, 0xc4, 0x20, 0xd8, 0x73, 0x5c, 0x64, 0x98, 0x56, 0x8a, 0x63, 0x0d, 0x93, 0x3e, 0x43,
+ 0x37, 0x2c, 0xc9, 0x93, 0x17, 0x54, 0xf9, 0x74, 0x41, 0xb5, 0x07, 0x2b, 0xad, 0x7e, 0x7b, 0x14,
+ 0xf8, 0x61, 0x94, 0x4a, 0xe2, 0xe9, 0x5d, 0x46, 0xc4, 0xc0, 0x0c, 0x2f, 0x1a, 0x44, 0x25, 0x44,
+ 0x38, 0x9d, 0x76, 0x0c, 0x2b, 0x87, 0xa6, 0x75, 0xe8, 0xf3, 0xf8, 0x1b, 0x8b, 0x42, 0x2b, 0x42,
+ 0x62, 0x90, 0x08, 0x5b, 0xe7, 0x17, 0x42, 0x86, 0x12, 0x26, 0x7d, 0x06, 0xd3, 0x02, 0x8c, 0xa0,
+ 0xdf, 0x8c, 0x91, 0x67, 0x21, 0xc3, 0x1b, 0x8f, 0x64, 0x01, 0x26, 0x71, 0xdd, 0xf1, 0x48, 0xbb,
+ 0x07, 0xcb, 0x3c, 0x5b, 0x3a, 0x34, 0x13, 0x83, 0x52, 0xa0, 0x30, 0x32, 0x2d, 0x21, 0x02, 0xfd,
+ 0xd4, 0x9e, 0xc2, 0xca, 0x20, 0x34, 0x4f, 0x4f, 0xb1, 0xa5, 0x9b, 0x51, 0xa2, 0xd7, 0xe9, 0x42,
+ 0x43, 0x85, 0x62, 0x48, 0x2d, 0x80, 0x2e, 0x94, 0xd7, 0xd9, 0xb7, 0xf6, 0x2d, 0xac, 0x89, 0xa9,
+ 0x54, 0x27, 0x29, 0x7b, 0xd9, 0x82, 0x52, 0x84, 0xc2, 0x11, 0xf6, 0x4c, 0x57, 0x4a, 0x2e, 0x61,
+ 0xea, 0x8a, 0x89, 0x39, 0x0a, 0x5c, 0xce, 0xaa, 0xa4, 0x0b, 0x48, 0x3b, 0x06, 0x4d, 0x47, 0x36,
+ 0x0e, 0x91, 0x15, 0x5d, 0xe3, 0x3c, 0xa6, 0xc5, 0x9a, 0x32, 0xe8, 0xfc, 0x25, 0x83, 0xfe, 0x6b,
+ 0xf8, 0x58, 0xb2, 0xbd, 0xce, 0x07, 0x5c, 0xd9, 0x48, 0x7c, 0xf3, 0x0a, 0x27, 0xc9, 0x0a, 0xd7,
+ 0x5d, 0xe5, 0x77, 0x96, 0xfc, 0x61, 0xac, 0x5d, 0x1d, 0x8d, 0xcc, 0xf0, 0x3c, 0xe6, 0xa4, 0x42,
+ 0xd1, 0x26, 0x96, 0x2c, 0x81, 0xd8, 0xb7, 0xf6, 0x35, 0x2c, 0x1d, 0x7b, 0xe7, 0x9e, 0xff, 0xca,
+ 0x4b, 0x93, 0xbd, 0x65, 0xbb, 0xef, 0x04, 0x6e, 0xca, 0x59, 0x33, 0x5b, 0xd4, 0xf5, 0xcb, 0x2d,
+ 0xea, 0xab, 0x42, 0x40, 0xa6, 0x71, 0x7d, 0x00, 0x4a, 0x83, 0xec, 0xbf, 0xe7, 0x23, 0xc1, 0x33,
+ 0x58, 0x6f, 0x90, 0xfd, 0xf7, 0xeb, 0xbd, 0x23, 0x58, 0xe9, 0x8d, 0x08, 0x1e, 0x30, 0x17, 0x93,
+ 0x30, 0x58, 0x85, 0xb9, 0x53, 0xd7, 0x74, 0xe4, 0xa9, 0x70, 0x20, 0xd6, 0x5b, 0x3e, 0xab, 0x37,
+ 0x7e, 0xd9, 0x0b, 0xa9, 0xcb, 0x2e, 0xfa, 0xef, 0xbc, 0xa5, 0x90, 0xc7, 0xb6, 0xf6, 0x97, 0x70,
+ 0x9b, 0x2f, 0xc1, 0xfc, 0x5d, 0x7f, 0x3c, 0x1c, 0x74, 0x4e, 0x32, 0x3d, 0xeb, 0x74, 0x19, 0x56,
+ 0xe5, 0x65, 0xd8, 0x3a, 0xcc, 0x5b, 0xbe, 0x7f, 0x8e, 0xe5, 0x91, 0x08, 0x48, 0xfb, 0x1c, 0xb6,
+ 0x2e, 0xf1, 0x7a, 0x89, 0x43, 0xe4, 0x8c, 0xcd, 0x90, 0x9d, 0x6d, 0x80, 0x50, 0x28, 0xea, 0x39,
+ 0xf6, 0xad, 0xfd, 0x02, 0x36, 0x2f, 0xcd, 0x90, 0xd9, 0x0b, 0xbd, 0x91, 0x32, 0x7b, 0x11, 0xab,
+ 0xc7, 0xb0, 0xb6, 0x0b, 0xeb, 0x97, 0x26, 0x32, 0xc7, 0x7e, 0x85, 0x43, 0x3f, 0x86, 0x5b, 0x97,
+ 0xe8, 0xfb, 0x3a, 0xcd, 0xde, 0x50, 0x48, 0x9d, 0xcf, 0x15, 0x7a, 0xbd, 0xcd, 0x9b, 0x0b, 0x9c,
+ 0x46, 0xda, 0x7b, 0x82, 0xd1, 0x4e, 0xe0, 0x93, 0x19, 0x6c, 0x0f, 0x4c, 0xcf, 0xa6, 0xe1, 0x08,
+ 0x51, 0x33, 0xea, 0x9a, 0x23, 0x44, 0x8b, 0x27, 0x4b, 0x22, 0x8d, 0xc0, 0x8c, 0xce, 0x0c, 0xcf,
+ 0x1c, 0x21, 0x71, 0x6d, 0x97, 0xad, 0x69, 0x7a, 0xed, 0x29, 0xdc, 0x98, 0x29, 0x2e, 0xf6, 0x43,
+ 0x5a, 0xee, 0x30, 0xcd, 0xf0, 0xef, 0x44, 0x33, 0x1c, 0xd6, 0xda, 0x33, 0x77, 0xfa, 0x0c, 0x7b,
+ 0x36, 0xf6, 0x9c, 0x7e, 0xbb, 0x49, 0x33, 0xd0, 0x21, 0xc1, 0xd7, 0x17, 0xee, 0x8c, 0x42, 0xeb,
+ 0x42, 0x25, 0x33, 0x73, 0x0d, 0xe6, 0x89, 0x41, 0x15, 0x23, 0x1c, 0xe4, 0x1c, 0x79, 0xee, 0x9a,
+ 0x0e, 0x45, 0x63, 0x8e, 0xe6, 0xde, 0x71, 0x0e, 0x33, 0xb4, 0x02, 0x05, 0x22, 0x4a, 0xe9, 0x8a,
+ 0x4e, 0x3f, 0xb5, 0x3f, 0xe5, 0x60, 0xb5, 0xaf, 0x4f, 0xea, 0x2d, 0xcf, 0xee, 0xf9, 0xd8, 0x8b,
+ 0x9e, 0xa1, 0x33, 0x73, 0x82, 0xfd, 0x50, 0xdd, 0x83, 0xd2, 0x50, 0x7c, 0x8b, 0x14, 0x3a, 0x95,
+ 0xcf, 0xd2, 0x19, 0x92, 0x52, 0x8f, 0xe9, 0x68, 0xa8, 0x19, 0xba, 0xbe, 0x75, 0x9e, 0x6a, 0xfb,
+ 0x94, 0x18, 0xa2, 0x83, 0x3c, 0xf6, 0x22, 0xe7, 0xdb, 0x28, 0xd5, 0xc4, 0x5a, 0xa0, 0xb0, 0x18,
+ 0x3a, 0x1d, 0x7b, 0x16, 0x1b, 0xe2, 0xb9, 0xc4, 0x02, 0x85, 0xe9, 0xd0, 0x47, 0xb0, 0x60, 0x86,
+ 0x4e, 0xaa, 0x59, 0x39, 0x6f, 0x86, 0x4e, 0x07, 0x79, 0xda, 0x7f, 0xe7, 0xa0, 0xc6, 0xc4, 0xf8,
+ 0xa1, 0xba, 0x58, 0x83, 0xf9, 0x21, 0x47, 0x17, 0x38, 0x7a, 0x98, 0x56, 0x51, 0x31, 0x56, 0x91,
+ 0xfa, 0x2b, 0xb8, 0x21, 0xfb, 0x7c, 0x86, 0xdc, 0xaa, 0x41, 0xa2, 0x70, 0x6c, 0x45, 0xe3, 0x10,
+ 0x31, 0xb1, 0xca, 0x7b, 0xb7, 0xb3, 0xca, 0x99, 0x56, 0xa7, 0xbe, 0x29, 0x59, 0x48, 0x4c, 0x5f,
+ 0x32, 0xd0, 0x5e, 0xc2, 0x47, 0x33, 0xac, 0xa3, 0xd5, 0xed, 0xf4, 0xae, 0xb8, 0x01, 0xf7, 0xa1,
+ 0x88, 0x3c, 0x37, 0x60, 0xdb, 0xa9, 0xed, 0xa9, 0xa9, 0xf6, 0x71, 0xb7, 0xd3, 0xe3, 0x75, 0x0d,
+ 0x1d, 0xd7, 0xbe, 0x84, 0x52, 0x5f, 0x7f, 0x49, 0xcb, 0xfa, 0xe8, 0x0a, 0x4e, 0xeb, 0x30, 0xff,
+ 0x8a, 0x8d, 0x8b, 0xd3, 0x12, 0x90, 0xf6, 0x6b, 0xa8, 0x08, 0x0f, 0xfa, 0x9c, 0xd1, 0xad, 0xc1,
+ 0xfc, 0x24, 0xa3, 0xd9, 0x89, 0x54, 0xa1, 0x99, 0xd1, 0xac, 0x29, 0xd1, 0x24, 0xa3, 0x59, 0x32,
+ 0xa5, 0xf0, 0x62, 0x4a, 0xe1, 0x9a, 0x1e, 0xaf, 0x45, 0x45, 0x6f, 0xa8, 0x8f, 0xd2, 0x92, 0x96,
+ 0x33, 0x56, 0x97, 0x12, 0x49, 0xee, 0x60, 0x76, 0xfa, 0xf4, 0x9f, 0xb9, 0x0c, 0xd3, 0x67, 0xef,
+ 0xc8, 0x54, 0xd8, 0x40, 0xfe, 0xad, 0x6d, 0xa0, 0xf0, 0xbe, 0x36, 0xf0, 0xdb, 0x19, 0x2e, 0xbf,
+ 0xaf, 0x0b, 0xd9, 0x3a, 0x98, 0x44, 0xea, 0x4e, 0x7c, 0x54, 0x7c, 0x0b, 0x6a, 0x7a, 0x31, 0x7e,
+ 0xc8, 0xf2, 0xf8, 0xd4, 0xcf, 0x53, 0xc1, 0xf1, 0xba, 0x16, 0x5f, 0x12, 0x1d, 0xbf, 0x86, 0x3b,
+ 0x97, 0x43, 0x8e, 0x43, 0x83, 0x5e, 0x4b, 0xc8, 0x7c, 0xcd, 0x1b, 0xe9, 0x1e, 0xdc, 0xbc, 0x34,
+ 0xf9, 0xb8, 0xd9, 0x6b, 0x22, 0x12, 0xf5, 0xfc, 0x90, 0xb5, 0x4b, 0xe3, 0x84, 0xb5, 0xaa, 0xb3,
+ 0x6f, 0xad, 0x09, 0x1b, 0x97, 0xe7, 0xf0, 0xcc, 0xe3, 0x1d, 0x32, 0x8e, 0x2e, 0xd4, 0x52, 0x5c,
+ 0x06, 0x9d, 0x93, 0x99, 0x73, 0xb7, 0xa1, 0x18, 0xb9, 0x93, 0xeb, 0x55, 0xc1, 0x28, 0xb4, 0x26,
+ 0xac, 0xa6, 0xf8, 0x25, 0x11, 0xfe, 0x91, 0xe0, 0xc0, 0x33, 0x8d, 0x8d, 0x44, 0xf5, 0xd9, 0xd5,
+ 0x05, 0x17, 0x51, 0x28, 0xd6, 0x3f, 0xc0, 0x42, 0x31, 0x9b, 0xc6, 0xd6, 0x7f, 0x82, 0x34, 0xf6,
+ 0xaf, 0xe0, 0x4e, 0xbb, 0x57, 0xff, 0x49, 0xf2, 0xc0, 0x1d, 0x50, 0x1a, 0xd8, 0xa1, 0x8a, 0x6e,
+ 0xbf, 0xe8, 0x1d, 0xa2, 0x28, 0xc4, 0x16, 0xf5, 0x60, 0x23, 0xf6, 0xc5, 0x04, 0x2d, 0xea, 0x02,
+ 0xd2, 0xbe, 0x82, 0x9a, 0xa0, 0x7d, 0x77, 0xab, 0x7a, 0x0a, 0x55, 0x3a, 0x37, 0xdd, 0xdf, 0x48,
+ 0x1f, 0xff, 0x75, 0x06, 0x34, 0x86, 0x5a, 0x87, 0x96, 0x6a, 0x72, 0xdf, 0xac, 0xc2, 0x72, 0x5c,
+ 0x7f, 0x18, 0x6b, 0x4c, 0xb4, 0x92, 0x39, 0x8e, 0xa9, 0x2c, 0xd1, 0xa9, 0x6d, 0x46, 0xe6, 0xe3,
+ 0x8c, 0x4e, 0x9b, 0x14, 0x93, 0x25, 0xd8, 0x93, 0x9d, 0xf0, 0x98, 0x60, 0x4f, 0x7b, 0x09, 0x9b,
+ 0x99, 0x65, 0x33, 0xea, 0xfe, 0x6a, 0x96, 0xba, 0x53, 0x36, 0x9c, 0x15, 0x38, 0xab, 0xf2, 0x3f,
+ 0xe6, 0xa0, 0xcc, 0x1b, 0x78, 0x3c, 0x10, 0x6c, 0x41, 0xc9, 0x9f, 0xa0, 0xd0, 0xf5, 0x4d, 0x5b,
+ 0x56, 0x64, 0x12, 0x66, 0x3f, 0x14, 0x44, 0x91, 0x69, 0x9d, 0x89, 0x1f, 0x0a, 0x4a, 0x7a, 0x0c,
+ 0xb3, 0xb7, 0xb3, 0xd7, 0x11, 0x0a, 0x69, 0x25, 0xc7, 0x83, 0x42, 0x0c, 0xb3, 0x67, 0x81, 0x61,
+ 0x28, 0x82, 0x02, 0xfd, 0xa4, 0x87, 0xca, 0x9b, 0xf6, 0x2c, 0xb8, 0x96, 0x74, 0x01, 0xd1, 0x44,
+ 0x59, 0xf4, 0xab, 0x4b, 0x7a, 0x7e, 0x52, 0xd7, 0xfe, 0x9e, 0x75, 0x7c, 0xdb, 0x2f, 0x7a, 0xcf,
+ 0x65, 0xc6, 0x6d, 0xfb, 0xaf, 0x3c, 0x21, 0x18, 0xfb, 0x56, 0x6f, 0x01, 0x78, 0xbe, 0x31, 0xf6,
+ 0xd8, 0x23, 0xb6, 0x10, 0x6b, 0xd1, 0xf3, 0x8f, 0x39, 0x82, 0x5e, 0x45, 0x69, 0xce, 0xc9, 0x85,
+ 0x2a, 0xe9, 0x15, 0x61, 0xd0, 0xdc, 0xe6, 0xef, 0x41, 0x2d, 0x08, 0xfd, 0xc0, 0x74, 0x68, 0xa6,
+ 0xe8, 0x11, 0x62, 0x0a, 0x59, 0xab, 0x31, 0xb6, 0x4b, 0x88, 0xa9, 0x3d, 0x81, 0xc5, 0x0e, 0xe9,
+ 0x87, 0xba, 0xe9, 0x39, 0xcc, 0xb2, 0x86, 0x28, 0xf9, 0x53, 0x8a, 0x03, 0x74, 0xab, 0xc8, 0x93,
+ 0x2f, 0x05, 0xf4, 0x53, 0xfb, 0x3d, 0x7b, 0x28, 0xe9, 0x87, 0x07, 0x66, 0xc0, 0x1b, 0xe7, 0x18,
+ 0xb1, 0x05, 0x71, 0x30, 0xd9, 0x37, 0xc8, 0x38, 0xa0, 0xce, 0x12, 0x49, 0x5d, 0x57, 0x29, 0xb6,
+ 0x2f, 0x91, 0x82, 0xac, 0x9e, 0x22, 0xcb, 0xc7, 0x64, 0xf5, 0x84, 0xec, 0x21, 0xcc, 0x87, 0x54,
+ 0x26, 0xd9, 0x74, 0x5b, 0x49, 0xf7, 0x25, 0x85, 0xbc, 0xba, 0x20, 0xd1, 0x7e, 0x09, 0x35, 0x8a,
+ 0x64, 0xaf, 0x1c, 0xcf, 0x68, 0xea, 0x96, 0x9a, 0x9e, 0x7b, 0xf3, 0xf4, 0xbf, 0x2b, 0xc0, 0x52,
+ 0x27, 0xb1, 0x3d, 0xd6, 0xe4, 0x55, 0xa1, 0x98, 0xca, 0xac, 0xd9, 0xb7, 0xfa, 0x50, 0xc6, 0x63,
+ 0xde, 0x73, 0x5d, 0x9b, 0x6e, 0x17, 0x67, 0xc2, 0xf1, 0x7d, 0x58, 0xe2, 0x87, 0x94, 0xbc, 0xe4,
+ 0x70, 0xbf, 0xc7, 0xcf, 0x4e, 0xbe, 0xe5, 0xa8, 0x0f, 0x41, 0x9d, 0xa2, 0x33, 0x26, 0x75, 0xf1,
+ 0x78, 0xb2, 0x94, 0x21, 0x3d, 0xa9, 0xf3, 0xb6, 0x08, 0x26, 0xec, 0x79, 0x89, 0x99, 0x59, 0x45,
+ 0x2f, 0x51, 0x44, 0x23, 0x44, 0x26, 0x7b, 0x89, 0x64, 0xfd, 0x21, 0x66, 0x6c, 0x15, 0x5d, 0x40,
+ 0xea, 0x01, 0x2c, 0x91, 0xd0, 0xb0, 0x52, 0x67, 0xc5, 0xde, 0xc1, 0xa7, 0xfa, 0xdd, 0xd9, 0xd3,
+ 0xd4, 0x6b, 0x24, 0x7b, 0xba, 0x1f, 0x43, 0x95, 0x84, 0x86, 0xe9, 0x3a, 0xb4, 0x38, 0x38, 0x1b,
+ 0x91, 0x8d, 0x12, 0x5b, 0xa3, 0x42, 0xc2, 0x46, 0x8c, 0x53, 0xff, 0x1c, 0x6a, 0x24, 0x14, 0x0f,
+ 0x50, 0x2c, 0x85, 0xde, 0x58, 0x64, 0x0b, 0x6d, 0x64, 0x17, 0x4a, 0xce, 0x89, 0xce, 0x4f, 0x20,
+ 0xed, 0x8f, 0xc5, 0xcc, 0x41, 0x74, 0xb0, 0x77, 0x3e, 0xf3, 0x20, 0x66, 0xe8, 0x36, 0xff, 0xf6,
+ 0xba, 0x2d, 0xcc, 0xd6, 0xed, 0x36, 0x28, 0xe2, 0xfd, 0x24, 0xe1, 0xca, 0x8f, 0xa1, 0xc6, 0xf1,
+ 0x31, 0xdb, 0x4f, 0x61, 0x65, 0x9a, 0xd2, 0x88, 0x5f, 0xb0, 0x94, 0x2c, 0xf1, 0x49, 0x9d, 0x3a,
+ 0x42, 0xe6, 0x45, 0x0d, 0x27, 0xf4, 0xc7, 0x01, 0x3b, 0x9c, 0xaa, 0x0e, 0x0c, 0xf5, 0x82, 0x62,
+ 0xd4, 0x1d, 0x58, 0xb6, 0x79, 0xcb, 0xcf, 0x88, 0x90, 0x21, 0x22, 0x03, 0xff, 0x55, 0x61, 0x49,
+ 0x0c, 0x0c, 0x90, 0x08, 0x1d, 0xb7, 0x00, 0xb0, 0x13, 0x48, 0xa2, 0x12, 0x7f, 0xa5, 0xc6, 0x4e,
+ 0x90, 0x44, 0x16, 0x61, 0x03, 0x8b, 0x19, 0x1b, 0xb8, 0x09, 0x8b, 0x43, 0xd3, 0xb3, 0x5f, 0x61,
+ 0x3b, 0x3a, 0xdb, 0x00, 0xd6, 0xc6, 0x4a, 0x10, 0xea, 0x63, 0x58, 0x0d, 0x11, 0x41, 0xe1, 0xc4,
+ 0x1c, 0xba, 0xc8, 0x48, 0x08, 0xcb, 0x8c, 0x70, 0x25, 0x19, 0x7b, 0x96, 0x9e, 0x32, 0xf6, 0xf8,
+ 0x00, 0xb2, 0x53, 0x53, 0x2a, 0x77, 0x0b, 0x74, 0x4a, 0x32, 0x96, 0x4c, 0xd9, 0x06, 0x85, 0x9a,
+ 0x90, 0xfd, 0x6b, 0xd3, 0x42, 0x9e, 0x75, 0x61, 0xd0, 0x6c, 0xb5, 0xca, 0x36, 0x50, 0x23, 0x61,
+ 0x43, 0xa2, 0xfb, 0x98, 0xb7, 0x5c, 0x43, 0xd7, 0x21, 0x1b, 0x35, 0xf6, 0xe7, 0x01, 0x07, 0xb4,
+ 0xbf, 0xcd, 0xc1, 0x72, 0xca, 0x3a, 0xc4, 0x8b, 0xc9, 0x63, 0xa0, 0xdb, 0x37, 0xd2, 0x89, 0x72,
+ 0xe6, 0xd9, 0x44, 0x3a, 0x5a, 0xbd, 0x84, 0x9d, 0xe0, 0xb9, 0x2c, 0x20, 0x84, 0x92, 0xf2, 0x19,
+ 0x25, 0x69, 0xcc, 0xc6, 0xc5, 0xdb, 0x0e, 0x89, 0x5f, 0x6f, 0xcb, 0x44, 0xbc, 0xce, 0xf4, 0xb1,
+ 0xad, 0xfd, 0x33, 0x8b, 0x2d, 0x49, 0x9c, 0xfa, 0x14, 0x8a, 0xa9, 0x17, 0xa4, 0xcd, 0xf4, 0xca,
+ 0x19, 0x87, 0xa2, 0x33, 0x32, 0x4a, 0xee, 0x62, 0xef, 0x5c, 0x78, 0x90, 0xd9, 0xe4, 0xd4, 0xec,
+ 0x75, 0x46, 0xa6, 0x3e, 0xc9, 0xfc, 0x74, 0x50, 0xde, 0xbb, 0x31, 0x73, 0x82, 0xf8, 0x95, 0x47,
+ 0xfe, 0x43, 0xa1, 0x83, 0x22, 0xd2, 0x87, 0x1f, 0xd8, 0xed, 0x99, 0xd1, 0x2e, 0xfe, 0xf7, 0x3c,
+ 0xac, 0xd3, 0xf2, 0x20, 0x4e, 0xfe, 0xfb, 0xe3, 0x21, 0xcf, 0x7f, 0xd5, 0x47, 0xf2, 0x92, 0xc5,
+ 0x55, 0x74, 0xf2, 0x07, 0x8b, 0xe2, 0xc6, 0x97, 0xbb, 0xc3, 0x1f, 0x9d, 0x76, 0x60, 0x39, 0x79,
+ 0x77, 0x93, 0xc4, 0x7c, 0xfd, 0xa5, 0xf8, 0x89, 0x4d, 0xd0, 0x3e, 0x80, 0x25, 0x5a, 0x51, 0x47,
+ 0xd8, 0xf7, 0x8c, 0xcc, 0x0b, 0x56, 0x4d, 0xa2, 0x13, 0x42, 0x33, 0x74, 0xc6, 0xb4, 0x2a, 0x90,
+ 0x84, 0x3c, 0x8b, 0xac, 0x49, 0xb4, 0x20, 0x7c, 0x0c, 0xab, 0x2c, 0x83, 0x0d, 0x7c, 0x9a, 0xb0,
+ 0x26, 0x6c, 0x79, 0x95, 0xbe, 0x92, 0x19, 0xbb, 0x6a, 0x8a, 0xf8, 0xdb, 0x63, 0x7e, 0xc6, 0x94,
+ 0x23, 0xfe, 0xeb, 0xc7, 0x3d, 0xa8, 0x30, 0x5d, 0xb5, 0x9b, 0x71, 0x21, 0x4a, 0xf5, 0x6d, 0x3c,
+ 0x96, 0x85, 0x28, 0x85, 0x1e, 0x6b, 0x8f, 0x61, 0x81, 0x92, 0x51, 0x1d, 0xde, 0x87, 0x42, 0xe4,
+ 0x4e, 0xae, 0x4d, 0xd5, 0x28, 0x81, 0xf6, 0x6f, 0x79, 0x58, 0xa3, 0x73, 0xda, 0xde, 0xa9, 0x1f,
+ 0x8e, 0x58, 0x5b, 0x4d, 0x9c, 0x82, 0xa8, 0xfe, 0x72, 0x49, 0xf5, 0xf7, 0x28, 0x1b, 0xad, 0xa6,
+ 0x1a, 0x21, 0x52, 0x38, 0x69, 0x0a, 0x0f, 0x61, 0xf9, 0x52, 0xad, 0x28, 0xb4, 0xad, 0x4c, 0x57,
+ 0x80, 0xea, 0x77, 0x50, 0xa1, 0x69, 0x3e, 0x4b, 0xf5, 0x69, 0x8a, 0x59, 0x64, 0x72, 0x7f, 0x96,
+ 0x5d, 0xe1, 0x92, 0x8c, 0xbb, 0xc2, 0x66, 0xdc, 0x09, 0x69, 0x79, 0x51, 0x78, 0xa1, 0x03, 0x89,
+ 0x11, 0x5b, 0x3d, 0x58, 0x9a, 0x1a, 0x9e, 0xd1, 0x2f, 0x7c, 0x90, 0xce, 0x7c, 0xcb, 0x7b, 0xcb,
+ 0xd9, 0x05, 0x69, 0x2d, 0xc3, 0xc7, 0xbf, 0xca, 0x7f, 0x99, 0xd3, 0xfe, 0x25, 0x07, 0x0a, 0x45,
+ 0x77, 0x9e, 0xf4, 0x51, 0x38, 0xc1, 0x16, 0xa2, 0x6a, 0x7a, 0x26, 0x0a, 0x94, 0x24, 0x31, 0x7e,
+ 0x90, 0x65, 0x92, 0xa6, 0xde, 0xcd, 0x48, 0xcb, 0x2a, 0x19, 0x2a, 0xea, 0x21, 0x54, 0x7e, 0x4c,
+ 0x39, 0xbf, 0x80, 0x45, 0xe1, 0x5e, 0x78, 0x4f, 0xed, 0xed, 0x92, 0xf6, 0x1d, 0xc2, 0xfe, 0x40,
+ 0x10, 0x6f, 0xc2, 0xea, 0x0a, 0x2c, 0x75, 0xfa, 0x06, 0x05, 0x8d, 0xe3, 0xee, 0xb7, 0xdd, 0xa3,
+ 0x97, 0x5d, 0xe5, 0x67, 0xaa, 0x02, 0x15, 0x89, 0xec, 0x1e, 0x35, 0x5b, 0x4a, 0x2e, 0x8d, 0xe9,
+ 0xb4, 0xbb, 0xdf, 0x2a, 0x79, 0x75, 0x0d, 0x96, 0x25, 0xa6, 0xa7, 0xb7, 0x9e, 0xb7, 0xbf, 0x37,
+ 0x4e, 0xf6, 0x95, 0xc2, 0x2c, 0x74, 0x5d, 0x29, 0xee, 0xfc, 0x17, 0x7b, 0xaf, 0x4e, 0x9e, 0x85,
+ 0xd5, 0x8f, 0x60, 0xa5, 0xd3, 0x37, 0x7a, 0xfa, 0xd1, 0xe0, 0xe8, 0xe0, 0xa8, 0x93, 0x5a, 0x7b,
+ 0x6a, 0xa0, 0xdd, 0x6f, 0xf7, 0x8d, 0xce, 0x63, 0x25, 0x37, 0x7b, 0x60, 0x4f, 0xc9, 0x4f, 0x0f,
+ 0x1c, 0xf5, 0x7b, 0xcf, 0x8d, 0x93, 0x3d, 0xa5, 0xa0, 0xae, 0x83, 0x9a, 0x1e, 0x68, 0xb6, 0xf5,
+ 0xd6, 0xc1, 0x40, 0x29, 0x4e, 0xe3, 0xfb, 0x83, 0xc6, 0xa0, 0x7d, 0xa0, 0xcc, 0xcd, 0x66, 0xf4,
+ 0x44, 0x99, 0xdf, 0xf9, 0x8f, 0x39, 0x7e, 0x31, 0x63, 0x3b, 0xae, 0x40, 0x49, 0x6f, 0xf5, 0x5b,
+ 0xfa, 0x49, 0xab, 0xa9, 0xfc, 0x4c, 0x5d, 0x80, 0x42, 0xab, 0xdb, 0xe4, 0x5a, 0x6a, 0x75, 0x9b,
+ 0xc6, 0xcb, 0xf6, 0xe0, 0x1b, 0xa3, 0xd7, 0xef, 0x29, 0xf9, 0x0c, 0xe6, 0xb8, 0xdf, 0x53, 0x0a,
+ 0xea, 0x2a, 0x28, 0x69, 0x1a, 0x86, 0x2d, 0xaa, 0x25, 0x28, 0xb6, 0xba, 0xcd, 0xef, 0x95, 0x39,
+ 0x75, 0x19, 0xaa, 0xf4, 0x2b, 0x61, 0x32, 0x9f, 0x45, 0x51, 0xfa, 0x05, 0xaa, 0xe6, 0x0c, 0x15,
+ 0x43, 0x97, 0x04, 0x9b, 0x81, 0xb2, 0x28, 0xe6, 0x0c, 0x12, 0x36, 0x90, 0x45, 0x51, 0xfa, 0xb2,
+ 0x60, 0x33, 0xc8, 0xb2, 0xa9, 0x08, 0x4a, 0xe3, 0x59, 0xdd, 0x68, 0x75, 0x0f, 0x1a, 0xbd, 0xbe,
+ 0x52, 0x53, 0x01, 0xe6, 0x19, 0xea, 0x50, 0x59, 0x52, 0xcb, 0xb0, 0x40, 0xbf, 0x9b, 0xdf, 0xd7,
+ 0x15, 0x25, 0x01, 0xf6, 0x95, 0xe5, 0x18, 0x18, 0xd4, 0x15, 0x35, 0x01, 0xf6, 0x95, 0x15, 0xaa,
+ 0x31, 0x01, 0xd4, 0x95, 0xd5, 0x64, 0xd2, 0x9e, 0xb2, 0x16, 0x0f, 0x7d, 0xbf, 0x77, 0xa2, 0xac,
+ 0x27, 0x84, 0x7b, 0xc7, 0xca, 0x47, 0x29, 0xe8, 0x50, 0xd9, 0x10, 0xe2, 0x26, 0x72, 0x19, 0x3a,
+ 0xb2, 0x95, 0x1b, 0x53, 0x4a, 0x6e, 0x2a, 0x37, 0x67, 0x28, 0xb9, 0xa9, 0xdc, 0xca, 0x60, 0x8f,
+ 0x05, 0xf6, 0xb6, 0xba, 0x01, 0xab, 0xd3, 0x07, 0xc2, 0x46, 0xee, 0x4c, 0xeb, 0xbd, 0xa9, 0xdc,
+ 0x9d, 0xa5, 0xf7, 0xa6, 0xf2, 0xf3, 0x2c, 0x5a, 0x32, 0xd0, 0xd4, 0x4d, 0x58, 0xbb, 0x74, 0x4a,
+ 0x6c, 0xe8, 0xe3, 0xe9, 0xc3, 0x68, 0x2a, 0x9f, 0xcc, 0x3a, 0x8c, 0xa6, 0x72, 0x2f, 0x8b, 0x96,
+ 0x0c, 0xee, 0x0b, 0xde, 0x83, 0xcb, 0xbc, 0x1f, 0xec, 0x34, 0xa9, 0xd2, 0x78, 0x6f, 0x94, 0x59,
+ 0xaa, 0x48, 0xa8, 0x94, 0x9f, 0xa9, 0x8b, 0x30, 0x47, 0xb1, 0xf4, 0x3a, 0x89, 0x4f, 0x7a, 0x81,
+ 0xc4, 0xe7, 0x13, 0xa5, 0x20, 0x3f, 0xf7, 0x95, 0xe2, 0x70, 0x9e, 0xf9, 0x8e, 0x27, 0xff, 0x1f,
+ 0x00, 0x00, 0xff, 0xff, 0x11, 0x40, 0xa1, 0x1d, 0x5d, 0x33, 0x00, 0x00,
}
diff --git a/api/attribute.proto b/api/attribute.proto
index 619fc691..2ba903bc 100644
--- a/api/attribute.proto
+++ b/api/attribute.proto
@@ -464,6 +464,10 @@ message ExtendedCommunitiesAttribute {
// - TwoOctetAsSpecificExtended
// - IPv4AddressSpecificExtended
// - FourOctetAsSpecificExtended
+ // - ValidationExtended
+ // - ColorExtended
+ // - EncapExtended
+ // - DefaultGatewayExtended
// - OpaqueExtended
// - ESILabelExtended
// - MacMobilityExtended
@@ -497,6 +501,10 @@ message TunnelEncapSubTLVEncapsulation {
bytes cookie = 2;
}
+message TunnelEncapSubTLVWireguard {
+ bytes peer = 1;
+}
+
message TunnelEncapSubTLVProtocol { uint32 protocol = 1; }
message TunnelEncapSubTLVColor { uint32 color = 1; }
diff --git a/cmd/gobgp/global.go b/cmd/gobgp/global.go
index 6bc58d0c..bcd4acdd 100644
--- a/cmd/gobgp/global.go
+++ b/cmd/gobgp/global.go
@@ -16,6 +16,8 @@
package main
import (
+ "encoding/base64"
+ // "encoding/binary"
"encoding/json"
"fmt"
"net"
@@ -1103,6 +1105,92 @@ func extractPmsiTunnel(args []string) ([]string, bgp.PathAttributeInterface, err
return args, nil, nil
}
+func extractTunnelEncap(args []string) ([]string, bgp.PathAttributeInterface, error) {
+ for idx, arg := range args {
+ if arg == "tunnel-encap" {
+ var subencap bgp.TunnelEncapSubTLVInterface
+ var egress bgp.TunnelEncapSubTLVInterface
+ var udp_port bgp.TunnelEncapSubTLVInterface
+ var color bgp.TunnelEncapSubTLVInterface
+ subTlvsLen := 1
+ subidx := idx + 1
+ for subidx < len(args) {
+ arg = args[subidx]
+ if arg == "wireguard" {
+ if len(args) < (subidx + 1) {
+ return nil, nil, fmt.Errorf("invalid wireguard format")
+ }
+ peer, err := base64.StdEncoding.DecodeString(args[subidx+1])
+ if err != nil {
+ return nil, nil, err
+ }
+ subencap = bgp.NewTunnelEncapSubTLVWireguard(peer)
+ subTlvsLen++
+ subidx += 2
+ } else if arg == "egress" {
+ if len(args) < (subidx + 2) {
+ return nil, nil, fmt.Errorf("invalid egress endpoint format")
+ }
+ egress = bgp.NewTunnelEncapSubTLVEgressEndpoint(args[subidx+1])
+ subTlvsLen++
+ subidx += 2
+ } else if arg == "udp" {
+ if len(args) < (subidx + 2) {
+ return nil, nil, fmt.Errorf("invalid udp format")
+ }
+ port, err := strconv.ParseUint(args[subidx+1], 10, 16)
+ if err != nil {
+ return nil, nil, fmt.Errorf("invalid udp format")
+ }
+ udp_port = bgp.NewTunnelEncapSubTLVUDPDestPort(uint16(port))
+ subTlvsLen++
+ subidx += 2
+ } else if arg == "color" {
+ if len(args) < (subidx + 2) {
+ return nil, nil, fmt.Errorf("invalid color extended community format")
+ }
+ value, err := strconv.ParseUint(args[subidx+1], 10, 32)
+ if err != nil {
+ return nil, nil, fmt.Errorf("invalid color extended community format")
+ }
+ color = bgp.NewTunnelEncapSubTLVColor(uint32(value))
+ subTlvsLen++
+ subidx += 2
+ } else {
+ print("FOO:" + args[subidx+1])
+ break
+ }
+ }
+
+ tlvsLen := 1
+ tlvs := make([]*bgp.TunnelEncapTLV, 0, tlvsLen)
+ subTlvs := make([]bgp.TunnelEncapSubTLVInterface, 0, subTlvsLen)
+
+ if subencap != nil {
+ subTlvs = append(subTlvs, subencap)
+ }
+ if egress != nil {
+ subTlvs = append(subTlvs, egress)
+ }
+ if udp_port != nil {
+ subTlvs = append(subTlvs, udp_port)
+ }
+ if color != nil {
+ subTlvs = append(subTlvs, color)
+ }
+
+ tlvType := bgp.TUNNEL_TYPE_WIREGUARD // Experimental Wireguard
+ tlvs = append(tlvs, bgp.NewTunnelEncapTLV(bgp.TunnelType(tlvType), subTlvs))
+
+ //subTlv = bgp.NewTunnelEncapSubTLVProtocol(uint16())
+ encap := bgp.NewPathAttributeTunnelEncap(tlvs)
+
+ return append(args[:idx], args[subidx:]...), encap, nil
+ }
+ }
+ return args, nil, nil
+}
+
func extractAigp(args []string) ([]string, bgp.PathAttributeInterface, error) {
for idx, arg := range args {
if arg == "aigp" {
@@ -1161,6 +1249,7 @@ func parsePath(rf bgp.RouteFamily, args []string) (*api.Path, error) {
extractAggregator, // 7 AGGREGATOR
extractCommunity, // 8 COMMUNITY
extractPmsiTunnel, // 22 PMSI_TUNNEL
+ extractTunnelEncap, // 23 Tunnel Encapsulation Attribute
extractAigp, // 26 AIGP
extractLargeCommunity, // 32 LARGE_COMMUNITY
}
diff --git a/internal/pkg/apiutil/attribute.go b/internal/pkg/apiutil/attribute.go
index 19060932..0262c59d 100644
--- a/internal/pkg/apiutil/attribute.go
+++ b/internal/pkg/apiutil/attribute.go
@@ -1168,6 +1168,10 @@ func NewTunnelEncapAttributeFromNative(a *bgp.PathAttributeTunnelEncap) *api.Tun
Key: sv.Key,
Cookie: sv.Cookie,
}
+ case *bgp.TunnelEncapSubTLVWireguard:
+ subTlv = &api.TunnelEncapSubTLVWireguard{
+ Peer: sv.Peer,
+ }
case *bgp.TunnelEncapSubTLVProtocol:
subTlv = &api.TunnelEncapSubTLVProtocol{
Protocol: uint32(sv.Protocol),
@@ -1662,6 +1666,8 @@ func unmarshalAttribute(an *any.Any) (bgp.PathAttributeInterface, error) {
switch sv := subValue.Message.(type) {
case *api.TunnelEncapSubTLVEncapsulation:
subTlv = bgp.NewTunnelEncapSubTLVEncapsulation(sv.Key, sv.Cookie)
+ case *api.TunnelEncapSubTLVWireguard:
+ subTlv = bgp.NewTunnelEncapSubTLVWireguard(sv.Peer)
case *api.TunnelEncapSubTLVProtocol:
subTlv = bgp.NewTunnelEncapSubTLVProtocol(uint16(sv.Protocol))
case *api.TunnelEncapSubTLVColor:
diff --git a/pkg/packet/bgp/bgp.go b/pkg/packet/bgp/bgp.go
index c46bc878..6a13896f 100644
--- a/pkg/packet/bgp/bgp.go
+++ b/pkg/packet/bgp/bgp.go
@@ -17,6 +17,7 @@ package bgp
import (
"bytes"
+ "encoding/base64"
"encoding/binary"
"encoding/json"
"errors"
@@ -188,6 +189,7 @@ const (
TUNNEL_TYPE_MPLS_IN_UDP TunnelType = 13
TUNNEL_TYPE_SR_POLICY TunnelType = 15
TUNNEL_TYPE_GENEVE TunnelType = 19
+ TUNNEL_TYPE_WIREGUARD TunnelType = 51820
)
func (p TunnelType) String() string {
@@ -214,6 +216,8 @@ func (p TunnelType) String() string {
return "sr-policy"
case TUNNEL_TYPE_GENEVE:
return "geneve"
+ case TUNNEL_TYPE_WIREGUARD:
+ return "wireguard"
default:
return fmt.Sprintf("TunnelType(%d)", uint8(p))
}
@@ -11691,6 +11695,50 @@ func NewTunnelEncapSubTLVEncapsulation(key uint32, cookie []byte) *TunnelEncapSu
}
}
+type TunnelEncapSubTLVWireguard struct {
+ TunnelEncapSubTLV
+ Peer []byte
+}
+
+func (t *TunnelEncapSubTLVWireguard) DecodeFromBytes(data []byte) error {
+ value, err := t.TunnelEncapSubTLV.DecodeFromBytes(data)
+ if err != nil {
+ return err
+ }
+ if t.Length < 32 { // FIXME
+ return NewMessageError(BGP_ERROR_UPDATE_MESSAGE_ERROR, BGP_ERROR_SUB_MALFORMED_ATTRIBUTE_LIST, nil, "Not all TunnelEncapSubTLVWireguard bytes available")
+ }
+ t.Peer = value
+ return nil
+}
+
+func (t *TunnelEncapSubTLVWireguard) Serialize() ([]byte, error) {
+ return t.TunnelEncapSubTLV.Serialize(t.Peer)
+}
+
+func (t *TunnelEncapSubTLVWireguard) String() string {
+ return fmt.Sprintf("{Peer: %s}", base64.StdEncoding.EncodeToString(t.Peer))
+}
+
+func (t *TunnelEncapSubTLVWireguard) MarshalJSON() ([]byte, error) {
+ return json.Marshal(struct {
+ Type EncapSubTLVType `json:"type"`
+ Peer []byte `json:"peer"`
+ }{
+ Type: t.Type,
+ Peer: t.Peer,
+ })
+}
+
+func NewTunnelEncapSubTLVWireguard(peer []byte) *TunnelEncapSubTLVWireguard {
+ return &TunnelEncapSubTLVWireguard{
+ TunnelEncapSubTLV: TunnelEncapSubTLV{
+ Type: ENCAP_SUBTLV_TYPE_ENCAPSULATION,
+ },
+ Peer: peer,
+ }
+}
+
type TunnelEncapSubTLVProtocol struct {
TunnelEncapSubTLV
Protocol uint16
@@ -11962,7 +12010,12 @@ func (t *TunnelEncapTLV) DecodeFromBytes(data []byte) error {
var subTlv TunnelEncapSubTLVInterface
switch subType {
case ENCAP_SUBTLV_TYPE_ENCAPSULATION:
- subTlv = &TunnelEncapSubTLVEncapsulation{}
+ switch t.Type {
+ case TUNNEL_TYPE_WIREGUARD:
+ subTlv = &TunnelEncapSubTLVWireguard{}
+ default:
+ subTlv = &TunnelEncapSubTLVEncapsulation{}
+ }
case ENCAP_SUBTLV_TYPE_PROTOCOL:
subTlv = &TunnelEncapSubTLVProtocol{}
case ENCAP_SUBTLV_TYPE_COLOR: