diff --git a/.gitignore b/.gitignore index 418d89cf6d626b3e1e49607ce007fae42eda77cd..22379e5e9c95bc8a6a5c324892a7fde0c7365a8e 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,6 @@ __debug_bin #misc */mongo_backup_*.tar + +# plugins +plugin-registry/plugins/ diff --git a/api/go/gosdn/networkelement/networkelement.pb.go b/api/go/gosdn/networkelement/networkelement.pb.go index 60220e8f7e75534d8acbdcdd7ac1edc54f7aa1f5..a53219a6f45a2a57462dae1f177f1790de2ccc4e 100644 --- a/api/go/gosdn/networkelement/networkelement.pb.go +++ b/api/go/gosdn/networkelement/networkelement.pb.go @@ -8,11 +8,11 @@ package networkelement import ( conflict "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict" - _ "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" southbound "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" transport "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" - _ "github.com/openconfig/gnmi/proto/gnmi" + gnmi "github.com/openconfig/gnmi/proto/gnmi" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -77,83 +77,267 @@ func (Status) EnumDescriptor() ([]byte, []int) { return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{0} } -type NetworkElement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type ChangeState int32 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Model string `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"` - TransportAddress string `protobuf:"bytes,4,opt,name=transport_address,json=transportAddress,proto3" json:"transport_address,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` -} +const ( + ChangeState_CHANGE_STATE_UNSPECIFIED ChangeState = 0 + ChangeState_CHANGE_STATE_PENDING ChangeState = 1 + ChangeState_CHANGE_STATE_COMMITTED ChangeState = 2 + ChangeState_CHANGE_STATE_CONFIRMED ChangeState = 3 + ChangeState_CHANGE_STATE_INCONSISTENT ChangeState = 4 +) -func (x *NetworkElement) Reset() { - *x = NetworkElement{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// Enum value maps for ChangeState. +var ( + ChangeState_name = map[int32]string{ + 0: "CHANGE_STATE_UNSPECIFIED", + 1: "CHANGE_STATE_PENDING", + 2: "CHANGE_STATE_COMMITTED", + 3: "CHANGE_STATE_CONFIRMED", + 4: "CHANGE_STATE_INCONSISTENT", + } + ChangeState_value = map[string]int32{ + "CHANGE_STATE_UNSPECIFIED": 0, + "CHANGE_STATE_PENDING": 1, + "CHANGE_STATE_COMMITTED": 2, + "CHANGE_STATE_CONFIRMED": 3, + "CHANGE_STATE_INCONSISTENT": 4, } +) + +func (x ChangeState) Enum() *ChangeState { + p := new(ChangeState) + *p = x + return p } -func (x *NetworkElement) String() string { - return protoimpl.X.MessageStringOf(x) +func (x ChangeState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (*NetworkElement) ProtoMessage() {} +func (ChangeState) Descriptor() protoreflect.EnumDescriptor { + return file_gosdn_networkelement_networkelement_proto_enumTypes[1].Descriptor() +} -func (x *NetworkElement) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +func (ChangeState) Type() protoreflect.EnumType { + return &file_gosdn_networkelement_networkelement_proto_enumTypes[1] } -// Deprecated: Use NetworkElement.ProtoReflect.Descriptor instead. -func (*NetworkElement) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{0} +func (x ChangeState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *NetworkElement) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use ChangeState.Descriptor instead. +func (ChangeState) EnumDescriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{1} } -func (x *NetworkElement) GetName() string { - if x != nil { - return x.Name +type ApiOperation int32 + +const ( + ApiOperation_API_OPERATION_UNSPECIFIED ApiOperation = 0 + ApiOperation_API_OPERATION_UPDATE ApiOperation = 1 + ApiOperation_API_OPERATION_REPLACE ApiOperation = 2 + ApiOperation_API_OPERATION_DELETE ApiOperation = 3 +) + +// Enum value maps for ApiOperation. +var ( + ApiOperation_name = map[int32]string{ + 0: "API_OPERATION_UNSPECIFIED", + 1: "API_OPERATION_UPDATE", + 2: "API_OPERATION_REPLACE", + 3: "API_OPERATION_DELETE", } - return "" + ApiOperation_value = map[string]int32{ + "API_OPERATION_UNSPECIFIED": 0, + "API_OPERATION_UPDATE": 1, + "API_OPERATION_REPLACE": 2, + "API_OPERATION_DELETE": 3, + } +) + +func (x ApiOperation) Enum() *ApiOperation { + p := new(ApiOperation) + *p = x + return p } -func (x *NetworkElement) GetModel() string { - if x != nil { - return x.Model +func (x ApiOperation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ApiOperation) Descriptor() protoreflect.EnumDescriptor { + return file_gosdn_networkelement_networkelement_proto_enumTypes[2].Descriptor() +} + +func (ApiOperation) Type() protoreflect.EnumType { + return &file_gosdn_networkelement_networkelement_proto_enumTypes[2] +} + +func (x ApiOperation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ApiOperation.Descriptor instead. +func (ApiOperation) EnumDescriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{2} +} + +type Operation int32 + +const ( + Operation_OPERATION_UNSPECIFIED Operation = 0 + Operation_OPERATION_CREATE Operation = 1 + Operation_OPERATION_COMMIT Operation = 2 + Operation_OPERATION_CONFIRM Operation = 3 +) + +// Enum value maps for Operation. +var ( + Operation_name = map[int32]string{ + 0: "OPERATION_UNSPECIFIED", + 1: "OPERATION_CREATE", + 2: "OPERATION_COMMIT", + 3: "OPERATION_CONFIRM", } - return "" + Operation_value = map[string]int32{ + "OPERATION_UNSPECIFIED": 0, + "OPERATION_CREATE": 1, + "OPERATION_COMMIT": 2, + "OPERATION_CONFIRM": 3, + } +) + +func (x Operation) Enum() *Operation { + p := new(Operation) + *p = x + return p } -func (x *NetworkElement) GetTransportAddress() string { - if x != nil { - return x.TransportAddress +func (x Operation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Operation) Descriptor() protoreflect.EnumDescriptor { + return file_gosdn_networkelement_networkelement_proto_enumTypes[3].Descriptor() +} + +func (Operation) Type() protoreflect.EnumType { + return &file_gosdn_networkelement_networkelement_proto_enumTypes[3] +} + +func (x Operation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Operation.Descriptor instead. +func (Operation) EnumDescriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{3} +} + +type SubscriptionMode int32 + +const ( + SubscriptionMode_SUBSCRIPTION_MODE_UNSPECIFIED SubscriptionMode = 0 + SubscriptionMode_SUBSCRIPTION_MODE_ONCE SubscriptionMode = 1 + SubscriptionMode_SUBSCRIPTION_MODE_STREAM SubscriptionMode = 2 + SubscriptionMode_SUBSCRIPTION_MODE_POLL SubscriptionMode = 3 +) + +// Enum value maps for SubscriptionMode. +var ( + SubscriptionMode_name = map[int32]string{ + 0: "SUBSCRIPTION_MODE_UNSPECIFIED", + 1: "SUBSCRIPTION_MODE_ONCE", + 2: "SUBSCRIPTION_MODE_STREAM", + 3: "SUBSCRIPTION_MODE_POLL", } - return "" + SubscriptionMode_value = map[string]int32{ + "SUBSCRIPTION_MODE_UNSPECIFIED": 0, + "SUBSCRIPTION_MODE_ONCE": 1, + "SUBSCRIPTION_MODE_STREAM": 2, + "SUBSCRIPTION_MODE_POLL": 3, + } +) + +func (x SubscriptionMode) Enum() *SubscriptionMode { + p := new(SubscriptionMode) + *p = x + return p } -func (x *NetworkElement) GetMetadata() *conflict.Metadata { - if x != nil { - return x.Metadata +func (x SubscriptionMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SubscriptionMode) Descriptor() protoreflect.EnumDescriptor { + return file_gosdn_networkelement_networkelement_proto_enumTypes[4].Descriptor() +} + +func (SubscriptionMode) Type() protoreflect.EnumType { + return &file_gosdn_networkelement_networkelement_proto_enumTypes[4] +} + +func (x SubscriptionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SubscriptionMode.Descriptor instead. +func (SubscriptionMode) EnumDescriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{4} +} + +type StreamMode int32 + +const ( + StreamMode_STREAM_MODE_UNSPECIFIED StreamMode = 0 + StreamMode_STREAM_MODE_TARGET_DEFINED StreamMode = 1 // The target selects the relevant mode for each element. + StreamMode_STREAM_MODE_ON_CHANGE StreamMode = 2 // The target sends an update on element value change. + StreamMode_STREAM_MODE_SAMPLE StreamMode = 3 // The target samples values according to the interval. +) + +// Enum value maps for StreamMode. +var ( + StreamMode_name = map[int32]string{ + 0: "STREAM_MODE_UNSPECIFIED", + 1: "STREAM_MODE_TARGET_DEFINED", + 2: "STREAM_MODE_ON_CHANGE", + 3: "STREAM_MODE_SAMPLE", } - return nil + StreamMode_value = map[string]int32{ + "STREAM_MODE_UNSPECIFIED": 0, + "STREAM_MODE_TARGET_DEFINED": 1, + "STREAM_MODE_ON_CHANGE": 2, + "STREAM_MODE_SAMPLE": 3, + } +) + +func (x StreamMode) Enum() *StreamMode { + p := new(StreamMode) + *p = x + return p +} + +func (x StreamMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StreamMode) Descriptor() protoreflect.EnumDescriptor { + return file_gosdn_networkelement_networkelement_proto_enumTypes[5].Descriptor() +} + +func (StreamMode) Type() protoreflect.EnumType { + return &file_gosdn_networkelement_networkelement_proto_enumTypes[5] +} + +func (x StreamMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StreamMode.Descriptor instead. +func (StreamMode) EnumDescriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{5} } type AddNetworkElementConfiguration struct { @@ -170,7 +354,7 @@ type AddNetworkElementConfiguration struct { func (x *AddNetworkElementConfiguration) Reset() { *x = AddNetworkElementConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -183,7 +367,7 @@ func (x *AddNetworkElementConfiguration) String() string { func (*AddNetworkElementConfiguration) ProtoMessage() {} func (x *AddNetworkElementConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -196,7 +380,7 @@ func (x *AddNetworkElementConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use AddNetworkElementConfiguration.ProtoReflect.Descriptor instead. func (*AddNetworkElementConfiguration) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{1} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{0} } func (x *AddNetworkElementConfiguration) GetAddress() string { @@ -240,7 +424,7 @@ type AddNetworkElementRequest struct { func (x *AddNetworkElementRequest) Reset() { *x = AddNetworkElementRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -253,7 +437,7 @@ func (x *AddNetworkElementRequest) String() string { func (*AddNetworkElementRequest) ProtoMessage() {} func (x *AddNetworkElementRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -266,7 +450,7 @@ func (x *AddNetworkElementRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddNetworkElementRequest.ProtoReflect.Descriptor instead. func (*AddNetworkElementRequest) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{2} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{1} } func (x *AddNetworkElementRequest) GetTimestamp() int64 { @@ -303,7 +487,7 @@ type AddNetworkElementResponse struct { func (x *AddNetworkElementResponse) Reset() { *x = AddNetworkElementResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -316,7 +500,7 @@ func (x *AddNetworkElementResponse) String() string { func (*AddNetworkElementResponse) ProtoMessage() {} func (x *AddNetworkElementResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -329,7 +513,7 @@ func (x *AddNetworkElementResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AddNetworkElementResponse.ProtoReflect.Descriptor instead. func (*AddNetworkElementResponse) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{3} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{2} } func (x *AddNetworkElementResponse) GetTimestamp() int64 { @@ -365,7 +549,7 @@ type GetNetworkElementRequest struct { func (x *GetNetworkElementRequest) Reset() { *x = GetNetworkElementRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -378,7 +562,7 @@ func (x *GetNetworkElementRequest) String() string { func (*GetNetworkElementRequest) ProtoMessage() {} func (x *GetNetworkElementRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -391,7 +575,7 @@ func (x *GetNetworkElementRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNetworkElementRequest.ProtoReflect.Descriptor instead. func (*GetNetworkElementRequest) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{4} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{3} } func (x *GetNetworkElementRequest) GetTimestamp() int64 { @@ -413,15 +597,15 @@ type GetNetworkElementResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` - NetworkElement *NetworkElement `protobuf:"bytes,3,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` + NetworkElement *ManagedNetworkElement `protobuf:"bytes,3,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` } func (x *GetNetworkElementResponse) Reset() { *x = GetNetworkElementResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -434,7 +618,7 @@ func (x *GetNetworkElementResponse) String() string { func (*GetNetworkElementResponse) ProtoMessage() {} func (x *GetNetworkElementResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -447,7 +631,7 @@ func (x *GetNetworkElementResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNetworkElementResponse.ProtoReflect.Descriptor instead. func (*GetNetworkElementResponse) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{5} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{4} } func (x *GetNetworkElementResponse) GetTimestamp() int64 { @@ -464,7 +648,7 @@ func (x *GetNetworkElementResponse) GetStatus() Status { return Status_STATUS_UNSPECIFIED } -func (x *GetNetworkElementResponse) GetNetworkElement() *NetworkElement { +func (x *GetNetworkElementResponse) GetNetworkElement() *ManagedNetworkElement { if x != nil { return x.NetworkElement } @@ -482,7 +666,7 @@ type GetAllNetworkElementRequest struct { func (x *GetAllNetworkElementRequest) Reset() { *x = GetAllNetworkElementRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -495,7 +679,7 @@ func (x *GetAllNetworkElementRequest) String() string { func (*GetAllNetworkElementRequest) ProtoMessage() {} func (x *GetAllNetworkElementRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -508,7 +692,7 @@ func (x *GetAllNetworkElementRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAllNetworkElementRequest.ProtoReflect.Descriptor instead. func (*GetAllNetworkElementRequest) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{6} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{5} } func (x *GetAllNetworkElementRequest) GetTimestamp() int64 { @@ -523,15 +707,15 @@ type GetAllNetworkElementResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` - NetworkElement []*NetworkElement `protobuf:"bytes,3,rep,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` + NetworkElement []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` } func (x *GetAllNetworkElementResponse) Reset() { *x = GetAllNetworkElementResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -544,7 +728,7 @@ func (x *GetAllNetworkElementResponse) String() string { func (*GetAllNetworkElementResponse) ProtoMessage() {} func (x *GetAllNetworkElementResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -557,7 +741,7 @@ func (x *GetAllNetworkElementResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAllNetworkElementResponse.ProtoReflect.Descriptor instead. func (*GetAllNetworkElementResponse) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{7} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{6} } func (x *GetAllNetworkElementResponse) GetTimestamp() int64 { @@ -574,7 +758,7 @@ func (x *GetAllNetworkElementResponse) GetStatus() Status { return Status_STATUS_UNSPECIFIED } -func (x *GetAllNetworkElementResponse) GetNetworkElement() []*NetworkElement { +func (x *GetAllNetworkElementResponse) GetNetworkElement() []*ManagedNetworkElement { if x != nil { return x.NetworkElement } @@ -586,14 +770,14 @@ type UpdateNetworkElementRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - NetworkElement *NetworkElement `protobuf:"bytes,2,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + NetworkElement *ManagedNetworkElement `protobuf:"bytes,2,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` } func (x *UpdateNetworkElementRequest) Reset() { *x = UpdateNetworkElementRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -606,7 +790,7 @@ func (x *UpdateNetworkElementRequest) String() string { func (*UpdateNetworkElementRequest) ProtoMessage() {} func (x *UpdateNetworkElementRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -619,7 +803,7 @@ func (x *UpdateNetworkElementRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateNetworkElementRequest.ProtoReflect.Descriptor instead. func (*UpdateNetworkElementRequest) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{8} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{7} } func (x *UpdateNetworkElementRequest) GetTimestamp() int64 { @@ -629,7 +813,7 @@ func (x *UpdateNetworkElementRequest) GetTimestamp() int64 { return 0 } -func (x *UpdateNetworkElementRequest) GetNetworkElement() *NetworkElement { +func (x *UpdateNetworkElementRequest) GetNetworkElement() *ManagedNetworkElement { if x != nil { return x.NetworkElement } @@ -648,7 +832,7 @@ type UpdateNetworkElementResponse struct { func (x *UpdateNetworkElementResponse) Reset() { *x = UpdateNetworkElementResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -661,7 +845,7 @@ func (x *UpdateNetworkElementResponse) String() string { func (*UpdateNetworkElementResponse) ProtoMessage() {} func (x *UpdateNetworkElementResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -674,7 +858,7 @@ func (x *UpdateNetworkElementResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateNetworkElementResponse.ProtoReflect.Descriptor instead. func (*UpdateNetworkElementResponse) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{9} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{8} } func (x *UpdateNetworkElementResponse) GetTimestamp() int64 { @@ -703,7 +887,7 @@ type DeleteNetworkElementRequest struct { func (x *DeleteNetworkElementRequest) Reset() { *x = DeleteNetworkElementRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -716,7 +900,7 @@ func (x *DeleteNetworkElementRequest) String() string { func (*DeleteNetworkElementRequest) ProtoMessage() {} func (x *DeleteNetworkElementRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -729,7 +913,7 @@ func (x *DeleteNetworkElementRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNetworkElementRequest.ProtoReflect.Descriptor instead. func (*DeleteNetworkElementRequest) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{10} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{9} } func (x *DeleteNetworkElementRequest) GetTimestamp() int64 { @@ -758,7 +942,7 @@ type DeleteNetworkElementResponse struct { func (x *DeleteNetworkElementResponse) Reset() { *x = DeleteNetworkElementResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -771,7 +955,7 @@ func (x *DeleteNetworkElementResponse) String() string { func (*DeleteNetworkElementResponse) ProtoMessage() {} func (x *DeleteNetworkElementResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -784,7 +968,7 @@ func (x *DeleteNetworkElementResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNetworkElementResponse.ProtoReflect.Descriptor instead. func (*DeleteNetworkElementResponse) Descriptor() ([]byte, []int) { - return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{11} + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{10} } func (x *DeleteNetworkElementResponse) GetTimestamp() int64 { @@ -801,72 +985,2142 @@ func (x *DeleteNetworkElementResponse) GetStatus() Status { return Status_STATUS_UNSPECIFIED } -var File_gosdn_networkelement_networkelement_proto protoreflect.FileDescriptor +type ManagedNetworkElement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{ - 0x0a, 0x29, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x13, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x2f, 0x70, 0x6e, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, - 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xad, 0x01, 0x0a, 0x0e, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf2, 0x01, 0x0a, 0x1e, - 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, - 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, - 0x69, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5d, 0x0a, 0x0f, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x9d, 0x01, 0x0a, - 0x19, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Model string `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"` + MneNotification []*gnmi.Notification `protobuf:"bytes,4,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` + TransportAddress string `protobuf:"bytes,5,opt,name=transport_address,json=transportAddress,proto3" json:"transport_address,omitempty"` + TransportOption *transport.TransportOption `protobuf:"bytes,6,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"` + AssociatedPnd string `protobuf:"bytes,8,opt,name=associated_pnd,json=associatedPnd,proto3" json:"associated_pnd,omitempty"` +} + +func (x *ManagedNetworkElement) Reset() { + *x = ManagedNetworkElement{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManagedNetworkElement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManagedNetworkElement) ProtoMessage() {} + +func (x *ManagedNetworkElement) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ManagedNetworkElement.ProtoReflect.Descriptor instead. +func (*ManagedNetworkElement) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{11} +} + +func (x *ManagedNetworkElement) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ManagedNetworkElement) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ManagedNetworkElement) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ManagedNetworkElement) GetMneNotification() []*gnmi.Notification { + if x != nil { + return x.MneNotification + } + return nil +} + +func (x *ManagedNetworkElement) GetTransportAddress() string { + if x != nil { + return x.TransportAddress + } + return "" +} + +func (x *ManagedNetworkElement) GetTransportOption() *transport.TransportOption { + if x != nil { + return x.TransportOption + } + return nil +} + +func (x *ManagedNetworkElement) GetMetadata() *conflict.Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *ManagedNetworkElement) GetAssociatedPnd() string { + if x != nil { + return x.AssociatedPnd + } + return "" +} + +type FlattenedManagedNetworkElement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + Pluginid string `protobuf:"bytes,4,opt,name=pluginid,proto3" json:"pluginid,omitempty"` +} + +func (x *FlattenedManagedNetworkElement) Reset() { + *x = FlattenedManagedNetworkElement{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlattenedManagedNetworkElement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlattenedManagedNetworkElement) ProtoMessage() {} + +func (x *FlattenedManagedNetworkElement) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlattenedManagedNetworkElement.ProtoReflect.Descriptor instead. +func (*FlattenedManagedNetworkElement) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{12} +} + +func (x *FlattenedManagedNetworkElement) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *FlattenedManagedNetworkElement) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlattenedManagedNetworkElement) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +func (x *FlattenedManagedNetworkElement) GetPluginid() string { + if x != nil { + return x.Pluginid + } + return "" +} + +type GetMneListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *GetMneListRequest) Reset() { + *x = GetMneListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMneListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMneListRequest) ProtoMessage() {} + +func (x *GetMneListRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMneListRequest.ProtoReflect.Descriptor instead. +func (*GetMneListRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{13} +} + +func (x *GetMneListRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetMneListRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type GetMneListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` +} + +func (x *GetMneListResponse) Reset() { + *x = GetMneListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMneListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMneListResponse) ProtoMessage() {} + +func (x *GetMneListResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMneListResponse.ProtoReflect.Descriptor instead. +func (*GetMneListResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{14} +} + +func (x *GetMneListResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetMneListResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetMneListResponse) GetMne() []*ManagedNetworkElement { + if x != nil { + return x.Mne + } + return nil +} + +type GetFlattenedMneListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *GetFlattenedMneListRequest) Reset() { + *x = GetFlattenedMneListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFlattenedMneListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFlattenedMneListRequest) ProtoMessage() {} + +func (x *GetFlattenedMneListRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFlattenedMneListRequest.ProtoReflect.Descriptor instead. +func (*GetFlattenedMneListRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{15} +} + +func (x *GetFlattenedMneListRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetFlattenedMneListRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type GetFlattenedMneListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne []*FlattenedManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` +} + +func (x *GetFlattenedMneListResponse) Reset() { + *x = GetFlattenedMneListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFlattenedMneListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFlattenedMneListResponse) ProtoMessage() {} + +func (x *GetFlattenedMneListResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFlattenedMneListResponse.ProtoReflect.Descriptor instead. +func (*GetFlattenedMneListResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{16} +} + +func (x *GetFlattenedMneListResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetFlattenedMneListResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetFlattenedMneListResponse) GetMne() []*FlattenedManagedNetworkElement { + if x != nil { + return x.Mne + } + return nil +} + +type GetMneRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *GetMneRequest) Reset() { + *x = GetMneRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMneRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMneRequest) ProtoMessage() {} + +func (x *GetMneRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMneRequest.ProtoReflect.Descriptor instead. +func (*GetMneRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{17} +} + +func (x *GetMneRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetMneRequest) GetMneid() string { + if x != nil { + return x.Mneid + } + return "" +} + +func (x *GetMneRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type GetMneResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne *ManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` +} + +func (x *GetMneResponse) Reset() { + *x = GetMneResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMneResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMneResponse) ProtoMessage() {} + +func (x *GetMneResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMneResponse.ProtoReflect.Descriptor instead. +func (*GetMneResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{18} +} + +func (x *GetMneResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetMneResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetMneResponse) GetMne() *ManagedNetworkElement { + if x != nil { + return x.Mne + } + return nil +} + +type GetFlattenedMneResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne *FlattenedManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` +} + +func (x *GetFlattenedMneResponse) Reset() { + *x = GetFlattenedMneResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFlattenedMneResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFlattenedMneResponse) ProtoMessage() {} + +func (x *GetFlattenedMneResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFlattenedMneResponse.ProtoReflect.Descriptor instead. +func (*GetFlattenedMneResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{19} +} + +func (x *GetFlattenedMneResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetFlattenedMneResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetFlattenedMneResponse) GetMne() *FlattenedManagedNetworkElement { + if x != nil { + return x.Mne + } + return nil +} + +type SetMne struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + PluginId string `protobuf:"bytes,3,opt,name=pluginId,proto3" json:"pluginId,omitempty"` + MneName string `protobuf:"bytes,4,opt,name=mne_name,json=mneName,proto3" json:"mne_name,omitempty"` + TransportOption *transport.TransportOption `protobuf:"bytes,5,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"` +} + +func (x *SetMne) Reset() { + *x = SetMne{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMne) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMne) ProtoMessage() {} + +func (x *SetMne) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetMne.ProtoReflect.Descriptor instead. +func (*SetMne) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{20} +} + +func (x *SetMne) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *SetMne) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +func (x *SetMne) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *SetMne) GetMneName() string { + if x != nil { + return x.MneName + } + return "" +} + +func (x *SetMne) GetTransportOption() *transport.TransportOption { + if x != nil { + return x.TransportOption + } + return nil +} + +type SetMneListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mne []*SetMne `protobuf:"bytes,2,rep,name=mne,proto3" json:"mne,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *SetMneListRequest) Reset() { + *x = SetMneListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMneListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMneListRequest) ProtoMessage() {} + +func (x *SetMneListRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetMneListRequest.ProtoReflect.Descriptor instead. +func (*SetMneListRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{21} +} + +func (x *SetMneListRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetMneListRequest) GetMne() []*SetMne { + if x != nil { + return x.Mne + } + return nil +} + +func (x *SetMneListRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type SetMneListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` + Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"` +} + +func (x *SetMneListResponse) Reset() { + *x = SetMneListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMneListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMneListResponse) ProtoMessage() {} + +func (x *SetMneListResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetMneListResponse.ProtoReflect.Descriptor instead. +func (*SetMneListResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{22} +} + +func (x *SetMneListResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetMneListResponse) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + +func (x *SetMneListResponse) GetResponses() []*SetResponse { + if x != nil { + return x.Responses + } + return nil +} + +type GetPathRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *GetPathRequest) Reset() { + *x = GetPathRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetPathRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPathRequest) ProtoMessage() {} + +func (x *GetPathRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPathRequest.ProtoReflect.Descriptor instead. +func (*GetPathRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{23} +} + +func (x *GetPathRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetPathRequest) GetMneid() string { + if x != nil { + return x.Mneid + } + return "" +} + +func (x *GetPathRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *GetPathRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type GetPathResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` +} + +func (x *GetPathResponse) Reset() { + *x = GetPathResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetPathResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPathResponse) ProtoMessage() {} + +func (x *GetPathResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPathResponse.ProtoReflect.Descriptor instead. +func (*GetPathResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{24} +} + +func (x *GetPathResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetPathResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetPathResponse) GetMneNotification() []*gnmi.Notification { + if x != nil { + return x.MneNotification + } + return nil +} + +type SetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Status Status `protobuf:"varint,3,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` +} + +func (x *SetResponse) Reset() { + *x = SetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetResponse) ProtoMessage() {} + +func (x *SetResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetResponse.ProtoReflect.Descriptor instead. +func (*SetResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{25} +} + +func (x *SetResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetResponse) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SetResponse) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + +type SetPathListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + ChangeRequest []*ChangeRequest `protobuf:"bytes,2,rep,name=change_request,json=changeRequest,proto3" json:"change_request,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *SetPathListRequest) Reset() { + *x = SetPathListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetPathListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetPathListRequest) ProtoMessage() {} + +func (x *SetPathListRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetPathListRequest.ProtoReflect.Descriptor instead. +func (*SetPathListRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{26} +} + +func (x *SetPathListRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetPathListRequest) GetChangeRequest() []*ChangeRequest { + if x != nil { + return x.ChangeRequest + } + return nil +} + +func (x *SetPathListRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type SetPathListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` + Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"` +} + +func (x *SetPathListResponse) Reset() { + *x = SetPathListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetPathListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetPathListResponse) ProtoMessage() {} + +func (x *SetPathListResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetPathListResponse.ProtoReflect.Descriptor instead. +func (*SetPathListResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{27} +} + +func (x *SetPathListResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetPathListResponse) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + +func (x *SetPathListResponse) GetResponses() []*SetResponse { + if x != nil { + return x.Responses + } + return nil +} + +type DeleteMneRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + Mneid string `protobuf:"bytes,3,opt,name=mneid,proto3" json:"mneid,omitempty"` +} + +func (x *DeleteMneRequest) Reset() { + *x = DeleteMneRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteMneRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteMneRequest) ProtoMessage() {} + +func (x *DeleteMneRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteMneRequest.ProtoReflect.Descriptor instead. +func (*DeleteMneRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{28} +} + +func (x *DeleteMneRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *DeleteMneRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +func (x *DeleteMneRequest) GetMneid() string { + if x != nil { + return x.Mneid + } + return "" +} + +type DeleteMneResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` +} + +func (x *DeleteMneResponse) Reset() { + *x = DeleteMneResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteMneResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteMneResponse) ProtoMessage() {} + +func (x *DeleteMneResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteMneResponse.ProtoReflect.Descriptor instead. +func (*DeleteMneResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{29} +} + +func (x *DeleteMneResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *DeleteMneResponse) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + +type Change struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Age int64 `protobuf:"varint,2,opt,name=age,proto3" json:"age,omitempty"` + State ChangeState `protobuf:"varint,3,opt,name=state,proto3,enum=gosdn.networkelement.ChangeState" json:"state,omitempty"` + Diff *gnmi.Notification `protobuf:"bytes,4,opt,name=diff,proto3" json:"diff,omitempty"` +} + +func (x *Change) Reset() { + *x = Change{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Change) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Change) ProtoMessage() {} + +func (x *Change) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Change.ProtoReflect.Descriptor instead. +func (*Change) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{30} +} + +func (x *Change) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Change) GetAge() int64 { + if x != nil { + return x.Age + } + return 0 +} + +func (x *Change) GetState() ChangeState { + if x != nil { + return x.State + } + return ChangeState_CHANGE_STATE_UNSPECIFIED +} + +func (x *Change) GetDiff() *gnmi.Notification { + if x != nil { + return x.Diff + } + return nil +} + +//TODO: rename +type ChangeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mneid string `protobuf:"bytes,1,opt,name=mneid,proto3" json:"mneid,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + ApiOp ApiOperation `protobuf:"varint,4,opt,name=api_op,json=apiOp,proto3,enum=gosdn.networkelement.ApiOperation" json:"api_op,omitempty"` +} + +func (x *ChangeRequest) Reset() { + *x = ChangeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeRequest) ProtoMessage() {} + +func (x *ChangeRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChangeRequest.ProtoReflect.Descriptor instead. +func (*ChangeRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{31} +} + +func (x *ChangeRequest) GetMneid() string { + if x != nil { + return x.Mneid + } + return "" +} + +func (x *ChangeRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *ChangeRequest) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *ChangeRequest) GetApiOp() ApiOperation { + if x != nil { + return x.ApiOp + } + return ApiOperation_API_OPERATION_UNSPECIFIED +} + +type SetChange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cuid string `protobuf:"bytes,1,opt,name=cuid,proto3" json:"cuid,omitempty"` + Op Operation `protobuf:"varint,2,opt,name=op,proto3,enum=gosdn.networkelement.Operation" json:"op,omitempty"` +} + +func (x *SetChange) Reset() { + *x = SetChange{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetChange) ProtoMessage() {} + +func (x *SetChange) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetChange.ProtoReflect.Descriptor instead. +func (*SetChange) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{32} +} + +func (x *SetChange) GetCuid() string { + if x != nil { + return x.Cuid + } + return "" +} + +func (x *SetChange) GetOp() Operation { + if x != nil { + return x.Op + } + return Operation_OPERATION_UNSPECIFIED +} + +type GetChangeListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *GetChangeListRequest) Reset() { + *x = GetChangeListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChangeListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChangeListRequest) ProtoMessage() {} + +func (x *GetChangeListRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChangeListRequest.ProtoReflect.Descriptor instead. +func (*GetChangeListRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{33} +} + +func (x *GetChangeListRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetChangeListRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type GetChangeListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` +} + +func (x *GetChangeListResponse) Reset() { + *x = GetChangeListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChangeListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChangeListResponse) ProtoMessage() {} + +func (x *GetChangeListResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChangeListResponse.ProtoReflect.Descriptor instead. +func (*GetChangeListResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{34} +} + +func (x *GetChangeListResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetChangeListResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetChangeListResponse) GetChange() []*Change { + if x != nil { + return x.Change + } + return nil +} + +type GetChangeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Cuid []string `protobuf:"bytes,2,rep,name=cuid,proto3" json:"cuid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *GetChangeRequest) Reset() { + *x = GetChangeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChangeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChangeRequest) ProtoMessage() {} + +func (x *GetChangeRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChangeRequest.ProtoReflect.Descriptor instead. +func (*GetChangeRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{35} +} + +func (x *GetChangeRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetChangeRequest) GetCuid() []string { + if x != nil { + return x.Cuid + } + return nil +} + +func (x *GetChangeRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type GetChangeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` +} + +func (x *GetChangeResponse) Reset() { + *x = GetChangeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChangeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChangeResponse) ProtoMessage() {} + +func (x *GetChangeResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChangeResponse.ProtoReflect.Descriptor instead. +func (*GetChangeResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{36} +} + +func (x *GetChangeResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *GetChangeResponse) GetPnd() *pnd.PrincipalNetworkDomain { + if x != nil { + return x.Pnd + } + return nil +} + +func (x *GetChangeResponse) GetChange() []*Change { + if x != nil { + return x.Change + } + return nil +} + +type SetChangeListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Change []*SetChange `protobuf:"bytes,2,rep,name=change,proto3" json:"change,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *SetChangeListRequest) Reset() { + *x = SetChangeListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetChangeListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetChangeListRequest) ProtoMessage() {} + +func (x *SetChangeListRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetChangeListRequest.ProtoReflect.Descriptor instead. +func (*SetChangeListRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{37} +} + +func (x *SetChangeListRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetChangeListRequest) GetChange() []*SetChange { + if x != nil { + return x.Change + } + return nil +} + +func (x *SetChangeListRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +type SetChangeListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` + Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"` +} + +func (x *SetChangeListResponse) Reset() { + *x = SetChangeListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetChangeListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetChangeListResponse) ProtoMessage() {} + +func (x *SetChangeListResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetChangeListResponse.ProtoReflect.Descriptor instead. +func (*SetChangeListResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{38} +} + +func (x *SetChangeListResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SetChangeListResponse) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + +func (x *SetChangeListResponse) GetResponses() []*SetResponse { + if x != nil { + return x.Responses + } + return nil +} + +// The mode determines how the target should trigger updates to be sent. +// Reference: gNMI Specification Section 3.5.1.2 +type SubscriptionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Subscription []*Subscription `protobuf:"bytes,1,rep,name=subscription,proto3" json:"subscription,omitempty"` + Mode SubscriptionMode `protobuf:"varint,2,opt,name=mode,proto3,enum=gosdn.networkelement.SubscriptionMode" json:"mode,omitempty"` +} + +func (x *SubscriptionList) Reset() { + *x = SubscriptionList{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscriptionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionList) ProtoMessage() {} + +func (x *SubscriptionList) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionList.ProtoReflect.Descriptor instead. +func (*SubscriptionList) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{39} +} + +func (x *SubscriptionList) GetSubscription() []*Subscription { + if x != nil { + return x.Subscription + } + return nil +} + +func (x *SubscriptionList) GetMode() SubscriptionMode { + if x != nil { + return x.Mode + } + return SubscriptionMode_SUBSCRIPTION_MODE_UNSPECIFIED +} + +type Subscription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + StreamMode StreamMode `protobuf:"varint,2,opt,name=stream_mode,json=streamMode,proto3,enum=gosdn.networkelement.StreamMode" json:"stream_mode,omitempty"` + SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` // time in ns between samples in SAMPLE mode. +} + +func (x *Subscription) Reset() { + *x = Subscription{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Subscription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Subscription) ProtoMessage() {} + +func (x *Subscription) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Subscription.ProtoReflect.Descriptor instead. +func (*Subscription) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{40} +} + +func (x *Subscription) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *Subscription) GetStreamMode() StreamMode { + if x != nil { + return x.StreamMode + } + return StreamMode_STREAM_MODE_UNSPECIFIED +} + +func (x *Subscription) GetSampleInterval() uint64 { + if x != nil { + return x.SampleInterval + } + return 0 +} + +type SubscribePathRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + Sublist *SubscriptionList `protobuf:"bytes,4,opt,name=sublist,proto3" json:"sublist,omitempty"` +} + +func (x *SubscribePathRequest) Reset() { + *x = SubscribePathRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribePathRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribePathRequest) ProtoMessage() {} + +func (x *SubscribePathRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribePathRequest.ProtoReflect.Descriptor instead. +func (*SubscribePathRequest) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{41} +} + +func (x *SubscribePathRequest) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SubscribePathRequest) GetMneid() string { + if x != nil { + return x.Mneid + } + return "" +} + +func (x *SubscribePathRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +func (x *SubscribePathRequest) GetSublist() *SubscriptionList { + if x != nil { + return x.Sublist + } + return nil +} + +type SubscribePathResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.networkelement.Status" json:"status,omitempty"` + MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` +} + +func (x *SubscribePathResponse) Reset() { + *x = SubscribePathResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribePathResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribePathResponse) ProtoMessage() {} + +func (x *SubscribePathResponse) ProtoReflect() protoreflect.Message { + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribePathResponse.ProtoReflect.Descriptor instead. +func (*SubscribePathResponse) Descriptor() ([]byte, []int) { + return file_gosdn_networkelement_networkelement_proto_rawDescGZIP(), []int{42} +} + +func (x *SubscribePathResponse) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SubscribePathResponse) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + +func (x *SubscribePathResponse) GetMneNotification() []*gnmi.Notification { + if x != nil { + return x.MneNotification + } + return nil +} + +var File_gosdn_networkelement_networkelement_proto protoreflect.FileDescriptor + +var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, + 0x69, 0x63, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, + 0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf2, 0x01, 0x0a, 0x1e, + 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, + 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x03, 0x73, 0x62, + 0x69, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x5d, 0x0a, 0x0f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x9d, 0x01, 0x0a, + 0x19, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, @@ -879,110 +3133,533 @@ var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x54, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, + 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc8, 0x01, 0x0a, 0x1c, 0x47, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x54, + 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x91, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x22, 0xc1, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x6d, 0x70, 0x12, 0x54, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, + 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x72, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x69, 0x0a, 0x1b, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4d, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xe7, 0x02, 0x0a, 0x15, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, + 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, + 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, + 0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x10, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, + 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, + 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, + 0x0a, 0x0e, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6e, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x65, 0x64, 0x50, 0x6e, 0x64, 0x22, 0x72, 0x0a, 0x1e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, + 0x65, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x69, 0x64, 0x22, 0x43, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa6, + 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, + 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, 0x4c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x46, 0x6c, + 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, + 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, + 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x46, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x46, 0x6c, 0x61, + 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, + 0x22, 0x55, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, + 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, + 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x3d, 0x0a, + 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, 0xb4, 0x01, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, + 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x46, 0x0a, 0x03, 0x6d, + 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, + 0x6d, 0x6e, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6e, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, + 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x73, + 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x03, 0x6d, 0x6e, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x70, 0x69, 0x64, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, + 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, + 0x6a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, + 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, + 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, + 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x71, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x0e, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x50, + 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0x72, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x22, 0x67, + 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x69, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, + 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, + 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x04, 0x64, 0x69, 0x66, 0x66, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x5f, 0x6f, + 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, + 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x61, 0x70, 0x69, + 0x4f, 0x70, 0x22, 0x50, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x75, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x02, 0x6f, 0x70, 0x22, 0x46, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xa0, 0x01, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x22, 0x72, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, + 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, + 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, + 0x56, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, + 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, + 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x41, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x32, 0xcd, 0x04, 0x0a, 0x15, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x2e, 0x2e, 0x67, 0x6f, - 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, - 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x12, 0x80, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x7f, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x06, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, + 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x12, 0x12, 0x10, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x31, - 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, + 0x8e, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x41, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, + 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, + 0x40, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x74, 0x22, 0xaa, 0x01, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, + 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, + 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x41, + 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x01, 0x12, + 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x02, 0x2a, 0x9c, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, + 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, + 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, + 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x04, + 0x2a, 0x7c, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x50, 0x49, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, + 0x43, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x69, + 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, + 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, + 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x03, 0x2a, 0x8b, 0x01, 0x0a, 0x10, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, + 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, + 0x18, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, + 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, + 0x5f, 0x50, 0x4f, 0x4c, 0x4c, 0x10, 0x03, 0x2a, 0x7c, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, + 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, + 0x12, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x10, 0x03, 0x32, 0xb4, 0x10, 0x0a, 0x15, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x8a, 0x01, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, + 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, + 0x64, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x80, 0x01, 0x0a, + 0x03, 0x47, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, - 0x61, 0x6c, 0x6c, 0x12, 0x93, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x31, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x8d, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x6c, 0x6c, 0x12, + 0x93, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, + 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x6c, + 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, - 0x22, 0x17, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, - 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, - 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, + 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, + 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x70, 0x6e, + 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x74, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, + 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x70, 0x6e, 0x64, + 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, + 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, + 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x6f, + 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, + 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0a, 0x53, 0x65, + 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, + 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x70, 0x6e, 0x64, 0x73, + 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, + 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, + 0x12, 0x85, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, + 0x22, 0x16, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, + 0x65, 0x73, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x7e, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, + 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, + 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x70, 0x6e, + 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x12, 0x80, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, + 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, + 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x70, 0x6e, 0x64, 0x73, + 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x6c, + 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, + 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, + 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -997,52 +3674,152 @@ func file_gosdn_networkelement_networkelement_proto_rawDescGZIP() []byte { return file_gosdn_networkelement_networkelement_proto_rawDescData } -var file_gosdn_networkelement_networkelement_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_gosdn_networkelement_networkelement_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_gosdn_networkelement_networkelement_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_gosdn_networkelement_networkelement_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_gosdn_networkelement_networkelement_proto_goTypes = []interface{}{ (Status)(0), // 0: gosdn.networkelement.Status - (*NetworkElement)(nil), // 1: gosdn.networkelement.NetworkElement - (*AddNetworkElementConfiguration)(nil), // 2: gosdn.networkelement.AddNetworkElementConfiguration - (*AddNetworkElementRequest)(nil), // 3: gosdn.networkelement.AddNetworkElementRequest - (*AddNetworkElementResponse)(nil), // 4: gosdn.networkelement.AddNetworkElementResponse - (*GetNetworkElementRequest)(nil), // 5: gosdn.networkelement.GetNetworkElementRequest - (*GetNetworkElementResponse)(nil), // 6: gosdn.networkelement.GetNetworkElementResponse - (*GetAllNetworkElementRequest)(nil), // 7: gosdn.networkelement.GetAllNetworkElementRequest - (*GetAllNetworkElementResponse)(nil), // 8: gosdn.networkelement.GetAllNetworkElementResponse - (*UpdateNetworkElementRequest)(nil), // 9: gosdn.networkelement.UpdateNetworkElementRequest - (*UpdateNetworkElementResponse)(nil), // 10: gosdn.networkelement.UpdateNetworkElementResponse - (*DeleteNetworkElementRequest)(nil), // 11: gosdn.networkelement.DeleteNetworkElementRequest - (*DeleteNetworkElementResponse)(nil), // 12: gosdn.networkelement.DeleteNetworkElementResponse - (*conflict.Metadata)(nil), // 13: gosdn.conflict.Metadata - (*southbound.SouthboundInterface)(nil), // 14: gosdn.southbound.SouthboundInterface - (*transport.TransportOption)(nil), // 15: gosdn.transport.TransportOption + (ChangeState)(0), // 1: gosdn.networkelement.ChangeState + (ApiOperation)(0), // 2: gosdn.networkelement.ApiOperation + (Operation)(0), // 3: gosdn.networkelement.Operation + (SubscriptionMode)(0), // 4: gosdn.networkelement.SubscriptionMode + (StreamMode)(0), // 5: gosdn.networkelement.StreamMode + (*AddNetworkElementConfiguration)(nil), // 6: gosdn.networkelement.AddNetworkElementConfiguration + (*AddNetworkElementRequest)(nil), // 7: gosdn.networkelement.AddNetworkElementRequest + (*AddNetworkElementResponse)(nil), // 8: gosdn.networkelement.AddNetworkElementResponse + (*GetNetworkElementRequest)(nil), // 9: gosdn.networkelement.GetNetworkElementRequest + (*GetNetworkElementResponse)(nil), // 10: gosdn.networkelement.GetNetworkElementResponse + (*GetAllNetworkElementRequest)(nil), // 11: gosdn.networkelement.GetAllNetworkElementRequest + (*GetAllNetworkElementResponse)(nil), // 12: gosdn.networkelement.GetAllNetworkElementResponse + (*UpdateNetworkElementRequest)(nil), // 13: gosdn.networkelement.UpdateNetworkElementRequest + (*UpdateNetworkElementResponse)(nil), // 14: gosdn.networkelement.UpdateNetworkElementResponse + (*DeleteNetworkElementRequest)(nil), // 15: gosdn.networkelement.DeleteNetworkElementRequest + (*DeleteNetworkElementResponse)(nil), // 16: gosdn.networkelement.DeleteNetworkElementResponse + (*ManagedNetworkElement)(nil), // 17: gosdn.networkelement.ManagedNetworkElement + (*FlattenedManagedNetworkElement)(nil), // 18: gosdn.networkelement.FlattenedManagedNetworkElement + (*GetMneListRequest)(nil), // 19: gosdn.networkelement.GetMneListRequest + (*GetMneListResponse)(nil), // 20: gosdn.networkelement.GetMneListResponse + (*GetFlattenedMneListRequest)(nil), // 21: gosdn.networkelement.GetFlattenedMneListRequest + (*GetFlattenedMneListResponse)(nil), // 22: gosdn.networkelement.GetFlattenedMneListResponse + (*GetMneRequest)(nil), // 23: gosdn.networkelement.GetMneRequest + (*GetMneResponse)(nil), // 24: gosdn.networkelement.GetMneResponse + (*GetFlattenedMneResponse)(nil), // 25: gosdn.networkelement.GetFlattenedMneResponse + (*SetMne)(nil), // 26: gosdn.networkelement.SetMne + (*SetMneListRequest)(nil), // 27: gosdn.networkelement.SetMneListRequest + (*SetMneListResponse)(nil), // 28: gosdn.networkelement.SetMneListResponse + (*GetPathRequest)(nil), // 29: gosdn.networkelement.GetPathRequest + (*GetPathResponse)(nil), // 30: gosdn.networkelement.GetPathResponse + (*SetResponse)(nil), // 31: gosdn.networkelement.SetResponse + (*SetPathListRequest)(nil), // 32: gosdn.networkelement.SetPathListRequest + (*SetPathListResponse)(nil), // 33: gosdn.networkelement.SetPathListResponse + (*DeleteMneRequest)(nil), // 34: gosdn.networkelement.DeleteMneRequest + (*DeleteMneResponse)(nil), // 35: gosdn.networkelement.DeleteMneResponse + (*Change)(nil), // 36: gosdn.networkelement.Change + (*ChangeRequest)(nil), // 37: gosdn.networkelement.ChangeRequest + (*SetChange)(nil), // 38: gosdn.networkelement.SetChange + (*GetChangeListRequest)(nil), // 39: gosdn.networkelement.GetChangeListRequest + (*GetChangeListResponse)(nil), // 40: gosdn.networkelement.GetChangeListResponse + (*GetChangeRequest)(nil), // 41: gosdn.networkelement.GetChangeRequest + (*GetChangeResponse)(nil), // 42: gosdn.networkelement.GetChangeResponse + (*SetChangeListRequest)(nil), // 43: gosdn.networkelement.SetChangeListRequest + (*SetChangeListResponse)(nil), // 44: gosdn.networkelement.SetChangeListResponse + (*SubscriptionList)(nil), // 45: gosdn.networkelement.SubscriptionList + (*Subscription)(nil), // 46: gosdn.networkelement.Subscription + (*SubscribePathRequest)(nil), // 47: gosdn.networkelement.SubscribePathRequest + (*SubscribePathResponse)(nil), // 48: gosdn.networkelement.SubscribePathResponse + (*southbound.SouthboundInterface)(nil), // 49: gosdn.southbound.SouthboundInterface + (*transport.TransportOption)(nil), // 50: gosdn.transport.TransportOption + (*gnmi.Notification)(nil), // 51: gnmi.Notification + (*conflict.Metadata)(nil), // 52: gosdn.conflict.Metadata + (*pnd.PrincipalNetworkDomain)(nil), // 53: gosdn.pnd.PrincipalNetworkDomain } var file_gosdn_networkelement_networkelement_proto_depIdxs = []int32{ - 13, // 0: gosdn.networkelement.NetworkElement.metadata:type_name -> gosdn.conflict.Metadata - 14, // 1: gosdn.networkelement.AddNetworkElementConfiguration.sbi:type_name -> gosdn.southbound.SouthboundInterface - 15, // 2: gosdn.networkelement.AddNetworkElementConfiguration.transport_option:type_name -> gosdn.transport.TransportOption - 2, // 3: gosdn.networkelement.AddNetworkElementRequest.network_element:type_name -> gosdn.networkelement.AddNetworkElementConfiguration - 0, // 4: gosdn.networkelement.AddNetworkElementResponse.status:type_name -> gosdn.networkelement.Status - 0, // 5: gosdn.networkelement.GetNetworkElementResponse.status:type_name -> gosdn.networkelement.Status - 1, // 6: gosdn.networkelement.GetNetworkElementResponse.network_element:type_name -> gosdn.networkelement.NetworkElement - 0, // 7: gosdn.networkelement.GetAllNetworkElementResponse.status:type_name -> gosdn.networkelement.Status - 1, // 8: gosdn.networkelement.GetAllNetworkElementResponse.network_element:type_name -> gosdn.networkelement.NetworkElement - 1, // 9: gosdn.networkelement.UpdateNetworkElementRequest.network_element:type_name -> gosdn.networkelement.NetworkElement - 0, // 10: gosdn.networkelement.UpdateNetworkElementResponse.status:type_name -> gosdn.networkelement.Status - 0, // 11: gosdn.networkelement.DeleteNetworkElementResponse.status:type_name -> gosdn.networkelement.Status - 3, // 12: gosdn.networkelement.NetworkElementService.Add:input_type -> gosdn.networkelement.AddNetworkElementRequest - 5, // 13: gosdn.networkelement.NetworkElementService.Get:input_type -> gosdn.networkelement.GetNetworkElementRequest - 7, // 14: gosdn.networkelement.NetworkElementService.GetAll:input_type -> gosdn.networkelement.GetAllNetworkElementRequest - 9, // 15: gosdn.networkelement.NetworkElementService.Update:input_type -> gosdn.networkelement.UpdateNetworkElementRequest - 4, // 16: gosdn.networkelement.NetworkElementService.Add:output_type -> gosdn.networkelement.AddNetworkElementResponse - 6, // 17: gosdn.networkelement.NetworkElementService.Get:output_type -> gosdn.networkelement.GetNetworkElementResponse - 8, // 18: gosdn.networkelement.NetworkElementService.GetAll:output_type -> gosdn.networkelement.GetAllNetworkElementResponse - 10, // 19: gosdn.networkelement.NetworkElementService.Update:output_type -> gosdn.networkelement.UpdateNetworkElementResponse - 16, // [16:20] is the sub-list for method output_type - 12, // [12:16] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 49, // 0: gosdn.networkelement.AddNetworkElementConfiguration.sbi:type_name -> gosdn.southbound.SouthboundInterface + 50, // 1: gosdn.networkelement.AddNetworkElementConfiguration.transport_option:type_name -> gosdn.transport.TransportOption + 6, // 2: gosdn.networkelement.AddNetworkElementRequest.network_element:type_name -> gosdn.networkelement.AddNetworkElementConfiguration + 0, // 3: gosdn.networkelement.AddNetworkElementResponse.status:type_name -> gosdn.networkelement.Status + 0, // 4: gosdn.networkelement.GetNetworkElementResponse.status:type_name -> gosdn.networkelement.Status + 17, // 5: gosdn.networkelement.GetNetworkElementResponse.network_element:type_name -> gosdn.networkelement.ManagedNetworkElement + 0, // 6: gosdn.networkelement.GetAllNetworkElementResponse.status:type_name -> gosdn.networkelement.Status + 17, // 7: gosdn.networkelement.GetAllNetworkElementResponse.network_element:type_name -> gosdn.networkelement.ManagedNetworkElement + 17, // 8: gosdn.networkelement.UpdateNetworkElementRequest.network_element:type_name -> gosdn.networkelement.ManagedNetworkElement + 0, // 9: gosdn.networkelement.UpdateNetworkElementResponse.status:type_name -> gosdn.networkelement.Status + 0, // 10: gosdn.networkelement.DeleteNetworkElementResponse.status:type_name -> gosdn.networkelement.Status + 51, // 11: gosdn.networkelement.ManagedNetworkElement.mne_notification:type_name -> gnmi.Notification + 50, // 12: gosdn.networkelement.ManagedNetworkElement.transport_option:type_name -> gosdn.transport.TransportOption + 52, // 13: gosdn.networkelement.ManagedNetworkElement.metadata:type_name -> gosdn.conflict.Metadata + 53, // 14: gosdn.networkelement.GetMneListResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 17, // 15: gosdn.networkelement.GetMneListResponse.mne:type_name -> gosdn.networkelement.ManagedNetworkElement + 53, // 16: gosdn.networkelement.GetFlattenedMneListResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 18, // 17: gosdn.networkelement.GetFlattenedMneListResponse.mne:type_name -> gosdn.networkelement.FlattenedManagedNetworkElement + 53, // 18: gosdn.networkelement.GetMneResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 17, // 19: gosdn.networkelement.GetMneResponse.mne:type_name -> gosdn.networkelement.ManagedNetworkElement + 53, // 20: gosdn.networkelement.GetFlattenedMneResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 18, // 21: gosdn.networkelement.GetFlattenedMneResponse.mne:type_name -> gosdn.networkelement.FlattenedManagedNetworkElement + 50, // 22: gosdn.networkelement.SetMne.transport_option:type_name -> gosdn.transport.TransportOption + 26, // 23: gosdn.networkelement.SetMneListRequest.mne:type_name -> gosdn.networkelement.SetMne + 0, // 24: gosdn.networkelement.SetMneListResponse.status:type_name -> gosdn.networkelement.Status + 31, // 25: gosdn.networkelement.SetMneListResponse.responses:type_name -> gosdn.networkelement.SetResponse + 53, // 26: gosdn.networkelement.GetPathResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 51, // 27: gosdn.networkelement.GetPathResponse.mne_notification:type_name -> gnmi.Notification + 0, // 28: gosdn.networkelement.SetResponse.status:type_name -> gosdn.networkelement.Status + 37, // 29: gosdn.networkelement.SetPathListRequest.change_request:type_name -> gosdn.networkelement.ChangeRequest + 0, // 30: gosdn.networkelement.SetPathListResponse.status:type_name -> gosdn.networkelement.Status + 31, // 31: gosdn.networkelement.SetPathListResponse.responses:type_name -> gosdn.networkelement.SetResponse + 0, // 32: gosdn.networkelement.DeleteMneResponse.status:type_name -> gosdn.networkelement.Status + 1, // 33: gosdn.networkelement.Change.state:type_name -> gosdn.networkelement.ChangeState + 51, // 34: gosdn.networkelement.Change.diff:type_name -> gnmi.Notification + 2, // 35: gosdn.networkelement.ChangeRequest.api_op:type_name -> gosdn.networkelement.ApiOperation + 3, // 36: gosdn.networkelement.SetChange.op:type_name -> gosdn.networkelement.Operation + 53, // 37: gosdn.networkelement.GetChangeListResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 36, // 38: gosdn.networkelement.GetChangeListResponse.change:type_name -> gosdn.networkelement.Change + 53, // 39: gosdn.networkelement.GetChangeResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain + 36, // 40: gosdn.networkelement.GetChangeResponse.change:type_name -> gosdn.networkelement.Change + 38, // 41: gosdn.networkelement.SetChangeListRequest.change:type_name -> gosdn.networkelement.SetChange + 0, // 42: gosdn.networkelement.SetChangeListResponse.status:type_name -> gosdn.networkelement.Status + 31, // 43: gosdn.networkelement.SetChangeListResponse.responses:type_name -> gosdn.networkelement.SetResponse + 46, // 44: gosdn.networkelement.SubscriptionList.subscription:type_name -> gosdn.networkelement.Subscription + 4, // 45: gosdn.networkelement.SubscriptionList.mode:type_name -> gosdn.networkelement.SubscriptionMode + 5, // 46: gosdn.networkelement.Subscription.stream_mode:type_name -> gosdn.networkelement.StreamMode + 45, // 47: gosdn.networkelement.SubscribePathRequest.sublist:type_name -> gosdn.networkelement.SubscriptionList + 0, // 48: gosdn.networkelement.SubscribePathResponse.status:type_name -> gosdn.networkelement.Status + 51, // 49: gosdn.networkelement.SubscribePathResponse.mne_notification:type_name -> gnmi.Notification + 7, // 50: gosdn.networkelement.NetworkElementService.Add:input_type -> gosdn.networkelement.AddNetworkElementRequest + 9, // 51: gosdn.networkelement.NetworkElementService.Get:input_type -> gosdn.networkelement.GetNetworkElementRequest + 11, // 52: gosdn.networkelement.NetworkElementService.GetAll:input_type -> gosdn.networkelement.GetAllNetworkElementRequest + 13, // 53: gosdn.networkelement.NetworkElementService.Update:input_type -> gosdn.networkelement.UpdateNetworkElementRequest + 19, // 54: gosdn.networkelement.NetworkElementService.GetMneList:input_type -> gosdn.networkelement.GetMneListRequest + 21, // 55: gosdn.networkelement.NetworkElementService.GetFlattenedMneList:input_type -> gosdn.networkelement.GetFlattenedMneListRequest + 23, // 56: gosdn.networkelement.NetworkElementService.GetMne:input_type -> gosdn.networkelement.GetMneRequest + 23, // 57: gosdn.networkelement.NetworkElementService.GetFlattenedMne:input_type -> gosdn.networkelement.GetMneRequest + 27, // 58: gosdn.networkelement.NetworkElementService.SetMneList:input_type -> gosdn.networkelement.SetMneListRequest + 29, // 59: gosdn.networkelement.NetworkElementService.GetPath:input_type -> gosdn.networkelement.GetPathRequest + 32, // 60: gosdn.networkelement.NetworkElementService.SetPathList:input_type -> gosdn.networkelement.SetPathListRequest + 34, // 61: gosdn.networkelement.NetworkElementService.DeleteMne:input_type -> gosdn.networkelement.DeleteMneRequest + 39, // 62: gosdn.networkelement.NetworkElementService.GetChangeList:input_type -> gosdn.networkelement.GetChangeListRequest + 41, // 63: gosdn.networkelement.NetworkElementService.GetChange:input_type -> gosdn.networkelement.GetChangeRequest + 43, // 64: gosdn.networkelement.NetworkElementService.SetChangeList:input_type -> gosdn.networkelement.SetChangeListRequest + 47, // 65: gosdn.networkelement.NetworkElementService.SubscribePath:input_type -> gosdn.networkelement.SubscribePathRequest + 8, // 66: gosdn.networkelement.NetworkElementService.Add:output_type -> gosdn.networkelement.AddNetworkElementResponse + 10, // 67: gosdn.networkelement.NetworkElementService.Get:output_type -> gosdn.networkelement.GetNetworkElementResponse + 12, // 68: gosdn.networkelement.NetworkElementService.GetAll:output_type -> gosdn.networkelement.GetAllNetworkElementResponse + 14, // 69: gosdn.networkelement.NetworkElementService.Update:output_type -> gosdn.networkelement.UpdateNetworkElementResponse + 20, // 70: gosdn.networkelement.NetworkElementService.GetMneList:output_type -> gosdn.networkelement.GetMneListResponse + 22, // 71: gosdn.networkelement.NetworkElementService.GetFlattenedMneList:output_type -> gosdn.networkelement.GetFlattenedMneListResponse + 24, // 72: gosdn.networkelement.NetworkElementService.GetMne:output_type -> gosdn.networkelement.GetMneResponse + 25, // 73: gosdn.networkelement.NetworkElementService.GetFlattenedMne:output_type -> gosdn.networkelement.GetFlattenedMneResponse + 28, // 74: gosdn.networkelement.NetworkElementService.SetMneList:output_type -> gosdn.networkelement.SetMneListResponse + 30, // 75: gosdn.networkelement.NetworkElementService.GetPath:output_type -> gosdn.networkelement.GetPathResponse + 33, // 76: gosdn.networkelement.NetworkElementService.SetPathList:output_type -> gosdn.networkelement.SetPathListResponse + 35, // 77: gosdn.networkelement.NetworkElementService.DeleteMne:output_type -> gosdn.networkelement.DeleteMneResponse + 40, // 78: gosdn.networkelement.NetworkElementService.GetChangeList:output_type -> gosdn.networkelement.GetChangeListResponse + 42, // 79: gosdn.networkelement.NetworkElementService.GetChange:output_type -> gosdn.networkelement.GetChangeResponse + 44, // 80: gosdn.networkelement.NetworkElementService.SetChangeList:output_type -> gosdn.networkelement.SetChangeListResponse + 48, // 81: gosdn.networkelement.NetworkElementService.SubscribePath:output_type -> gosdn.networkelement.SubscribePathResponse + 66, // [66:82] is the sub-list for method output_type + 50, // [50:66] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_gosdn_networkelement_networkelement_proto_init() } @@ -1052,7 +3829,115 @@ func file_gosdn_networkelement_networkelement_proto_init() { } if !protoimpl.UnsafeEnabled { file_gosdn_networkelement_networkelement_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NetworkElement); i { + switch v := v.(*AddNetworkElementConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddNetworkElementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddNetworkElementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetNetworkElementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetNetworkElementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllNetworkElementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllNetworkElementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateNetworkElementRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateNetworkElementResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteNetworkElementRequest); i { case 0: return &v.state case 1: @@ -1063,8 +3948,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddNetworkElementConfiguration); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteNetworkElementResponse); i { case 0: return &v.state case 1: @@ -1075,8 +3960,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddNetworkElementRequest); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ManagedNetworkElement); i { case 0: return &v.state case 1: @@ -1087,8 +3972,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddNetworkElementResponse); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlattenedManagedNetworkElement); i { case 0: return &v.state case 1: @@ -1099,8 +3984,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNetworkElementRequest); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMneListRequest); i { case 0: return &v.state case 1: @@ -1111,8 +3996,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNetworkElementResponse); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMneListResponse); i { case 0: return &v.state case 1: @@ -1123,8 +4008,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllNetworkElementRequest); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFlattenedMneListRequest); i { case 0: return &v.state case 1: @@ -1135,8 +4020,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllNetworkElementResponse); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFlattenedMneListResponse); i { case 0: return &v.state case 1: @@ -1147,8 +4032,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateNetworkElementRequest); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMneRequest); i { case 0: return &v.state case 1: @@ -1159,8 +4044,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateNetworkElementResponse); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMneResponse); i { case 0: return &v.state case 1: @@ -1171,8 +4056,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteNetworkElementRequest); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFlattenedMneResponse); i { case 0: return &v.state case 1: @@ -1183,8 +4068,272 @@ func file_gosdn_networkelement_networkelement_proto_init() { return nil } } - file_gosdn_networkelement_networkelement_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteNetworkElementResponse); i { + file_gosdn_networkelement_networkelement_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMne); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMneListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMneListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPathRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPathResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetPathListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetPathListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteMneRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteMneResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Change); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetChange); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChangeListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChangeListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChangeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChangeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetChangeListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetChangeListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscriptionList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Subscription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribePathRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdn_networkelement_networkelement_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribePathResponse); i { case 0: return &v.state case 1: @@ -1201,8 +4350,8 @@ func file_gosdn_networkelement_networkelement_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gosdn_networkelement_networkelement_proto_rawDesc, - NumEnums: 1, - NumMessages: 12, + NumEnums: 6, + NumMessages: 43, NumExtensions: 0, NumServices: 1, }, diff --git a/api/go/gosdn/networkelement/networkelement.pb.gw.go b/api/go/gosdn/networkelement/networkelement.pb.gw.go index 2ad35433b955d2d19cbad6d7c0e48de1f746e27d..304f123bd0637b659b26656a6cb78443cd9e9cbc 100644 --- a/api/go/gosdn/networkelement/networkelement.pb.gw.go +++ b/api/go/gosdn/networkelement/networkelement.pb.gw.go @@ -171,24 +171,863 @@ func local_request_NetworkElementService_Update_0(ctx context.Context, marshaler } +var ( + filter_NetworkElementService_GetFlattenedMneList_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_NetworkElementService_GetFlattenedMneList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetFlattenedMneListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetFlattenedMneList_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetFlattenedMneList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_GetFlattenedMneList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetFlattenedMneListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetFlattenedMneList_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetFlattenedMneList(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_NetworkElementService_GetMne_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "mneid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_NetworkElementService_GetMne_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMneRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["mneid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") + } + + protoReq.Mneid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetMne_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetMne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_GetMne_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMneRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["mneid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") + } + + protoReq.Mneid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetMne_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetMne(ctx, &protoReq) + return msg, metadata, err + +} + +func request_NetworkElementService_SetMneList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetMneListRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + msg, err := client.SetMneList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_SetMneList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetMneListRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + msg, err := server.SetMneList(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_NetworkElementService_GetPath_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "mneid": 1, "path": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} +) + +func request_NetworkElementService_GetPath_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPathRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["mneid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") + } + + protoReq.Mneid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) + } + + val, ok = pathParams["path"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path") + } + + protoReq.Path, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetPath_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetPath(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_GetPath_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPathRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["mneid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") + } + + protoReq.Mneid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) + } + + val, ok = pathParams["path"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path") + } + + protoReq.Path, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetPath_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetPath(ctx, &protoReq) + return msg, metadata, err + +} + +func request_NetworkElementService_SetPathList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetPathListRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + msg, err := client.SetPathList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_SetPathList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetPathListRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + msg, err := server.SetPathList(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_NetworkElementService_DeleteMne_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "mneid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_NetworkElementService_DeleteMne_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteMneRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["mneid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") + } + + protoReq.Mneid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_DeleteMne_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DeleteMne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_DeleteMne_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteMneRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["mneid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") + } + + protoReq.Mneid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_DeleteMne_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DeleteMne(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_NetworkElementService_GetChangeList_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_NetworkElementService_GetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetChangeListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChangeList_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetChangeList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_GetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetChangeListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChangeList_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetChangeList(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_NetworkElementService_GetChange_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "cuid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_NetworkElementService_GetChange_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetChangeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["cuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid") + } + + protoReq.Cuid, err = runtime.StringSlice(val, ",") + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChange_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetChange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_GetChange_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetChangeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + val, ok = pathParams["cuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid") + } + + protoReq.Cuid, err = runtime.StringSlice(val, ",") + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChange_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetChange(ctx, &protoReq) + return msg, metadata, err + +} + +func request_NetworkElementService_SetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetChangeListRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + msg, err := client.SetChangeList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NetworkElementService_SetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetChangeListRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") + } + + protoReq.Pid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) + } + + msg, err := server.SetChangeList(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterNetworkElementServiceHandlerServer registers the http handlers for service NetworkElementService to "mux". // UnaryRPC :call NetworkElementServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterNetworkElementServiceHandlerFromEndpoint instead. func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server NetworkElementServiceServer) error { - mux.Handle("POST", pattern_NetworkElementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_NetworkElementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Add", runtime.WithHTTPPathPattern("/network-element/create")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_Add_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_Add_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/network-element")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_Get_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_Get_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAll", runtime.WithHTTPPathPattern("/network-element/all")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_GetAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_Update_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetFlattenedMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetFlattenedMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_GetFlattenedMneList_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetFlattenedMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Add", runtime.WithHTTPPathPattern("/network-element/create")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mne/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NetworkElementService_Add_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NetworkElementService_GetMne_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -196,22 +1035,22 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim return } - forward_NetworkElementService_Add_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NetworkElementService_GetMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_NetworkElementService_SetMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/network-element")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NetworkElementService_Get_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NetworkElementService_SetMneList_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -219,22 +1058,22 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim return } - forward_NetworkElementService_Get_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NetworkElementService_SetMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_NetworkElementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_NetworkElementService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAll", runtime.WithHTTPPathPattern("/network-element/all")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetPath", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}/paths/{path}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NetworkElementService_GetAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NetworkElementService_GetPath_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -242,22 +1081,22 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim return } - forward_NetworkElementService_GetAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NetworkElementService_GetPath_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_NetworkElementService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetPathList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/paths")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NetworkElementService_Update_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NetworkElementService_SetPathList_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -265,7 +1104,99 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim return } - forward_NetworkElementService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NetworkElementService_SetPathList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_NetworkElementService_DeleteMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/DeleteMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_DeleteMne_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_DeleteMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_GetChangeList_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChange", runtime.WithHTTPPathPattern("/pnds/{pid}/changes/{cuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_GetChange_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetChange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_NetworkElementService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NetworkElementService_SetChangeList_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_SetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -390,6 +1321,186 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim }) + mux.Handle("GET", pattern_NetworkElementService_GetFlattenedMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetFlattenedMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_GetFlattenedMneList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetFlattenedMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mne/{mneid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_GetMne_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_NetworkElementService_SetMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_SetMneList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_SetMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetPath", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}/paths/{path}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_GetPath_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetPath_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_NetworkElementService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetPathList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/paths")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_SetPathList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_SetPathList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_NetworkElementService_DeleteMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/DeleteMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_DeleteMne_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_DeleteMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_GetChangeList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_NetworkElementService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChange", runtime.WithHTTPPathPattern("/pnds/{pid}/changes/{cuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_GetChange_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_GetChange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_NetworkElementService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NetworkElementService_SetChangeList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NetworkElementService_SetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -401,6 +1512,24 @@ var ( pattern_NetworkElementService_GetAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "all"}, "")) pattern_NetworkElementService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "update"}, "")) + + pattern_NetworkElementService_GetFlattenedMneList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "mnes"}, "")) + + pattern_NetworkElementService_GetMne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "mne", "mneid"}, "")) + + pattern_NetworkElementService_SetMneList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "mnes"}, "")) + + pattern_NetworkElementService_GetPath_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"pnds", "pid", "mnes", "mneid", "paths", "path"}, "")) + + pattern_NetworkElementService_SetPathList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"pnds", "pid", "mnes", "paths"}, "")) + + pattern_NetworkElementService_DeleteMne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "mnes", "mneid"}, "")) + + pattern_NetworkElementService_GetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "changes"}, "")) + + pattern_NetworkElementService_GetChange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "changes", "cuid"}, "")) + + pattern_NetworkElementService_SetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "changes"}, "")) ) var ( @@ -411,4 +1540,22 @@ var ( forward_NetworkElementService_GetAll_0 = runtime.ForwardResponseMessage forward_NetworkElementService_Update_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_GetFlattenedMneList_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_GetMne_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_SetMneList_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_GetPath_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_SetPathList_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_DeleteMne_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_GetChangeList_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_GetChange_0 = runtime.ForwardResponseMessage + + forward_NetworkElementService_SetChangeList_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/networkelement/networkelement_grpc.pb.go b/api/go/gosdn/networkelement/networkelement_grpc.pb.go index c73b569e984108d4922b5e7bdbad421b90dff3b5..0871ad344d18cf0cf5f92c9a1ad33f2757939851 100644 --- a/api/go/gosdn/networkelement/networkelement_grpc.pb.go +++ b/api/go/gosdn/networkelement/networkelement_grpc.pb.go @@ -22,6 +22,46 @@ type NetworkElementServiceClient interface { Get(ctx context.Context, in *GetNetworkElementRequest, opts ...grpc.CallOption) (*GetNetworkElementResponse, error) GetAll(ctx context.Context, in *GetAllNetworkElementRequest, opts ...grpc.CallOption) (*GetAllNetworkElementResponse, error) Update(ctx context.Context, in *UpdateNetworkElementRequest, opts ...grpc.CallOption) (*UpdateNetworkElementResponse, error) + // Allows to request all Managed Network Elements (MNE) which are + // managed by a specific Principal Network Domain. + // Full MNEs are provided, which also includes the MNE config as gNMI + // notification. + GetMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetMneListResponse, error) + // Allows to request all Managed Network Elements (MNE) which are + // managed by a specific Principal Network Domain. + // Flattened MNEs are provided, which does not include the MNE config as gNMI + // notification. + GetFlattenedMneList(ctx context.Context, in *GetFlattenedMneListRequest, opts ...grpc.CallOption) (*GetFlattenedMneListResponse, error) + // Allows to request a specific Managed Network Element which is managed by a + // specific Principal Network Domain. + GetMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetMneResponse, error) + // TODO: add own getrequest message and http option + // Allows to request a specific Managed Network Element which is managed by a + // specific Principal Network Domain. A flattened version of a Managed + // Network Element is provided. + GetFlattenedMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetFlattenedMneResponse, error) + // Allows to add multiple Managed Network Elements to be managed by a + // specific Principal Network Domain. + SetMneList(ctx context.Context, in *SetMneListRequest, opts ...grpc.CallOption) (*SetMneListResponse, error) + // Allows to request a specific Path of a Managed Network Element, + // managed by a specific Principal Network Domain. + GetPath(ctx context.Context, in *GetPathRequest, opts ...grpc.CallOption) (*GetPathResponse, error) + // Allows to set a specific Path of a Managed Network Element, + // managed by a specific Principal Network Domain. + SetPathList(ctx context.Context, in *SetPathListRequest, opts ...grpc.CallOption) (*SetPathListResponse, error) + // Allows to delete a specific Managed Network Element which is managed by a + // specific Principal Network Domain. + DeleteMne(ctx context.Context, in *DeleteMneRequest, opts ...grpc.CallOption) (*DeleteMneResponse, error) + // Allows to request all Changes registered for a specific Principal Network Domain. + GetChangeList(ctx context.Context, in *GetChangeListRequest, opts ...grpc.CallOption) (*GetChangeListResponse, error) + // Allows to request a specific Change registered for a specific Principal Network Domain. + GetChange(ctx context.Context, in *GetChangeRequest, opts ...grpc.CallOption) (*GetChangeResponse, error) + // Allows to operate on multiple Changes registered for a specific Principal Network Domain. + SetChangeList(ctx context.Context, in *SetChangeListRequest, opts ...grpc.CallOption) (*SetChangeListResponse, error) + // Allows to subscribe to multiple paths of a Managed Network Element which is + // managed by a specific Principal Network Domain and streams data depending on the subscribe + // method. + SubscribePath(ctx context.Context, in *SubscribePathRequest, opts ...grpc.CallOption) (NetworkElementService_SubscribePathClient, error) } type networkElementServiceClient struct { @@ -68,6 +108,137 @@ func (c *networkElementServiceClient) Update(ctx context.Context, in *UpdateNetw return out, nil } +func (c *networkElementServiceClient) GetMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetMneListResponse, error) { + out := new(GetMneListResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetMneList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) GetFlattenedMneList(ctx context.Context, in *GetFlattenedMneListRequest, opts ...grpc.CallOption) (*GetFlattenedMneListResponse, error) { + out := new(GetFlattenedMneListResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetFlattenedMneList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) GetMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetMneResponse, error) { + out := new(GetMneResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetMne", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) GetFlattenedMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetFlattenedMneResponse, error) { + out := new(GetFlattenedMneResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetFlattenedMne", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) SetMneList(ctx context.Context, in *SetMneListRequest, opts ...grpc.CallOption) (*SetMneListResponse, error) { + out := new(SetMneListResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/SetMneList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) GetPath(ctx context.Context, in *GetPathRequest, opts ...grpc.CallOption) (*GetPathResponse, error) { + out := new(GetPathResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetPath", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) SetPathList(ctx context.Context, in *SetPathListRequest, opts ...grpc.CallOption) (*SetPathListResponse, error) { + out := new(SetPathListResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/SetPathList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) DeleteMne(ctx context.Context, in *DeleteMneRequest, opts ...grpc.CallOption) (*DeleteMneResponse, error) { + out := new(DeleteMneResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/DeleteMne", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) GetChangeList(ctx context.Context, in *GetChangeListRequest, opts ...grpc.CallOption) (*GetChangeListResponse, error) { + out := new(GetChangeListResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetChangeList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) GetChange(ctx context.Context, in *GetChangeRequest, opts ...grpc.CallOption) (*GetChangeResponse, error) { + out := new(GetChangeResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/GetChange", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) SetChangeList(ctx context.Context, in *SetChangeListRequest, opts ...grpc.CallOption) (*SetChangeListResponse, error) { + out := new(SetChangeListResponse) + err := c.cc.Invoke(ctx, "/gosdn.networkelement.NetworkElementService/SetChangeList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *networkElementServiceClient) SubscribePath(ctx context.Context, in *SubscribePathRequest, opts ...grpc.CallOption) (NetworkElementService_SubscribePathClient, error) { + stream, err := c.cc.NewStream(ctx, &NetworkElementService_ServiceDesc.Streams[0], "/gosdn.networkelement.NetworkElementService/SubscribePath", opts...) + if err != nil { + return nil, err + } + x := &networkElementServiceSubscribePathClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type NetworkElementService_SubscribePathClient interface { + Recv() (*SubscribePathResponse, error) + grpc.ClientStream +} + +type networkElementServiceSubscribePathClient struct { + grpc.ClientStream +} + +func (x *networkElementServiceSubscribePathClient) Recv() (*SubscribePathResponse, error) { + m := new(SubscribePathResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // NetworkElementServiceServer is the server API for NetworkElementService service. // All implementations must embed UnimplementedNetworkElementServiceServer // for forward compatibility @@ -76,6 +247,46 @@ type NetworkElementServiceServer interface { Get(context.Context, *GetNetworkElementRequest) (*GetNetworkElementResponse, error) GetAll(context.Context, *GetAllNetworkElementRequest) (*GetAllNetworkElementResponse, error) Update(context.Context, *UpdateNetworkElementRequest) (*UpdateNetworkElementResponse, error) + // Allows to request all Managed Network Elements (MNE) which are + // managed by a specific Principal Network Domain. + // Full MNEs are provided, which also includes the MNE config as gNMI + // notification. + GetMneList(context.Context, *GetMneListRequest) (*GetMneListResponse, error) + // Allows to request all Managed Network Elements (MNE) which are + // managed by a specific Principal Network Domain. + // Flattened MNEs are provided, which does not include the MNE config as gNMI + // notification. + GetFlattenedMneList(context.Context, *GetFlattenedMneListRequest) (*GetFlattenedMneListResponse, error) + // Allows to request a specific Managed Network Element which is managed by a + // specific Principal Network Domain. + GetMne(context.Context, *GetMneRequest) (*GetMneResponse, error) + // TODO: add own getrequest message and http option + // Allows to request a specific Managed Network Element which is managed by a + // specific Principal Network Domain. A flattened version of a Managed + // Network Element is provided. + GetFlattenedMne(context.Context, *GetMneRequest) (*GetFlattenedMneResponse, error) + // Allows to add multiple Managed Network Elements to be managed by a + // specific Principal Network Domain. + SetMneList(context.Context, *SetMneListRequest) (*SetMneListResponse, error) + // Allows to request a specific Path of a Managed Network Element, + // managed by a specific Principal Network Domain. + GetPath(context.Context, *GetPathRequest) (*GetPathResponse, error) + // Allows to set a specific Path of a Managed Network Element, + // managed by a specific Principal Network Domain. + SetPathList(context.Context, *SetPathListRequest) (*SetPathListResponse, error) + // Allows to delete a specific Managed Network Element which is managed by a + // specific Principal Network Domain. + DeleteMne(context.Context, *DeleteMneRequest) (*DeleteMneResponse, error) + // Allows to request all Changes registered for a specific Principal Network Domain. + GetChangeList(context.Context, *GetChangeListRequest) (*GetChangeListResponse, error) + // Allows to request a specific Change registered for a specific Principal Network Domain. + GetChange(context.Context, *GetChangeRequest) (*GetChangeResponse, error) + // Allows to operate on multiple Changes registered for a specific Principal Network Domain. + SetChangeList(context.Context, *SetChangeListRequest) (*SetChangeListResponse, error) + // Allows to subscribe to multiple paths of a Managed Network Element which is + // managed by a specific Principal Network Domain and streams data depending on the subscribe + // method. + SubscribePath(*SubscribePathRequest, NetworkElementService_SubscribePathServer) error mustEmbedUnimplementedNetworkElementServiceServer() } @@ -95,6 +306,42 @@ func (UnimplementedNetworkElementServiceServer) GetAll(context.Context, *GetAllN func (UnimplementedNetworkElementServiceServer) Update(context.Context, *UpdateNetworkElementRequest) (*UpdateNetworkElementResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") } +func (UnimplementedNetworkElementServiceServer) GetMneList(context.Context, *GetMneListRequest) (*GetMneListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMneList not implemented") +} +func (UnimplementedNetworkElementServiceServer) GetFlattenedMneList(context.Context, *GetFlattenedMneListRequest) (*GetFlattenedMneListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetFlattenedMneList not implemented") +} +func (UnimplementedNetworkElementServiceServer) GetMne(context.Context, *GetMneRequest) (*GetMneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMne not implemented") +} +func (UnimplementedNetworkElementServiceServer) GetFlattenedMne(context.Context, *GetMneRequest) (*GetFlattenedMneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetFlattenedMne not implemented") +} +func (UnimplementedNetworkElementServiceServer) SetMneList(context.Context, *SetMneListRequest) (*SetMneListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetMneList not implemented") +} +func (UnimplementedNetworkElementServiceServer) GetPath(context.Context, *GetPathRequest) (*GetPathResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPath not implemented") +} +func (UnimplementedNetworkElementServiceServer) SetPathList(context.Context, *SetPathListRequest) (*SetPathListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetPathList not implemented") +} +func (UnimplementedNetworkElementServiceServer) DeleteMne(context.Context, *DeleteMneRequest) (*DeleteMneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteMne not implemented") +} +func (UnimplementedNetworkElementServiceServer) GetChangeList(context.Context, *GetChangeListRequest) (*GetChangeListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChangeList not implemented") +} +func (UnimplementedNetworkElementServiceServer) GetChange(context.Context, *GetChangeRequest) (*GetChangeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChange not implemented") +} +func (UnimplementedNetworkElementServiceServer) SetChangeList(context.Context, *SetChangeListRequest) (*SetChangeListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetChangeList not implemented") +} +func (UnimplementedNetworkElementServiceServer) SubscribePath(*SubscribePathRequest, NetworkElementService_SubscribePathServer) error { + return status.Errorf(codes.Unimplemented, "method SubscribePath not implemented") +} func (UnimplementedNetworkElementServiceServer) mustEmbedUnimplementedNetworkElementServiceServer() {} // UnsafeNetworkElementServiceServer may be embedded to opt out of forward compatibility for this service. @@ -180,6 +427,225 @@ func _NetworkElementService_Update_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _NetworkElementService_GetMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMneListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetMneList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetMneList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetMneList(ctx, req.(*GetMneListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_GetFlattenedMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetFlattenedMneListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetFlattenedMneList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetFlattenedMneList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetFlattenedMneList(ctx, req.(*GetFlattenedMneListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_GetMne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMneRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetMne(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetMne", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetMne(ctx, req.(*GetMneRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_GetFlattenedMne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMneRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetFlattenedMne(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetFlattenedMne", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetFlattenedMne(ctx, req.(*GetMneRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_SetMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMneListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).SetMneList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/SetMneList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).SetMneList(ctx, req.(*SetMneListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_GetPath_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPathRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetPath(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetPath", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetPath(ctx, req.(*GetPathRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_SetPathList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetPathListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).SetPathList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/SetPathList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).SetPathList(ctx, req.(*SetPathListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_DeleteMne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteMneRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).DeleteMne(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/DeleteMne", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).DeleteMne(ctx, req.(*DeleteMneRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_GetChangeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetChangeListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetChangeList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetChangeList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetChangeList(ctx, req.(*GetChangeListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_GetChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetChangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).GetChange(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/GetChange", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).GetChange(ctx, req.(*GetChangeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_SetChangeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetChangeListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NetworkElementServiceServer).SetChangeList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gosdn.networkelement.NetworkElementService/SetChangeList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NetworkElementServiceServer).SetChangeList(ctx, req.(*SetChangeListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NetworkElementService_SubscribePath_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribePathRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(NetworkElementServiceServer).SubscribePath(m, &networkElementServiceSubscribePathServer{stream}) +} + +type NetworkElementService_SubscribePathServer interface { + Send(*SubscribePathResponse) error + grpc.ServerStream +} + +type networkElementServiceSubscribePathServer struct { + grpc.ServerStream +} + +func (x *networkElementServiceSubscribePathServer) Send(m *SubscribePathResponse) error { + return x.ServerStream.SendMsg(m) +} + // NetworkElementService_ServiceDesc is the grpc.ServiceDesc for NetworkElementService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -203,7 +669,57 @@ var NetworkElementService_ServiceDesc = grpc.ServiceDesc{ MethodName: "Update", Handler: _NetworkElementService_Update_Handler, }, + { + MethodName: "GetMneList", + Handler: _NetworkElementService_GetMneList_Handler, + }, + { + MethodName: "GetFlattenedMneList", + Handler: _NetworkElementService_GetFlattenedMneList_Handler, + }, + { + MethodName: "GetMne", + Handler: _NetworkElementService_GetMne_Handler, + }, + { + MethodName: "GetFlattenedMne", + Handler: _NetworkElementService_GetFlattenedMne_Handler, + }, + { + MethodName: "SetMneList", + Handler: _NetworkElementService_SetMneList_Handler, + }, + { + MethodName: "GetPath", + Handler: _NetworkElementService_GetPath_Handler, + }, + { + MethodName: "SetPathList", + Handler: _NetworkElementService_SetPathList_Handler, + }, + { + MethodName: "DeleteMne", + Handler: _NetworkElementService_DeleteMne_Handler, + }, + { + MethodName: "GetChangeList", + Handler: _NetworkElementService_GetChangeList_Handler, + }, + { + MethodName: "GetChange", + Handler: _NetworkElementService_GetChange_Handler, + }, + { + MethodName: "SetChangeList", + Handler: _NetworkElementService_SetChangeList_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "SubscribePath", + Handler: _NetworkElementService_SubscribePath_Handler, + ServerStreams: true, + }, }, - Streams: []grpc.StreamDesc{}, Metadata: "gosdn/networkelement/networkelement.proto", } diff --git a/api/go/gosdn/plugin/plugin.pb.go b/api/go/gosdn/plugin/plugin.pb.go index 0950bf0d781c0f891f5552db3add0418a425eba6..b33b4b7f156b0156d8083bffbd27c78480bd6252 100644 --- a/api/go/gosdn/plugin/plugin.pb.go +++ b/api/go/gosdn/plugin/plugin.pb.go @@ -7,7 +7,7 @@ package plugin import ( - pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + networkelement "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" gnmi "github.com/openconfig/gnmi/proto/gnmi" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -623,9 +623,9 @@ type ValidateChangeRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Operation pnd.ApiOperation `protobuf:"varint,1,opt,name=operation,proto3,enum=gosdn.pnd.ApiOperation" json:"operation,omitempty"` - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Operation networkelement.ApiOperation `protobuf:"varint,1,opt,name=operation,proto3,enum=gosdn.networkelement.ApiOperation" json:"operation,omitempty"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } func (x *ValidateChangeRequest) Reset() { @@ -660,11 +660,11 @@ func (*ValidateChangeRequest) Descriptor() ([]byte, []int) { return file_gosdn_plugin_plugin_proto_rawDescGZIP(), []int{12} } -func (x *ValidateChangeRequest) GetOperation() pnd.ApiOperation { +func (x *ValidateChangeRequest) GetOperation() networkelement.ApiOperation { if x != nil { return x.Operation } - return pnd.ApiOperation(0) + return networkelement.ApiOperation(0) } func (x *ValidateChangeRequest) GetPath() *gnmi.Path { @@ -915,124 +915,126 @@ var file_gosdn_plugin_plugin_proto_rawDesc = []byte{ 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, - 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x6e, 0x0a, 0x10, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6e, 0x0a, 0x10, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, + 0x68, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x73, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, + 0x6e, 0x6d, 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x26, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x11, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, + 0x68, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x22, 0x58, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x27, 0x0a, 0x0f, 0x53, + 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x22, 0x30, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x3b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6e, 0x6f, + 0x64, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x50, 0x61, - 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x29, 0x0a, 0x11, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x58, 0x0a, 0x0e, 0x53, - 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x6e, - 0x6d, 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, - 0x6e, 0x6d, 0x69, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x27, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x30, - 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x22, 0x3b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x33, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x22, 0x2a, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x36, - 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, - 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x23, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x0b, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x22, 0x46, 0x0a, 0x0c, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x15, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, - 0x70, 0x6e, 0x64, 0x2e, 0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x6e, 0x6d, 0x69, - 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x2e, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x22, 0x2f, 0x0a, 0x17, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x46, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x30, 0x0a, 0x18, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x72, - 0x65, 0x65, 0x47, 0x7a, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1f, 0x0a, - 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x32, 0xc8, - 0x05, 0x0a, 0x06, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x09, 0x55, 0x6e, 0x6d, - 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, + 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2a, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x23, 0x0a, 0x0d, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6a, 0x73, 0x6f, + 0x6e, 0x22, 0x45, 0x0a, 0x0b, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x46, 0x0a, 0x0c, 0x44, 0x69, 0x66, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x8f, 0x01, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x09, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, + 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x6e, 0x6d, + 0x69, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x22, 0x2f, 0x0a, 0x17, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x30, 0x0a, 0x18, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, + 0x72, 0x65, 0x65, 0x47, 0x7a, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1f, + 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, + 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x32, + 0xc8, 0x05, 0x0a, 0x06, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x09, 0x55, 0x6e, + 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, + 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, + 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x44, 0x69, - 0x66, 0x66, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x44, 0x69, 0x66, - 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x54, 0x72, 0x65, 0x65, 0x47, 0x7a, 0x69, 0x70, 0x12, 0x23, 0x2e, 0x67, 0x6f, - 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x54, 0x72, 0x65, 0x65, 0x47, 0x7a, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x6f, - 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x10, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x61, 0x6c, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x32, 0x5a, 0x30, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, - 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, - 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x05, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4d, 0x6f, + 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x44, + 0x69, 0x66, 0x66, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x54, 0x72, 0x65, 0x65, 0x47, 0x7a, 0x69, 0x70, 0x12, 0x23, 0x2e, 0x67, + 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x54, 0x72, 0x65, 0x65, 0x47, 0x7a, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x15, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x2e, 0x67, + 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x10, 0x50, 0x72, 0x75, 0x6e, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x6f, + 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x61, 0x6c, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x32, 0x5a, 0x30, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, + 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1070,7 +1072,7 @@ var file_gosdn_plugin_plugin_proto_goTypes = []interface{}{ (*gnmi.Path)(nil), // 18: gnmi.Path (*gnmi.TypedValue)(nil), // 19: gnmi.TypedValue (*gnmi.Notification)(nil), // 20: gnmi.Notification - (pnd.ApiOperation)(0), // 21: gosdn.pnd.ApiOperation + (networkelement.ApiOperation)(0), // 21: gosdn.networkelement.ApiOperation } var file_gosdn_plugin_plugin_proto_depIdxs = []int32{ 18, // 0: gosdn.plugin.UnmarshalRequest.path:type_name -> gnmi.Path @@ -1081,7 +1083,7 @@ var file_gosdn_plugin_plugin_proto_depIdxs = []int32{ 20, // 5: gosdn.plugin.GetNodeResponse.nodes:type_name -> gnmi.Notification 18, // 6: gosdn.plugin.DeleteNodeRequest.path:type_name -> gnmi.Path 20, // 7: gosdn.plugin.DiffResponse.notification:type_name -> gnmi.Notification - 21, // 8: gosdn.plugin.ValidateChangeRequest.operation:type_name -> gosdn.pnd.ApiOperation + 21, // 8: gosdn.plugin.ValidateChangeRequest.operation:type_name -> gosdn.networkelement.ApiOperation 18, // 9: gosdn.plugin.ValidateChangeRequest.path:type_name -> gnmi.Path 0, // 10: gosdn.plugin.Plugin.Unmarshal:input_type -> gosdn.plugin.UnmarshalRequest 2, // 11: gosdn.plugin.Plugin.SetNode:input_type -> gosdn.plugin.SetNodeRequest diff --git a/api/go/gosdn/pnd/pnd.pb.go b/api/go/gosdn/pnd/pnd.pb.go index b8036329b3c971fbe4326b2ab1cff25c13a2a4e4..36823b3b134a33fabbfb274c4644dac7b0c272d1 100644 --- a/api/go/gosdn/pnd/pnd.pb.go +++ b/api/go/gosdn/pnd/pnd.pb.go @@ -7,9 +7,9 @@ package pnd import ( - transport "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" + _ "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" - gnmi "github.com/openconfig/gnmi/proto/gnmi" + _ "github.com/openconfig/gnmi/proto/gnmi" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -25,329 +25,18 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type ChangeState int32 - -const ( - ChangeState_CHANGE_STATE_UNSPECIFIED ChangeState = 0 - ChangeState_CHANGE_STATE_PENDING ChangeState = 1 - ChangeState_CHANGE_STATE_COMMITTED ChangeState = 2 - ChangeState_CHANGE_STATE_CONFIRMED ChangeState = 3 - ChangeState_CHANGE_STATE_INCONSISTENT ChangeState = 4 -) - -// Enum value maps for ChangeState. -var ( - ChangeState_name = map[int32]string{ - 0: "CHANGE_STATE_UNSPECIFIED", - 1: "CHANGE_STATE_PENDING", - 2: "CHANGE_STATE_COMMITTED", - 3: "CHANGE_STATE_CONFIRMED", - 4: "CHANGE_STATE_INCONSISTENT", - } - ChangeState_value = map[string]int32{ - "CHANGE_STATE_UNSPECIFIED": 0, - "CHANGE_STATE_PENDING": 1, - "CHANGE_STATE_COMMITTED": 2, - "CHANGE_STATE_CONFIRMED": 3, - "CHANGE_STATE_INCONSISTENT": 4, - } -) - -func (x ChangeState) Enum() *ChangeState { - p := new(ChangeState) - *p = x - return p -} - -func (x ChangeState) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChangeState) Descriptor() protoreflect.EnumDescriptor { - return file_gosdn_pnd_pnd_proto_enumTypes[0].Descriptor() -} - -func (ChangeState) Type() protoreflect.EnumType { - return &file_gosdn_pnd_pnd_proto_enumTypes[0] -} - -func (x ChangeState) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChangeState.Descriptor instead. -func (ChangeState) EnumDescriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{0} -} - -type ApiOperation int32 - -const ( - ApiOperation_API_OPERATION_UNSPECIFIED ApiOperation = 0 - ApiOperation_API_OPERATION_UPDATE ApiOperation = 1 - ApiOperation_API_OPERATION_REPLACE ApiOperation = 2 - ApiOperation_API_OPERATION_DELETE ApiOperation = 3 -) - -// Enum value maps for ApiOperation. -var ( - ApiOperation_name = map[int32]string{ - 0: "API_OPERATION_UNSPECIFIED", - 1: "API_OPERATION_UPDATE", - 2: "API_OPERATION_REPLACE", - 3: "API_OPERATION_DELETE", - } - ApiOperation_value = map[string]int32{ - "API_OPERATION_UNSPECIFIED": 0, - "API_OPERATION_UPDATE": 1, - "API_OPERATION_REPLACE": 2, - "API_OPERATION_DELETE": 3, - } -) - -func (x ApiOperation) Enum() *ApiOperation { - p := new(ApiOperation) - *p = x - return p -} - -func (x ApiOperation) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ApiOperation) Descriptor() protoreflect.EnumDescriptor { - return file_gosdn_pnd_pnd_proto_enumTypes[1].Descriptor() -} - -func (ApiOperation) Type() protoreflect.EnumType { - return &file_gosdn_pnd_pnd_proto_enumTypes[1] -} - -func (x ApiOperation) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ApiOperation.Descriptor instead. -func (ApiOperation) EnumDescriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{1} -} - -type Operation int32 - -const ( - Operation_OPERATION_UNSPECIFIED Operation = 0 - Operation_OPERATION_CREATE Operation = 1 - Operation_OPERATION_COMMIT Operation = 2 - Operation_OPERATION_CONFIRM Operation = 3 -) - -// Enum value maps for Operation. -var ( - Operation_name = map[int32]string{ - 0: "OPERATION_UNSPECIFIED", - 1: "OPERATION_CREATE", - 2: "OPERATION_COMMIT", - 3: "OPERATION_CONFIRM", - } - Operation_value = map[string]int32{ - "OPERATION_UNSPECIFIED": 0, - "OPERATION_CREATE": 1, - "OPERATION_COMMIT": 2, - "OPERATION_CONFIRM": 3, - } -) - -func (x Operation) Enum() *Operation { - p := new(Operation) - *p = x - return p -} - -func (x Operation) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Operation) Descriptor() protoreflect.EnumDescriptor { - return file_gosdn_pnd_pnd_proto_enumTypes[2].Descriptor() -} - -func (Operation) Type() protoreflect.EnumType { - return &file_gosdn_pnd_pnd_proto_enumTypes[2] -} - -func (x Operation) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Operation.Descriptor instead. -func (Operation) EnumDescriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{2} -} - -type Status int32 - -const ( - Status_STATUS_UNSPECIFIED Status = 0 - Status_STATUS_OK Status = 1 - Status_STATUS_ERROR Status = 2 -) - -// Enum value maps for Status. -var ( - Status_name = map[int32]string{ - 0: "STATUS_UNSPECIFIED", - 1: "STATUS_OK", - 2: "STATUS_ERROR", - } - Status_value = map[string]int32{ - "STATUS_UNSPECIFIED": 0, - "STATUS_OK": 1, - "STATUS_ERROR": 2, - } -) - -func (x Status) Enum() *Status { - p := new(Status) - *p = x - return p -} - -func (x Status) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Status) Descriptor() protoreflect.EnumDescriptor { - return file_gosdn_pnd_pnd_proto_enumTypes[3].Descriptor() -} - -func (Status) Type() protoreflect.EnumType { - return &file_gosdn_pnd_pnd_proto_enumTypes[3] -} - -func (x Status) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Status.Descriptor instead. -func (Status) EnumDescriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{3} -} - -type SubscriptionMode int32 - -const ( - SubscriptionMode_SUBSCRIPTION_MODE_UNSPECIFIED SubscriptionMode = 0 - SubscriptionMode_SUBSCRIPTION_MODE_ONCE SubscriptionMode = 1 - SubscriptionMode_SUBSCRIPTION_MODE_STREAM SubscriptionMode = 2 - SubscriptionMode_SUBSCRIPTION_MODE_POLL SubscriptionMode = 3 -) - -// Enum value maps for SubscriptionMode. -var ( - SubscriptionMode_name = map[int32]string{ - 0: "SUBSCRIPTION_MODE_UNSPECIFIED", - 1: "SUBSCRIPTION_MODE_ONCE", - 2: "SUBSCRIPTION_MODE_STREAM", - 3: "SUBSCRIPTION_MODE_POLL", - } - SubscriptionMode_value = map[string]int32{ - "SUBSCRIPTION_MODE_UNSPECIFIED": 0, - "SUBSCRIPTION_MODE_ONCE": 1, - "SUBSCRIPTION_MODE_STREAM": 2, - "SUBSCRIPTION_MODE_POLL": 3, - } -) - -func (x SubscriptionMode) Enum() *SubscriptionMode { - p := new(SubscriptionMode) - *p = x - return p -} - -func (x SubscriptionMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SubscriptionMode) Descriptor() protoreflect.EnumDescriptor { - return file_gosdn_pnd_pnd_proto_enumTypes[4].Descriptor() -} - -func (SubscriptionMode) Type() protoreflect.EnumType { - return &file_gosdn_pnd_pnd_proto_enumTypes[4] -} - -func (x SubscriptionMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SubscriptionMode.Descriptor instead. -func (SubscriptionMode) EnumDescriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{4} -} - -type StreamMode int32 - -const ( - StreamMode_STREAM_MODE_UNSPECIFIED StreamMode = 0 - StreamMode_STREAM_MODE_TARGET_DEFINED StreamMode = 1 // The target selects the relevant mode for each element. - StreamMode_STREAM_MODE_ON_CHANGE StreamMode = 2 // The target sends an update on element value change. - StreamMode_STREAM_MODE_SAMPLE StreamMode = 3 // The target samples values according to the interval. -) - -// Enum value maps for StreamMode. -var ( - StreamMode_name = map[int32]string{ - 0: "STREAM_MODE_UNSPECIFIED", - 1: "STREAM_MODE_TARGET_DEFINED", - 2: "STREAM_MODE_ON_CHANGE", - 3: "STREAM_MODE_SAMPLE", - } - StreamMode_value = map[string]int32{ - "STREAM_MODE_UNSPECIFIED": 0, - "STREAM_MODE_TARGET_DEFINED": 1, - "STREAM_MODE_ON_CHANGE": 2, - "STREAM_MODE_SAMPLE": 3, - } -) - -func (x StreamMode) Enum() *StreamMode { - p := new(StreamMode) - *p = x - return p -} - -func (x StreamMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (StreamMode) Descriptor() protoreflect.EnumDescriptor { - return file_gosdn_pnd_pnd_proto_enumTypes[5].Descriptor() -} - -func (StreamMode) Type() protoreflect.EnumType { - return &file_gosdn_pnd_pnd_proto_enumTypes[5] -} - -func (x StreamMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use StreamMode.Descriptor instead. -func (StreamMode) EnumDescriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{5} -} - -type GetMneListRequest struct { +type PrincipalNetworkDomain struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` } -func (x *GetMneListRequest) Reset() { - *x = GetMneListRequest{} +func (x *PrincipalNetworkDomain) Reset() { + *x = PrincipalNetworkDomain{} if protoimpl.UnsafeEnabled { mi := &file_gosdn_pnd_pnd_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -355,13 +44,13 @@ func (x *GetMneListRequest) Reset() { } } -func (x *GetMneListRequest) String() string { +func (x *PrincipalNetworkDomain) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetMneListRequest) ProtoMessage() {} +func (*PrincipalNetworkDomain) ProtoMessage() {} -func (x *GetMneListRequest) ProtoReflect() protoreflect.Message { +func (x *PrincipalNetworkDomain) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -373,2776 +62,109 @@ func (x *GetMneListRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetMneListRequest.ProtoReflect.Descriptor instead. -func (*GetMneListRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use PrincipalNetworkDomain.ProtoReflect.Descriptor instead. +func (*PrincipalNetworkDomain) Descriptor() ([]byte, []int) { return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{0} } -func (x *GetMneListRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetMneListRequest) GetPid() string { +func (x *PrincipalNetworkDomain) GetId() string { if x != nil { - return x.Pid + return x.Id } return "" } -type GetMneRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` -} - -func (x *GetMneRequest) Reset() { - *x = GetMneRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMneRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMneRequest) ProtoMessage() {} - -func (x *GetMneRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetMneRequest.ProtoReflect.Descriptor instead. -func (*GetMneRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{1} -} - -func (x *GetMneRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetMneRequest) GetMneid() string { +func (x *PrincipalNetworkDomain) GetName() string { if x != nil { - return x.Mneid + return x.Name } return "" } -func (x *GetMneRequest) GetPid() string { +func (x *PrincipalNetworkDomain) GetDescription() string { if x != nil { - return x.Pid + return x.Description } return "" } -type GetChangeListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` -} - -func (x *GetChangeListRequest) Reset() { - *x = GetChangeListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetChangeListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetChangeListRequest) ProtoMessage() {} +var File_gosdn_pnd_pnd_proto protoreflect.FileDescriptor -func (x *GetChangeListRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +var file_gosdn_pnd_pnd_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x5e, 0x0a, 0x16, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x32, 0x0c, 0x0a, 0x0a, 0x50, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x42, 0xae, 0x02, 0x5a, 0x2d, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, + 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, + 0x70, 0x6e, 0x64, 0x92, 0x41, 0xfb, 0x01, 0x12, 0xf8, 0x01, 0x0a, 0x10, 0x67, 0x6f, 0x53, 0x44, + 0x4e, 0x20, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x4d, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x47, 0x6f, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x67, 0x6f, 0x53, 0x44, 0x4e, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x0a, 0x18, 0x67, + 0x6f, 0x53, 0x44, 0x4e, 0x20, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, + 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2a, 0x50, 0x0a, 0x14, 0x42, + 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x12, 0x38, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, + 0x6e, 0x65, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x2d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, + 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, 0x03, 0x30, + 0x2e, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -// Deprecated: Use GetChangeListRequest.ProtoReflect.Descriptor instead. -func (*GetChangeListRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{2} -} +var ( + file_gosdn_pnd_pnd_proto_rawDescOnce sync.Once + file_gosdn_pnd_pnd_proto_rawDescData = file_gosdn_pnd_pnd_proto_rawDesc +) -func (x *GetChangeListRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 +func file_gosdn_pnd_pnd_proto_rawDescGZIP() []byte { + file_gosdn_pnd_pnd_proto_rawDescOnce.Do(func() { + file_gosdn_pnd_pnd_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_pnd_pnd_proto_rawDescData) + }) + return file_gosdn_pnd_pnd_proto_rawDescData } -func (x *GetChangeListRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" +var file_gosdn_pnd_pnd_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_gosdn_pnd_pnd_proto_goTypes = []interface{}{ + (*PrincipalNetworkDomain)(nil), // 0: gosdn.pnd.PrincipalNetworkDomain } - -type GetChangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Cuid []string `protobuf:"bytes,2,rep,name=cuid,proto3" json:"cuid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` +var file_gosdn_pnd_pnd_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -func (x *GetChangeRequest) Reset() { - *x = GetChangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func init() { file_gosdn_pnd_pnd_proto_init() } +func file_gosdn_pnd_pnd_proto_init() { + if File_gosdn_pnd_pnd_proto != nil { + return } -} - -func (x *GetChangeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetChangeRequest) ProtoMessage() {} - -func (x *GetChangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetChangeRequest.ProtoReflect.Descriptor instead. -func (*GetChangeRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{3} -} - -func (x *GetChangeRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetChangeRequest) GetCuid() []string { - if x != nil { - return x.Cuid - } - return nil -} - -func (x *GetChangeRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -type GetPathRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` -} - -func (x *GetPathRequest) Reset() { - *x = GetPathRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetPathRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetPathRequest) ProtoMessage() {} - -func (x *GetPathRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetPathRequest.ProtoReflect.Descriptor instead. -func (*GetPathRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{4} -} - -func (x *GetPathRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetPathRequest) GetMneid() string { - if x != nil { - return x.Mneid - } - return "" -} - -func (x *GetPathRequest) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *GetPathRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -type GetMneResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne *ManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` -} - -func (x *GetMneResponse) Reset() { - *x = GetMneResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMneResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMneResponse) ProtoMessage() {} - -func (x *GetMneResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetMneResponse.ProtoReflect.Descriptor instead. -func (*GetMneResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{5} -} - -func (x *GetMneResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetMneResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetMneResponse) GetMne() *ManagedNetworkElement { - if x != nil { - return x.Mne - } - return nil -} - -type GetFlattenedMneResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne *FlattenedManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` -} - -func (x *GetFlattenedMneResponse) Reset() { - *x = GetFlattenedMneResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetFlattenedMneResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetFlattenedMneResponse) ProtoMessage() {} - -func (x *GetFlattenedMneResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetFlattenedMneResponse.ProtoReflect.Descriptor instead. -func (*GetFlattenedMneResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{6} -} - -func (x *GetFlattenedMneResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetFlattenedMneResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetFlattenedMneResponse) GetMne() *FlattenedManagedNetworkElement { - if x != nil { - return x.Mne - } - return nil -} - -type GetMneListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` -} - -func (x *GetMneListResponse) Reset() { - *x = GetMneListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMneListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMneListResponse) ProtoMessage() {} - -func (x *GetMneListResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetMneListResponse.ProtoReflect.Descriptor instead. -func (*GetMneListResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{7} -} - -func (x *GetMneListResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetMneListResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetMneListResponse) GetMne() []*ManagedNetworkElement { - if x != nil { - return x.Mne - } - return nil -} - -type GetFlattenedMneListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne []*FlattenedManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` -} - -func (x *GetFlattenedMneListResponse) Reset() { - *x = GetFlattenedMneListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetFlattenedMneListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetFlattenedMneListResponse) ProtoMessage() {} - -func (x *GetFlattenedMneListResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetFlattenedMneListResponse.ProtoReflect.Descriptor instead. -func (*GetFlattenedMneListResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{8} -} - -func (x *GetFlattenedMneListResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetFlattenedMneListResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetFlattenedMneListResponse) GetMne() []*FlattenedManagedNetworkElement { - if x != nil { - return x.Mne - } - return nil -} - -type GetPathResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` -} - -func (x *GetPathResponse) Reset() { - *x = GetPathResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetPathResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetPathResponse) ProtoMessage() {} - -func (x *GetPathResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetPathResponse.ProtoReflect.Descriptor instead. -func (*GetPathResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{9} -} - -func (x *GetPathResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetPathResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetPathResponse) GetMneNotification() []*gnmi.Notification { - if x != nil { - return x.MneNotification - } - return nil -} - -type GetChangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` -} - -func (x *GetChangeResponse) Reset() { - *x = GetChangeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetChangeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetChangeResponse) ProtoMessage() {} - -func (x *GetChangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetChangeResponse.ProtoReflect.Descriptor instead. -func (*GetChangeResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{10} -} - -func (x *GetChangeResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetChangeResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetChangeResponse) GetChange() []*Change { - if x != nil { - return x.Change - } - return nil -} - -type GetChangeListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` -} - -func (x *GetChangeListResponse) Reset() { - *x = GetChangeListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetChangeListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetChangeListResponse) ProtoMessage() {} - -func (x *GetChangeListResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetChangeListResponse.ProtoReflect.Descriptor instead. -func (*GetChangeListResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{11} -} - -func (x *GetChangeListResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetChangeListResponse) GetPnd() *PrincipalNetworkDomain { - if x != nil { - return x.Pnd - } - return nil -} - -func (x *GetChangeListResponse) GetChange() []*Change { - if x != nil { - return x.Change - } - return nil -} - -type PrincipalNetworkDomain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` -} - -func (x *PrincipalNetworkDomain) Reset() { - *x = PrincipalNetworkDomain{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrincipalNetworkDomain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrincipalNetworkDomain) ProtoMessage() {} - -func (x *PrincipalNetworkDomain) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrincipalNetworkDomain.ProtoReflect.Descriptor instead. -func (*PrincipalNetworkDomain) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{12} -} - -func (x *PrincipalNetworkDomain) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PrincipalNetworkDomain) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PrincipalNetworkDomain) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -type ManagedNetworkElement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` -} - -func (x *ManagedNetworkElement) Reset() { - *x = ManagedNetworkElement{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ManagedNetworkElement) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ManagedNetworkElement) ProtoMessage() {} - -func (x *ManagedNetworkElement) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ManagedNetworkElement.ProtoReflect.Descriptor instead. -func (*ManagedNetworkElement) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{13} -} - -func (x *ManagedNetworkElement) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ManagedNetworkElement) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ManagedNetworkElement) GetMneNotification() []*gnmi.Notification { - if x != nil { - return x.MneNotification - } - return nil -} - -type FlattenedManagedNetworkElement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` - Pluginid string `protobuf:"bytes,4,opt,name=pluginid,proto3" json:"pluginid,omitempty"` -} - -func (x *FlattenedManagedNetworkElement) Reset() { - *x = FlattenedManagedNetworkElement{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FlattenedManagedNetworkElement) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FlattenedManagedNetworkElement) ProtoMessage() {} - -func (x *FlattenedManagedNetworkElement) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FlattenedManagedNetworkElement.ProtoReflect.Descriptor instead. -func (*FlattenedManagedNetworkElement) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{14} -} - -func (x *FlattenedManagedNetworkElement) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *FlattenedManagedNetworkElement) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *FlattenedManagedNetworkElement) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -func (x *FlattenedManagedNetworkElement) GetPluginid() string { - if x != nil { - return x.Pluginid - } - return "" -} - -type Change struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Age int64 `protobuf:"varint,2,opt,name=age,proto3" json:"age,omitempty"` - State ChangeState `protobuf:"varint,3,opt,name=state,proto3,enum=gosdn.pnd.ChangeState" json:"state,omitempty"` - Diff *gnmi.Notification `protobuf:"bytes,4,opt,name=diff,proto3" json:"diff,omitempty"` -} - -func (x *Change) Reset() { - *x = Change{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Change) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Change) ProtoMessage() {} - -func (x *Change) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Change.ProtoReflect.Descriptor instead. -func (*Change) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{15} -} - -func (x *Change) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Change) GetAge() int64 { - if x != nil { - return x.Age - } - return 0 -} - -func (x *Change) GetState() ChangeState { - if x != nil { - return x.State - } - return ChangeState_CHANGE_STATE_UNSPECIFIED -} - -func (x *Change) GetDiff() *gnmi.Notification { - if x != nil { - return x.Diff - } - return nil -} - -type SetMneListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mne []*SetMne `protobuf:"bytes,2,rep,name=mne,proto3" json:"mne,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` -} - -func (x *SetMneListRequest) Reset() { - *x = SetMneListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetMneListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetMneListRequest) ProtoMessage() {} - -func (x *SetMneListRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetMneListRequest.ProtoReflect.Descriptor instead. -func (*SetMneListRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{16} -} - -func (x *SetMneListRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetMneListRequest) GetMne() []*SetMne { - if x != nil { - return x.Mne - } - return nil -} - -func (x *SetMneListRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -type SetChangeListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Change []*SetChange `protobuf:"bytes,2,rep,name=change,proto3" json:"change,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` -} - -func (x *SetChangeListRequest) Reset() { - *x = SetChangeListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetChangeListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetChangeListRequest) ProtoMessage() {} - -func (x *SetChangeListRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetChangeListRequest.ProtoReflect.Descriptor instead. -func (*SetChangeListRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{17} -} - -func (x *SetChangeListRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetChangeListRequest) GetChange() []*SetChange { - if x != nil { - return x.Change - } - return nil -} - -func (x *SetChangeListRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -type SetPathListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - ChangeRequest []*ChangeRequest `protobuf:"bytes,2,rep,name=change_request,json=changeRequest,proto3" json:"change_request,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` -} - -func (x *SetPathListRequest) Reset() { - *x = SetPathListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetPathListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetPathListRequest) ProtoMessage() {} - -func (x *SetPathListRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetPathListRequest.ProtoReflect.Descriptor instead. -func (*SetPathListRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{18} -} - -func (x *SetPathListRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetPathListRequest) GetChangeRequest() []*ChangeRequest { - if x != nil { - return x.ChangeRequest - } - return nil -} - -func (x *SetPathListRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -//TODO: rename -type ChangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mneid string `protobuf:"bytes,1,opt,name=mneid,proto3" json:"mneid,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - ApiOp ApiOperation `protobuf:"varint,4,opt,name=api_op,json=apiOp,proto3,enum=gosdn.pnd.ApiOperation" json:"api_op,omitempty"` -} - -func (x *ChangeRequest) Reset() { - *x = ChangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangeRequest) ProtoMessage() {} - -func (x *ChangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChangeRequest.ProtoReflect.Descriptor instead. -func (*ChangeRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{19} -} - -func (x *ChangeRequest) GetMneid() string { - if x != nil { - return x.Mneid - } - return "" -} - -func (x *ChangeRequest) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *ChangeRequest) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -func (x *ChangeRequest) GetApiOp() ApiOperation { - if x != nil { - return x.ApiOp - } - return ApiOperation_API_OPERATION_UNSPECIFIED -} - -type SetMne struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` - PluginId string `protobuf:"bytes,3,opt,name=pluginId,proto3" json:"pluginId,omitempty"` - MneName string `protobuf:"bytes,4,opt,name=mne_name,json=mneName,proto3" json:"mne_name,omitempty"` - TransportOption *transport.TransportOption `protobuf:"bytes,5,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"` -} - -func (x *SetMne) Reset() { - *x = SetMne{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetMne) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetMne) ProtoMessage() {} - -func (x *SetMne) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetMne.ProtoReflect.Descriptor instead. -func (*SetMne) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{20} -} - -func (x *SetMne) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *SetMne) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -func (x *SetMne) GetPluginId() string { - if x != nil { - return x.PluginId - } - return "" -} - -func (x *SetMne) GetMneName() string { - if x != nil { - return x.MneName - } - return "" -} - -func (x *SetMne) GetTransportOption() *transport.TransportOption { - if x != nil { - return x.TransportOption - } - return nil -} - -type SetChange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Cuid string `protobuf:"bytes,1,opt,name=cuid,proto3" json:"cuid,omitempty"` - Op Operation `protobuf:"varint,2,opt,name=op,proto3,enum=gosdn.pnd.Operation" json:"op,omitempty"` -} - -func (x *SetChange) Reset() { - *x = SetChange{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetChange) ProtoMessage() {} - -func (x *SetChange) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetChange.ProtoReflect.Descriptor instead. -func (*SetChange) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{21} -} - -func (x *SetChange) GetCuid() string { - if x != nil { - return x.Cuid - } - return "" -} - -func (x *SetChange) GetOp() Operation { - if x != nil { - return x.Op - } - return Operation_OPERATION_UNSPECIFIED -} - -type SetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Status Status `protobuf:"varint,3,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` -} - -func (x *SetResponse) Reset() { - *x = SetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetResponse) ProtoMessage() {} - -func (x *SetResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetResponse.ProtoReflect.Descriptor instead. -func (*SetResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{22} -} - -func (x *SetResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetResponse) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *SetResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -type SetMneListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` - Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"` -} - -func (x *SetMneListResponse) Reset() { - *x = SetMneListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetMneListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetMneListResponse) ProtoMessage() {} - -func (x *SetMneListResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetMneListResponse.ProtoReflect.Descriptor instead. -func (*SetMneListResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{23} -} - -func (x *SetMneListResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetMneListResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -func (x *SetMneListResponse) GetResponses() []*SetResponse { - if x != nil { - return x.Responses - } - return nil -} - -type SetChangeListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` - Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"` -} - -func (x *SetChangeListResponse) Reset() { - *x = SetChangeListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetChangeListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetChangeListResponse) ProtoMessage() {} - -func (x *SetChangeListResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetChangeListResponse.ProtoReflect.Descriptor instead. -func (*SetChangeListResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{24} -} - -func (x *SetChangeListResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetChangeListResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -func (x *SetChangeListResponse) GetResponses() []*SetResponse { - if x != nil { - return x.Responses - } - return nil -} - -type SetChangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` -} - -func (x *SetChangeResponse) Reset() { - *x = SetChangeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetChangeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetChangeResponse) ProtoMessage() {} - -func (x *SetChangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetChangeResponse.ProtoReflect.Descriptor instead. -func (*SetChangeResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{25} -} - -func (x *SetChangeResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetChangeResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -type SetPathListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` - Responses []*SetResponse `protobuf:"bytes,3,rep,name=responses,proto3" json:"responses,omitempty"` -} - -func (x *SetPathListResponse) Reset() { - *x = SetPathListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetPathListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetPathListResponse) ProtoMessage() {} - -func (x *SetPathListResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetPathListResponse.ProtoReflect.Descriptor instead. -func (*SetPathListResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{26} -} - -func (x *SetPathListResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SetPathListResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -func (x *SetPathListResponse) GetResponses() []*SetResponse { - if x != nil { - return x.Responses - } - return nil -} - -type DeleteMneRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` - Mneid string `protobuf:"bytes,3,opt,name=mneid,proto3" json:"mneid,omitempty"` -} - -func (x *DeleteMneRequest) Reset() { - *x = DeleteMneRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteMneRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteMneRequest) ProtoMessage() {} - -func (x *DeleteMneRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteMneRequest.ProtoReflect.Descriptor instead. -func (*DeleteMneRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{27} -} - -func (x *DeleteMneRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *DeleteMneRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -func (x *DeleteMneRequest) GetMneid() string { - if x != nil { - return x.Mneid - } - return "" -} - -type DeleteMneResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` -} - -func (x *DeleteMneResponse) Reset() { - *x = DeleteMneResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteMneResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteMneResponse) ProtoMessage() {} - -func (x *DeleteMneResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteMneResponse.ProtoReflect.Descriptor instead. -func (*DeleteMneResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{28} -} - -func (x *DeleteMneResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *DeleteMneResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -type SubscribePathRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` - Sublist *SubscriptionList `protobuf:"bytes,4,opt,name=sublist,proto3" json:"sublist,omitempty"` -} - -func (x *SubscribePathRequest) Reset() { - *x = SubscribePathRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubscribePathRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubscribePathRequest) ProtoMessage() {} - -func (x *SubscribePathRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubscribePathRequest.ProtoReflect.Descriptor instead. -func (*SubscribePathRequest) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{29} -} - -func (x *SubscribePathRequest) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SubscribePathRequest) GetMneid() string { - if x != nil { - return x.Mneid - } - return "" -} - -func (x *SubscribePathRequest) GetPid() string { - if x != nil { - return x.Pid - } - return "" -} - -func (x *SubscribePathRequest) GetSublist() *SubscriptionList { - if x != nil { - return x.Sublist - } - return nil -} - -// The mode determines how the target should trigger updates to be sent. -// Reference: gNMI Specification Section 3.5.1.2 -type SubscriptionList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Subscription []*Subscription `protobuf:"bytes,1,rep,name=subscription,proto3" json:"subscription,omitempty"` - Mode SubscriptionMode `protobuf:"varint,2,opt,name=mode,proto3,enum=gosdn.pnd.SubscriptionMode" json:"mode,omitempty"` -} - -func (x *SubscriptionList) Reset() { - *x = SubscriptionList{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubscriptionList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubscriptionList) ProtoMessage() {} - -func (x *SubscriptionList) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubscriptionList.ProtoReflect.Descriptor instead. -func (*SubscriptionList) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{30} -} - -func (x *SubscriptionList) GetSubscription() []*Subscription { - if x != nil { - return x.Subscription - } - return nil -} - -func (x *SubscriptionList) GetMode() SubscriptionMode { - if x != nil { - return x.Mode - } - return SubscriptionMode_SUBSCRIPTION_MODE_UNSPECIFIED -} - -type Subscription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - StreamMode StreamMode `protobuf:"varint,2,opt,name=stream_mode,json=streamMode,proto3,enum=gosdn.pnd.StreamMode" json:"stream_mode,omitempty"` - SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` // time in ns between samples in SAMPLE mode. -} - -func (x *Subscription) Reset() { - *x = Subscription{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Subscription) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Subscription) ProtoMessage() {} - -func (x *Subscription) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Subscription.ProtoReflect.Descriptor instead. -func (*Subscription) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{31} -} - -func (x *Subscription) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *Subscription) GetStreamMode() StreamMode { - if x != nil { - return x.StreamMode - } - return StreamMode_STREAM_MODE_UNSPECIFIED -} - -func (x *Subscription) GetSampleInterval() uint64 { - if x != nil { - return x.SampleInterval - } - return 0 -} - -type SubscribePathResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Status Status `protobuf:"varint,2,opt,name=status,proto3,enum=gosdn.pnd.Status" json:"status,omitempty"` - MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` -} - -func (x *SubscribePathResponse) Reset() { - *x = SubscribePathResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubscribePathResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubscribePathResponse) ProtoMessage() {} - -func (x *SubscribePathResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubscribePathResponse.ProtoReflect.Descriptor instead. -func (*SubscribePathResponse) Descriptor() ([]byte, []int) { - return file_gosdn_pnd_pnd_proto_rawDescGZIP(), []int{32} -} - -func (x *SubscribePathResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *SubscribePathResponse) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - -func (x *SubscribePathResponse) GetMneNotification() []*gnmi.Notification { - if x != nil { - return x.MneNotification - } - return nil -} - -var File_gosdn_pnd_pnd_proto protoreflect.FileDescriptor - -var file_gosdn_pnd_pnd_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, - 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x43, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x55, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4d, - 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, - 0x46, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, - 0x6a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, - 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, - 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, - 0x64, 0x12, 0x32, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, - 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, - 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, - 0x03, 0x70, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x46, 0x6c, - 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, - 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, - 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x6d, - 0x6e, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, - 0xad, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, - 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, - 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, - 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x46, 0x6c, 0x61, 0x74, - 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x22, - 0xa3, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x29, - 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x95, 0x01, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x22, 0x5e, 0x0a, 0x16, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x7a, 0x0a, 0x15, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, - 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, - 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x72, 0x0a, - 0x1e, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x64, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x69, - 0x64, 0x22, 0x80, 0x01, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x2c, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, - 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x04, - 0x64, 0x69, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6e, 0x6d, - 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, - 0x64, 0x69, 0x66, 0x66, 0x22, 0x68, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x03, 0x6d, 0x6e, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, - 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x03, 0x6d, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x74, - 0x0a, 0x14, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, - 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x70, 0x69, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x0e, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x7f, 0x0a, 0x0d, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, - 0x65, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, - 0x06, 0x61, 0x70, 0x69, 0x5f, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x61, 0x70, 0x69, 0x4f, 0x70, 0x22, 0xb8, 0x01, - 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x70, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x02, 0x6f, 0x70, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, - 0x64, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x70, 0x22, - 0x66, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4d, - 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x96, 0x01, - 0x0a, 0x15, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, - 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x34, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x5c, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, - 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, - 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x22, 0x5c, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, - 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6e, - 0x65, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6e, 0x65, 0x69, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, - 0x69, 0x64, 0x12, 0x35, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x07, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x04, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x73, 0x64, - 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x83, 0x01, 0x0a, - 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x10, 0x6d, 0x6e, 0x65, 0x5f, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x9c, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, - 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, - 0x45, 0x44, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, - 0x54, 0x10, 0x04, 0x2a, 0x7c, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, - 0x41, 0x50, 0x49, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, - 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x4f, - 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x03, 0x2a, 0x69, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, - 0x0a, 0x15, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, - 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, - 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x03, 0x2a, 0x41, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, - 0x0a, 0x09, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, - 0x8b, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55, 0x42, 0x53, 0x43, - 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e, 0x43, - 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, - 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x4c, 0x10, 0x03, 0x2a, 0x7c, 0x0a, - 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, - 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x52, 0x45, - 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x44, - 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x52, 0x45, - 0x41, 0x4d, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, - 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x03, 0x32, 0xdc, 0x09, 0x0a, 0x0a, - 0x50, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, - 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, - 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x70, 0x6e, 0x64, - 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x06, - 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x12, 0x18, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x19, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, - 0x2f, 0x6d, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x12, 0x4f, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x12, - 0x18, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x4d, - 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, - 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, - 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, - 0x0a, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x67, 0x6f, - 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, - 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, - 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x12, 0x6f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, - 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x75, 0x69, - 0x64, 0x7d, 0x12, 0x72, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, - 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, - 0x2e, 0x53, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, - 0x2a, 0x22, 0x13, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x6f, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, - 0x12, 0x25, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, - 0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x7d, 0x12, 0x6f, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x50, 0x61, - 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, - 0x64, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, - 0x22, 0x16, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, - 0x65, 0x73, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x68, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, - 0x64, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x70, 0x6e, 0x64, 0x73, 0x2f, - 0x7b, 0x70, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x6d, 0x6e, 0x65, 0x69, - 0x64, 0x7d, 0x12, 0x56, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0xae, 0x02, 0x5a, 0x2d, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, - 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x92, 0x41, 0xfb, 0x01, - 0x12, 0xf8, 0x01, 0x0a, 0x10, 0x67, 0x6f, 0x53, 0x44, 0x4e, 0x20, 0x4e, 0x6f, 0x72, 0x74, 0x68, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x4d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x47, 0x6f, 0x20, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x6f, 0x53, 0x44, 0x4e, 0x20, - 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x0a, 0x18, 0x67, 0x6f, 0x53, 0x44, 0x4e, 0x20, 0x4e, 0x6f, - 0x72, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, - 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, - 0x2f, 0x61, 0x70, 0x69, 0x2a, 0x50, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, - 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, - 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x2d, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, - 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_gosdn_pnd_pnd_proto_rawDescOnce sync.Once - file_gosdn_pnd_pnd_proto_rawDescData = file_gosdn_pnd_pnd_proto_rawDesc -) - -func file_gosdn_pnd_pnd_proto_rawDescGZIP() []byte { - file_gosdn_pnd_pnd_proto_rawDescOnce.Do(func() { - file_gosdn_pnd_pnd_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_pnd_pnd_proto_rawDescData) - }) - return file_gosdn_pnd_pnd_proto_rawDescData -} - -var file_gosdn_pnd_pnd_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_gosdn_pnd_pnd_proto_msgTypes = make([]protoimpl.MessageInfo, 33) -var file_gosdn_pnd_pnd_proto_goTypes = []interface{}{ - (ChangeState)(0), // 0: gosdn.pnd.ChangeState - (ApiOperation)(0), // 1: gosdn.pnd.ApiOperation - (Operation)(0), // 2: gosdn.pnd.Operation - (Status)(0), // 3: gosdn.pnd.Status - (SubscriptionMode)(0), // 4: gosdn.pnd.SubscriptionMode - (StreamMode)(0), // 5: gosdn.pnd.StreamMode - (*GetMneListRequest)(nil), // 6: gosdn.pnd.GetMneListRequest - (*GetMneRequest)(nil), // 7: gosdn.pnd.GetMneRequest - (*GetChangeListRequest)(nil), // 8: gosdn.pnd.GetChangeListRequest - (*GetChangeRequest)(nil), // 9: gosdn.pnd.GetChangeRequest - (*GetPathRequest)(nil), // 10: gosdn.pnd.GetPathRequest - (*GetMneResponse)(nil), // 11: gosdn.pnd.GetMneResponse - (*GetFlattenedMneResponse)(nil), // 12: gosdn.pnd.GetFlattenedMneResponse - (*GetMneListResponse)(nil), // 13: gosdn.pnd.GetMneListResponse - (*GetFlattenedMneListResponse)(nil), // 14: gosdn.pnd.GetFlattenedMneListResponse - (*GetPathResponse)(nil), // 15: gosdn.pnd.GetPathResponse - (*GetChangeResponse)(nil), // 16: gosdn.pnd.GetChangeResponse - (*GetChangeListResponse)(nil), // 17: gosdn.pnd.GetChangeListResponse - (*PrincipalNetworkDomain)(nil), // 18: gosdn.pnd.PrincipalNetworkDomain - (*ManagedNetworkElement)(nil), // 19: gosdn.pnd.ManagedNetworkElement - (*FlattenedManagedNetworkElement)(nil), // 20: gosdn.pnd.FlattenedManagedNetworkElement - (*Change)(nil), // 21: gosdn.pnd.Change - (*SetMneListRequest)(nil), // 22: gosdn.pnd.SetMneListRequest - (*SetChangeListRequest)(nil), // 23: gosdn.pnd.SetChangeListRequest - (*SetPathListRequest)(nil), // 24: gosdn.pnd.SetPathListRequest - (*ChangeRequest)(nil), // 25: gosdn.pnd.ChangeRequest - (*SetMne)(nil), // 26: gosdn.pnd.SetMne - (*SetChange)(nil), // 27: gosdn.pnd.SetChange - (*SetResponse)(nil), // 28: gosdn.pnd.SetResponse - (*SetMneListResponse)(nil), // 29: gosdn.pnd.SetMneListResponse - (*SetChangeListResponse)(nil), // 30: gosdn.pnd.SetChangeListResponse - (*SetChangeResponse)(nil), // 31: gosdn.pnd.SetChangeResponse - (*SetPathListResponse)(nil), // 32: gosdn.pnd.SetPathListResponse - (*DeleteMneRequest)(nil), // 33: gosdn.pnd.DeleteMneRequest - (*DeleteMneResponse)(nil), // 34: gosdn.pnd.DeleteMneResponse - (*SubscribePathRequest)(nil), // 35: gosdn.pnd.SubscribePathRequest - (*SubscriptionList)(nil), // 36: gosdn.pnd.SubscriptionList - (*Subscription)(nil), // 37: gosdn.pnd.Subscription - (*SubscribePathResponse)(nil), // 38: gosdn.pnd.SubscribePathResponse - (*gnmi.Notification)(nil), // 39: gnmi.Notification - (*transport.TransportOption)(nil), // 40: gosdn.transport.TransportOption -} -var file_gosdn_pnd_pnd_proto_depIdxs = []int32{ - 18, // 0: gosdn.pnd.GetMneResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 19, // 1: gosdn.pnd.GetMneResponse.mne:type_name -> gosdn.pnd.ManagedNetworkElement - 18, // 2: gosdn.pnd.GetFlattenedMneResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 20, // 3: gosdn.pnd.GetFlattenedMneResponse.mne:type_name -> gosdn.pnd.FlattenedManagedNetworkElement - 18, // 4: gosdn.pnd.GetMneListResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 19, // 5: gosdn.pnd.GetMneListResponse.mne:type_name -> gosdn.pnd.ManagedNetworkElement - 18, // 6: gosdn.pnd.GetFlattenedMneListResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 20, // 7: gosdn.pnd.GetFlattenedMneListResponse.mne:type_name -> gosdn.pnd.FlattenedManagedNetworkElement - 18, // 8: gosdn.pnd.GetPathResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 39, // 9: gosdn.pnd.GetPathResponse.mne_notification:type_name -> gnmi.Notification - 18, // 10: gosdn.pnd.GetChangeResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 21, // 11: gosdn.pnd.GetChangeResponse.change:type_name -> gosdn.pnd.Change - 18, // 12: gosdn.pnd.GetChangeListResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain - 21, // 13: gosdn.pnd.GetChangeListResponse.change:type_name -> gosdn.pnd.Change - 39, // 14: gosdn.pnd.ManagedNetworkElement.mne_notification:type_name -> gnmi.Notification - 0, // 15: gosdn.pnd.Change.state:type_name -> gosdn.pnd.ChangeState - 39, // 16: gosdn.pnd.Change.diff:type_name -> gnmi.Notification - 26, // 17: gosdn.pnd.SetMneListRequest.mne:type_name -> gosdn.pnd.SetMne - 27, // 18: gosdn.pnd.SetChangeListRequest.change:type_name -> gosdn.pnd.SetChange - 25, // 19: gosdn.pnd.SetPathListRequest.change_request:type_name -> gosdn.pnd.ChangeRequest - 1, // 20: gosdn.pnd.ChangeRequest.api_op:type_name -> gosdn.pnd.ApiOperation - 40, // 21: gosdn.pnd.SetMne.transport_option:type_name -> gosdn.transport.TransportOption - 2, // 22: gosdn.pnd.SetChange.op:type_name -> gosdn.pnd.Operation - 3, // 23: gosdn.pnd.SetResponse.status:type_name -> gosdn.pnd.Status - 3, // 24: gosdn.pnd.SetMneListResponse.status:type_name -> gosdn.pnd.Status - 28, // 25: gosdn.pnd.SetMneListResponse.responses:type_name -> gosdn.pnd.SetResponse - 3, // 26: gosdn.pnd.SetChangeListResponse.status:type_name -> gosdn.pnd.Status - 28, // 27: gosdn.pnd.SetChangeListResponse.responses:type_name -> gosdn.pnd.SetResponse - 3, // 28: gosdn.pnd.SetChangeResponse.status:type_name -> gosdn.pnd.Status - 3, // 29: gosdn.pnd.SetPathListResponse.status:type_name -> gosdn.pnd.Status - 28, // 30: gosdn.pnd.SetPathListResponse.responses:type_name -> gosdn.pnd.SetResponse - 3, // 31: gosdn.pnd.DeleteMneResponse.status:type_name -> gosdn.pnd.Status - 36, // 32: gosdn.pnd.SubscribePathRequest.sublist:type_name -> gosdn.pnd.SubscriptionList - 37, // 33: gosdn.pnd.SubscriptionList.subscription:type_name -> gosdn.pnd.Subscription - 4, // 34: gosdn.pnd.SubscriptionList.mode:type_name -> gosdn.pnd.SubscriptionMode - 5, // 35: gosdn.pnd.Subscription.stream_mode:type_name -> gosdn.pnd.StreamMode - 3, // 36: gosdn.pnd.SubscribePathResponse.status:type_name -> gosdn.pnd.Status - 39, // 37: gosdn.pnd.SubscribePathResponse.mne_notification:type_name -> gnmi.Notification - 6, // 38: gosdn.pnd.PndService.GetMneList:input_type -> gosdn.pnd.GetMneListRequest - 6, // 39: gosdn.pnd.PndService.GetFlattenedMneList:input_type -> gosdn.pnd.GetMneListRequest - 7, // 40: gosdn.pnd.PndService.GetMne:input_type -> gosdn.pnd.GetMneRequest - 7, // 41: gosdn.pnd.PndService.GetFlattenedMne:input_type -> gosdn.pnd.GetMneRequest - 22, // 42: gosdn.pnd.PndService.SetMneList:input_type -> gosdn.pnd.SetMneListRequest - 8, // 43: gosdn.pnd.PndService.GetChangeList:input_type -> gosdn.pnd.GetChangeListRequest - 9, // 44: gosdn.pnd.PndService.GetChange:input_type -> gosdn.pnd.GetChangeRequest - 23, // 45: gosdn.pnd.PndService.SetChangeList:input_type -> gosdn.pnd.SetChangeListRequest - 10, // 46: gosdn.pnd.PndService.GetPath:input_type -> gosdn.pnd.GetPathRequest - 24, // 47: gosdn.pnd.PndService.SetPathList:input_type -> gosdn.pnd.SetPathListRequest - 33, // 48: gosdn.pnd.PndService.DeleteMne:input_type -> gosdn.pnd.DeleteMneRequest - 35, // 49: gosdn.pnd.PndService.SubscribePath:input_type -> gosdn.pnd.SubscribePathRequest - 13, // 50: gosdn.pnd.PndService.GetMneList:output_type -> gosdn.pnd.GetMneListResponse - 14, // 51: gosdn.pnd.PndService.GetFlattenedMneList:output_type -> gosdn.pnd.GetFlattenedMneListResponse - 11, // 52: gosdn.pnd.PndService.GetMne:output_type -> gosdn.pnd.GetMneResponse - 12, // 53: gosdn.pnd.PndService.GetFlattenedMne:output_type -> gosdn.pnd.GetFlattenedMneResponse - 29, // 54: gosdn.pnd.PndService.SetMneList:output_type -> gosdn.pnd.SetMneListResponse - 17, // 55: gosdn.pnd.PndService.GetChangeList:output_type -> gosdn.pnd.GetChangeListResponse - 16, // 56: gosdn.pnd.PndService.GetChange:output_type -> gosdn.pnd.GetChangeResponse - 30, // 57: gosdn.pnd.PndService.SetChangeList:output_type -> gosdn.pnd.SetChangeListResponse - 15, // 58: gosdn.pnd.PndService.GetPath:output_type -> gosdn.pnd.GetPathResponse - 32, // 59: gosdn.pnd.PndService.SetPathList:output_type -> gosdn.pnd.SetPathListResponse - 34, // 60: gosdn.pnd.PndService.DeleteMne:output_type -> gosdn.pnd.DeleteMneResponse - 38, // 61: gosdn.pnd.PndService.SubscribePath:output_type -> gosdn.pnd.SubscribePathResponse - 50, // [50:62] is the sub-list for method output_type - 38, // [38:50] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name -} - -func init() { file_gosdn_pnd_pnd_proto_init() } -func file_gosdn_pnd_pnd_proto_init() { - if File_gosdn_pnd_pnd_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_gosdn_pnd_pnd_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMneListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMneRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChangeListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPathRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMneResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlattenedMneResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMneListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlattenedMneListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPathResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChangeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChangeListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + if !protoimpl.UnsafeEnabled { + file_gosdn_pnd_pnd_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrincipalNetworkDomain); i { case 0: return &v.state @@ -3154,260 +176,19 @@ func file_gosdn_pnd_pnd_proto_init() { return nil } } - file_gosdn_pnd_pnd_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManagedNetworkElement); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlattenedManagedNetworkElement); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Change); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMneListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetChangeListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetPathListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMne); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetChange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMneListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetChangeListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetChangeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetPathListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMneRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMneResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribePathRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscriptionList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subscription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribePathResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gosdn_pnd_pnd_proto_rawDesc, - NumEnums: 6, - NumMessages: 33, + NumEnums: 0, + NumMessages: 1, NumExtensions: 0, NumServices: 1, }, GoTypes: file_gosdn_pnd_pnd_proto_goTypes, DependencyIndexes: file_gosdn_pnd_pnd_proto_depIdxs, - EnumInfos: file_gosdn_pnd_pnd_proto_enumTypes, MessageInfos: file_gosdn_pnd_pnd_proto_msgTypes, }.Build() File_gosdn_pnd_pnd_proto = out.File diff --git a/api/go/gosdn/pnd/pnd.pb.gw.go b/api/go/gosdn/pnd/pnd.pb.gw.go deleted file mode 100644 index 0b37aca1811285810fdcdad182e05a77b89d0533..0000000000000000000000000000000000000000 --- a/api/go/gosdn/pnd/pnd.pb.gw.go +++ /dev/null @@ -1,1233 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: gosdn/pnd/pnd.proto - -/* -Package pnd is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package pnd - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_PndService_GetFlattenedMneList_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_PndService_GetFlattenedMneList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetMneListRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetFlattenedMneList_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetFlattenedMneList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_GetFlattenedMneList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetMneListRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetFlattenedMneList_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetFlattenedMneList(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_PndService_GetMne_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "mneid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) - -func request_PndService_GetMne_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetMneRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["mneid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") - } - - protoReq.Mneid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetMne_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetMne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_GetMne_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetMneRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["mneid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") - } - - protoReq.Mneid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetMne_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetMne(ctx, &protoReq) - return msg, metadata, err - -} - -func request_PndService_SetMneList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetMneListRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - msg, err := client.SetMneList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_SetMneList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetMneListRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - msg, err := server.SetMneList(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_PndService_GetChangeList_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_PndService_GetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeListRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetChangeList_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetChangeList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_GetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeListRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetChangeList_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetChangeList(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_PndService_GetChange_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "cuid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) - -func request_PndService_GetChange_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["cuid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid") - } - - protoReq.Cuid, err = runtime.StringSlice(val, ",") - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cuid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetChange_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetChange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_GetChange_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["cuid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid") - } - - protoReq.Cuid, err = runtime.StringSlice(val, ",") - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cuid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetChange_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetChange(ctx, &protoReq) - return msg, metadata, err - -} - -func request_PndService_SetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetChangeListRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - msg, err := client.SetChangeList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_SetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetChangeListRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - msg, err := server.SetChangeList(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_PndService_GetPath_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "mneid": 1, "path": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} -) - -func request_PndService_GetPath_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPathRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["mneid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") - } - - protoReq.Mneid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) - } - - val, ok = pathParams["path"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path") - } - - protoReq.Path, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetPath_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetPath(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_GetPath_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPathRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["mneid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") - } - - protoReq.Mneid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) - } - - val, ok = pathParams["path"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path") - } - - protoReq.Path, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetPath_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetPath(ctx, &protoReq) - return msg, metadata, err - -} - -func request_PndService_SetPathList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetPathListRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - msg, err := client.SetPathList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_SetPathList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetPathListRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - msg, err := server.SetPathList(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_PndService_DeleteMne_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0, "mneid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) - -func request_PndService_DeleteMne_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteMneRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["mneid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") - } - - protoReq.Mneid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_DeleteMne_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.DeleteMne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PndService_DeleteMne_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteMneRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") - } - - protoReq.Pid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) - } - - val, ok = pathParams["mneid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") - } - - protoReq.Mneid, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_DeleteMne_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.DeleteMne(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterPndServiceHandlerServer registers the http handlers for service PndService to "mux". -// UnaryRPC :call PndServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPndServiceHandlerFromEndpoint instead. -func RegisterPndServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PndServiceServer) error { - - mux.Handle("GET", pattern_PndService_GetFlattenedMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetFlattenedMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_GetFlattenedMneList_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetFlattenedMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mne/{mneid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_GetMne_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_PndService_SetMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/SetMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_SetMneList_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_SetMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_GetChangeList_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetChange", runtime.WithHTTPPathPattern("/pnds/{pid}/changes/{cuid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_GetChange_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetChange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_PndService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/SetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_SetChangeList_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_SetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPath", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}/paths/{path}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_GetPath_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetPath_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_PndService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/SetPathList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/paths")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_SetPathList_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_SetPathList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_PndService_DeleteMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/DeleteMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PndService_DeleteMne_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_DeleteMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterPndServiceHandlerFromEndpoint is same as RegisterPndServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterPndServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterPndServiceHandler(ctx, mux, conn) -} - -// RegisterPndServiceHandler registers the http handlers for service PndService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterPndServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterPndServiceHandlerClient(ctx, mux, NewPndServiceClient(conn)) -} - -// RegisterPndServiceHandlerClient registers the http handlers for service PndService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PndServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PndServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "PndServiceClient" to call the correct interceptors. -func RegisterPndServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PndServiceClient) error { - - mux.Handle("GET", pattern_PndService_GetFlattenedMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetFlattenedMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_GetFlattenedMneList_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetFlattenedMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mne/{mneid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_GetMne_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_PndService_SetMneList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/SetMneList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_SetMneList_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_SetMneList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_GetChangeList_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetChange", runtime.WithHTTPPathPattern("/pnds/{pid}/changes/{cuid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_GetChange_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetChange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_PndService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/SetChangeList", runtime.WithHTTPPathPattern("/pnds/{pid}/changes")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_SetChangeList_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_SetChangeList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_PndService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPath", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}/paths/{path}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_GetPath_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_GetPath_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_PndService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/SetPathList", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/paths")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_SetPathList_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_SetPathList_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_PndService_DeleteMne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/DeleteMne", runtime.WithHTTPPathPattern("/pnds/{pid}/mnes/{mneid}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PndService_DeleteMne_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PndService_DeleteMne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_PndService_GetFlattenedMneList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "mnes"}, "")) - - pattern_PndService_GetMne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "mne", "mneid"}, "")) - - pattern_PndService_SetMneList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "mnes"}, "")) - - pattern_PndService_GetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "changes"}, "")) - - pattern_PndService_GetChange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "changes", "cuid"}, "")) - - pattern_PndService_SetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"pnds", "pid", "changes"}, "")) - - pattern_PndService_GetPath_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"pnds", "pid", "mnes", "mneid", "paths", "path"}, "")) - - pattern_PndService_SetPathList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"pnds", "pid", "mnes", "paths"}, "")) - - pattern_PndService_DeleteMne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"pnds", "pid", "mnes", "mneid"}, "")) -) - -var ( - forward_PndService_GetFlattenedMneList_0 = runtime.ForwardResponseMessage - - forward_PndService_GetMne_0 = runtime.ForwardResponseMessage - - forward_PndService_SetMneList_0 = runtime.ForwardResponseMessage - - forward_PndService_GetChangeList_0 = runtime.ForwardResponseMessage - - forward_PndService_GetChange_0 = runtime.ForwardResponseMessage - - forward_PndService_SetChangeList_0 = runtime.ForwardResponseMessage - - forward_PndService_GetPath_0 = runtime.ForwardResponseMessage - - forward_PndService_SetPathList_0 = runtime.ForwardResponseMessage - - forward_PndService_DeleteMne_0 = runtime.ForwardResponseMessage -) diff --git a/api/go/gosdn/pnd/pnd_grpc.pb.go b/api/go/gosdn/pnd/pnd_grpc.pb.go index dbf848ebf238de6ce5f5b1ed2c58db5b414058f3..85cb369c25fd9b1e8904b820bca9998b771d9f74 100644 --- a/api/go/gosdn/pnd/pnd_grpc.pb.go +++ b/api/go/gosdn/pnd/pnd_grpc.pb.go @@ -3,10 +3,7 @@ package pnd import ( - context "context" grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" ) // This is a compile-time assertion to ensure that this generated file @@ -18,45 +15,6 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type PndServiceClient interface { - // Allows to request all Managed Network Elements (MNE) which are - // managed by a specific Principal Network Domain. - // Full MNEs are provided, which also includes the MNE config as gNMI - // notification. - GetMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetMneListResponse, error) - // Allows to request all Managed Network Elements (MNE) which are - // managed by a specific Principal Network Domain. - // Flattened MNEs are provided, which does not include the MNE config as gNMI - // notification. - GetFlattenedMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetFlattenedMneListResponse, error) - // Allows to request a specific Managed Network Element which is managed by a - // specific Principal Network Domain. - GetMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetMneResponse, error) - // Allows to request a specific Managed Network Element which is managed by a - // specific Principal Network Domain. A flattened version of a Managed - // Network Element is provided. - GetFlattenedMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetFlattenedMneResponse, error) - // Allows to add multiple Managed Network Elements to be managed by a - // specific Principal Network Domain. - SetMneList(ctx context.Context, in *SetMneListRequest, opts ...grpc.CallOption) (*SetMneListResponse, error) - // Allows to request all Changes registered for a specific Principal Network Domain. - GetChangeList(ctx context.Context, in *GetChangeListRequest, opts ...grpc.CallOption) (*GetChangeListResponse, error) - // Allows to request a specific Change registered for a specific Principal Network Domain. - GetChange(ctx context.Context, in *GetChangeRequest, opts ...grpc.CallOption) (*GetChangeResponse, error) - // Allows to operate on multiple Changes registered for a specific Principal Network Domain. - SetChangeList(ctx context.Context, in *SetChangeListRequest, opts ...grpc.CallOption) (*SetChangeListResponse, error) - // Allows to request a specific Path of a Managed Network Element, - // managed by a specific Principal Network Domain. - GetPath(ctx context.Context, in *GetPathRequest, opts ...grpc.CallOption) (*GetPathResponse, error) - // Allows to set a specific Path of a Managed Network Element, - // managed by a specific Principal Network Domain. - SetPathList(ctx context.Context, in *SetPathListRequest, opts ...grpc.CallOption) (*SetPathListResponse, error) - // Allows to delete a specific Managed Network Element which is managed by a - // specific Principal Network Domain. - DeleteMne(ctx context.Context, in *DeleteMneRequest, opts ...grpc.CallOption) (*DeleteMneResponse, error) - // Allows to subscribe to multiple paths of a Managed Network Element which is - // managed by a specific Principal Network Domain and streams data depending on the subscribe - // method. - SubscribePath(ctx context.Context, in *SubscribePathRequest, opts ...grpc.CallOption) (PndService_SubscribePathClient, error) } type pndServiceClient struct { @@ -67,180 +25,10 @@ func NewPndServiceClient(cc grpc.ClientConnInterface) PndServiceClient { return &pndServiceClient{cc} } -func (c *pndServiceClient) GetMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetMneListResponse, error) { - out := new(GetMneListResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetMneList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) GetFlattenedMneList(ctx context.Context, in *GetMneListRequest, opts ...grpc.CallOption) (*GetFlattenedMneListResponse, error) { - out := new(GetFlattenedMneListResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetFlattenedMneList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) GetMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetMneResponse, error) { - out := new(GetMneResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetMne", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) GetFlattenedMne(ctx context.Context, in *GetMneRequest, opts ...grpc.CallOption) (*GetFlattenedMneResponse, error) { - out := new(GetFlattenedMneResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetFlattenedMne", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) SetMneList(ctx context.Context, in *SetMneListRequest, opts ...grpc.CallOption) (*SetMneListResponse, error) { - out := new(SetMneListResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/SetMneList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) GetChangeList(ctx context.Context, in *GetChangeListRequest, opts ...grpc.CallOption) (*GetChangeListResponse, error) { - out := new(GetChangeListResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetChangeList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) GetChange(ctx context.Context, in *GetChangeRequest, opts ...grpc.CallOption) (*GetChangeResponse, error) { - out := new(GetChangeResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetChange", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) SetChangeList(ctx context.Context, in *SetChangeListRequest, opts ...grpc.CallOption) (*SetChangeListResponse, error) { - out := new(SetChangeListResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/SetChangeList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) GetPath(ctx context.Context, in *GetPathRequest, opts ...grpc.CallOption) (*GetPathResponse, error) { - out := new(GetPathResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/GetPath", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) SetPathList(ctx context.Context, in *SetPathListRequest, opts ...grpc.CallOption) (*SetPathListResponse, error) { - out := new(SetPathListResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/SetPathList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) DeleteMne(ctx context.Context, in *DeleteMneRequest, opts ...grpc.CallOption) (*DeleteMneResponse, error) { - out := new(DeleteMneResponse) - err := c.cc.Invoke(ctx, "/gosdn.pnd.PndService/DeleteMne", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *pndServiceClient) SubscribePath(ctx context.Context, in *SubscribePathRequest, opts ...grpc.CallOption) (PndService_SubscribePathClient, error) { - stream, err := c.cc.NewStream(ctx, &PndService_ServiceDesc.Streams[0], "/gosdn.pnd.PndService/SubscribePath", opts...) - if err != nil { - return nil, err - } - x := &pndServiceSubscribePathClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type PndService_SubscribePathClient interface { - Recv() (*SubscribePathResponse, error) - grpc.ClientStream -} - -type pndServiceSubscribePathClient struct { - grpc.ClientStream -} - -func (x *pndServiceSubscribePathClient) Recv() (*SubscribePathResponse, error) { - m := new(SubscribePathResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - // PndServiceServer is the server API for PndService service. // All implementations must embed UnimplementedPndServiceServer // for forward compatibility type PndServiceServer interface { - // Allows to request all Managed Network Elements (MNE) which are - // managed by a specific Principal Network Domain. - // Full MNEs are provided, which also includes the MNE config as gNMI - // notification. - GetMneList(context.Context, *GetMneListRequest) (*GetMneListResponse, error) - // Allows to request all Managed Network Elements (MNE) which are - // managed by a specific Principal Network Domain. - // Flattened MNEs are provided, which does not include the MNE config as gNMI - // notification. - GetFlattenedMneList(context.Context, *GetMneListRequest) (*GetFlattenedMneListResponse, error) - // Allows to request a specific Managed Network Element which is managed by a - // specific Principal Network Domain. - GetMne(context.Context, *GetMneRequest) (*GetMneResponse, error) - // Allows to request a specific Managed Network Element which is managed by a - // specific Principal Network Domain. A flattened version of a Managed - // Network Element is provided. - GetFlattenedMne(context.Context, *GetMneRequest) (*GetFlattenedMneResponse, error) - // Allows to add multiple Managed Network Elements to be managed by a - // specific Principal Network Domain. - SetMneList(context.Context, *SetMneListRequest) (*SetMneListResponse, error) - // Allows to request all Changes registered for a specific Principal Network Domain. - GetChangeList(context.Context, *GetChangeListRequest) (*GetChangeListResponse, error) - // Allows to request a specific Change registered for a specific Principal Network Domain. - GetChange(context.Context, *GetChangeRequest) (*GetChangeResponse, error) - // Allows to operate on multiple Changes registered for a specific Principal Network Domain. - SetChangeList(context.Context, *SetChangeListRequest) (*SetChangeListResponse, error) - // Allows to request a specific Path of a Managed Network Element, - // managed by a specific Principal Network Domain. - GetPath(context.Context, *GetPathRequest) (*GetPathResponse, error) - // Allows to set a specific Path of a Managed Network Element, - // managed by a specific Principal Network Domain. - SetPathList(context.Context, *SetPathListRequest) (*SetPathListResponse, error) - // Allows to delete a specific Managed Network Element which is managed by a - // specific Principal Network Domain. - DeleteMne(context.Context, *DeleteMneRequest) (*DeleteMneResponse, error) - // Allows to subscribe to multiple paths of a Managed Network Element which is - // managed by a specific Principal Network Domain and streams data depending on the subscribe - // method. - SubscribePath(*SubscribePathRequest, PndService_SubscribePathServer) error mustEmbedUnimplementedPndServiceServer() } @@ -248,42 +36,6 @@ type PndServiceServer interface { type UnimplementedPndServiceServer struct { } -func (UnimplementedPndServiceServer) GetMneList(context.Context, *GetMneListRequest) (*GetMneListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMneList not implemented") -} -func (UnimplementedPndServiceServer) GetFlattenedMneList(context.Context, *GetMneListRequest) (*GetFlattenedMneListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetFlattenedMneList not implemented") -} -func (UnimplementedPndServiceServer) GetMne(context.Context, *GetMneRequest) (*GetMneResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMne not implemented") -} -func (UnimplementedPndServiceServer) GetFlattenedMne(context.Context, *GetMneRequest) (*GetFlattenedMneResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetFlattenedMne not implemented") -} -func (UnimplementedPndServiceServer) SetMneList(context.Context, *SetMneListRequest) (*SetMneListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetMneList not implemented") -} -func (UnimplementedPndServiceServer) GetChangeList(context.Context, *GetChangeListRequest) (*GetChangeListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetChangeList not implemented") -} -func (UnimplementedPndServiceServer) GetChange(context.Context, *GetChangeRequest) (*GetChangeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetChange not implemented") -} -func (UnimplementedPndServiceServer) SetChangeList(context.Context, *SetChangeListRequest) (*SetChangeListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetChangeList not implemented") -} -func (UnimplementedPndServiceServer) GetPath(context.Context, *GetPathRequest) (*GetPathResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPath not implemented") -} -func (UnimplementedPndServiceServer) SetPathList(context.Context, *SetPathListRequest) (*SetPathListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetPathList not implemented") -} -func (UnimplementedPndServiceServer) DeleteMne(context.Context, *DeleteMneRequest) (*DeleteMneResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteMne not implemented") -} -func (UnimplementedPndServiceServer) SubscribePath(*SubscribePathRequest, PndService_SubscribePathServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribePath not implemented") -} func (UnimplementedPndServiceServer) mustEmbedUnimplementedPndServiceServer() {} // UnsafePndServiceServer may be embedded to opt out of forward compatibility for this service. @@ -297,283 +49,13 @@ func RegisterPndServiceServer(s grpc.ServiceRegistrar, srv PndServiceServer) { s.RegisterService(&PndService_ServiceDesc, srv) } -func _PndService_GetMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMneListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetMneList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetMneList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetMneList(ctx, req.(*GetMneListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_GetFlattenedMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMneListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetFlattenedMneList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetFlattenedMneList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetFlattenedMneList(ctx, req.(*GetMneListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_GetMne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMneRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetMne(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetMne", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetMne(ctx, req.(*GetMneRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_GetFlattenedMne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMneRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetFlattenedMne(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetFlattenedMne", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetFlattenedMne(ctx, req.(*GetMneRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_SetMneList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetMneListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).SetMneList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/SetMneList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).SetMneList(ctx, req.(*SetMneListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_GetChangeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetChangeListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetChangeList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetChangeList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetChangeList(ctx, req.(*GetChangeListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_GetChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetChangeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetChange(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetChange", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetChange(ctx, req.(*GetChangeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_SetChangeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetChangeListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).SetChangeList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/SetChangeList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).SetChangeList(ctx, req.(*SetChangeListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_GetPath_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetPathRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).GetPath(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/GetPath", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).GetPath(ctx, req.(*GetPathRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_SetPathList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetPathListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).SetPathList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/SetPathList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).SetPathList(ctx, req.(*SetPathListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_DeleteMne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteMneRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PndServiceServer).DeleteMne(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gosdn.pnd.PndService/DeleteMne", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PndServiceServer).DeleteMne(ctx, req.(*DeleteMneRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PndService_SubscribePath_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribePathRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(PndServiceServer).SubscribePath(m, &pndServiceSubscribePathServer{stream}) -} - -type PndService_SubscribePathServer interface { - Send(*SubscribePathResponse) error - grpc.ServerStream -} - -type pndServiceSubscribePathServer struct { - grpc.ServerStream -} - -func (x *pndServiceSubscribePathServer) Send(m *SubscribePathResponse) error { - return x.ServerStream.SendMsg(m) -} - // PndService_ServiceDesc is the grpc.ServiceDesc for PndService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) var PndService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "gosdn.pnd.PndService", HandlerType: (*PndServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetMneList", - Handler: _PndService_GetMneList_Handler, - }, - { - MethodName: "GetFlattenedMneList", - Handler: _PndService_GetFlattenedMneList_Handler, - }, - { - MethodName: "GetMne", - Handler: _PndService_GetMne_Handler, - }, - { - MethodName: "GetFlattenedMne", - Handler: _PndService_GetFlattenedMne_Handler, - }, - { - MethodName: "SetMneList", - Handler: _PndService_SetMneList_Handler, - }, - { - MethodName: "GetChangeList", - Handler: _PndService_GetChangeList_Handler, - }, - { - MethodName: "GetChange", - Handler: _PndService_GetChange_Handler, - }, - { - MethodName: "SetChangeList", - Handler: _PndService_SetChangeList_Handler, - }, - { - MethodName: "GetPath", - Handler: _PndService_GetPath_Handler, - }, - { - MethodName: "SetPathList", - Handler: _PndService_SetPathList_Handler, - }, - { - MethodName: "DeleteMne", - Handler: _PndService_DeleteMne_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "SubscribePath", - Handler: _PndService_SubscribePath_Handler, - ServerStreams: true, - }, - }, - Metadata: "gosdn/pnd/pnd.proto", + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{}, + Metadata: "gosdn/pnd/pnd.proto", } diff --git a/api/openapiv2/gosdn_northbound.swagger.json b/api/openapiv2/gosdn_northbound.swagger.json index 2ebb1bc7f9746946d0c8bed21986755ec32f2a44..7f0a4e49abc1e975f525c964bc7b8fdf00d9a00f 100644 --- a/api/openapiv2/gosdn_northbound.swagger.json +++ b/api/openapiv2/gosdn_northbound.swagger.json @@ -14,9 +14,6 @@ } }, "tags": [ - { - "name": "PndService" - }, { "name": "Collector" }, @@ -536,12 +533,12 @@ "/pnds/{pid}/changes": { "get": { "summary": "Allows to request all Changes registered for a specific Principal Network Domain.", - "operationId": "PndService_GetChangeList", + "operationId": "NetworkElementService_GetChangeList", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndGetChangeListResponse" + "$ref": "#/definitions/networkelementGetChangeListResponse" } }, "default": { @@ -567,17 +564,17 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] }, "post": { "summary": "Allows to operate on multiple Changes registered for a specific Principal Network Domain.", - "operationId": "PndService_SetChangeList", + "operationId": "NetworkElementService_SetChangeList", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndSetChangeListResponse" + "$ref": "#/definitions/networkelementSetChangeListResponse" } }, "default": { @@ -608,7 +605,7 @@ "change": { "type": "array", "items": { - "$ref": "#/definitions/pndSetChange" + "$ref": "#/definitions/networkelementSetChange" } } } @@ -616,19 +613,19 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, "/pnds/{pid}/changes/{cuid}": { "get": { "summary": "Allows to request a specific Change registered for a specific Principal Network Domain.", - "operationId": "PndService_GetChange", + "operationId": "NetworkElementService_GetChange", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndGetChangeResponse" + "$ref": "#/definitions/networkelementGetChangeResponse" } }, "default": { @@ -665,19 +662,19 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, "/pnds/{pid}/mne/{mneid}": { "get": { "summary": "Allows to request a specific Managed Network Element which is managed by a\nspecific Principal Network Domain.", - "operationId": "PndService_GetMne", + "operationId": "NetworkElementService_GetMne", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndGetMneResponse" + "$ref": "#/definitions/networkelementGetMneResponse" } }, "default": { @@ -709,19 +706,19 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, "/pnds/{pid}/mnes": { "get": { "summary": "Allows to request all Managed Network Elements (MNE) which are\nmanaged by a specific Principal Network Domain.\nFlattened MNEs are provided, which does not include the MNE config as gNMI\nnotification.", - "operationId": "PndService_GetFlattenedMneList", + "operationId": "NetworkElementService_GetFlattenedMneList", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndGetFlattenedMneListResponse" + "$ref": "#/definitions/networkelementGetFlattenedMneListResponse" } }, "default": { @@ -747,17 +744,17 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] }, "post": { "summary": "Allows to add multiple Managed Network Elements to be managed by a\nspecific Principal Network Domain.", - "operationId": "PndService_SetMneList", + "operationId": "NetworkElementService_SetMneList", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndSetMneListResponse" + "$ref": "#/definitions/networkelementSetMneListResponse" } }, "default": { @@ -788,7 +785,7 @@ "mne": { "type": "array", "items": { - "$ref": "#/definitions/pndSetMne" + "$ref": "#/definitions/networkelementSetMne" } } } @@ -796,19 +793,19 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, "/pnds/{pid}/mnes/paths": { "post": { "summary": "Allows to set a specific Path of a Managed Network Element,\nmanaged by a specific Principal Network Domain.", - "operationId": "PndService_SetPathList", + "operationId": "NetworkElementService_SetPathList", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndSetPathListResponse" + "$ref": "#/definitions/networkelementSetPathListResponse" } }, "default": { @@ -839,7 +836,7 @@ "changeRequest": { "type": "array", "items": { - "$ref": "#/definitions/pndChangeRequest" + "$ref": "#/definitions/networkelementChangeRequest" } } } @@ -847,19 +844,19 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, "/pnds/{pid}/mnes/{mneid}": { "delete": { "summary": "Allows to delete a specific Managed Network Element which is managed by a\nspecific Principal Network Domain.", - "operationId": "PndService_DeleteMne", + "operationId": "NetworkElementService_DeleteMne", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndDeleteMneResponse" + "$ref": "#/definitions/networkelementDeleteMneResponse" } }, "default": { @@ -891,19 +888,19 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, "/pnds/{pid}/mnes/{mneid}/paths/{path}": { "get": { "summary": "Allows to request a specific Path of a Managed Network Element,\nmanaged by a specific Principal Network Domain.", - "operationId": "PndService_GetPath", + "operationId": "NetworkElementService_GetPath", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/pndGetPathResponse" + "$ref": "#/definitions/networkelementGetPathResponse" } }, "default": { @@ -941,7 +938,7 @@ } ], "tags": [ - "PndService" + "NetworkElementService" ] } }, @@ -2971,61 +2968,7 @@ ], "default": "STATE_UNSPECIFIED" }, - "gosdnnetworkelementStatus": { - "type": "string", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_OK", - "STATUS_ERROR" - ], - "default": "STATUS_UNSPECIFIED" - }, - "gosdnpluginPayload": { - "type": "object", - "properties": { - "chunk": { - "type": "string", - "format": "byte" - } - } - }, - "gosdnplugin_registryDeleteResponse": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "format": "int64" - }, - "status": { - "$ref": "#/definitions/gosdnplugin_registryDeleteResponseStatus" - } - } - }, - "gosdnplugin_registryDeleteResponseStatus": { - "type": "string", - "enum": [ - "STATUS_UNSPECIFIED", - "STATUS_OK", - "STATUS_ERROR" - ], - "default": "STATUS_UNSPECIFIED" - }, - "gosdnplugin_registryGetResponse": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "format": "int64" - }, - "plugins": { - "type": "array", - "items": { - "$ref": "#/definitions/plugin_registryPlugin" - } - } - } - }, - "gosdnpndOperation": { + "gosdnnetworkelementOperation": { "type": "string", "enum": [ "OPERATION_UNSPECIFIED", @@ -3035,7 +2978,7 @@ ], "default": "OPERATION_UNSPECIFIED" }, - "gosdnpndSetResponse": { + "gosdnnetworkelementSetResponse": { "type": "object", "properties": { "timestamp": { @@ -3046,11 +2989,11 @@ "type": "string" }, "status": { - "$ref": "#/definitions/gosdnpndStatus" + "$ref": "#/definitions/gosdnnetworkelementStatus" } } }, - "gosdnpndStatus": { + "gosdnnetworkelementStatus": { "type": "string", "enum": [ "STATUS_UNSPECIFIED", @@ -3059,14 +3002,14 @@ ], "default": "STATUS_UNSPECIFIED" }, - "gosdnpndSubscription": { + "gosdnnetworkelementSubscription": { "type": "object", "properties": { "path": { "type": "string" }, "streamMode": { - "$ref": "#/definitions/pndStreamMode" + "$ref": "#/definitions/networkelementStreamMode" }, "sampleInterval": { "type": "string", @@ -3074,22 +3017,22 @@ } } }, - "gosdnpndSubscriptionList": { + "gosdnnetworkelementSubscriptionList": { "type": "object", "properties": { "subscription": { "type": "array", "items": { - "$ref": "#/definitions/gosdnpndSubscription" + "$ref": "#/definitions/gosdnnetworkelementSubscription" } }, "mode": { - "$ref": "#/definitions/gosdnpndSubscriptionMode" + "$ref": "#/definitions/gosdnnetworkelementSubscriptionMode" } }, "title": "The mode determines how the target should trigger updates to be sent.\nReference: gNMI Specification Section 3.5.1.2" }, - "gosdnpndSubscriptionMode": { + "gosdnnetworkelementSubscriptionMode": { "type": "string", "enum": [ "SUBSCRIPTION_MODE_UNSPECIFIED", @@ -3099,6 +3042,51 @@ ], "default": "SUBSCRIPTION_MODE_UNSPECIFIED" }, + "gosdnpluginPayload": { + "type": "object", + "properties": { + "chunk": { + "type": "string", + "format": "byte" + } + } + }, + "gosdnplugin_registryDeleteResponse": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "int64" + }, + "status": { + "$ref": "#/definitions/gosdnplugin_registryDeleteResponseStatus" + } + } + }, + "gosdnplugin_registryDeleteResponseStatus": { + "type": "string", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_OK", + "STATUS_ERROR" + ], + "default": "STATUS_UNSPECIFIED" + }, + "gosdnplugin_registryGetResponse": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "int64" + }, + "plugins": { + "type": "array", + "items": { + "$ref": "#/definitions/plugin_registryPlugin" + } + } + } + }, "gosdnrbacRole": { "type": "object", "properties": { @@ -3216,25 +3204,64 @@ } } }, - "networkelementGetAllNetworkElementResponse": { + "networkelementApiOperation": { + "type": "string", + "enum": [ + "API_OPERATION_UNSPECIFIED", + "API_OPERATION_UPDATE", + "API_OPERATION_REPLACE", + "API_OPERATION_DELETE" + ], + "default": "API_OPERATION_UNSPECIFIED" + }, + "networkelementChange": { "type": "object", "properties": { - "timestamp": { + "id": { + "type": "string" + }, + "age": { "type": "string", "format": "int64" }, - "status": { - "$ref": "#/definitions/gosdnnetworkelementStatus" + "state": { + "$ref": "#/definitions/networkelementChangeState" }, - "networkElement": { - "type": "array", - "items": { - "$ref": "#/definitions/networkelementNetworkElement" - } + "diff": { + "$ref": "#/definitions/gnmiNotification" } } }, - "networkelementGetNetworkElementResponse": { + "networkelementChangeRequest": { + "type": "object", + "properties": { + "mneid": { + "type": "string" + }, + "path": { + "type": "string" + }, + "value": { + "type": "string" + }, + "apiOp": { + "$ref": "#/definitions/networkelementApiOperation" + } + }, + "title": "TODO: rename" + }, + "networkelementChangeState": { + "type": "string", + "enum": [ + "CHANGE_STATE_UNSPECIFIED", + "CHANGE_STATE_PENDING", + "CHANGE_STATE_COMMITTED", + "CHANGE_STATE_CONFIRMED", + "CHANGE_STATE_INCONSISTENT" + ], + "default": "CHANGE_STATE_UNSPECIFIED" + }, + "networkelementDeleteMneResponse": { "type": "object", "properties": { "timestamp": { @@ -3243,13 +3270,10 @@ }, "status": { "$ref": "#/definitions/gosdnnetworkelementStatus" - }, - "networkElement": { - "$ref": "#/definitions/networkelementNetworkElement" } } }, - "networkelementNetworkElement": { + "networkelementFlattenedManagedNetworkElement": { "type": "object", "properties": { "id": { @@ -3258,226 +3282,218 @@ "name": { "type": "string" }, - "model": { + "pid": { "type": "string" }, - "transportAddress": { + "pluginid": { "type": "string" - }, - "metadata": { - "$ref": "#/definitions/conflictMetadata" } } }, - "networkelementUpdateNetworkElementRequest": { + "networkelementGetAllNetworkElementResponse": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, + "status": { + "$ref": "#/definitions/gosdnnetworkelementStatus" + }, "networkElement": { - "$ref": "#/definitions/networkelementNetworkElement" + "type": "array", + "items": { + "$ref": "#/definitions/networkelementManagedNetworkElement" + } } } }, - "networkelementUpdateNetworkElementResponse": { + "networkelementGetChangeListResponse": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, - "status": { - "$ref": "#/definitions/gosdnnetworkelementStatus" - } - } - }, - "pluginDeleteNodeResponse": { - "type": "object", - "properties": { - "valid": { - "type": "boolean" + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + }, + "change": { + "type": "array", + "items": { + "$ref": "#/definitions/networkelementChange" + } } } }, - "pluginDiffResponse": { + "networkelementGetChangeResponse": { "type": "object", "properties": { - "notification": { - "$ref": "#/definitions/gnmiNotification" + "timestamp": { + "type": "string", + "format": "int64" + }, + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + }, + "change": { + "type": "array", + "items": { + "$ref": "#/definitions/networkelementChange" + } } } }, - "pluginGetNodeResponse": { + "networkelementGetFlattenedMneListResponse": { "type": "object", "properties": { - "nodes": { + "timestamp": { + "type": "string", + "format": "int64" + }, + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + }, + "mne": { "type": "array", "items": { - "$ref": "#/definitions/gnmiNotification" + "$ref": "#/definitions/networkelementFlattenedManagedNetworkElement" } } } }, - "pluginModelResponse": { + "networkelementGetFlattenedMneResponse": { "type": "object", "properties": { - "json": { + "timestamp": { "type": "string", - "format": "byte" + "format": "int64" + }, + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + }, + "mne": { + "$ref": "#/definitions/networkelementFlattenedManagedNetworkElement" } } }, - "pluginPruneConfigFalseResponse": { + "networkelementGetMneListResponse": { "type": "object", "properties": { - "model": { + "timestamp": { "type": "string", - "format": "byte" + "format": "int64" + }, + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + }, + "mne": { + "type": "array", + "items": { + "$ref": "#/definitions/networkelementManagedNetworkElement" + } } } }, - "pluginSetNodeResponse": { + "networkelementGetMneResponse": { "type": "object", "properties": { - "valid": { - "type": "boolean" - } - } - }, - "pluginUnmarshalResponse": { - "type": "object", - "properties": { - "valid": { - "type": "boolean" - } - } - }, - "pluginValidateChangeResponse": { - "type": "object", - "properties": { - "model": { + "timestamp": { "type": "string", - "format": "byte" + "format": "int64" + }, + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + }, + "mne": { + "$ref": "#/definitions/networkelementManagedNetworkElement" } } }, - "plugin_internalPluginSchemaPayload": { + "networkelementGetNetworkElementResponse": { "type": "object", "properties": { - "chunk": { + "timestamp": { "type": "string", - "format": "byte" + "format": "int64" + }, + "status": { + "$ref": "#/definitions/gosdnnetworkelementStatus" + }, + "networkElement": { + "$ref": "#/definitions/networkelementManagedNetworkElement" } } }, - "plugin_registryGetDownloadPayload": { + "networkelementGetPathResponse": { "type": "object", "properties": { - "chunk": { + "timestamp": { "type": "string", - "format": "byte" - } - } - }, - "plugin_registryManifest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "firmware": { - "type": "string" + "format": "int64" }, - "author": { - "type": "string" + "pnd": { + "$ref": "#/definitions/pndPrincipalNetworkDomain", + "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." }, - "version": { - "type": "string" + "mneNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/gnmiNotification" + } } } }, - "plugin_registryPlugin": { + "networkelementManagedNetworkElement": { "type": "object", "properties": { "id": { "type": "string" }, - "manifest": { - "$ref": "#/definitions/plugin_registryManifest" - } - } - }, - "plugin_registryQuery": { - "type": "object", - "properties": { - "id": { + "name": { "type": "string" }, - "name": { + "model": { "type": "string" - } - } - }, - "pndApiOperation": { - "type": "string", - "enum": [ - "API_OPERATION_UNSPECIFIED", - "API_OPERATION_UPDATE", - "API_OPERATION_REPLACE", - "API_OPERATION_DELETE" - ], - "default": "API_OPERATION_UNSPECIFIED" - }, - "pndChange": { - "type": "object", - "properties": { - "id": { + }, + "mneNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/gnmiNotification" + } + }, + "transportAddress": { "type": "string" }, - "age": { - "type": "string", - "format": "int64" + "transportOption": { + "$ref": "#/definitions/transportTransportOption" }, - "state": { - "$ref": "#/definitions/pndChangeState" + "metadata": { + "$ref": "#/definitions/conflictMetadata" }, - "diff": { - "$ref": "#/definitions/gnmiNotification" + "associatedPnd": { + "type": "string" } } }, - "pndChangeRequest": { + "networkelementSetChange": { "type": "object", "properties": { - "mneid": { - "type": "string" - }, - "path": { - "type": "string" - }, - "value": { + "cuid": { "type": "string" }, - "apiOp": { - "$ref": "#/definitions/pndApiOperation" + "op": { + "$ref": "#/definitions/gosdnnetworkelementOperation" } - }, - "title": "TODO: rename" - }, - "pndChangeState": { - "type": "string", - "enum": [ - "CHANGE_STATE_UNSPECIFIED", - "CHANGE_STATE_PENDING", - "CHANGE_STATE_COMMITTED", - "CHANGE_STATE_CONFIRMED", - "CHANGE_STATE_INCONSISTENT" - ], - "default": "CHANGE_STATE_UNSPECIFIED" + } }, - "pndDeleteMneResponse": { + "networkelementSetChangeListResponse": { "type": "object", "properties": { "timestamp": { @@ -3485,295 +3501,262 @@ "format": "int64" }, "status": { - "$ref": "#/definitions/gosdnpndStatus" + "$ref": "#/definitions/gosdnnetworkelementStatus" + }, + "responses": { + "type": "array", + "items": { + "$ref": "#/definitions/gosdnnetworkelementSetResponse" + } } } }, - "pndFlattenedManagedNetworkElement": { + "networkelementSetMne": { "type": "object", "properties": { - "id": { + "address": { "type": "string" }, - "name": { + "pid": { "type": "string" }, - "pid": { + "pluginId": { "type": "string" }, - "pluginid": { + "mneName": { "type": "string" + }, + "transportOption": { + "$ref": "#/definitions/transportTransportOption" } } }, - "pndGetChangeListResponse": { + "networkelementSetMneListResponse": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + "status": { + "$ref": "#/definitions/gosdnnetworkelementStatus" }, - "change": { + "responses": { "type": "array", "items": { - "$ref": "#/definitions/pndChange" + "$ref": "#/definitions/gosdnnetworkelementSetResponse" } } } }, - "pndGetChangeResponse": { + "networkelementSetPathListResponse": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + "status": { + "$ref": "#/definitions/gosdnnetworkelementStatus" }, - "change": { + "responses": { "type": "array", "items": { - "$ref": "#/definitions/pndChange" + "$ref": "#/definitions/gosdnnetworkelementSetResponse" } } } }, - "pndGetFlattenedMneListResponse": { + "networkelementStreamMode": { + "type": "string", + "enum": [ + "STREAM_MODE_UNSPECIFIED", + "STREAM_MODE_TARGET_DEFINED", + "STREAM_MODE_ON_CHANGE", + "STREAM_MODE_SAMPLE" + ], + "default": "STREAM_MODE_UNSPECIFIED" + }, + "networkelementSubscribePathResponse": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." + "status": { + "$ref": "#/definitions/gosdnnetworkelementStatus" }, - "mne": { + "mneNotification": { "type": "array", "items": { - "$ref": "#/definitions/pndFlattenedManagedNetworkElement" + "$ref": "#/definitions/gnmiNotification" } } } }, - "pndGetFlattenedMneResponse": { + "networkelementUpdateNetworkElementRequest": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." - }, - "mne": { - "$ref": "#/definitions/pndFlattenedManagedNetworkElement" + "networkElement": { + "$ref": "#/definitions/networkelementManagedNetworkElement" } } }, - "pndGetMneListResponse": { + "networkelementUpdateNetworkElementResponse": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "int64" }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." - }, - "mne": { + "status": { + "$ref": "#/definitions/gosdnnetworkelementStatus" + } + } + }, + "pluginDeleteNodeResponse": { + "type": "object", + "properties": { + "valid": { + "type": "boolean" + } + } + }, + "pluginDiffResponse": { + "type": "object", + "properties": { + "notification": { + "$ref": "#/definitions/gnmiNotification" + } + } + }, + "pluginGetNodeResponse": { + "type": "object", + "properties": { + "nodes": { "type": "array", "items": { - "$ref": "#/definitions/pndManagedNetworkElement" + "$ref": "#/definitions/gnmiNotification" } } } }, - "pndGetMneResponse": { + "pluginModelResponse": { "type": "object", "properties": { - "timestamp": { + "json": { "type": "string", - "format": "int64" - }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." - }, - "mne": { - "$ref": "#/definitions/pndManagedNetworkElement" + "format": "byte" } } }, - "pndGetPathResponse": { + "pluginPruneConfigFalseResponse": { "type": "object", "properties": { - "timestamp": { + "model": { "type": "string", - "format": "int64" - }, - "pnd": { - "$ref": "#/definitions/pndPrincipalNetworkDomain", - "description": "TODO: Check if this is really needed. Perhaps a reference to the PND's ID\nis also sufficient." - }, - "mneNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/gnmiNotification" - } + "format": "byte" } } }, - "pndManagedNetworkElement": { + "pluginSetNodeResponse": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "mneNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/gnmiNotification" - } + "valid": { + "type": "boolean" } } }, - "pndPrincipalNetworkDomain": { + "pluginUnmarshalResponse": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" + "valid": { + "type": "boolean" } } }, - "pndSetChange": { + "pluginValidateChangeResponse": { "type": "object", "properties": { - "cuid": { - "type": "string" - }, - "op": { - "$ref": "#/definitions/gosdnpndOperation" + "model": { + "type": "string", + "format": "byte" } } }, - "pndSetChangeListResponse": { + "plugin_internalPluginSchemaPayload": { "type": "object", "properties": { - "timestamp": { + "chunk": { "type": "string", - "format": "int64" - }, - "status": { - "$ref": "#/definitions/gosdnpndStatus" - }, - "responses": { - "type": "array", - "items": { - "$ref": "#/definitions/gosdnpndSetResponse" - } + "format": "byte" } } }, - "pndSetMne": { + "plugin_registryGetDownloadPayload": { "type": "object", "properties": { - "address": { + "chunk": { + "type": "string", + "format": "byte" + } + } + }, + "plugin_registryManifest": { + "type": "object", + "properties": { + "name": { "type": "string" }, - "pid": { + "firmware": { "type": "string" }, - "pluginId": { + "author": { "type": "string" }, - "mneName": { + "version": { "type": "string" - }, - "transportOption": { - "$ref": "#/definitions/transportTransportOption" } } }, - "pndSetMneListResponse": { + "plugin_registryPlugin": { "type": "object", "properties": { - "timestamp": { - "type": "string", - "format": "int64" - }, - "status": { - "$ref": "#/definitions/gosdnpndStatus" + "id": { + "type": "string" }, - "responses": { - "type": "array", - "items": { - "$ref": "#/definitions/gosdnpndSetResponse" - } + "manifest": { + "$ref": "#/definitions/plugin_registryManifest" } } }, - "pndSetPathListResponse": { + "plugin_registryQuery": { "type": "object", "properties": { - "timestamp": { - "type": "string", - "format": "int64" - }, - "status": { - "$ref": "#/definitions/gosdnpndStatus" + "id": { + "type": "string" }, - "responses": { - "type": "array", - "items": { - "$ref": "#/definitions/gosdnpndSetResponse" - } + "name": { + "type": "string" } } }, - "pndStreamMode": { - "type": "string", - "enum": [ - "STREAM_MODE_UNSPECIFIED", - "STREAM_MODE_TARGET_DEFINED", - "STREAM_MODE_ON_CHANGE", - "STREAM_MODE_SAMPLE" - ], - "default": "STREAM_MODE_UNSPECIFIED" - }, - "pndSubscribePathResponse": { + "pndPrincipalNetworkDomain": { "type": "object", "properties": { - "timestamp": { - "type": "string", - "format": "int64" + "id": { + "type": "string" }, - "status": { - "$ref": "#/definitions/gosdnpndStatus" + "name": { + "type": "string" }, - "mneNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/gnmiNotification" - } + "description": { + "type": "string" } } }, @@ -3786,7 +3769,7 @@ } }, "additionalProperties": {}, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rbacCreateRolesRequest": { "type": "object", diff --git a/api/proto/gosdn/networkelement/networkelement.proto b/api/proto/gosdn/networkelement/networkelement.proto index ad75044ab0a86221a3759bfe5269b7aba6a0d119..d3fe9bfc99051de14d43ea48ce2438df73426928 100644 --- a/api/proto/gosdn/networkelement/networkelement.proto +++ b/api/proto/gosdn/networkelement/networkelement.proto @@ -8,9 +8,9 @@ import "protoc-gen-openapiv2/options/annotations.proto"; import "github.com/openconfig/gnmi/proto/gnmi/gnmi.proto"; import "gosdn/conflict/conflict.proto"; -import "gosdn/pnd/pnd.proto"; import "gosdn/transport/transport.proto"; import "gosdn/southbound/southbound.proto"; +import "gosdn/pnd/pnd.proto"; option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"; @@ -47,6 +47,87 @@ service NetworkElementService { // delete: "/network-element" // }; // } + + // Allows to request all Managed Network Elements (MNE) which are + // managed by a specific Principal Network Domain. + // Full MNEs are provided, which also includes the MNE config as gNMI + // notification. + rpc GetMneList(GetMneListRequest) returns (GetMneListResponse); + + // Allows to request all Managed Network Elements (MNE) which are + // managed by a specific Principal Network Domain. + // Flattened MNEs are provided, which does not include the MNE config as gNMI + // notification. + rpc GetFlattenedMneList(GetFlattenedMneListRequest) returns (GetFlattenedMneListResponse) { + option (google.api.http) = { + get: "/pnds/{pid}/mnes" + }; + } + // Allows to request a specific Managed Network Element which is managed by a + // specific Principal Network Domain. + rpc GetMne(GetMneRequest) returns (GetMneResponse) { + option (google.api.http) = { + get: "/pnds/{pid}/mne/{mneid}" + }; + } + // TODO: add own getrequest message and http option + // Allows to request a specific Managed Network Element which is managed by a + // specific Principal Network Domain. A flattened version of a Managed + // Network Element is provided. + rpc GetFlattenedMne(GetMneRequest) returns (GetFlattenedMneResponse); + // Allows to add multiple Managed Network Elements to be managed by a + // specific Principal Network Domain. + rpc SetMneList(SetMneListRequest) returns (SetMneListResponse) { + option (google.api.http) = { + post: "/pnds/{pid}/mnes" + body: "*" + }; + } + // Allows to request a specific Path of a Managed Network Element, + // managed by a specific Principal Network Domain. + rpc GetPath(GetPathRequest) returns (GetPathResponse) { + option (google.api.http) = { + get: "/pnds/{pid}/mnes/{mneid}/paths/{path}" + }; + } + // Allows to set a specific Path of a Managed Network Element, + // managed by a specific Principal Network Domain. + rpc SetPathList(SetPathListRequest) returns (SetPathListResponse) { + option (google.api.http) = { + post: "/pnds/{pid}/mnes/paths" + body: "*" + }; + } + // Allows to delete a specific Managed Network Element which is managed by a + // specific Principal Network Domain. + rpc DeleteMne(DeleteMneRequest) returns (DeleteMneResponse) { + option (google.api.http) = { + delete: "/pnds/{pid}/mnes/{mneid}" + }; + } + // Allows to request all Changes registered for a specific Principal Network Domain. + rpc GetChangeList(GetChangeListRequest) returns (GetChangeListResponse) { + option (google.api.http) = { + get: "/pnds/{pid}/changes" + }; + } + // Allows to request a specific Change registered for a specific Principal Network Domain. + rpc GetChange(GetChangeRequest) returns (GetChangeResponse) { + option (google.api.http) = { + get: "/pnds/{pid}/changes/{cuid}" + }; + } + // Allows to operate on multiple Changes registered for a specific Principal Network Domain. + rpc SetChangeList(SetChangeListRequest) returns (SetChangeListResponse) { + option (google.api.http) = { + post: "/pnds/{pid}/changes" + body: "*" + }; + } + // Allows to subscribe to multiple paths of a Managed Network Element which is + // managed by a specific Principal Network Domain and streams data depending on the subscribe + // method. + rpc SubscribePath(SubscribePathRequest) returns (stream SubscribePathResponse) {}; } enum Status { @@ -55,14 +136,6 @@ enum Status { STATUS_ERROR = 2; } -message NetworkElement { - string id = 1; - string name = 2; - string model = 3; - string transport_address = 4; - conflict.Metadata metadata = 5; -} - message AddNetworkElementConfiguration { string address = 1; .gosdn.southbound.SouthboundInterface sbi = 2; @@ -90,7 +163,7 @@ message GetNetworkElementRequest { message GetNetworkElementResponse { int64 timestamp = 1; Status status = 2; - NetworkElement network_element = 3; + ManagedNetworkElement network_element = 3; } message GetAllNetworkElementRequest { @@ -100,12 +173,12 @@ message GetAllNetworkElementRequest { message GetAllNetworkElementResponse { int64 timestamp = 1; Status status = 2; - repeated NetworkElement network_element = 3; + repeated ManagedNetworkElement network_element = 3; } message UpdateNetworkElementRequest { int64 timestamp = 1; - NetworkElement network_element = 2; + ManagedNetworkElement network_element = 2; } message UpdateNetworkElementResponse { @@ -122,3 +195,258 @@ message DeleteNetworkElementResponse { int64 timestamp = 1; Status status = 2; } + +message ManagedNetworkElement { + string id = 1; + string name = 2; + string model = 3; + repeated gnmi.Notification mne_notification = 4; + string transport_address = 5; + .gosdn.transport.TransportOption transport_option = 6; + conflict.Metadata metadata = 7; + string associated_pnd = 8; + } + +message FlattenedManagedNetworkElement { + string id = 1; + string name = 2; + string pid = 3; + string pluginid = 4; +} + +message GetMneListRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string pid = 2; +} + +message GetMneListResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + repeated ManagedNetworkElement mne = 3; +} + +message GetFlattenedMneListRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string pid = 2; +} + +message GetFlattenedMneListResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + repeated FlattenedManagedNetworkElement mne = 3; +} + +message GetMneRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string mneid = 2; + string pid = 3; +} + +message GetMneResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + ManagedNetworkElement mne = 3; +} +message GetFlattenedMneResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + FlattenedManagedNetworkElement mne = 3; + } +message SetMne { + string address = 1; + string pid = 2; + string pluginId = 3; + string mne_name = 4; + .gosdn.transport.TransportOption transport_option = 5; +} + +message SetMneListRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + repeated SetMne mne = 2; + string pid = 3; +} + +message SetMneListResponse{ + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + Status status = 2; + repeated SetResponse responses = 3; +} + +message GetPathRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string mneid = 2; + string path = 3; + string pid = 4; +} + +message GetPathResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + repeated gnmi.Notification mne_notification = 3; +} + +message SetResponse{ + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string id = 2; + Status status = 3; +} + +message SetPathListRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + repeated ChangeRequest change_request = 2; + string pid = 3; +} + +message SetPathListResponse{ + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + Status status = 2; + repeated SetResponse responses = 3; +} + +message DeleteMneRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string pid = 2; + string mneid = 3; +} + +message DeleteMneResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + Status status = 2; +} + +enum ChangeState { + CHANGE_STATE_UNSPECIFIED = 0; + CHANGE_STATE_PENDING = 1; + CHANGE_STATE_COMMITTED = 2; + CHANGE_STATE_CONFIRMED = 3; + CHANGE_STATE_INCONSISTENT = 4; +} + +message Change { + string id = 1; + int64 age = 2; + ChangeState state = 3; + gnmi.Notification diff = 4; +} + +//TODO: rename +message ChangeRequest { + string mneid = 1; + string path = 2; + string value = 3; + ApiOperation api_op = 4; +} + +enum ApiOperation { + API_OPERATION_UNSPECIFIED = 0; + API_OPERATION_UPDATE = 1; + API_OPERATION_REPLACE = 2; + API_OPERATION_DELETE = 3; +} + +enum Operation { + OPERATION_UNSPECIFIED = 0; + OPERATION_CREATE = 1; + OPERATION_COMMIT = 2; + OPERATION_CONFIRM = 3; +} + +message SetChange { + string cuid = 1; + Operation op = 2; +} + +message GetChangeListRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string pid = 2; +} + +message GetChangeListResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + repeated Change change = 3; +} + +message GetChangeRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + repeated string cuid = 2; + string pid = 3; +} + +message GetChangeResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + // TODO: Check if this is really needed. Perhaps a reference to the PND's ID + // is also sufficient. + pnd.PrincipalNetworkDomain pnd = 2; + repeated Change change = 3; +} + +message SetChangeListRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + repeated SetChange change = 2; + string pid = 3; +} + +message SetChangeListResponse{ + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + Status status = 2; + repeated SetResponse responses = 3; +} + +// The mode determines how the target should trigger updates to be sent. +// Reference: gNMI Specification Section 3.5.1.2 +message SubscriptionList { + repeated Subscription subscription = 1; + SubscriptionMode mode = 2; +} + +enum SubscriptionMode { + SUBSCRIPTION_MODE_UNSPECIFIED = 0; + SUBSCRIPTION_MODE_ONCE = 1; + SUBSCRIPTION_MODE_STREAM = 2; + SUBSCRIPTION_MODE_POLL = 3; +} + +message Subscription { + string path = 1; + StreamMode stream_mode = 2; + uint64 sample_interval = 3; // time in ns between samples in SAMPLE mode. +} + +enum StreamMode { + STREAM_MODE_UNSPECIFIED = 0; + STREAM_MODE_TARGET_DEFINED = 1; // The target selects the relevant mode for each element. + STREAM_MODE_ON_CHANGE = 2; // The target sends an update on element value change. + STREAM_MODE_SAMPLE = 3; // The target samples values according to the interval. +} + +message SubscribePathRequest { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + string mneid = 2; + string pid = 3; + SubscriptionList sublist = 4; +} + +message SubscribePathResponse { + int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. + Status status = 2; + repeated gnmi.Notification mne_notification = 3; +} + + + + + + diff --git a/api/proto/gosdn/plugin/plugin.proto b/api/proto/gosdn/plugin/plugin.proto index 25f22a2fcec72e2cc5a553643cff09fc37c7fd22..09eb475cffc8677df85a4a07cd95b66e64c144a5 100644 --- a/api/proto/gosdn/plugin/plugin.proto +++ b/api/proto/gosdn/plugin/plugin.proto @@ -3,8 +3,7 @@ syntax = "proto3"; package gosdn.plugin; import "github.com/openconfig/gnmi/proto/gnmi/gnmi.proto"; -import "gosdn/pnd/pnd.proto"; - +import "gosdn/networkelement/networkelement.proto"; option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin"; service Plugin { @@ -72,7 +71,7 @@ message DiffResponse { } message ValidateChangeRequest { - pnd.ApiOperation operation = 1; + networkelement.ApiOperation operation = 1; gnmi.Path path = 2; bytes value = 3; } diff --git a/api/proto/gosdn/pnd/pnd.proto b/api/proto/gosdn/pnd/pnd.proto index 2c9dc4889495a605f611c7f17e1eb36a99291bfc..a12edbcf4a2c51ce8d64a3a2902828f205e148b0 100644 --- a/api/proto/gosdn/pnd/pnd.proto +++ b/api/proto/gosdn/pnd/pnd.proto @@ -28,341 +28,11 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { }; service PndService { - // Allows to request all Managed Network Elements (MNE) which are - // managed by a specific Principal Network Domain. - // Full MNEs are provided, which also includes the MNE config as gNMI - // notification. - rpc GetMneList(GetMneListRequest) returns (GetMneListResponse); - // Allows to request all Managed Network Elements (MNE) which are - // managed by a specific Principal Network Domain. - // Flattened MNEs are provided, which does not include the MNE config as gNMI - // notification. - rpc GetFlattenedMneList(GetMneListRequest) returns (GetFlattenedMneListResponse) { - option (google.api.http) = { - get: "/pnds/{pid}/mnes" - }; - } - // Allows to request a specific Managed Network Element which is managed by a - // specific Principal Network Domain. - rpc GetMne(GetMneRequest) returns (GetMneResponse) { - option (google.api.http) = { - get: "/pnds/{pid}/mne/{mneid}" - }; - } - // Allows to request a specific Managed Network Element which is managed by a - // specific Principal Network Domain. A flattened version of a Managed - // Network Element is provided. - rpc GetFlattenedMne(GetMneRequest) returns (GetFlattenedMneResponse); - // Allows to add multiple Managed Network Elements to be managed by a - // specific Principal Network Domain. - rpc SetMneList(SetMneListRequest) returns (SetMneListResponse) { - option (google.api.http) = { - post: "/pnds/{pid}/mnes" - body: "*" - }; - } - // Allows to request all Changes registered for a specific Principal Network Domain. - rpc GetChangeList(GetChangeListRequest) returns (GetChangeListResponse) { - option (google.api.http) = { - get: "/pnds/{pid}/changes" - }; - } - // Allows to request a specific Change registered for a specific Principal Network Domain. - rpc GetChange(GetChangeRequest) returns (GetChangeResponse) { - option (google.api.http) = { - get: "/pnds/{pid}/changes/{cuid}" - }; - } - // Allows to operate on multiple Changes registered for a specific Principal Network Domain. - rpc SetChangeList(SetChangeListRequest) returns (SetChangeListResponse) { - option (google.api.http) = { - post: "/pnds/{pid}/changes" - body: "*" - }; - } - // Allows to request a specific Path of a Managed Network Element, - // managed by a specific Principal Network Domain. - rpc GetPath(GetPathRequest) returns (GetPathResponse) { - option (google.api.http) = { - get: "/pnds/{pid}/mnes/{mneid}/paths/{path}" - }; - } - // Allows to set a specific Path of a Managed Network Element, - // managed by a specific Principal Network Domain. - rpc SetPathList(SetPathListRequest) returns (SetPathListResponse) { - option (google.api.http) = { - post: "/pnds/{pid}/mnes/paths" - body: "*" - }; - } - // Allows to delete a specific Managed Network Element which is managed by a - // specific Principal Network Domain. - rpc DeleteMne(DeleteMneRequest) returns (DeleteMneResponse) { - option (google.api.http) = { - delete: "/pnds/{pid}/mnes/{mneid}" - }; - } - // Allows to subscribe to multiple paths of a Managed Network Element which is - // managed by a specific Principal Network Domain and streams data depending on the subscribe - // method. - rpc SubscribePath(SubscribePathRequest) returns (stream SubscribePathResponse) {}; -} - -message GetMneListRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string pid = 2; -} - -message GetMneRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string mneid = 2; - string pid = 3; -} - -message GetChangeListRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string pid = 2; -} - -message GetChangeRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - repeated string cuid = 2; - string pid = 3; -} - -message GetPathRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string mneid = 2; - string path = 3; - string pid = 4; -} - -message GetMneResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - ManagedNetworkElement mne = 3; -} -message GetFlattenedMneResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - FlattenedManagedNetworkElement mne = 3; -} - -message GetMneListResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - repeated ManagedNetworkElement mne = 3; -} - -message GetFlattenedMneListResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - repeated FlattenedManagedNetworkElement mne = 3; -} - -message GetPathResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - repeated gnmi.Notification mne_notification = 3; -} - -message GetChangeResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - repeated Change change = 3; -} - -message GetChangeListResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - // TODO: Check if this is really needed. Perhaps a reference to the PND's ID - // is also sufficient. - PrincipalNetworkDomain pnd = 2; - repeated Change change = 3; } message PrincipalNetworkDomain { - string id = 1; - string name = 2; - string description = 3; -} - -message ManagedNetworkElement { - string id = 1; - string name = 2; - repeated gnmi.Notification mne_notification = 3; -} - -message FlattenedManagedNetworkElement { - string id = 1; - string name = 2; - string pid = 3; - string pluginid = 4; -} - -enum ChangeState { - CHANGE_STATE_UNSPECIFIED = 0; - CHANGE_STATE_PENDING = 1; - CHANGE_STATE_COMMITTED = 2; - CHANGE_STATE_CONFIRMED = 3; - CHANGE_STATE_INCONSISTENT = 4; -} - -message Change { - string id = 1; - int64 age = 2; - ChangeState state = 3; - gnmi.Notification diff = 4; -} - -message SetMneListRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - repeated SetMne mne = 2; - string pid = 3; -} - -message SetChangeListRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - repeated SetChange change = 2; - string pid = 3; -} - -message SetPathListRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - repeated ChangeRequest change_request = 2; - string pid = 3; -} - -//TODO: rename -message ChangeRequest { - string mneid = 1; - string path = 2; - string value = 3; - ApiOperation api_op = 4; -} - -enum ApiOperation { - API_OPERATION_UNSPECIFIED = 0; - API_OPERATION_UPDATE = 1; - API_OPERATION_REPLACE = 2; - API_OPERATION_DELETE = 3; -} - -message SetMne { - string address = 1; - string pid = 2; - string pluginId = 3; - string mne_name = 4; - .gosdn.transport.TransportOption transport_option = 5; -} - -enum Operation { - OPERATION_UNSPECIFIED = 0; - OPERATION_CREATE = 1; - OPERATION_COMMIT = 2; - OPERATION_CONFIRM = 3; -} - -message SetChange { - string cuid = 1; - Operation op = 2; -} - -message SetResponse{ - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string id = 2; - Status status = 3; -} - -message SetMneListResponse{ - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - Status status = 2; - repeated SetResponse responses = 3; -} - -message SetChangeListResponse{ - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - Status status = 2; - repeated SetResponse responses = 3; -} - -message SetChangeResponse{ - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - Status status = 2; -} - -message SetPathListResponse{ - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - Status status = 2; - repeated SetResponse responses = 3; -} - -message DeleteMneRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string pid = 2; - string mneid = 3; -} - -message DeleteMneResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - Status status = 2; -} - -enum Status { - STATUS_UNSPECIFIED = 0; - STATUS_OK = 1; - STATUS_ERROR = 2; -} - -message SubscribePathRequest { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - string mneid = 2; - string pid = 3; - SubscriptionList sublist = 4; -} - -// The mode determines how the target should trigger updates to be sent. -// Reference: gNMI Specification Section 3.5.1.2 -message SubscriptionList { - repeated Subscription subscription = 1; - SubscriptionMode mode = 2; -} - -enum SubscriptionMode { - SUBSCRIPTION_MODE_UNSPECIFIED = 0; - SUBSCRIPTION_MODE_ONCE = 1; - SUBSCRIPTION_MODE_STREAM = 2; - SUBSCRIPTION_MODE_POLL = 3; -} - -message Subscription { - string path = 1; - StreamMode stream_mode = 2; - uint64 sample_interval = 3; // time in ns between samples in SAMPLE mode. -} - -enum StreamMode { - STREAM_MODE_UNSPECIFIED = 0; - STREAM_MODE_TARGET_DEFINED = 1; // The target selects the relevant mode for each element. - STREAM_MODE_ON_CHANGE = 2; // The target sends an update on element value change. - STREAM_MODE_SAMPLE = 3; // The target samples values according to the interval. -} - - -message SubscribePathResponse { - int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. - Status status = 2; - repeated gnmi.Notification mne_notification = 3; + string id = 1; + string name = 2; + string description = 3; } diff --git a/applications/arista-routing-engine/network-element.go b/applications/arista-routing-engine/network-element.go index c11ba1287d34a4084c4b5d1a3dc041905e0992fb..29a2953be935a8c7096471eb67cec348ecfdd0d9 100644 --- a/applications/arista-routing-engine/network-element.go +++ b/applications/arista-routing-engine/network-element.go @@ -97,7 +97,7 @@ func adjustInterfacesOfNetworkElement(networkElementServer mnepb.NetworkElementS requestUpdate := &mnepb.UpdateNetworkElementRequest{ Timestamp: time.Now().UnixNano(), - NetworkElement: &mnepb.NetworkElement{ + NetworkElement: &mnepb.ManagedNetworkElement{ Id: mne.UUID.String(), Name: mne.Name, Model: modelAsString, @@ -140,7 +140,7 @@ func adjustNodeRoutesToMatchConfiguration(networkElementServer mnepb.NetworkElem requestUpdate := &mnepb.UpdateNetworkElementRequest{ Timestamp: time.Now().UnixNano(), - NetworkElement: &mnepb.NetworkElement{ + NetworkElement: &mnepb.ManagedNetworkElement{ Id: mne.UUID.String(), Name: mne.Name, Model: modelAsString, diff --git a/applications/hostname-checker/app.go b/applications/hostname-checker/app.go index b2107e08536e5ac9d50730c15b88e4fcc3825f90..32b6457870de5a29cfd8153060ed33cde3278a99 100644 --- a/applications/hostname-checker/app.go +++ b/applications/hostname-checker/app.go @@ -105,7 +105,7 @@ func (a *Application) callback(event *event.Event) { requestUpdate := &networkelement.UpdateNetworkElementRequest{ Timestamp: time.Now().UnixNano(), - NetworkElement: &networkelement.NetworkElement{ + NetworkElement: &networkelement.ManagedNetworkElement{ Id: d.UUID.String(), Name: d.Name, Model: modelAsString, diff --git a/applications/venv-manager/venv-manager/venv-manager.go b/applications/venv-manager/venv-manager/venv-manager.go index 107ead5b3d5a08a85d3ebd3277da2011ba6722d2..8d9743e22052df5b0a8d7a1cfda76b154228747f 100644 --- a/applications/venv-manager/venv-manager/venv-manager.go +++ b/applications/venv-manager/venv-manager/venv-manager.go @@ -11,8 +11,7 @@ import ( configMgmtPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement" corePb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" - networkelementPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" - pndPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" topologyPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology" "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/containerlab" link "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/links" @@ -296,12 +295,12 @@ func (v *VenvManager) parseTopologyDataIntoStructs(topologyData *topologyPb.GetT } func (v *VenvManager) loadNetworkElementModelPathsIntoGosdn(ctx context.Context, conn *grpc.ClientConn, nodes *[]node.Node) error { - pndService := pndPb.NewPndServiceClient(conn) + networkElementService := mnepb.NewNetworkElementServiceClient(conn) paths := [2]string{"/lldp/config/system-description", "/system/state/"} for _, path := range paths { for _, node := range *nodes { - _, err := pndService.GetPath(ctx, &pndPb.GetPathRequest{Mneid: node.ID, Pid: v.pndID, Path: path}) + _, err := networkElementService.GetPath(ctx, &mnepb.GetPathRequest{Mneid: node.ID, Pid: v.pndID, Path: path}) if err != nil { return err } @@ -335,10 +334,10 @@ func (v *VenvManager) getAndAddMoreData(topologyData *topology.GoSdnTopology) (* return nil, err } - networkElementService := networkelementPb.NewNetworkElementServiceClient(conn) + networkElementService := mnepb.NewNetworkElementServiceClient(conn) for iterator, node := range topologyData.Nodes { - getNetworkElementResponse, _ := networkElementService.Get(ctx, &networkelementPb.GetNetworkElementRequest{NetworkElementId: node.ID}) + getNetworkElementResponse, _ := networkElementService.Get(ctx, &mnepb.GetNetworkElementRequest{NetworkElementId: node.ID}) if err != nil { return nil, err } diff --git a/cli/adapter/PndAdapter.go b/cli/adapter/PndAdapter.go index 18539979fe1da734a82c8720daae9075014b6db1..c1e15c2bf02384f3a29f7601783ed308a61cfdd3 100644 --- a/cli/adapter/PndAdapter.go +++ b/cli/adapter/PndAdapter.go @@ -4,8 +4,8 @@ import ( "context" "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" prb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" "code.fbi.h-da.de/danet/gosdn/controller/api" "code.fbi.h-da.de/danet/gosdn/controller/customerrs" @@ -46,7 +46,7 @@ func (p *PndAdapter) RemoveSbi(uuid.UUID) error { // AddNetworkElement adds a new device to the controller. The device name is optional. // If no name is provided a name will be generated upon device creation. -func (p *PndAdapter) AddNetworkElement(ctx context.Context, name string, opts *tpb.TransportOption, pluginId uuid.UUID) (*ppb.SetMneListResponse, error) { +func (p *PndAdapter) AddNetworkElement(ctx context.Context, name string, opts *tpb.TransportOption, pluginId uuid.UUID) (*mnepb.SetMneListResponse, error) { return api.AddNetworkElement(ctx, p.endpoint, name, opts, pluginId, p.ID()) } @@ -57,24 +57,24 @@ func (p *PndAdapter) GetPluginSchemaTree(ctx context.Context, pluginID uuid.UUID // GetNetworkElement requests one or multiple devices belonging to a given // PrincipalNetworkDomain from the controller. -func (p *PndAdapter) GetNetworkElement(ctx context.Context, identifier string) (*ppb.GetMneResponse, error) { +func (p *PndAdapter) GetNetworkElement(ctx context.Context, identifier string) (*mnepb.GetMneResponse, error) { return api.GetNetworkElement(ctx, p.endpoint, p.id.String(), identifier) } // GetFlattenedNetworkElements requests a device belonging to the // PrincipalNetworkDomain attached to this adapter. -func (p *PndAdapter) GetFlattenedNetworkElement(ctx context.Context, identifier string) (*ppb.GetFlattenedMneResponse, error) { +func (p *PndAdapter) GetFlattenedNetworkElement(ctx context.Context, identifier string) (*mnepb.GetFlattenedMneResponse, error) { return api.GetFlattenedNetworkElement(ctx, p.endpoint, p.id.String(), identifier) } // GetFlattenedNetworkElements requests all devices belonging to the // PrincipalNetworkDomain attached to this adapter. -func (p *PndAdapter) GetFlattenedNetworkElements(ctx context.Context) (*ppb.GetFlattenedMneListResponse, error) { +func (p *PndAdapter) GetFlattenedNetworkElements(ctx context.Context) (*mnepb.GetFlattenedMneListResponse, error) { return api.GetFlattenedNetworkElements(ctx, p.endpoint, p.id.String()) } // RemoveNetworkElement removes a device from the controller. -func (p *PndAdapter) RemoveNetworkElement(ctx context.Context, did uuid.UUID) (*ppb.DeleteMneResponse, error) { +func (p *PndAdapter) RemoveNetworkElement(ctx context.Context, did uuid.UUID) (*mnepb.DeleteMneResponse, error) { return api.DeleteNetworkElement(ctx, p.endpoint, p.id.String(), did.String()) } @@ -86,7 +86,7 @@ func (p *PndAdapter) RemovePnd(ctx context.Context, pid uuid.UUID) (*core.Delete // ChangeMNE sends an API call to the controller requesting the creation of // a change from the provided Operation, path and value. The Change is marked // as Pending and times out after the specified timeout period. -func (p *PndAdapter) ChangeMNE(ctx context.Context, duid uuid.UUID, operation ppb.ApiOperation, path string, value ...string) (*ppb.SetPathListResponse, error) { +func (p *PndAdapter) ChangeMNE(ctx context.Context, duid uuid.UUID, operation mnepb.ApiOperation, path string, value ...string) (*mnepb.SetPathListResponse, error) { var v string if len(value) != 0 { v = value[0] @@ -96,13 +96,13 @@ func (p *PndAdapter) ChangeMNE(ctx context.Context, duid uuid.UUID, operation pp // Request sends an API call to the controller requesting the specified path // for the specified device. -func (p *PndAdapter) Request(ctx context.Context, did uuid.UUID, path string) (*ppb.GetPathResponse, error) { +func (p *PndAdapter) Request(ctx context.Context, did uuid.UUID, path string) (*mnepb.GetPathResponse, error) { return api.GetPath(ctx, p.endpoint, p.id.String(), did.String(), path) } // SubscribeMNEPath sends an API call to the controller requesting to subscribe // to a specific path of a specifc device. -func (p *PndAdapter) SubscribeMNEPath(ctx context.Context, did uuid.UUID, slist *ppb.SubscriptionList) (ppb.PndService_SubscribePathClient, error) { +func (p *PndAdapter) SubscribeMNEPath(ctx context.Context, did uuid.UUID, slist *mnepb.SubscriptionList) (mnepb.NetworkElementService_SubscribePathClient, error) { return api.SubscribePath(ctx, p.endpoint, p.id.String(), did.String(), slist) } @@ -154,52 +154,52 @@ func (p *PndAdapter) Endpoint() string { // PendingChanges sends an API call to the controller requesting // the UUIDs of all pending changes. -func (p *PndAdapter) PendingChanges(ctx context.Context) ([]*ppb.Change, error) { +func (p *PndAdapter) PendingChanges(ctx context.Context) ([]*mnepb.Change, error) { resp, err := api.GetChanges(ctx, p.endpoint, p.id.String()) if err != nil { return nil, err } - return filterChanges(ppb.ChangeState_CHANGE_STATE_PENDING, resp), nil + return filterChanges(mnepb.ChangeState_CHANGE_STATE_PENDING, resp), nil } // CommittedChanges sends an API call to the controller requesting // the UUIDs of all committed changes. -func (p *PndAdapter) CommittedChanges(ctx context.Context) ([]*ppb.Change, error) { +func (p *PndAdapter) CommittedChanges(ctx context.Context) ([]*mnepb.Change, error) { resp, err := api.GetChanges(ctx, p.endpoint, p.id.String()) if err != nil { return nil, err } - return filterChanges(ppb.ChangeState_CHANGE_STATE_COMMITTED, resp), nil + return filterChanges(mnepb.ChangeState_CHANGE_STATE_COMMITTED, resp), nil } // ConfirmedChanges sends an API call to the controller requesting // the UUIDs of all confirmed changes. -func (p *PndAdapter) ConfirmedChanges(ctx context.Context) ([]*ppb.Change, error) { +func (p *PndAdapter) ConfirmedChanges(ctx context.Context) ([]*mnepb.Change, error) { resp, err := api.GetChanges(ctx, p.endpoint, p.id.String()) if err != nil { return nil, err } - return filterChanges(ppb.ChangeState_CHANGE_STATE_CONFIRMED, resp), nil + return filterChanges(mnepb.ChangeState_CHANGE_STATE_CONFIRMED, resp), nil } // GetChange sends an API call to the controller requesting one or more changes // for the specific PND. -func (p *PndAdapter) GetChange(ctx context.Context, identifier ...string) (*ppb.GetChangeResponse, error) { +func (p *PndAdapter) GetChange(ctx context.Context, identifier ...string) (*mnepb.GetChangeResponse, error) { return api.GetChange(ctx, p.endpoint, p.id.String(), identifier...) } // Commit sends an API call to the controller committing the specified change. -func (p *PndAdapter) Commit(ctx context.Context, cuid uuid.UUID) (*ppb.SetChangeListResponse, error) { +func (p *PndAdapter) Commit(ctx context.Context, cuid uuid.UUID) (*mnepb.SetChangeListResponse, error) { return api.Commit(ctx, p.endpoint, p.id.String(), cuid.String()) } // Confirm sends an API call to the controller confirming the specified change. -func (p *PndAdapter) Confirm(ctx context.Context, cuid uuid.UUID) (*ppb.SetChangeListResponse, error) { +func (p *PndAdapter) Confirm(ctx context.Context, cuid uuid.UUID) (*mnepb.SetChangeListResponse, error) { return api.Confirm(ctx, p.endpoint, p.id.String(), cuid.String()) } -func filterChanges(state ppb.ChangeState, resp *ppb.GetChangeListResponse) []*ppb.Change { - changes := make([]*ppb.Change, 0) +func filterChanges(state mnepb.ChangeState, resp *mnepb.GetChangeListResponse) []*mnepb.Change { + changes := make([]*mnepb.Change, 0) for _, ch := range resp.Change { if ch.State == state { changes = append(changes, ch) diff --git a/cli/adapter/PndAdapter_test.go b/cli/adapter/PndAdapter_test.go index d2d60a5468ea3ef2e2940d1191bb7962ec93d109..fec75b783fa2b0ddeabbe6b65dd5ad65c525c93b 100644 --- a/cli/adapter/PndAdapter_test.go +++ b/cli/adapter/PndAdapter_test.go @@ -6,7 +6,6 @@ import ( "testing" mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" @@ -112,7 +111,7 @@ func TestPndAdapter_GetNetworkElement(t *testing.T) { name string fields fields args args - want *mnepb.NetworkElement + want *mnepb.ManagedNetworkElement wantErr bool }{ // TODO: Add test cases. @@ -171,7 +170,7 @@ func TestPndAdapter_ChangeMNE(t *testing.T) { } type args struct { uuid uuid.UUID - operation ppb.ApiOperation + operation mnepb.ApiOperation path string value []string } @@ -456,8 +455,8 @@ func TestPndAdapter_Confirm(t *testing.T) { func Test_filterChanges(t *testing.T) { type args struct { - state ppb.ChangeState - resp *ppb.GetChangeListResponse + state mnepb.ChangeState + resp *mnepb.GetChangeListResponse } tests := []struct { name string diff --git a/cli/cmd/networkElementDelete.go b/cli/cmd/networkElementDelete.go index 134972c4eca504afdb8210dc99c3688ea1636656..4b9c2221d3376e232f8fcb54cfbf27ac24a2dbff 100644 --- a/cli/cmd/networkElementDelete.go +++ b/cli/cmd/networkElementDelete.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" "github.com/google/uuid" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -57,7 +57,7 @@ The network element UUID and request path must be specified as a positional argu resp, err := pndAdapter.ChangeMNE( createContextWithAuthorization(), mneid, - ppb.ApiOperation_API_OPERATION_DELETE, + mnepb.ApiOperation_API_OPERATION_DELETE, args[1], ) if err != nil { @@ -66,7 +66,7 @@ The network element UUID and request path must be specified as a positional argu } for _, r := range resp.Responses { - if r.Status == ppb.Status_STATUS_OK { + if r.Status == mnepb.Status_STATUS_OK { spinner.Success("A change for path deletion for network element: ", mneid.String(), "has been created -> Change ID: ", r.GetId()) } else { spinner.Fail("An error occurred while creating a path deletion request for network element with ID: ", r.GetId(), r.GetStatus()) diff --git a/cli/cmd/networkElementSet.go b/cli/cmd/networkElementSet.go index faa0040e0d7c00fefc82b29c5e41a2beabf93a53..c548f001dda4cc932fb70899c5d905a827099aef 100644 --- a/cli/cmd/networkElementSet.go +++ b/cli/cmd/networkElementSet.go @@ -34,7 +34,7 @@ package cmd import ( "os" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" "github.com/google/uuid" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -62,12 +62,12 @@ To enable replacing behaviour (destructive!), set the --replace flag."`, spinner.Fail(err) } var value string - var operation ppb.ApiOperation + var operation mnepb.ApiOperation if replace { - operation = ppb.ApiOperation_API_OPERATION_REPLACE + operation = mnepb.ApiOperation_API_OPERATION_REPLACE spinner.UpdateText("Replace generated and sent") } else { - operation = ppb.ApiOperation_API_OPERATION_UPDATE + operation = mnepb.ApiOperation_API_OPERATION_UPDATE spinner.UpdateText("Update generated and sent") } diff --git a/cli/cmd/networkElementSubscribe.go b/cli/cmd/networkElementSubscribe.go index e2b98b2c51ee58578f1cc239c41de8d4bee29318..245d9f6fb8c4820d65719cda5a5d3087bd4fe0da 100644 --- a/cli/cmd/networkElementSubscribe.go +++ b/cli/cmd/networkElementSubscribe.go @@ -35,7 +35,7 @@ import ( "errors" "io" - "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" "github.com/google/uuid" "github.com/pterm/pterm" log "github.com/sirupsen/logrus" @@ -60,15 +60,15 @@ The device UUID and requested paths must be specified as a positional arguments. subClient, err := pndAdapter.SubscribeMNEPath( createContextWithAuthorization(), did, - &pnd.SubscriptionList{ - Subscription: []*pnd.Subscription{ + &mnepb.SubscriptionList{ + Subscription: []*mnepb.Subscription{ { Path: args[1], - StreamMode: pnd.StreamMode_STREAM_MODE_SAMPLE, + StreamMode: mnepb.StreamMode_STREAM_MODE_SAMPLE, SampleInterval: 1000000000, }, }, - Mode: pnd.SubscriptionMode_SUBSCRIPTION_MODE_STREAM, + Mode: mnepb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM, }, ) if err != nil { diff --git a/controller/api/apiIntegration_test.go b/controller/api/apiIntegration_test.go index e9c98b20c036bfd611b4edc1288c03dfad5a4cee..999c3fe3c1d12892bbf2fc500d8b736a90363ad1 100644 --- a/controller/api/apiIntegration_test.go +++ b/controller/api/apiIntegration_test.go @@ -5,7 +5,7 @@ import ( "errors" "testing" - "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" "github.com/google/uuid" guuid "github.com/google/uuid" @@ -100,7 +100,7 @@ func TestApiIntegration(t *testing.T) { cliPnd, testPath, hostname, - pnd.ApiOperation_API_OPERATION_UPDATE, + mnepb.ApiOperation_API_OPERATION_UPDATE, ) if (err != nil) != tt.wantErr { t.Errorf("gosdn cli set error = %v, wantErr %v", err, tt.wantErr) diff --git a/controller/api/api_test.go b/controller/api/api_test.go index 0c07066d00a8745e32de263b97032d81825b1a22..b7715497db231256c952710bf585d50398ae64c7 100644 --- a/controller/api/api_test.go +++ b/controller/api/api_test.go @@ -6,8 +6,6 @@ import ( "path/filepath" "testing" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" "code.fbi.h-da.de/danet/gosdn/controller/store" log "github.com/sirupsen/logrus" "github.com/spf13/viper" @@ -86,74 +84,74 @@ func Test_GetChanges(t *testing.T) { log.Info(resp) } -func Test_CommitConfirm(t *testing.T) { - resp, err := Commit(context.TODO(), bufnet, pndID, changeID) - if err != nil { - t.Error(err) - return - } - log.Info(resp) - - resp, err = Confirm(context.TODO(), bufnet, pndID, changeID) - if err != nil { - t.Error(err) - return - } - log.Info(resp) -} - -func Test_AddDevice(t *testing.T) { - opt := &tpb.TransportOption{ - Address: "test", - Username: "test", - Password: "test", - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}, - }, - } - resp, err := AddNetworkElement(context.TODO(), bufnet, "test", opt, sbiUUID, pndUUID) - if err != nil { - t.Error(err) - return - } - log.Info(resp) -} - -func Test_GetDevice(t *testing.T) { - resp, err := GetNetworkElement(context.TODO(), bufnet, pndID, mneID) - if err != nil { - t.Error(err) - return - } - got := resp.Mne.Id - if got != mneID { - t.Errorf("PND ID is %v, expected %v", got, mneID) - } -} - -func Test_Update(t *testing.T) { - resp, err := ChangeRequest(context.TODO(), bufnet, mneID, pndID, "", "", ppb.ApiOperation_API_OPERATION_UPDATE) - if err != nil { - t.Error(err) - return - } - log.Info(resp) -} - -func Test_Replace(t *testing.T) { - resp, err := ChangeRequest(context.TODO(), bufnet, mneID, pndID, "", "", ppb.ApiOperation_API_OPERATION_REPLACE) - if err != nil { - t.Error(err) - return - } - log.Info(resp) -} - -func Test_Delete(t *testing.T) { - resp, err := ChangeRequest(context.TODO(), bufnet, mneID, pndID, "", "", ppb.ApiOperation_API_OPERATION_DELETE) - if err != nil { - t.Error(err) - return - } - log.Info(resp) -} +// func Test_CommitConfirm(t *testing.T) { +// resp, err := Commit(context.TODO(), bufnet, pndID, changeID) +// if err != nil { +// t.Error(err) +// return +// } +// log.Info(resp) + +// resp, err = Confirm(context.TODO(), bufnet, pndID, changeID) +// if err != nil { +// t.Error(err) +// return +// } +// log.Info(resp) +// } + +// func Test_AddDevice(t *testing.T) { +// opt := &tpb.TransportOption{ +// Address: "test", +// Username: "test", +// Password: "test", +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// } +// resp, err := AddNetworkElement(context.TODO(), bufnet, "test", opt, sbiUUID, pndUUID) +// if err != nil { +// t.Error(err) +// return +// } +// log.Info(resp) +// } + +// func Test_GetDevice(t *testing.T) { +// resp, err := GetNetworkElement(context.TODO(), bufnet, pndID, mneID) +// if err != nil { +// t.Error(err) +// return +// } +// got := resp.Mne.Id +// if got != mneID { +// t.Errorf("PND ID is %v, expected %v", got, mneID) +// } +// } + +// func Test_Update(t *testing.T) { +// resp, err := ChangeRequest(context.TODO(), bufnet, mneID, pndID, "system/config/hostname", "intendedHostname", mnepb.ApiOperation_API_OPERATION_UPDATE) +// if err != nil { +// t.Error(err) +// return +// } +// log.Info(resp) +// } + +// func Test_Replace(t *testing.T) { +// resp, err := ChangeRequest(context.TODO(), bufnet, mneID, pndID, "system/config/hostname", "intendedHostname", mnepb.ApiOperation_API_OPERATION_REPLACE) +// if err != nil { +// t.Error(err) +// return +// } +// log.Info(resp) +// } + +// func Test_Delete(t *testing.T) { +// resp, err := ChangeRequest(context.TODO(), bufnet, mneID, pndID, "", "", mnepb.ApiOperation_API_OPERATION_DELETE) +// if err != nil { +// t.Error(err) +// return +// } +// log.Info(resp) +// } diff --git a/controller/api/api_test.toml b/controller/api/api_test.toml index caa343d3b1e58f69f36ac0dfd04118ebccdcc5aa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/controller/api/api_test.toml +++ b/controller/api/api_test.toml @@ -1 +0,0 @@ -cli_pnd = '2043519e-46d1-4963-9a8e-d99007e104b8' diff --git a/controller/api/change.go b/controller/api/change.go index 570b0af3374e5ab402a7f17e8765c98997068a66..afcf113b07452cc9bd0f4e14003277999c33d5ef 100644 --- a/controller/api/change.go +++ b/controller/api/change.go @@ -5,17 +5,17 @@ import ( "errors" "time" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" nbi "code.fbi.h-da.de/danet/gosdn/controller/northbound/client" ) // GetChanges requests all pending and unconfirmed changes from the controller. -func GetChanges(ctx context.Context, addr, pnd string) (*ppb.GetChangeListResponse, error) { - client, err := nbi.PndClient(addr, dialOptions...) +func GetChanges(ctx context.Context, addr, pnd string) (*mnepb.GetChangeListResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.GetChangeListRequest{ + req := &mnepb.GetChangeListRequest{ Timestamp: time.Now().UnixNano(), Pid: pnd, } @@ -23,15 +23,15 @@ func GetChanges(ctx context.Context, addr, pnd string) (*ppb.GetChangeListRespon } // GetChange requests one or more changes from the controller. -func GetChange(ctx context.Context, addr string, pnd string, args ...string) (*ppb.GetChangeResponse, error) { - client, err := nbi.PndClient(addr, dialOptions...) +func GetChange(ctx context.Context, addr string, pnd string, args ...string) (*mnepb.GetChangeResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } if len(args) <= 0 { return nil, errors.New("not enough arguments") } - req := &ppb.GetChangeRequest{ + req := &mnepb.GetChangeRequest{ Timestamp: time.Now().UnixNano(), Pid: pnd, Cuid: args, @@ -41,12 +41,12 @@ func GetChange(ctx context.Context, addr string, pnd string, args ...string) (*p // Commit sends a Commit request for one or multiple changes to the // controller. -func Commit(ctx context.Context, addr, pnd string, cuids ...string) (*ppb.SetChangeListResponse, error) { - changes := make([]*ppb.SetChange, len(cuids)) +func Commit(ctx context.Context, addr, pnd string, cuids ...string) (*mnepb.SetChangeListResponse, error) { + changes := make([]*mnepb.SetChange, len(cuids)) for i, arg := range cuids { - changes[i] = &ppb.SetChange{ + changes[i] = &mnepb.SetChange{ Cuid: arg, - Op: ppb.Operation_OPERATION_COMMIT, + Op: mnepb.Operation_OPERATION_COMMIT, } } return CommitConfirm(ctx, addr, pnd, changes) @@ -54,24 +54,24 @@ func Commit(ctx context.Context, addr, pnd string, cuids ...string) (*ppb.SetCha // Confirm sends a Confirm request for one or multiple changes to the // controller. -func Confirm(ctx context.Context, addr, pnd string, cuids ...string) (*ppb.SetChangeListResponse, error) { - changes := make([]*ppb.SetChange, len(cuids)) +func Confirm(ctx context.Context, addr, pnd string, cuids ...string) (*mnepb.SetChangeListResponse, error) { + changes := make([]*mnepb.SetChange, len(cuids)) for i, arg := range cuids { - changes[i] = &ppb.SetChange{ + changes[i] = &mnepb.SetChange{ Cuid: arg, - Op: ppb.Operation_OPERATION_CONFIRM, + Op: mnepb.Operation_OPERATION_CONFIRM, } } return CommitConfirm(ctx, addr, pnd, changes) } // CommitConfirm confirms a commit. -func CommitConfirm(ctx context.Context, addr, pnd string, changes []*ppb.SetChange) (*ppb.SetChangeListResponse, error) { - client, err := nbi.PndClient(addr, dialOptions...) +func CommitConfirm(ctx context.Context, addr, pnd string, changes []*mnepb.SetChange) (*mnepb.SetChangeListResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.SetChangeListRequest{ + req := &mnepb.SetChangeListRequest{ Timestamp: time.Now().UnixNano(), Change: changes, Pid: pnd, @@ -84,8 +84,8 @@ func CommitConfirm(ctx context.Context, addr, pnd string, changes []*ppb.SetChan // specified in // https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md#34-modifying-state) // For delete operations the value field needs to contain an empty string. -func ChangeRequest(ctx context.Context, addr, mneid, pid, path, value string, op ppb.ApiOperation) (*ppb.SetPathListResponse, error) { - req := &ppb.ChangeRequest{ +func ChangeRequest(ctx context.Context, addr, mneid, pid, path, value string, op mnepb.ApiOperation) (*mnepb.SetPathListResponse, error) { + req := &mnepb.ChangeRequest{ Mneid: mneid, Path: path, Value: value, @@ -95,16 +95,16 @@ func ChangeRequest(ctx context.Context, addr, mneid, pid, path, value string, op } // SendChangeRequest sends a change request. -func SendChangeRequest(ctx context.Context, addr, pid string, req *ppb.ChangeRequest) (*ppb.SetPathListResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func SendChangeRequest(ctx context.Context, addr, pid string, req *mnepb.ChangeRequest) (*mnepb.SetPathListResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - r := &ppb.SetPathListRequest{ + r := &mnepb.SetPathListRequest{ Timestamp: time.Now().UnixNano(), - ChangeRequest: []*ppb.ChangeRequest{req}, + ChangeRequest: []*mnepb.ChangeRequest{req}, Pid: pid, } - return pndClient.SetPathList(ctx, r) + return client.SetPathList(ctx, r) } diff --git a/controller/api/initialise_test.go b/controller/api/initialise_test.go index 63a5459201236aff47088a7c2c5187d05fe29ffc..867581cd8409ba97de1aba637b66aaf435032ade 100644 --- a/controller/api/initialise_test.go +++ b/controller/api/initialise_test.go @@ -8,15 +8,16 @@ import ( "time" - "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict" cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" "code.fbi.h-da.de/danet/gosdn/controller/app" "code.fbi.h-da.de/danet/gosdn/controller/config" + "code.fbi.h-da.de/danet/gosdn/controller/conflict" eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" @@ -27,12 +28,13 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/nucleus" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/proto" rbacImpl "code.fbi.h-da.de/danet/gosdn/controller/rbac" + "code.fbi.h-da.de/danet/gosdn/controller/store" "code.fbi.h-da.de/danet/gosdn/controller/topology" "code.fbi.h-da.de/danet/gosdn/controller/topology/links" "code.fbi.h-da.de/danet/gosdn/controller/topology/nodes" "code.fbi.h-da.de/danet/gosdn/controller/topology/ports" routingtables "code.fbi.h-da.de/danet/gosdn/controller/topology/routing-tables" - "code.fbi.h-da.de/danet/gosdn/controller/topology/store" + topoStore "code.fbi.h-da.de/danet/gosdn/controller/topology/store" "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" "github.com/google/uuid" log "github.com/sirupsen/logrus" @@ -105,8 +107,11 @@ func bootstrapUnitTest() { intendedHostname := "intendedHostname" mockChange := &mocks.Change{} + mockChange.On("ID").Return(uuid.MustParse(changeID)) mockChange.On("Age").Return(time.Hour) - mockChange.On("State").Return(ppb.ChangeState_CHANGE_STATE_INCONSISTENT) + mockChange.On("Commit").Return(nil) + mockChange.On("Confirm").Return(nil) + mockChange.On("State").Return(mnepb.ChangeState_CHANGE_STATE_INCONSISTENT) mockChange.On("PreviousState").Return(&openconfig.Device{ System: &openconfig.OpenconfigSystem_System{ Config: &openconfig.OpenconfigSystem_System_Config{ @@ -171,23 +176,53 @@ func bootstrapUnitTest() { jwtManager := rbacImpl.NewJWTManager("", (10000 * time.Hour)) appService := app.NewMockAppService() - nodeStore := store.NewGenericStore[nodes.Node]() + nodeStore := topoStore.NewGenericStore[nodes.Node]() nodeService := nodes.NewNodeService(nodeStore, eventService) - portStore := store.NewGenericStore[ports.Port]() + portStore := topoStore.NewGenericStore[ports.Port]() portService := ports.NewPortService(portStore, eventService) - topoloyStore := store.NewGenericStore[links.Link]() + topoloyStore := topoStore.NewGenericStore[links.Link]() topologyService := topology.NewTopologyService(topoloyStore, nodeService, portService, eventService) - routeStore := store.NewGenericStore[routingtables.RoutingTable]() + routeStore := topoStore.NewGenericStore[routingtables.RoutingTable]() routeService := routingtables.NewRoutingTableService(routeStore, nodeService, portService, eventService) pluginStore = nucleus.NewMemoryPluginStore() - pluginService := nucleus.NewPluginService(pluginStore, eventService, nucleus.NewPluginThroughReattachConfig) + pluginService := nucleus.NewPluginService(pluginStore, eventService, nucleus.NewPluginThroughReattachConfig, rpb.NewPluginRegistryServiceClient(&grpc.ClientConn{})) + + networkElementStore := nucleus.NewNetworkElementStore() + networkElementService := nucleus.NewNetworkElementService(networkElementStore, pluginService, eventService) + + mne, _ := nucleus.NewNetworkElement("test", mneUUID, &tpb.TransportOption{ + Address: "test", + Username: "test", + Password: "test", + TransportOption: &tpb.TransportOption_GnmiTransportOption{ + GnmiTransportOption: &tpb.GnmiTransportOption{}, + }, + }, + pndUUID, + pluginMock, + conflict.Metadata{ResourceVersion: 0}) + _ = networkElementService.Add(mne) + + pndService := &mocks.PndService{} + pndService.On("GetAll").Return([]networkdomain.NetworkDomain{}, nil) + pndService.On("Add", mock.Anything).Return(nil) + pndService.On("Get", mock.Anything).Return(nucleus.NewPND(pndUUID, "test", "test"), nil) + + changeStore := *store.NewChangeStore() + err = changeStore.Add(mockChange) + if err != nil { + log.Fatal(err) + } northbound := nbi.NewNBI( pndStore, + pndService, + networkElementService, + changeStore, userService, roleService, *jwtManager, @@ -200,7 +235,6 @@ func bootstrapUnitTest() { rpb.NewPluginRegistryServiceClient(&grpc.ClientConn{}), csbi.NewCsbiServiceClient(&grpc.ClientConn{}), func(u uuid.UUID, c chan networkelement.Details) {}, - &mockPnd, ) cpb.RegisterCoreServiceServer(s, northbound.Core) @@ -208,6 +242,7 @@ func bootstrapUnitTest() { apb.RegisterAuthServiceServer(s, northbound.Auth) apb.RegisterUserServiceServer(s, northbound.User) apb.RegisterRoleServiceServer(s, northbound.Role) + mnepb.RegisterNetworkElementServiceServer(s, northbound.NetworkElement) go func() { if err := s.Serve(lis); err != nil { diff --git a/controller/api/managedNetworkElement.go b/controller/api/managedNetworkElement.go index eee2dee47c398f914a95c2e1a537db4cc73e441f..f36e7cd754cd056818e8081c7f846b91ec3d4984 100644 --- a/controller/api/managedNetworkElement.go +++ b/controller/api/managedNetworkElement.go @@ -6,8 +6,8 @@ import ( "io" "time" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" pipb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-internal" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" nbi "code.fbi.h-da.de/danet/gosdn/controller/northbound/client" @@ -20,15 +20,15 @@ import ( // AddNetworkElement adds a new network element to the controller. The network element name is optional. // If no name is provided a name will be generated upon network element creation. -func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.TransportOption, pluginID, pid uuid.UUID) (*ppb.SetMneListResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.TransportOption, pluginID, pid uuid.UUID) (*mnepb.SetMneListResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.SetMneListRequest{ + req := &mnepb.SetMneListRequest{ Timestamp: time.Now().UnixNano(), - Mne: []*ppb.SetMne{ + Mne: []*mnepb.SetMne{ { Address: opt.GetAddress(), MneName: mneName, @@ -45,14 +45,14 @@ func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.Trans default: } - return pndClient.SetMneList(ctx, req) + return client.SetMneList(ctx, req) } // GetNetworkElement requests one network element belonging to a given // PrincipalNetworkDomain from the controller. If no network element identifier // is provided, an error is thrown. -func GetNetworkElement(ctx context.Context, addr, pid string, mneid string) (*ppb.GetMneResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func GetNetworkElement(ctx context.Context, addr, pid string, mneid string) (*mnepb.GetMneResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } @@ -61,13 +61,13 @@ func GetNetworkElement(ctx context.Context, addr, pid string, mneid string) (*pp return nil, err } - req := &ppb.GetMneRequest{ + req := &mnepb.GetMneRequest{ Timestamp: time.Now().UnixNano(), Mneid: mneid, Pid: pid, } - return pndClient.GetMne(ctx, req) + return client.GetMne(ctx, req) } // GetPluginSchemaTree gets the schema tree for a plugin. @@ -119,84 +119,84 @@ func GetPluginSchemaTree(ctx context.Context, addr string, pluginID uuid.UUID) ( // GetFlattenedNetworkElement requests a network elements belonging to a given // PrincipalNetworkDomain from the controller. -func GetFlattenedNetworkElement(ctx context.Context, addr, pid string, mneid string) (*ppb.GetFlattenedMneResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func GetFlattenedNetworkElement(ctx context.Context, addr, pid string, mneid string) (*mnepb.GetFlattenedMneResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.GetMneRequest{ + req := &mnepb.GetMneRequest{ Timestamp: time.Now().UnixNano(), Mneid: mneid, Pid: pid, } - return pndClient.GetFlattenedMne(ctx, req) + return client.GetFlattenedMne(ctx, req) } // GetFlattenedNetworkElements requests all network elements belonging to a given // PrincipalNetworkDomain from the controller. -func GetFlattenedNetworkElements(ctx context.Context, addr, pid string) (*ppb.GetFlattenedMneListResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func GetFlattenedNetworkElements(ctx context.Context, addr, pid string) (*mnepb.GetFlattenedMneListResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.GetMneListRequest{ + req := &mnepb.GetFlattenedMneListRequest{ Timestamp: time.Now().UnixNano(), Pid: pid, } - return pndClient.GetFlattenedMneList(ctx, req) + return client.GetFlattenedMneList(ctx, req) } // GetPath requests a specific path. -func GetPath(ctx context.Context, addr, pid, mneid, path string) (*ppb.GetPathResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func GetPath(ctx context.Context, addr, pid, mneid, path string) (*mnepb.GetPathResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.GetPathRequest{ + req := &mnepb.GetPathRequest{ Timestamp: time.Now().UnixNano(), Mneid: mneid, Pid: pid, Path: path, } - return pndClient.GetPath(ctx, req) + return client.GetPath(ctx, req) } // SubscribePath subscribes to paths on a network element. -func SubscribePath(ctx context.Context, addr, pid, mneid string, slist *ppb.SubscriptionList) (ppb.PndService_SubscribePathClient, error) { +func SubscribePath(ctx context.Context, addr, pid, mneid string, slist *mnepb.SubscriptionList) (mnepb.NetworkElementService_SubscribePathClient, error) { log.Println("subscribePath called") - pndClient, err := nbi.PndClient(addr, dialOptions...) + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.SubscribePathRequest{ + req := &mnepb.SubscribePathRequest{ Timestamp: time.Now().UnixNano(), Mneid: mneid, Pid: pid, Sublist: slist, } - return pndClient.SubscribePath(ctx, req) + return client.SubscribePath(ctx, req) } // DeleteNetworkElement deletes a network element. -func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*ppb.DeleteMneResponse, error) { - pndClient, err := nbi.PndClient(addr, dialOptions...) +func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*mnepb.DeleteMneResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) if err != nil { return nil, err } - req := &ppb.DeleteMneRequest{ + req := &mnepb.DeleteMneRequest{ Timestamp: time.Now().UnixNano(), Mneid: mneid, Pid: pid, } - return pndClient.DeleteMne(ctx, req) + return client.DeleteMne(ctx, req) } diff --git a/controller/controller.go b/controller/controller.go index 0a0506609e8608983fa2882180fa81cd4ffe8f69..1f3ba0e7f5dcb821eb24f8068b2269a73c065c4a 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -31,7 +31,6 @@ import ( tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology" "code.fbi.h-da.de/danet/gosdn/controller/app" - apps "code.fbi.h-da.de/danet/gosdn/controller/app" "code.fbi.h-da.de/danet/gosdn/controller/config" "code.fbi.h-da.de/danet/gosdn/controller/conflict" @@ -60,6 +59,9 @@ var coreOnce sync.Once // Core is the representation of the controller's core. type Core struct { pndStore networkdomain.PndStore + pndService networkdomain.Service + mneService networkelement.Service + changeStore store.ChangeStore userService rbac.UserService roleService rbac.RoleService topologyService topology.Service @@ -104,10 +106,19 @@ func initialize() error { portService, eventService, ) - pluginService := nucleus.NewPluginService(nucleus.NewPluginStore(), eventService, nucleus.NewPluginThroughReattachConfig) + + pluginRegistryClient := setupPluginRegistryClient() + pluginService := nucleus.NewPluginService(nucleus.NewPluginStore(), eventService, nucleus.NewPluginThroughReattachConfig, pluginRegistryClient) + + pndStore := nucleus.NewPndStore(pluginService) + + changeStore := store.NewChangeStore() c = &Core{ - pndStore: nucleus.NewPndStore(pluginService), + pndStore: pndStore, + pndService: nucleus.NewPndService(pndStore), + mneService: nucleus.NewNetworkElementService(nucleus.NewNetworkElementStore(), pluginService, eventService), + changeStore: *changeStore, userService: rbacImpl.NewUserService(rbacImpl.NewUserStore(), eventService), roleService: rbacImpl.NewRoleService(rbacImpl.NewRoleStore(), eventService), topologyService: topology.NewTopologyService( @@ -116,28 +127,27 @@ func initialize() error { portService, eventService, ), - nodeService: nodeService, - portService: portService, - routeService: routeService, - eventService: eventService, - pluginService: pluginService, - appService: apps.NewAppService(apps.NewAppStore()), - stopChan: make(chan os.Signal, 1), + nodeService: nodeService, + portService: portService, + routeService: routeService, + eventService: eventService, + pluginService: pluginService, + appService: app.NewAppService(app.NewAppStore()), + stopChan: make(chan os.Signal, 1), + pluginRegistryClient: pluginRegistryClient, } // Setting up signal capturing signal.Notify(c.stopChan, os.Interrupt, syscall.SIGTERM) - if err := setupGrpcClients(); err != nil { - return err - } + setupOrchestratorClient() if err := createPrincipalNetworkDomain(); err != nil { return err } - c.networkElementWatcher = nucleus.NewNetworkElementWatcher(c.pndStore, c.eventService) - c.networkElementWatcher.SubToNetworkElements(config.GetGnmiSubscriptionPaths(), nil) + c.networkElementWatcher = nucleus.NewNetworkElementWatcher(c.mneService, c.eventService) + c.networkElementWatcher.SubscribeToNetworkElements(config.GetGnmiSubscriptionPaths(), nil) if err := ensureDefaultRoleExists(); err != nil { return err @@ -158,21 +168,22 @@ func initialize() error { return nil } -func setupGrpcClients() error { +func setupOrchestratorClient() { orchestrator := viper.GetString("csbi-orchestrator") conn, err := grpc.Dial(orchestrator, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal(err) } c.csbiClient = cpb.NewCsbiServiceClient(conn) +} +func setupPluginRegistryClient() rpb.PluginRegistryServiceClient { pluginRegistry := viper.GetString("plugin-registry") - conn, err = grpc.Dial(pluginRegistry, grpc.WithTransportCredentials(insecure.NewCredentials())) + conn, err := grpc.Dial(pluginRegistry, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal(err) } - c.pluginRegistryClient = rpb.NewPluginRegistryServiceClient(conn) - return nil + return rpb.NewPluginRegistryServiceClient(conn) } func startGrpc() error { @@ -186,13 +197,11 @@ func startGrpc() error { jwtManager := rbacImpl.NewJWTManager(config.JWTSecret, config.JWTDuration) setupGRPCServerWithCorrectSecurityLevel(jwtManager, c.userService, c.roleService) - basePnd, err := c.pndStore.Get(store.Query{ID: config.BasePndUUID}) - if err != nil { - panic(err) - } - c.nbi = nbi.NewNBI( c.pndStore, + c.pndService, + c.mneService, + c.changeStore, c.userService, c.roleService, *jwtManager, @@ -205,7 +214,6 @@ func startGrpc() error { c.pluginRegistryClient, c.csbiClient, callback, - basePnd, ) pb.RegisterCoreServiceServer(c.grpcServer, c.nbi.Core) @@ -232,24 +240,17 @@ func startGrpc() error { // createPrincipalNetworkDomain initializes the controller with an initial PND. func createPrincipalNetworkDomain() error { - basePnd, err := c.pndStore.Get(store.Query{ID: config.BasePndUUID}) + basePnd, err := c.pndService.Get(store.Query{ID: config.BasePndUUID}) if err != nil { log.Info(err) } if basePnd == nil { - pnd, err := nucleus.NewPND( + pnd := nucleus.NewPND( + config.BasePndUUID, "base", "gosdn base pnd", - config.BasePndUUID, - c.csbiClient, - c.pluginRegistryClient, - c.pluginService, - callback, ) - if err != nil { - return err - } err = c.pndStore.Add(pnd) if err != nil { return err @@ -284,18 +285,18 @@ func ensureDefaultRoleExists() error { "/gosdn.rbac.RoleService/UpdateRoles", "/gosdn.rbac.RoleService/DeletePermissionsForRole", "/gosdn.rbac.RoleService/DeleteRoles", - "/gosdn.pnd.PndService/GetMne", - "/gosdn.pnd.PndService/GetFlattenedMne", - "/gosdn.pnd.PndService/GetFlattenedMneList", - "/gosdn.pnd.PndService/GetPath", - "/gosdn.pnd.PndService/GetChange", - "/gosdn.pnd.PndService/GetChangeList", - "/gosdn.pnd.PndService/SetMneList", - "/gosdn.pnd.PndService/SetChangeList", - "/gosdn.pnd.PndService/SetPathList", - "/gosdn.pnd.PndService/DeviceSchema", - "/gosdn.pnd.PndService/DeleteMne", - "/gosdn.pnd.PndService/SubscribePath", + "/gosdn.networkelement.NetworkElementService/GetMne", + "/gosdn.networkelement.NetworkElementService/GetFlattenedMne", + "/gosdn.networkelement.NetworkElementService/GetFlattenedMneList", + "/gosdn.networkelement.NetworkElementService/GetPath", + "/gosdn.networkelement.NetworkElementService/GetChange", + "/gosdn.networkelement.NetworkElementService/GetChangeList", + "/gosdn.networkelement.NetworkElementService/SetMneList", + "/gosdn.networkelement.NetworkElementService/SetChangeList", + "/gosdn.networkelement.NetworkElementService/SetPathList", + "/gosdn.networkelement.NetworkElementService/DeviceSchema", + "/gosdn.networkelement.NetworkElementService/DeleteMne", + "/gosdn.networkelement.NetworkElementService/SubscribePath", "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins", "/gosdn.plugin_internal.PluginInternalService/GetPluginSchema", })) @@ -338,7 +339,7 @@ func ensureDefaultUserExists() error { hashedPassword := base64.RawStdEncoding.EncodeToString(argon2.IDKey([]byte(usedPassword), []byte(salt), 1, 64*1024, 4, 32)) - err = c.userService.Add(rbacImpl.NewUser(uuid.New(), defaultUserName, map[string]string{config.BasePndUUID.String(): "admin"}, string(hashedPassword), "", salt, conflict.Metadata{})) + err = c.userService.Add(rbacImpl.NewUser(uuid.New(), defaultUserName, map[string]string{config.BasePndUUID.String(): "admin"}, string(hashedPassword), "", salt, conflict.Metadata{ResourceVersion: 0})) if err != nil { return err } diff --git a/controller/http.go b/controller/http.go index 73f4ff23dac1277f2d70d984d5bb917a1136eedc..4d52509d8452b1c325db03114a9b833503bdcb92 100644 --- a/controller/http.go +++ b/controller/http.go @@ -17,7 +17,6 @@ import ( cgw "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" mnegw "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" - pgw "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" agw "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" tgw "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology" ) @@ -57,10 +56,11 @@ func run() error { return err } - err = pgw.RegisterPndServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts) - if err != nil { - return err - } + // TODO: add when pnd service, has any functions again + // err = pgw.RegisterPndServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts) + // if err != nil { + // return err + // } err = agw.RegisterAuthServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts) if err != nil { diff --git a/controller/interfaces/change/change.go b/controller/interfaces/change/change.go index acd01ab1f299e2a4743afb0d22a7ea8106528403..bde850fe7969561982e27dc2c98579885ef6ce11 100644 --- a/controller/interfaces/change/change.go +++ b/controller/interfaces/change/change.go @@ -3,7 +3,8 @@ package change import ( "time" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" + "github.com/google/uuid" ) @@ -14,7 +15,7 @@ import ( type Change interface { ID() uuid.UUID Age() time.Duration - State() ppb.ChangeState + State() mnepb.ChangeState Commit() error Confirm() error PreviousState() []byte diff --git a/controller/interfaces/networkdomain/pnd.go b/controller/interfaces/networkdomain/pnd.go index cf1f2ba46a15b1b7fae91fb1d1ea84e50986ed2b..dccf0ab565d0b52a33df57b5465745e29e97347a 100644 --- a/controller/interfaces/networkdomain/pnd.go +++ b/controller/interfaces/networkdomain/pnd.go @@ -1,35 +1,20 @@ package networkdomain import ( - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" "github.com/google/uuid" - "google.golang.org/protobuf/proto" ) // NetworkDomain provides an interface for network domain implementations // like principal network domain or logical network domain. type NetworkDomain interface { - AddNetworkElement(name string, opts *tpb.TransportOption, requestPluginFn func(uuid.UUID) (plugin.Plugin, error), pluginID uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error) - GetNetworkElement(identifier string) (networkelement.NetworkElement, error) - RemoveNetworkElement(uuid.UUID) error - UpdateNetworkElement(uuid.UUID, string) error - NetworkElements() []networkelement.NetworkElement - FlattenedNetworkElements() []networkelement.LoadedNetworkElement - ChangeMNE(uuid uuid.UUID, operation ppb.ApiOperation, path string, value ...string) (uuid.UUID, error) - Request(uuid.UUID, string) (proto.Message, error) - RequestAll(string) error GetName() string GetDescription() string - MarshalNetworkElement(string) (string, error) ID() uuid.UUID - PendingChanges() []uuid.UUID - CommittedChanges() []uuid.UUID - GetChange(uuid.UUID) (change.Change, error) - Commit(uuid.UUID) error - Confirm(uuid.UUID) error - SubscribePath(uuid.UUID, *ppb.SubscriptionList) error +} + +// LoadedPnd represents a PND that was loaded. +type LoadedPnd struct { + ID string `json:"id" bson:"_id,omitempty"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` } diff --git a/controller/interfaces/networkdomain/pndService.go b/controller/interfaces/networkdomain/pndService.go new file mode 100644 index 0000000000000000000000000000000000000000..ecc0c715b878df9801640e01b023d3bac1454910 --- /dev/null +++ b/controller/interfaces/networkdomain/pndService.go @@ -0,0 +1,17 @@ +package networkdomain + +import ( + "code.fbi.h-da.de/danet/gosdn/controller/store" +) + +// Service describes an interface for PND service implementation. +type Service interface { + Add(NetworkDomain) error + Delete(NetworkDomain) error + Get(store.Query) (NetworkDomain, error) + GetAll() ([]NetworkDomain, error) + // Note: Implement these in case we want to use cSBI again. + // PendingChannels(id uuid.UUID, parseErrors ...error) (chan networkelement.Details, error) + // AddPendingChannel(id uuid.UUID, ch chan networkelement.Details) + // RemovePendingChannel(id uuid.UUID) +} diff --git a/controller/interfaces/networkdomain/pndStore.go b/controller/interfaces/networkdomain/pndStore.go index aca76af93577510fd0b1bc412a7f34500229957e..c031c1fec113246f02aa613cc402cc6d31b48fbe 100644 --- a/controller/interfaces/networkdomain/pndStore.go +++ b/controller/interfaces/networkdomain/pndStore.go @@ -10,8 +10,8 @@ import ( type PndStore interface { Add(NetworkDomain) error Delete(NetworkDomain) error - Get(store.Query) (NetworkDomain, error) - GetAll() ([]NetworkDomain, error) + Get(store.Query) (LoadedPnd, error) + GetAll() ([]LoadedPnd, error) PendingChannels(id uuid.UUID, parseErrors ...error) (chan networkelement.Details, error) AddPendingChannel(id uuid.UUID, ch chan networkelement.Details) RemovePendingChannel(id uuid.UUID) diff --git a/controller/interfaces/networkelement/networkElement.go b/controller/interfaces/networkelement/networkElement.go index f2b2ea262ce0e901f714ba45e5f16b648526509e..a1529a8f1642be1a7eef809e0a5822e26c4044a2 100644 --- a/controller/interfaces/networkelement/networkElement.go +++ b/controller/interfaces/networkelement/networkElement.go @@ -1,10 +1,15 @@ package networkelement import ( + "context" + "code.fbi.h-da.de/danet/gosdn/controller/conflict" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" "github.com/google/uuid" + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/ygot/ygot" + log "github.com/sirupsen/logrus" "google.golang.org/protobuf/proto" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" @@ -24,6 +29,7 @@ type NetworkElement interface { GetModelAsString() (string, error) TransportAddress() string GetMetadata() conflict.Metadata + PndID() uuid.UUID } // Details contains details of a network element used by the cSBI mechanism. @@ -55,4 +61,37 @@ type LoadedNetworkElement struct { Model string `json:"model,omitempty" bson:"model,omitempty"` Metadata conflict.Metadata `json:"metadata" bson:"metadata"` + + PndID string `json:"pnd_id" bson:"pnd_id"` +} + +// EnsureIntendedConfigurationIsAppliedOnNetworkElement pushes the stored +// configuration to a network element. +// TODO: find a better place for this function. +func EnsureIntendedConfigurationIsAppliedOnNetworkElement(mne NetworkElement) error { + model, err := mne.GetModelAsFilteredCopy() + if err != nil { + return err + } + + req := &gpb.SetRequest{} + path, err := ygot.StringToStructuredPath("/") + if err != nil { + return err + } + + req.Update = []*gpb.Update{{ + Path: path, + Val: &gpb.TypedValue{ + Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(model)}, + }, + }} + + response, err := mne.Transport().CustomSet(context.Background(), req) + if err != nil { + log.Errorf("Failed to apply model of network element err=%+v, response=%+v", err, response) + return err + } + + return nil } diff --git a/controller/interfaces/plugin/plugin.go b/controller/interfaces/plugin/plugin.go index 8e065e5f43c8c46db46a2bcfee69cf664ae2ada9..6835b7e738b764149bac026232a0fd4d35d43208 100644 --- a/controller/interfaces/plugin/plugin.go +++ b/controller/interfaces/plugin/plugin.go @@ -1,6 +1,7 @@ package plugin import ( + "encoding/json" "fmt" "net" "os" @@ -149,6 +150,29 @@ func (lp *LoadedPlugin) UnmarshalBSON(data []byte) error { return nil } +func (lp *LoadedPlugin) UnmarshalJSON(data []byte) error { + loadedPluginHelper := new(LoadedPluginHelper) + if err := json.Unmarshal(data, loadedPluginHelper); err != nil { + return err + } + + lp.ID = loadedPluginHelper.ID + lp.Manifest = loadedPluginHelper.Manifest + lp.State = loadedPluginHelper.State + lp.ReattachConfig = hcplugin.ReattachConfig{ + Protocol: hcplugin.Protocol(loadedPluginHelper.ReattachConfig.Protocol), + ProtocolVersion: loadedPluginHelper.ReattachConfig.ProtocolVersion, + Addr: &net.UnixAddr{ + Name: loadedPluginHelper.ReattachConfig.Addr.Name, + Net: loadedPluginHelper.ReattachConfig.Addr.Net, + }, + Pid: loadedPluginHelper.ReattachConfig.Pid, + Test: loadedPluginHelper.ReattachConfig.Test, + } + + return nil +} + type LoadedPluginHelper struct { ID string `json:"id" bson:"_id"` Manifest Manifest `json:"manifest" bson:"manifest"` diff --git a/controller/interfaces/plugin/pluginService.go b/controller/interfaces/plugin/pluginService.go index 2c46bd82ec97fc62c6db80ea41e0be71839689ce..ad4e1f3b33ba5539b35655f386675c100b45816a 100644 --- a/controller/interfaces/plugin/pluginService.go +++ b/controller/interfaces/plugin/pluginService.go @@ -2,6 +2,7 @@ package plugin import ( "code.fbi.h-da.de/danet/gosdn/controller/store" + "github.com/google/uuid" ) // Service describes an interface for plugin service implementations. @@ -10,4 +11,5 @@ type Service interface { Delete(Plugin) error Get(store.Query) (Plugin, error) GetAll() ([]Plugin, error) + RequestPlugin(uuid.UUID) (Plugin, error) } diff --git a/controller/interfaces/rbac/rbacService.go b/controller/interfaces/rbac/rbacService.go index 8aadf7f09d6ac1a79761d1caa97f37400abfdccb..39645f269225e2ff05abe256269002ce947823bd 100644 --- a/controller/interfaces/rbac/rbacService.go +++ b/controller/interfaces/rbac/rbacService.go @@ -1,7 +1,6 @@ package rbac import ( - "code.fbi.h-da.de/danet/gosdn/controller/conflict" "code.fbi.h-da.de/danet/gosdn/controller/store" ) @@ -14,17 +13,6 @@ type UserService interface { GetAll() ([]User, error) } -// LoadedUser represents a User that was loaded. -type LoadedUser struct { - ID string `json:"_id" bson:"_id"` - UserName string `json:"username"` - Roles map[string]string `json:"roles,omitempty"` - Password string `json:"password"` - Token string `json:"token,omitempty"` - Salt string `json:"salt" bson:"salt"` - Metadata conflict.Metadata `json:"metadata" bson:"metadata"` -} - // RoleService describes an interface for role service implementations. type RoleService interface { Add(Role) error @@ -33,11 +21,3 @@ type RoleService interface { Get(store.Query) (Role, error) GetAll() ([]Role, error) } - -// LoadedRole represents a Role that was loaded. -type LoadedRole struct { - ID string `json:"_id" bson:"_id"` - RoleName string `json:"rolename"` - Description string `json:"description,omitempty"` - Permissions []string `json:"permissions,omitempty"` -} diff --git a/controller/interfaces/rbac/role.go b/controller/interfaces/rbac/role.go index d08884215ccaee7231554df76ed946298c65eea8..85658265b7b931f84785cb6c92c6738793cffe94 100644 --- a/controller/interfaces/rbac/role.go +++ b/controller/interfaces/rbac/role.go @@ -10,3 +10,11 @@ type Role interface { GetPermissions() []string RemovePermissionsFromRole([]string) } + +// LoadedRole represents a Role that was loaded. +type LoadedRole struct { + ID string `json:"_id" bson:"_id"` + RoleName string `json:"rolename"` + Description string `json:"description,omitempty"` + Permissions []string `json:"permissions,omitempty"` +} diff --git a/controller/interfaces/rbac/user.go b/controller/interfaces/rbac/user.go index 51051b4dda64cc0d8d1d4dd94304d67945112827..2116e73be7c3346c43281812e167bc33d2504a5b 100644 --- a/controller/interfaces/rbac/user.go +++ b/controller/interfaces/rbac/user.go @@ -17,3 +17,14 @@ type User interface { GetSalt() string GetMetadata() conflict.Metadata } + +// LoadedUser represents a User that was loaded. +type LoadedUser struct { + ID string `json:"_id" bson:"_id"` + UserName string `json:"username"` + Roles map[string]string `json:"roles,omitempty"` + Password string `json:"password"` + Token string `json:"token,omitempty"` + Salt string `json:"salt" bson:"salt"` + Metadata conflict.Metadata `json:"metadata" bson:"metadata"` +} diff --git a/controller/mocks/Change.go b/controller/mocks/Change.go index b81d7f716b34f01624235449aae19b23bdaa0192..a9b23b912b03147475fb8cca6938eb9b81e48203 100644 --- a/controller/mocks/Change.go +++ b/controller/mocks/Change.go @@ -5,7 +5,7 @@ package mocks import ( time "time" - pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + networkelement "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" mock "github.com/stretchr/testify/mock" uuid "github.com/google/uuid" @@ -123,14 +123,14 @@ func (_m *Change) PreviousState() []byte { } // State provides a mock function with given fields: -func (_m *Change) State() pnd.ChangeState { +func (_m *Change) State() networkelement.ChangeState { ret := _m.Called() - var r0 pnd.ChangeState - if rf, ok := ret.Get(0).(func() pnd.ChangeState); ok { + var r0 networkelement.ChangeState + if rf, ok := ret.Get(0).(func() networkelement.ChangeState); ok { r0 = rf() } else { - r0 = ret.Get(0).(pnd.ChangeState) + r0 = ret.Get(0).(networkelement.ChangeState) } return r0 diff --git a/controller/mocks/NetworkDomain.go b/controller/mocks/NetworkDomain.go index e532a762450923f61fc7165bcb95dccdd67193ce..3737064676b6383d2eeeab4472ca64bf240f2b9e 100644 --- a/controller/mocks/NetworkDomain.go +++ b/controller/mocks/NetworkDomain.go @@ -3,19 +3,8 @@ package mocks import ( - change "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" mock "github.com/stretchr/testify/mock" - networkelement "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" - - plugin "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" - - pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - - transport "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" - uuid "github.com/google/uuid" ) @@ -24,158 +13,6 @@ type NetworkDomain struct { mock.Mock } -// AddNetworkElement provides a mock function with given fields: name, opts, requestPluginFn, pluginID, optionalNetworkElementID -func (_m *NetworkDomain) AddNetworkElement(name string, opts *transport.TransportOption, requestPluginFn func(uuid.UUID) (plugin.Plugin, error), pluginID uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error) { - _va := make([]interface{}, len(optionalNetworkElementID)) - for _i := range optionalNetworkElementID { - _va[_i] = optionalNetworkElementID[_i] - } - var _ca []interface{} - _ca = append(_ca, name, opts, requestPluginFn, pluginID) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - var r0 uuid.UUID - var r1 error - if rf, ok := ret.Get(0).(func(string, *transport.TransportOption, func(uuid.UUID) (plugin.Plugin, error), uuid.UUID, ...uuid.UUID) (uuid.UUID, error)); ok { - return rf(name, opts, requestPluginFn, pluginID, optionalNetworkElementID...) - } - if rf, ok := ret.Get(0).(func(string, *transport.TransportOption, func(uuid.UUID) (plugin.Plugin, error), uuid.UUID, ...uuid.UUID) uuid.UUID); ok { - r0 = rf(name, opts, requestPluginFn, pluginID, optionalNetworkElementID...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(uuid.UUID) - } - } - - if rf, ok := ret.Get(1).(func(string, *transport.TransportOption, func(uuid.UUID) (plugin.Plugin, error), uuid.UUID, ...uuid.UUID) error); ok { - r1 = rf(name, opts, requestPluginFn, pluginID, optionalNetworkElementID...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ChangeMNE provides a mock function with given fields: _a0, operation, path, value -func (_m *NetworkDomain) ChangeMNE(_a0 uuid.UUID, operation pnd.ApiOperation, path string, value ...string) (uuid.UUID, error) { - _va := make([]interface{}, len(value)) - for _i := range value { - _va[_i] = value[_i] - } - var _ca []interface{} - _ca = append(_ca, _a0, operation, path) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - var r0 uuid.UUID - var r1 error - if rf, ok := ret.Get(0).(func(uuid.UUID, pnd.ApiOperation, string, ...string) (uuid.UUID, error)); ok { - return rf(_a0, operation, path, value...) - } - if rf, ok := ret.Get(0).(func(uuid.UUID, pnd.ApiOperation, string, ...string) uuid.UUID); ok { - r0 = rf(_a0, operation, path, value...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(uuid.UUID) - } - } - - if rf, ok := ret.Get(1).(func(uuid.UUID, pnd.ApiOperation, string, ...string) error); ok { - r1 = rf(_a0, operation, path, value...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// Commit provides a mock function with given fields: _a0 -func (_m *NetworkDomain) Commit(_a0 uuid.UUID) error { - ret := _m.Called(_a0) - - var r0 error - if rf, ok := ret.Get(0).(func(uuid.UUID) error); ok { - r0 = rf(_a0) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// CommittedChanges provides a mock function with given fields: -func (_m *NetworkDomain) CommittedChanges() []uuid.UUID { - ret := _m.Called() - - var r0 []uuid.UUID - if rf, ok := ret.Get(0).(func() []uuid.UUID); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]uuid.UUID) - } - } - - return r0 -} - -// Confirm provides a mock function with given fields: _a0 -func (_m *NetworkDomain) Confirm(_a0 uuid.UUID) error { - ret := _m.Called(_a0) - - var r0 error - if rf, ok := ret.Get(0).(func(uuid.UUID) error); ok { - r0 = rf(_a0) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// FlattenedNetworkElements provides a mock function with given fields: -func (_m *NetworkDomain) FlattenedNetworkElements() []networkelement.LoadedNetworkElement { - ret := _m.Called() - - var r0 []networkelement.LoadedNetworkElement - if rf, ok := ret.Get(0).(func() []networkelement.LoadedNetworkElement); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]networkelement.LoadedNetworkElement) - } - } - - return r0 -} - -// GetChange provides a mock function with given fields: _a0 -func (_m *NetworkDomain) GetChange(_a0 uuid.UUID) (change.Change, error) { - ret := _m.Called(_a0) - - var r0 change.Change - var r1 error - if rf, ok := ret.Get(0).(func(uuid.UUID) (change.Change, error)); ok { - return rf(_a0) - } - if rf, ok := ret.Get(0).(func(uuid.UUID) change.Change); ok { - r0 = rf(_a0) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(change.Change) - } - } - - if rf, ok := ret.Get(1).(func(uuid.UUID) error); ok { - r1 = rf(_a0) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetDescription provides a mock function with given fields: func (_m *NetworkDomain) GetDescription() string { ret := _m.Called() @@ -204,32 +41,6 @@ func (_m *NetworkDomain) GetName() string { return r0 } -// GetNetworkElement provides a mock function with given fields: identifier -func (_m *NetworkDomain) GetNetworkElement(identifier string) (networkelement.NetworkElement, error) { - ret := _m.Called(identifier) - - var r0 networkelement.NetworkElement - var r1 error - if rf, ok := ret.Get(0).(func(string) (networkelement.NetworkElement, error)); ok { - return rf(identifier) - } - if rf, ok := ret.Get(0).(func(string) networkelement.NetworkElement); ok { - r0 = rf(identifier) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(networkelement.NetworkElement) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(identifier) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // ID provides a mock function with given fields: func (_m *NetworkDomain) ID() uuid.UUID { ret := _m.Called() @@ -246,144 +57,6 @@ func (_m *NetworkDomain) ID() uuid.UUID { return r0 } -// MarshalNetworkElement provides a mock function with given fields: _a0 -func (_m *NetworkDomain) MarshalNetworkElement(_a0 string) (string, error) { - ret := _m.Called(_a0) - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func(string) (string, error)); ok { - return rf(_a0) - } - if rf, ok := ret.Get(0).(func(string) string); ok { - r0 = rf(_a0) - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(_a0) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// NetworkElements provides a mock function with given fields: -func (_m *NetworkDomain) NetworkElements() []networkelement.NetworkElement { - ret := _m.Called() - - var r0 []networkelement.NetworkElement - if rf, ok := ret.Get(0).(func() []networkelement.NetworkElement); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]networkelement.NetworkElement) - } - } - - return r0 -} - -// PendingChanges provides a mock function with given fields: -func (_m *NetworkDomain) PendingChanges() []uuid.UUID { - ret := _m.Called() - - var r0 []uuid.UUID - if rf, ok := ret.Get(0).(func() []uuid.UUID); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]uuid.UUID) - } - } - - return r0 -} - -// RemoveNetworkElement provides a mock function with given fields: _a0 -func (_m *NetworkDomain) RemoveNetworkElement(_a0 uuid.UUID) error { - ret := _m.Called(_a0) - - var r0 error - if rf, ok := ret.Get(0).(func(uuid.UUID) error); ok { - r0 = rf(_a0) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// Request provides a mock function with given fields: _a0, _a1 -func (_m *NetworkDomain) Request(_a0 uuid.UUID, _a1 string) (protoreflect.ProtoMessage, error) { - ret := _m.Called(_a0, _a1) - - var r0 protoreflect.ProtoMessage - var r1 error - if rf, ok := ret.Get(0).(func(uuid.UUID, string) (protoreflect.ProtoMessage, error)); ok { - return rf(_a0, _a1) - } - if rf, ok := ret.Get(0).(func(uuid.UUID, string) protoreflect.ProtoMessage); ok { - r0 = rf(_a0, _a1) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(protoreflect.ProtoMessage) - } - } - - if rf, ok := ret.Get(1).(func(uuid.UUID, string) error); ok { - r1 = rf(_a0, _a1) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// RequestAll provides a mock function with given fields: _a0 -func (_m *NetworkDomain) RequestAll(_a0 string) error { - ret := _m.Called(_a0) - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(_a0) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// SubscribePath provides a mock function with given fields: _a0, _a1 -func (_m *NetworkDomain) SubscribePath(_a0 uuid.UUID, _a1 *pnd.SubscriptionList) error { - ret := _m.Called(_a0, _a1) - - var r0 error - if rf, ok := ret.Get(0).(func(uuid.UUID, *pnd.SubscriptionList) error); ok { - r0 = rf(_a0, _a1) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// UpdateNetworkElement provides a mock function with given fields: _a0, _a1 -func (_m *NetworkDomain) UpdateNetworkElement(_a0 uuid.UUID, _a1 string) error { - ret := _m.Called(_a0, _a1) - - var r0 error - if rf, ok := ret.Get(0).(func(uuid.UUID, string) error); ok { - r0 = rf(_a0, _a1) - } else { - r0 = ret.Error(0) - } - - return r0 -} - type mockConstructorTestingTNewNetworkDomain interface { mock.TestingT Cleanup(func()) diff --git a/controller/mocks/NetworkElement.go b/controller/mocks/NetworkElement.go index 193cea4e13498053440188d300c724ae1068750c..a8ccd7fba27dd568e5bbbb93eeda0b954f04f918 100644 --- a/controller/mocks/NetworkElement.go +++ b/controller/mocks/NetworkElement.go @@ -170,6 +170,22 @@ func (_m *NetworkElement) Name() string { return r0 } +// PndID provides a mock function with given fields: +func (_m *NetworkElement) PndID() uuid.UUID { + ret := _m.Called() + + var r0 uuid.UUID + if rf, ok := ret.Get(0).(func() uuid.UUID); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(uuid.UUID) + } + } + + return r0 +} + // ProcessResponse provides a mock function with given fields: _a0 func (_m *NetworkElement) ProcessResponse(_a0 protoreflect.ProtoMessage) error { ret := _m.Called(_a0) diff --git a/controller/mocks/Plugin.go b/controller/mocks/Plugin.go index fe8817b993dc1e1746aeb60d896b5c625dbf74f7..a9fd4e3508a08437f9ddea704aaed12f6e83aa8b 100644 --- a/controller/mocks/Plugin.go +++ b/controller/mocks/Plugin.go @@ -8,9 +8,9 @@ import ( mock "github.com/stretchr/testify/mock" - plugin "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" + networkelement "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" - pnd "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + plugin "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" uuid "github.com/google/uuid" ) @@ -302,15 +302,15 @@ func (_m *Plugin) Update() error { } // ValidateChange provides a mock function with given fields: operation, path, value -func (_m *Plugin) ValidateChange(operation pnd.ApiOperation, path *gnmi.Path, value []byte) ([]byte, error) { +func (_m *Plugin) ValidateChange(operation networkelement.ApiOperation, path *gnmi.Path, value []byte) ([]byte, error) { ret := _m.Called(operation, path, value) var r0 []byte var r1 error - if rf, ok := ret.Get(0).(func(pnd.ApiOperation, *gnmi.Path, []byte) ([]byte, error)); ok { + if rf, ok := ret.Get(0).(func(networkelement.ApiOperation, *gnmi.Path, []byte) ([]byte, error)); ok { return rf(operation, path, value) } - if rf, ok := ret.Get(0).(func(pnd.ApiOperation, *gnmi.Path, []byte) []byte); ok { + if rf, ok := ret.Get(0).(func(networkelement.ApiOperation, *gnmi.Path, []byte) []byte); ok { r0 = rf(operation, path, value) } else { if ret.Get(0) != nil { @@ -318,7 +318,7 @@ func (_m *Plugin) ValidateChange(operation pnd.ApiOperation, path *gnmi.Path, va } } - if rf, ok := ret.Get(1).(func(pnd.ApiOperation, *gnmi.Path, []byte) error); ok { + if rf, ok := ret.Get(1).(func(networkelement.ApiOperation, *gnmi.Path, []byte) error); ok { r1 = rf(operation, path, value) } else { r1 = ret.Error(1) diff --git a/controller/mocks/PndService.go b/controller/mocks/PndService.go new file mode 100644 index 0000000000000000000000000000000000000000..563ef3ce56ff72dae8cb7e228aa49beca41e0b97 --- /dev/null +++ b/controller/mocks/PndService.go @@ -0,0 +1,103 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + +package mocks + +import ( + networkdomain "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" + store "code.fbi.h-da.de/danet/gosdn/controller/store" + mock "github.com/stretchr/testify/mock" +) + +// PndService is an autogenerated mock type for the PndService type +type PndService struct { + mock.Mock +} + +// Add provides a mock function with given fields: _a0 +func (_m *PndService) Add(_a0 networkdomain.NetworkDomain) error { + ret := _m.Called(_a0) + + var r0 error + if rf, ok := ret.Get(0).(func(networkdomain.NetworkDomain) error); ok { + r0 = rf(_a0) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Delete provides a mock function with given fields: _a0 +func (_m *PndService) Delete(_a0 networkdomain.NetworkDomain) error { + ret := _m.Called(_a0) + + var r0 error + if rf, ok := ret.Get(0).(func(networkdomain.NetworkDomain) error); ok { + r0 = rf(_a0) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Get provides a mock function with given fields: _a0 +func (_m *PndService) Get(_a0 store.Query) (networkdomain.NetworkDomain, error) { + ret := _m.Called(_a0) + + var r0 networkdomain.NetworkDomain + if rf, ok := ret.Get(0).(func(store.Query) networkdomain.NetworkDomain); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(networkdomain.NetworkDomain) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(store.Query) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetAll provides a mock function with given fields: +func (_m *PndService) GetAll() ([]networkdomain.NetworkDomain, error) { + ret := _m.Called() + + var r0 []networkdomain.NetworkDomain + if rf, ok := ret.Get(0).(func() []networkdomain.NetworkDomain); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]networkdomain.NetworkDomain) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type mockConstructorTestingTNewPndService interface { + mock.TestingT + Cleanup(func()) +} + +// NewPndService creates a new instance of PndService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewPndService(t mockConstructorTestingTNewPndService) *PndService { + mock := &PndService{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/controller/mocks/PndStore.go b/controller/mocks/PndStore.go index b00322ec961a0fbb48b3f08167eebd5886fc08f5..9d8512cadf80b3061150ce1c0a3c72f38f9c22e8 100644 --- a/controller/mocks/PndStore.go +++ b/controller/mocks/PndStore.go @@ -51,20 +51,18 @@ func (_m *PndStore) Delete(_a0 networkdomain.NetworkDomain) error { } // Get provides a mock function with given fields: _a0 -func (_m *PndStore) Get(_a0 store.Query) (networkdomain.NetworkDomain, error) { +func (_m *PndStore) Get(_a0 store.Query) (networkdomain.LoadedPnd, error) { ret := _m.Called(_a0) - var r0 networkdomain.NetworkDomain + var r0 networkdomain.LoadedPnd var r1 error - if rf, ok := ret.Get(0).(func(store.Query) (networkdomain.NetworkDomain, error)); ok { + if rf, ok := ret.Get(0).(func(store.Query) (networkdomain.LoadedPnd, error)); ok { return rf(_a0) } - if rf, ok := ret.Get(0).(func(store.Query) networkdomain.NetworkDomain); ok { + if rf, ok := ret.Get(0).(func(store.Query) networkdomain.LoadedPnd); ok { r0 = rf(_a0) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(networkdomain.NetworkDomain) - } + r0 = ret.Get(0).(networkdomain.LoadedPnd) } if rf, ok := ret.Get(1).(func(store.Query) error); ok { @@ -77,19 +75,19 @@ func (_m *PndStore) Get(_a0 store.Query) (networkdomain.NetworkDomain, error) { } // GetAll provides a mock function with given fields: -func (_m *PndStore) GetAll() ([]networkdomain.NetworkDomain, error) { +func (_m *PndStore) GetAll() ([]networkdomain.LoadedPnd, error) { ret := _m.Called() - var r0 []networkdomain.NetworkDomain + var r0 []networkdomain.LoadedPnd var r1 error - if rf, ok := ret.Get(0).(func() ([]networkdomain.NetworkDomain, error)); ok { + if rf, ok := ret.Get(0).(func() ([]networkdomain.LoadedPnd, error)); ok { return rf() } - if rf, ok := ret.Get(0).(func() []networkdomain.NetworkDomain); ok { + if rf, ok := ret.Get(0).(func() []networkdomain.LoadedPnd); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]networkdomain.NetworkDomain) + r0 = ret.Get(0).([]networkdomain.LoadedPnd) } } diff --git a/controller/mocks/Pnd_Additions.go b/controller/mocks/Pnd_Additions.go new file mode 100644 index 0000000000000000000000000000000000000000..ea0fb12ad41b949b3628c8bae810d6bfdb1f983a --- /dev/null +++ b/controller/mocks/Pnd_Additions.go @@ -0,0 +1,20 @@ +package mocks + +import ( + "encoding/json" + + "github.com/google/uuid" +) + +// MarshalJSON implements the MarshalJSON interface to store a PND as JSON. +func (n NetworkDomain) MarshalJSON() ([]byte, error) { + return json.Marshal(&struct { + ID uuid.UUID + Name string + Description string + }{ + ID: n.ID(), + Name: n.GetName(), + Description: n.GetDescription(), + }) +} diff --git a/controller/mocks/SouthboundInterface.go b/controller/mocks/SouthboundInterface.go deleted file mode 100644 index e2645d0d57b3e419b40399aa3f675975eeb0067f..0000000000000000000000000000000000000000 --- a/controller/mocks/SouthboundInterface.go +++ /dev/null @@ -1,170 +0,0 @@ -// Code generated by mockery v2.20.0. DO NOT EDIT. - -package mocks - -import ( - gosdnsouthbound "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" - gnmi "github.com/openconfig/gnmi/proto/gnmi" - mock "github.com/stretchr/testify/mock" - - uuid "github.com/google/uuid" - - yang "github.com/openconfig/goyang/pkg/yang" - - ygot "github.com/openconfig/ygot/ygot" - - ytypes "github.com/openconfig/ygot/ytypes" -) - -// SouthboundInterface is an autogenerated mock type for the SouthboundInterface type -type SouthboundInterface struct { - mock.Mock -} - -// ID provides a mock function with given fields: -func (_m *SouthboundInterface) ID() uuid.UUID { - ret := _m.Called() - - var r0 uuid.UUID - if rf, ok := ret.Get(0).(func() uuid.UUID); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(uuid.UUID) - } - } - - return r0 -} - -// Name provides a mock function with given fields: -func (_m *SouthboundInterface) Name() string { - ret := _m.Called() - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// Schema provides a mock function with given fields: -func (_m *SouthboundInterface) Schema() (*ytypes.Schema, error) { - ret := _m.Called() - - var r0 *ytypes.Schema - var r1 error - if rf, ok := ret.Get(0).(func() (*ytypes.Schema, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() *ytypes.Schema); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*ytypes.Schema) - } - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SchemaTreeGzip provides a mock function with given fields: -func (_m *SouthboundInterface) SchemaTreeGzip() []byte { - ret := _m.Called() - - var r0 []byte - if rf, ok := ret.Get(0).(func() []byte); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]byte) - } - } - - return r0 -} - -// SetID provides a mock function with given fields: id -func (_m *SouthboundInterface) SetID(id uuid.UUID) { - _m.Called(id) -} - -// SetNode provides a mock function with given fields: schema, root, path, val, opts -func (_m *SouthboundInterface) SetNode(schema *yang.Entry, root interface{}, path *gnmi.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { - _va := make([]interface{}, len(opts)) - for _i := range opts { - _va[_i] = opts[_i] - } - var _ca []interface{} - _ca = append(_ca, schema, root, path, val) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - var r0 error - if rf, ok := ret.Get(0).(func(*yang.Entry, interface{}, *gnmi.Path, interface{}, ...ytypes.SetNodeOpt) error); ok { - r0 = rf(schema, root, path, val, opts...) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// Type provides a mock function with given fields: -func (_m *SouthboundInterface) Type() gosdnsouthbound.Type { - ret := _m.Called() - - var r0 gosdnsouthbound.Type - if rf, ok := ret.Get(0).(func() gosdnsouthbound.Type); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(gosdnsouthbound.Type) - } - - return r0 -} - -// Unmarshal provides a mock function with given fields: _a0, _a1, _a2, _a3 -func (_m *SouthboundInterface) Unmarshal(_a0 []byte, _a1 *gnmi.Path, _a2 ygot.GoStruct, _a3 ...ytypes.UnmarshalOpt) error { - _va := make([]interface{}, len(_a3)) - for _i := range _a3 { - _va[_i] = _a3[_i] - } - var _ca []interface{} - _ca = append(_ca, _a0, _a1, _a2) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - var r0 error - if rf, ok := ret.Get(0).(func([]byte, *gnmi.Path, ygot.GoStruct, ...ytypes.UnmarshalOpt) error); ok { - r0 = rf(_a0, _a1, _a2, _a3...) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -type mockConstructorTestingTNewSouthboundInterface interface { - mock.TestingT - Cleanup(func()) -} - -// NewSouthboundInterface creates a new instance of SouthboundInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewSouthboundInterface(t mockConstructorTestingTNewSouthboundInterface) *SouthboundInterface { - mock := &SouthboundInterface{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/controller/mocks/Store.go b/controller/mocks/Store.go index cebe76b34d08330f0d126bcb83a6b04407df9287..0662aa8c5d64ca937f792523feda9fe85e533658 100644 --- a/controller/mocks/Store.go +++ b/controller/mocks/Store.go @@ -3,8 +3,8 @@ package mocks import ( - store "code.fbi.h-da.de/danet/gosdn/controller/interfaces/store" - uuid "github.com/google/uuid" + networkelement "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" + store "code.fbi.h-da.de/danet/gosdn/controller/store" mock "github.com/stretchr/testify/mock" ) @@ -13,13 +13,13 @@ type Store struct { mock.Mock } -// Add provides a mock function with given fields: item -func (_m *Store) Add(item store.Storable) error { - ret := _m.Called(item) +// Add provides a mock function with given fields: _a0 +func (_m *Store) Add(_a0 networkelement.NetworkElement) error { + ret := _m.Called(_a0) var r0 error - if rf, ok := ret.Get(0).(func(store.Storable) error); ok { - r0 = rf(item) + if rf, ok := ret.Get(0).(func(networkelement.NetworkElement) error); ok { + r0 = rf(_a0) } else { r0 = ret.Error(0) } @@ -27,13 +27,13 @@ func (_m *Store) Add(item store.Storable) error { return r0 } -// Delete provides a mock function with given fields: id -func (_m *Store) Delete(id uuid.UUID) error { - ret := _m.Called(id) +// Delete provides a mock function with given fields: _a0 +func (_m *Store) Delete(_a0 networkelement.NetworkElement) error { + ret := _m.Called(_a0) var r0 error - if rf, ok := ret.Get(0).(func(uuid.UUID) error); ok { - r0 = rf(id) + if rf, ok := ret.Get(0).(func(networkelement.NetworkElement) error); ok { + r0 = rf(_a0) } else { r0 = ret.Error(0) } @@ -41,39 +41,49 @@ func (_m *Store) Delete(id uuid.UUID) error { return r0 } -// Exists provides a mock function with given fields: id -func (_m *Store) Exists(id uuid.UUID) bool { - ret := _m.Called(id) +// Get provides a mock function with given fields: _a0 +func (_m *Store) Get(_a0 store.Query) (networkelement.LoadedNetworkElement, error) { + ret := _m.Called(_a0) - var r0 bool - if rf, ok := ret.Get(0).(func(uuid.UUID) bool); ok { - r0 = rf(id) + var r0 networkelement.LoadedNetworkElement + var r1 error + if rf, ok := ret.Get(0).(func(store.Query) (networkelement.LoadedNetworkElement, error)); ok { + return rf(_a0) + } + if rf, ok := ret.Get(0).(func(store.Query) networkelement.LoadedNetworkElement); ok { + r0 = rf(_a0) } else { - r0 = ret.Get(0).(bool) + r0 = ret.Get(0).(networkelement.LoadedNetworkElement) } - return r0 + if rf, ok := ret.Get(1).(func(store.Query) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 } -// Get provides a mock function with given fields: id -func (_m *Store) Get(id uuid.UUID) (store.Storable, error) { - ret := _m.Called(id) +// GetAll provides a mock function with given fields: +func (_m *Store) GetAll() ([]networkelement.LoadedNetworkElement, error) { + ret := _m.Called() - var r0 store.Storable + var r0 []networkelement.LoadedNetworkElement var r1 error - if rf, ok := ret.Get(0).(func(uuid.UUID) (store.Storable, error)); ok { - return rf(id) + if rf, ok := ret.Get(0).(func() ([]networkelement.LoadedNetworkElement, error)); ok { + return rf() } - if rf, ok := ret.Get(0).(func(uuid.UUID) store.Storable); ok { - r0 = rf(id) + if rf, ok := ret.Get(0).(func() []networkelement.LoadedNetworkElement); ok { + r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.Storable) + r0 = ret.Get(0).([]networkelement.LoadedNetworkElement) } } - if rf, ok := ret.Get(1).(func(uuid.UUID) error); ok { - r1 = rf(id) + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() } else { r1 = ret.Error(1) } @@ -81,17 +91,15 @@ func (_m *Store) Get(id uuid.UUID) (store.Storable, error) { return r0, r1 } -// UUIDs provides a mock function with given fields: -func (_m *Store) UUIDs() []uuid.UUID { - ret := _m.Called() +// Update provides a mock function with given fields: _a0 +func (_m *Store) Update(_a0 networkelement.NetworkElement) error { + ret := _m.Called(_a0) - var r0 []uuid.UUID - if rf, ok := ret.Get(0).(func() []uuid.UUID); ok { - r0 = rf() + var r0 error + if rf, ok := ret.Get(0).(func(networkelement.NetworkElement) error); ok { + r0 = rf(_a0) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]uuid.UUID) - } + r0 = ret.Error(0) } return r0 diff --git a/controller/northbound/client/networkElement.go b/controller/northbound/client/networkElement.go new file mode 100644 index 0000000000000000000000000000000000000000..58267f6ba3aac5650566c6ad04dce7f962957649 --- /dev/null +++ b/controller/northbound/client/networkElement.go @@ -0,0 +1,17 @@ +package client + +import ( + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" + "google.golang.org/grpc" +) + +// NetworkElementClient returns a client for the gRPC NetworkElement service. It takes +// the address of the gRPC endpoint and optional grpc.DialOption +// as argument. +func NetworkElementClient(addr string, opts ...grpc.DialOption) (mnepb.NetworkElementServiceClient, error) { + conn, err := grpc.Dial(addr, opts...) + if err != nil { + return nil, err + } + return mnepb.NewNetworkElementServiceClient(conn), nil +} diff --git a/controller/northbound/server/auth_interceptor_test.go b/controller/northbound/server/auth_interceptor_test.go index 493e16ae27cb9a6b49689487bff0832deb2ba87b..f70efd42454171e0cf4633d2566add5ef2771610 100644 --- a/controller/northbound/server/auth_interceptor_test.go +++ b/controller/northbound/server/auth_interceptor_test.go @@ -40,9 +40,12 @@ func getTestAuthInterceptorServer(t *testing.T) (*AuthInterceptor, *UserServer, t.Fatal(err) } - mockPnd := getMockPnd(t) pndStore := nucleus.NewMemoryPndStore() - if err := pndStore.Add(mockPnd); err != nil { + pndService := nucleus.NewPndService(pndStore) + + pnd := nucleus.NewPND(pndUUID, "test", "test") + + if err := pndService.Add(pnd); err != nil { t.Fatal(err) } diff --git a/controller/northbound/server/auth_test.go b/controller/northbound/server/auth_test.go index a24cee7648730eb04324f774e3710fba7b702193..c6d362a0bd6f8540cbd79bc0a1581bdad453bab0 100644 --- a/controller/northbound/server/auth_test.go +++ b/controller/northbound/server/auth_test.go @@ -24,6 +24,7 @@ func getTestAuthServer(t *testing.T) *AuthServer { s := NewAuthServer(jwtManager, userService) err := clearAndCreateAuthTestSetup(s.userService, roleService) + if err != nil { t.Fatalf("%v", err) } diff --git a/controller/northbound/server/configurationmanagement.go b/controller/northbound/server/configurationmanagement.go index fc616f2e925035791934eb4ac3da843ac5d8c127..8e5ed7791c5f18375b41060dc8a66880f5401871 100644 --- a/controller/northbound/server/configurationmanagement.go +++ b/controller/northbound/server/configurationmanagement.go @@ -8,9 +8,11 @@ import ( cmpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement" spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" + "code.fbi.h-da.de/danet/gosdn/controller/conflict" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" + "code.fbi.h-da.de/danet/gosdn/controller/nucleus" "code.fbi.h-da.de/danet/gosdn/controller/store" "code.fbi.h-da.de/danet/gosdn/controller/topology" "code.fbi.h-da.de/danet/gosdn/controller/topology/links" @@ -23,7 +25,8 @@ import ( // ConfigurationManagementServer represents ConfigurationManagementServer... type ConfigurationManagementServer struct { cmpb.UnimplementedConfigurationManagementServiceServer - pndStore networkdomain.PndStore + pndService networkdomain.Service + mneService networkelement.Service topologyService topology.Service nodeService nodes.Service portService ports.Service @@ -32,14 +35,16 @@ type ConfigurationManagementServer struct { // NewConfigurationManagementServer creates the ConfigurationManagementServer.. func NewConfigurationManagementServer( - pndStore networkdomain.PndStore, + pndService networkdomain.Service, + mneService networkelement.Service, topologyService topology.Service, nodeService nodes.Service, portService ports.Service, pluginService plugin.Service, ) *ConfigurationManagementServer { return &ConfigurationManagementServer{ - pndStore: pndStore, + pndService: pndService, + mneService: mneService, topologyService: topologyService, nodeService: nodeService, portService: portService, @@ -72,14 +77,11 @@ func (c ConfigurationManagementServer) ExportSDNConfig(ctx context.Context, requ var sdnConfig = sdnConfig{} sdnConfig.PndID = request.Pid - pndUUID := uuid.MustParse(request.Pid) - pnd, err := c.pndStore.Get(store.Query{ID: pndUUID}) + networkElements, err := c.mneService.GetAll() if err != nil { return nil, err } - networkElements := pnd.NetworkElements() - sdnConfig.NetworkElements = networkElements sdnConfig.Nodes, err = c.nodeService.GetAll() @@ -117,7 +119,7 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ return nil, err } - err = c.deleteAllElementsFromDatabase(pndUUID) + err = c.deleteAllElementsFromDatabase() if err != nil { return nil, err } @@ -132,8 +134,8 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ Status: cmpb.Status_STATUS_OK}, nil } -func (c ConfigurationManagementServer) deleteAllElementsFromDatabase(pndUUID uuid.UUID) error { - if err := c.deleteNetworkElements(pndUUID); err != nil { +func (c ConfigurationManagementServer) deleteAllElementsFromDatabase() error { + if err := c.deleteNetworkElements(); err != nil { return err } @@ -185,15 +187,14 @@ func (c ConfigurationManagementServer) deleteTopology() error { return nil } -func (c ConfigurationManagementServer) deleteNetworkElements(pndUUID uuid.UUID) error { - pnd, err := c.pndStore.Get(store.Query{ID: pndUUID}) +func (c ConfigurationManagementServer) deleteNetworkElements() error { + networkElements, err := c.mneService.GetAll() if err != nil { return err } - networkElements := pnd.NetworkElements() for _, networkElement := range networkElements { - err = pnd.RemoveNetworkElement(networkElement.ID()) + err = c.mneService.Delete(networkElement) if err != nil { return err } @@ -288,11 +289,6 @@ func (c ConfigurationManagementServer) createTopology(sdnConfig *loadedSDNConfig } func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSDNConfig, pndUUID uuid.UUID) error { - pnd, err := c.pndStore.Get(store.Query{ID: pndUUID}) - if err != nil { - return err - } - for _, inputNetworkElement := range sdnConfig.NetworkElements { transportOption := tpb.TransportOption{ Address: inputNetworkElement.TransportAddress, @@ -305,26 +301,41 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD // be removed as soon as we remove the csbi device type Type: spb.Type_TYPE_OPENCONFIG, } - _, err := pnd.AddNetworkElement( + + plugin, err := c.pluginService.RequestPlugin(uuid.MustParse(inputNetworkElement.Plugin)) + if err != nil { + return err + } + + createdNetworkElement, err := nucleus.NewNetworkElement( inputNetworkElement.Name, - &transportOption, - nil, - uuid.MustParse(inputNetworkElement.Plugin), uuid.MustParse(inputNetworkElement.ID), + &transportOption, + pndUUID, + plugin, + conflict.Metadata{ResourceVersion: inputNetworkElement.Metadata.ResourceVersion}, ) if err != nil { return err } - networkelement, err := pnd.GetNetworkElement(inputNetworkElement.ID) + if err := c.mneService.Add(createdNetworkElement); err != nil { + return err + } + + err = c.mneService.UpdateModel(createdNetworkElement.ID(), inputNetworkElement.Model) if err != nil { return err } - err = pnd.UpdateNetworkElement(networkelement.ID(), inputNetworkElement.Model) + networkElement, err := c.mneService.Get(store.Query{ID: uuid.MustParse(inputNetworkElement.ID)}) if err != nil { return err } + + if err := networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement); err != nil { + return err + } } return nil } diff --git a/controller/northbound/server/core.go b/controller/northbound/server/core.go index 6520411776e2fb5058a58f0155c50f233fa2b159..13027611838f126e34f15095e6dd709e831d499d 100644 --- a/controller/northbound/server/core.go +++ b/controller/northbound/server/core.go @@ -6,7 +6,6 @@ import ( pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" - rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" @@ -21,21 +20,19 @@ import ( // CoreServer represents a core server. type CoreServer struct { pb.UnimplementedCoreServiceServer - pndStore networkdomain.PndStore - pluginRegistryClient rpb.PluginRegistryServiceClient - pluginService plugin.Service - csbiClient cpb.CsbiServiceClient - pndCallbackFn func(uuid.UUID, chan networkelement.Details) + pndService networkdomain.Service + pluginService plugin.Service + csbiClient cpb.CsbiServiceClient + pndCallbackFn func(uuid.UUID, chan networkelement.Details) } // NewCoreServer receives a pndStore and returns a new coreServer. -func NewCoreServer(pndStore networkdomain.PndStore, pluginService plugin.Service, pluginRegistryClient rpb.PluginRegistryServiceClient, csbiClient cpb.CsbiServiceClient, pndCallbackFn func(uuid.UUID, chan networkelement.Details)) *CoreServer { +func NewCoreServer(pndService networkdomain.Service, pluginService plugin.Service, pndCallbackFn func(uuid.UUID, chan networkelement.Details), csbiClient cpb.CsbiServiceClient) *CoreServer { return &CoreServer{ - pndStore: pndStore, - pluginService: pluginService, - pluginRegistryClient: pluginRegistryClient, - csbiClient: csbiClient, - pndCallbackFn: pndCallbackFn, + pndService: pndService, + pluginService: pluginService, + pndCallbackFn: pndCallbackFn, + csbiClient: csbiClient, } } @@ -50,7 +47,7 @@ func (s CoreServer) GetPnd(ctx context.Context, request *pb.GetPndRequest) (*pb. return nil, handleRPCError(labels, err) } - storedPnd, err := s.pndStore.Get(store.Query{ID: pndID}) + storedPnd, err := s.pndService.Get(store.Query{ID: pndID}) if err != nil { return nil, err } @@ -73,7 +70,7 @@ func (s CoreServer) GetPndList(ctx context.Context, request *pb.GetPndListReques start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pndList, err := s.pndStore.GetAll() + pndList, err := s.pndService.GetAll() if err != nil { return nil, err } @@ -98,11 +95,9 @@ func (s CoreServer) CreatePndList(ctx context.Context, request *pb.CreatePndList start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) for _, r := range request.Pnd { - pnd, err := nucleus.NewPND(r.Name, r.Description, uuid.New(), s.csbiClient, s.pluginRegistryClient, s.pluginService, s.pndCallbackFn) - if err != nil { - return nil, handleRPCError(labels, err) - } - if err := s.pndStore.Add(pnd); err != nil { + pnd := nucleus.NewPND(uuid.New(), r.Name, r.Description) + + if err := s.pndService.Add(pnd); err != nil { return nil, handleRPCError(labels, err) } } @@ -123,11 +118,11 @@ func (s CoreServer) DeletePnd(ctx context.Context, request *pb.DeletePndRequest) return nil, handleRPCError(labels, err) } - pnd, err := s.pndStore.Get(store.Query{ID: pndID}) + pnd, err := s.pndService.Get(store.Query{ID: pndID}) if err != nil { return nil, handleRPCError(labels, err) } - err = s.pndStore.Delete(pnd) + err = s.pndService.Delete(pnd) if err != nil { return &pb.DeletePndResponse{ Timestamp: time.Now().UnixNano(), diff --git a/controller/northbound/server/core_test.go b/controller/northbound/server/core_test.go index a2400e562753efe8937db1a6e0ab134eb4f67eaf..2a0853ea266405dc8db20be2cf48d18692c47229 100644 --- a/controller/northbound/server/core_test.go +++ b/controller/northbound/server/core_test.go @@ -8,8 +8,8 @@ import ( pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/mocks" @@ -54,21 +54,12 @@ func getTestCoreServer(t *testing.T) *CoreServer { UUID: mneUUID, } - //sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, sbiUUID) - //if err != nil { - // t.Fatal(err) - //} - //mockNetworkElement.(*nucleus.CommonNetworkElement).SetSBI(sbi) mockNetworkElement.(*nucleus.CommonNetworkElement).SetTransport(&mocks.Transport{}) mockNetworkElement.(*nucleus.CommonNetworkElement).SetName(hostname) - //sbiStore = nucleus.NewSbiStore(pndUUID) - //if err := sbiStore.Add(mockNetworkElement.SBI()); err != nil { - // t.Fatal(err) - //} mockChange := &mocks.Change{} mockChange.On("Age").Return(time.Hour) - mockChange.On("State").Return(ppb.ChangeState_CHANGE_STATE_INCONSISTENT) + mockChange.On("State").Return(mnepb.ChangeState_CHANGE_STATE_INCONSISTENT) mockPnd = &mocks.NetworkDomain{} mockPnd.On("ID").Return(pndUUID) @@ -84,16 +75,21 @@ func getTestCoreServer(t *testing.T) *CoreServer { mockPnd.On("Confirm", mock.Anything).Return(nil) mockPnd.On("ChangeMNE", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil) mockPnd.On("Request", mock.Anything, mock.Anything).Return(nil, nil) + mockPnd.On("GetAll").Return(mockPnd) pndStore := nucleus.NewMemoryPndStore() - if err := pndStore.Add(mockPnd); err != nil { + + pndService := nucleus.NewPndService(pndStore) + if err := pndService.Add(mockPnd); err != nil { t.Fatal(err) } eventService := eventservice.NewMockEventService() pluginStore := nucleus.NewMemoryPluginStore() - c := NewCoreServer(pndStore, nucleus.NewPluginService(pluginStore, eventService, nucleus.NewPluginThroughReattachConfig), rpb.NewPluginRegistryServiceClient(&grpc.ClientConn{}), cpb.NewCsbiServiceClient(&grpc.ClientConn{}), func(u uuid.UUID, c chan networkelement.Details) {}) + regsitryClient := rpb.NewPluginRegistryServiceClient(&grpc.ClientConn{}) + + c := NewCoreServer(pndService, nucleus.NewPluginService(pluginStore, eventService, nucleus.NewPluginThroughReattachConfig, regsitryClient), func(u uuid.UUID, c chan networkelement.Details) {}, cpb.NewCsbiServiceClient(&grpc.ClientConn{})) return c } diff --git a/controller/northbound/server/nbi.go b/controller/northbound/server/nbi.go index 081ba0ec92cdb7df70176f237a4f01d484919583..72bdc63014dfb7fea372377522d2d2656e422f85 100644 --- a/controller/northbound/server/nbi.go +++ b/controller/northbound/server/nbi.go @@ -9,6 +9,7 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/rbac" + "code.fbi.h-da.de/danet/gosdn/controller/store" "code.fbi.h-da.de/danet/gosdn/controller/topology" "code.fbi.h-da.de/danet/gosdn/controller/topology/nodes" "code.fbi.h-da.de/danet/gosdn/controller/topology/ports" @@ -42,6 +43,9 @@ type NorthboundInterface struct { // NewNBI receives a PndStore and returns a new gRPC *NorthboundInterface. func NewNBI( pnds networkdomain.PndStore, + pndService networkdomain.Service, + mneService networkelement.Service, + changeStore store.ChangeStore, users rbacInterfaces.UserService, roles rbacInterfaces.RoleService, jwt rbac.JWTManager, @@ -54,11 +58,10 @@ func NewNBI( pluginRegistryClient rpb.PluginRegistryServiceClient, csbiClient cpb.CsbiServiceClient, pndCallbackFn func(uuid.UUID, chan networkelement.Details), - networkDomain networkdomain.NetworkDomain, ) *NorthboundInterface { return &NorthboundInterface{ - Pnd: NewPndServer(pnds), - Core: NewCoreServer(pnds, pluginService, pluginRegistryClient, csbiClient, pndCallbackFn), + Pnd: NewPndServer(pndService), + Core: NewCoreServer(pndService, pluginService, pndCallbackFn, csbiClient), Csbi: NewCsbiServer(pnds), Plugin: NewPluginInternalServer(pluginRegistryClient, pluginService), Auth: NewAuthServer(&jwt, users), @@ -66,9 +69,9 @@ func NewNBI( Role: NewRoleServer(&jwt, roles), Topology: NewTopologyServer(topologyService, nodeService, portService), App: NewAppServer(apps), - NetworkElement: NewNetworkElementServer(networkDomain), + NetworkElement: NewNetworkElementServer(mneService, pndService, pluginService, changeStore), Routes: NewRoutingTableServiceServer(routeService, nodeService, portService), - ConfigurationManagement: NewConfigurationManagementServer(pnds, topologyService, nodeService, portService, pluginService), + ConfigurationManagement: NewConfigurationManagementServer(pndService, mneService, topologyService, nodeService, portService, pluginService), } } diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go index 0f7b585aaae3b91d49a0893fb8c70ac747918d5e..6a433b7dea0888bf04f1be9c8da200e161bfe1e6 100644 --- a/controller/northbound/server/networkElement.go +++ b/controller/northbound/server/networkElement.go @@ -2,59 +2,136 @@ package server import ( "context" + "fmt" + "strings" "time" mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" + ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" + "code.fbi.h-da.de/danet/gosdn/controller/conflict" + "code.fbi.h-da.de/danet/gosdn/controller/customerrs" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" + "code.fbi.h-da.de/danet/gosdn/controller/metrics" + "code.fbi.h-da.de/danet/gosdn/controller/nucleus" + "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" + "code.fbi.h-da.de/danet/gosdn/controller/store" + aGNMI "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" "github.com/google/uuid" + gpb "github.com/openconfig/gnmi/proto/gnmi" + + "github.com/openconfig/ygot/ygot" + "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // NetworkElementServer represents a NetworkElementServer. type NetworkElementServer struct { mnepb.UnimplementedNetworkElementServiceServer - networkDomain networkdomain.NetworkDomain + mneService networkelement.Service + pndService networkdomain.Service + pluginService plugin.Service + changeStore store.ChangeStore } // NewNetworkElementServer returns a new NetWorkElementServer. -func NewNetworkElementServer(networkDomain networkdomain.NetworkDomain) *NetworkElementServer { +func NewNetworkElementServer(mneService networkelement.Service, pndService networkdomain.Service, pluginService plugin.Service, changeStore store.ChangeStore) *NetworkElementServer { return &NetworkElementServer{ - networkDomain: networkDomain, + mneService: mneService, + pndService: pndService, + pluginService: pluginService, + changeStore: changeStore, } } -// Add adds a new network element. -func (s *NetworkElementServer) Add(ctx context.Context, request *mnepb.AddNetworkElementRequest) (*mnepb.AddNetworkElementResponse, error) { - sbiID, err := uuid.Parse(request.NetworkElement.Sbi.Id) - if err != nil { - return nil, status.Errorf(codes.Aborted, "%v", err) - } +// // Add adds a new network element. +// func (n *NetworkElementServer) Add(ctx context.Context, request *mnepb.AddNetworkElementRequest) (*mnepb.AddNetworkElementResponse, error) { +// sbiID, err := uuid.Parse(request.NetworkElement.Sbi.Id) +// if err != nil { +// return nil, status.Errorf(codes.Aborted, "%v", err) +// } - id, err := s.networkDomain.AddNetworkElement( - request.NetworkElement.NetworkElementName, - request.NetworkElement.TransportOption, - nil, - sbiID, - uuid.Nil, - ) - if err != nil { - return nil, status.Errorf(codes.Aborted, "%v", err) - } +// pndID, err := uuid.Parse(request.Pid) +// if err != nil { +// return nil, status.Errorf(codes.Aborted, "%v", err) +// } - return &mnepb.AddNetworkElementResponse{ - Timestamp: time.Now().UnixNano(), - Status: mnepb.Status_STATUS_OK, - NetworkElementId: id.String(), - }, nil -} +// id, err := n.addNetworkElement(ctx, request.NetworkElement.NetworkElementName, request.NetworkElement.TransportOption, sbiID, pndID) +// if err != nil { +// return nil, status.Errorf(codes.Aborted, "%v", err) +// } + +// return &mnepb.AddNetworkElementResponse{ +// Timestamp: time.Now().UnixNano(), +// Status: mnepb.Status_STATUS_OK, +// NetworkElementId: id.String(), +// }, nil +// } + +// // TODO(merge): add plugin here, remove sbi +// func (n *NetworkElementServer) addNetworkElement(ctx context.Context, name string, transportOpt *tpb.TransportOption, sbiID uuid.UUID, pndID uuid.UUID) (uuid.UUID, error) { +// var sbi southbound.SouthboundInterface +// var err error + +// // Note: cSBI not supported currently, so this is commented fow now. +// // Might be needed or removed in the future. +// // +// // switch t := opt.Type; t { +// // case spb.Type_TYPE_CONTAINERISED: +// // return pnd.handleCsbiEnrolment(name, opt) +// // case spb.Type_TYPE_PLUGIN: +// // sbi, err = pnd.requestPlugin(name, opt) +// // if err != nil { +// // return uuid.Nil, err +// // } +// // default: +// // var err error +// // sbi, err = n.sbiService.Get(store.Query{ID: sbiID}) +// // if err != nil { +// // return uuid.Nil, err +// // } +// // } + +// // TODO(merge): add plugin stuff here! +// // sbi, err = n.sbiService.Get(store.Query{ID: sbiID}) +// // if err != nil { +// // return uuid.Nil, err +// // } + +// mne, err := nucleus.NewNetworkElement(name, uuid.Nil, transportOpt, sbi, pndID, conflict.Metadata{ResourceVersion: 0}) +// if err != nil { +// return uuid.Nil, err +// } + +// err = n.mneService.Add(mne) +// if err != nil { +// return uuid.Nil, err +// } + +// if mne.IsTransportValid() { +// _, err = n.getPath(ctx, mne.ID(), "/interfaces") +// if err != nil { +// return uuid.Nil, err +// } +// } + +// return mne.ID(), nil +// } // GetAll returns all stored network elements. -func (s *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAllNetworkElementRequest) (*mnepb.GetAllNetworkElementResponse, error) { - networkElements := s.networkDomain.NetworkElements() +func (n *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAllNetworkElementRequest) (*mnepb.GetAllNetworkElementResponse, error) { + networkElements, err := n.mneService.GetAll() + if err != nil { + return nil, err + } - mnes := []*mnepb.NetworkElement{} + mnes := []*mnepb.ManagedNetworkElement{} for _, mne := range networkElements { ygotStructAsJSON, err := mne.GetModelAsString() if err != nil { @@ -62,7 +139,7 @@ func (s *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAll return nil, status.Errorf(codes.Aborted, "%v", err) } - mnes = append(mnes, &mnepb.NetworkElement{ + mnes = append(mnes, &mnepb.ManagedNetworkElement{ Id: mne.ID().String(), Name: mne.Name(), Model: ygotStructAsJSON, @@ -77,10 +154,10 @@ func (s *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAll } // Get returns a network element. -func (s *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetNetworkElementRequest) (*mnepb.GetNetworkElementResponse, error) { - mne, err := s.networkDomain.GetNetworkElement(request.NetworkElementId) +func (n *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetNetworkElementRequest) (*mnepb.GetNetworkElementResponse, error) { + mne, err := n.mneService.Get(store.Query{ID: uuid.MustParse(request.NetworkElementId)}) if err != nil { - return nil, status.Errorf(codes.Aborted, "%v", err) + return nil, err } ygotStructAsJSON, err := mne.GetModelAsString() @@ -89,7 +166,7 @@ func (s *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetNetwor return nil, status.Errorf(codes.Aborted, "%v", err) } - networkElement := &mnepb.NetworkElement{ + networkElement := &mnepb.ManagedNetworkElement{ Id: mne.ID().String(), Name: mne.Name(), Model: ygotStructAsJSON, @@ -104,20 +181,27 @@ func (s *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetNetwor } // Update updates a network element. -func (s *NetworkElementServer) Update(ctx context.Context, request *mnepb.UpdateNetworkElementRequest) (*mnepb.UpdateNetworkElementResponse, error) { +func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.UpdateNetworkElementRequest) (*mnepb.UpdateNetworkElementResponse, error) { mneID, err := uuid.Parse(request.NetworkElement.Id) if err != nil { - return &mnepb.UpdateNetworkElementResponse{ - Timestamp: time.Now().UnixNano(), - Status: mnepb.Status_STATUS_OK, - }, err + return nil, err + } + + err = n.mneService.UpdateModel(mneID, request.NetworkElement.Model) + if err != nil { + return nil, err } - err = s.networkDomain.UpdateNetworkElement(mneID, request.NetworkElement.Model) + networkElement, err := n.mneService.Get(store.Query{ID: mneID}) + if err != nil { + return nil, err + } + + err = networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement) if err != nil { return &mnepb.UpdateNetworkElementResponse{ Timestamp: time.Now().UnixNano(), - Status: mnepb.Status_STATUS_OK, + Status: mnepb.Status_STATUS_ERROR, }, err } @@ -126,3 +210,792 @@ func (s *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update Status: mnepb.Status_STATUS_OK, }, nil } + +// GetMne gets a specific mne. +func (n *NetworkElementServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pid, err := uuid.Parse(request.Pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + pnd, err := n.pndService.Get(store.Query{ID: pid}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + networkElement, err := n.getMne(request.Mneid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + // TODO(path): This needs some adjustments when we're switching towards a new + // path request handling. + mne, err := fillMneBySpecificPath(networkElement, "/") + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + return &mnepb.GetMneResponse{ + Timestamp: time.Now().UnixNano(), + Pnd: &ppb.PrincipalNetworkDomain{ + Id: pnd.ID().String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + }, + Mne: mne, + }, nil +} + +// GetFlattenedMne gets a specific mne. +func (n *NetworkElementServer) GetFlattenedMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetFlattenedMneResponse, error) { + labels := prometheus.Labels{"service": "pnd", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + networkElement, err := n.mneService.Get(store.Query{ID: uuid.MustParse(request.Mneid)}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + return &mnepb.GetFlattenedMneResponse{ + Timestamp: time.Now().UnixNano(), + Mne: &mnepb.FlattenedManagedNetworkElement{ + Id: networkElement.ID().String(), + Name: networkElement.Name(), + Pid: networkElement.PndID().String(), + Pluginid: networkElement.GetPlugin().ID().String(), + }, + }, nil +} + +func (n *NetworkElementServer) getMne(identifier string) (networkelement.NetworkElement, error) { + id, err := uuid.Parse(identifier) + if err != nil { + id = uuid.Nil + } + + mne, err := n.mneService.Get(store.Query{ + ID: id, + }) + if mne == nil { + return nil, fmt.Errorf("no network element found") + } + if err != nil { + return nil, err + } + + return mne, nil +} + +// GetMneList returns a list of existing mnes. +func (n *NetworkElementServer) GetMneList(ctx context.Context, request *mnepb.GetMneListRequest) (*mnepb.GetMneListResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pid, err := uuid.Parse(request.Pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + pnd, err := n.pndService.Get(store.Query{ID: pid}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + storedMNE, err := n.mneService.GetAll() + if err != nil { + return nil, err + } + + mnes := make([]*mnepb.ManagedNetworkElement, len(storedMNE)) + for i, networkElement := range storedMNE { + mne, err := fillMneBySpecificPath(networkElement, "/") + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + mnes[i] = mne + } + + return &mnepb.GetMneListResponse{ + Timestamp: time.Now().UnixNano(), + Pnd: &ppb.PrincipalNetworkDomain{ + Id: pnd.ID().String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + }, + Mne: mnes, + }, nil +} + +// GetFlattenedMneList returns a list of existing mnes. +func (n *NetworkElementServer) GetFlattenedMneList(ctx context.Context, request *mnepb.GetFlattenedMneListRequest) (*mnepb.GetFlattenedMneListResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pid, err := uuid.Parse(request.Pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + pnd, err := n.pndService.Get(store.Query{ID: pid}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + mnes, err := n.mneService.GetAllAsLoaded() + if err != nil { + return nil, err + } + + flattenedMnes := make([]*mnepb.FlattenedManagedNetworkElement, len(mnes)) + for i, mne := range mnes { + mne := &mnepb.FlattenedManagedNetworkElement{ + Id: mne.ID, + Name: mne.Name, + Pluginid: mne.Plugin, + Pid: mne.PndID, + } + flattenedMnes[i] = mne + } + + return &mnepb.GetFlattenedMneListResponse{ + Timestamp: time.Now().UnixNano(), + Pnd: &ppb.PrincipalNetworkDomain{ + Id: pnd.ID().String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + }, + Mne: flattenedMnes, + }, nil +} + +func fillMneBySpecificPath(nme networkelement.NetworkElement, path string) (*mnepb.ManagedNetworkElement, error) { + gnmiPath, err := ygot.StringToStructuredPath(path) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + notifications, err := nme.GetPlugin().GetNode(gnmiPath) + if err != nil { + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + mne := &mnepb.ManagedNetworkElement{ + Id: nme.ID().String(), + Name: nme.Name(), + MneNotification: notifications, + } + + return mne, nil +} + +// GetPath gets a path on a mne. +func (n *NetworkElementServer) GetPath(ctx context.Context, request *mnepb.GetPathRequest) (*mnepb.GetPathResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pid, err := uuid.Parse(request.Pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + pnd, err := n.pndService.Get(store.Query{ID: pid}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + mneuid, err := uuid.Parse(request.Mneid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + // In case we get the path from grpc-gateway we have to replace + path := strings.ReplaceAll(request.Path, "||", "/") + + resp, err := n.getPath(ctx, mneuid, path) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + return &mnepb.GetPathResponse{ + Timestamp: time.Now().UnixNano(), + Pnd: &ppb.PrincipalNetworkDomain{ + Id: pnd.ID().String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + }, + MneNotification: resp.(*gpb.GetResponse).Notification, + }, nil +} + +func (n *NetworkElementServer) getPath(ctx context.Context, uuid uuid.UUID, path string) (proto.Message, error) { + mne, err := n.mneService.Get(store.Query{ + ID: uuid, + Name: uuid.String(), + }) + if err != nil { + return nil, err + } + + res, err := mne.Transport().Get(ctx, path) + if err != nil { + return nil, err + } + resp, ok := res.(proto.Message) + if !ok { + return nil, &customerrs.InvalidTypeAssertionError{ + Value: res, + Type: (*proto.Message)(nil), + } + } + err = mne.ProcessResponse(resp) + if err != nil { + return nil, err + } + + modelAsString, err := mne.GetModelAsString() + if err != nil { + return nil, err + } + + // TODO(path): We probably have to remove this when we address path request handling. + err = n.mneService.UpdateModel(uuid, modelAsString) + if err != nil { + return nil, err + } + + return resp, nil +} + +// GetChange gets a specific change of a mne. +func (n *NetworkElementServer) GetChange(ctx context.Context, request *mnepb.GetChangeRequest) (*mnepb.GetChangeResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pid, err := uuid.Parse(request.Pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + pnd, err := n.pndService.Get(store.Query{ID: pid}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + changes, err := n.fillChanges(false, request.Cuid...) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + return &mnepb.GetChangeResponse{ + Timestamp: time.Now().UnixNano(), + Pnd: &ppb.PrincipalNetworkDomain{ + Id: pnd.ID().String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + }, + Change: changes, + }, nil +} + +// GetChangeList gets all existing changes. +func (n *NetworkElementServer) GetChangeList(ctx context.Context, request *mnepb.GetChangeListRequest) (*mnepb.GetChangeListResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "get"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pid, err := uuid.Parse(request.Pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + pnd, err := n.pndService.Get(store.Query{ID: pid}) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + changes, err := n.fillChanges(true, "") + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + return &mnepb.GetChangeListResponse{ + Timestamp: time.Now().UnixNano(), + Pnd: &ppb.PrincipalNetworkDomain{ + Id: pnd.ID().String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + }, + Change: changes, + }, nil +} + +func (n *NetworkElementServer) fillChanges(all bool, cuid ...string) ([]*mnepb.Change, error) { + var changeList []uuid.UUID + + switch all { + case true: + changeList = n.changeStore.Pending() + changeList = append(changeList, n.changeStore.Committed()...) + default: + var err error + if len(cuid) == 0 { + return nil, &customerrs.InvalidParametersError{ + Func: n.fillChanges, + Param: "length of 'mneID' cannot be '0' when 'all' is set to 'false'", + } + } + changeList, err = stringArrayToUUIDs(cuid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + } + + changes := make([]*mnepb.Change, len(changeList)) + for i, ch := range changeList { + c, err := n.changeStore.GetChange(ch) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + // Diff could be added here. + changes[i] = &mnepb.Change{ + Id: ch.String(), + Age: c.Age().Microseconds(), + State: c.State(), + } + } + return changes, nil +} + +func stringArrayToUUIDs(sid []string) ([]uuid.UUID, error) { + UUIDs := make([]uuid.UUID, len(sid)) + for i, id := range sid { + parsed, err := uuid.Parse(id) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + UUIDs[i] = parsed + } + return UUIDs, nil +} + +// SetMneList adds the list of mnes. +func (n *NetworkElementServer) SetMneList(ctx context.Context, request *mnepb.SetMneListRequest) (*mnepb.SetMneListResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "set"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + pndID, err := uuid.Parse(request.Pid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + networkElementIDs := make([]uuid.UUID, 0, len(request.Mne)) + for _, r := range request.Mne { + pluginId, err := uuid.Parse(r.GetPluginId()) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + mneID, err := n.addMne(ctx, r.MneName, r.TransportOption, nil, pluginId, pndID) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + networkElementIDs = append(networkElementIDs, mneID) + } + + r := make([]*mnepb.SetResponse, len(networkElementIDs)) + for i, mneID := range networkElementIDs { + r[i] = &mnepb.SetResponse{Id: mneID.String(), Status: mnepb.Status_STATUS_OK} + } + + return &mnepb.SetMneListResponse{ + Timestamp: time.Now().UnixNano(), + Status: mnepb.Status_STATUS_OK, + Responses: r, + }, nil +} + +func (n *NetworkElementServer) addMne(ctx context.Context, name string, opt *tpb.TransportOption, requestPluginFunc func(uuid.UUID) (plugin.Plugin, error), pluginID uuid.UUID, pndID uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error) { + var err error + + // Note: cSBI not supported currently, so this is commented fow now. + // Might be needed or removed in the future. + // + // switch t := opt.Type; t { + // case spb.Type_TYPE_CONTAINERISED: + // return n.handleCsbiEnrolment(name, opt) + // case spb.Type_TYPE_PLUGIN: + // sbi, err = n.requestPlugin(name, opt) + // if err != nil { + // return uuid.Nil, err + // } + // default: + // var err error + // sbi, err = pnd.southboundService.Get(store.Query{ID: sid}) + // if err != nil { + // return uuid.Nil, err + // } + // } + + networkElementID := uuid.Nil + if len(optionalNetworkElementID) > 0 { + networkElementID = optionalNetworkElementID[0] + } + + if requestPluginFunc == nil { + requestPluginFunc = n.pluginService.RequestPlugin + } + + plugin, err := requestPluginFunc(pluginID) + if err != nil { + return uuid.Nil, err + } + + mne, err := nucleus.NewNetworkElement(name, networkElementID, opt, pndID, plugin, conflict.Metadata{ResourceVersion: 0}) + if err != nil { + return uuid.Nil, err + } + + err = n.mneService.Add(mne) + if err != nil { + return uuid.Nil, err + } + + if mne.IsTransportValid() { + _, err = n.getPath(ctx, mne.ID(), "/") + if err != nil { + return uuid.Nil, err + } + } + + return mne.ID(), nil +} + +// SetChangeList sets a list of changes. +func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "set"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + responses := make([]*mnepb.SetResponse, len(request.Change)) + + for i, r := range request.Change { + cuid, err := uuid.Parse(r.Cuid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + switch r.Op { + case mnepb.Operation_OPERATION_COMMIT: + if err := n.Commit(cuid); err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + case mnepb.Operation_OPERATION_CONFIRM: + if err := n.Confirm(cuid); err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + default: + return nil, &customerrs.InvalidParametersError{ + Param: r.Op, + } + } + + responses[i] = &mnepb.SetResponse{ + Id: cuid.String(), + Status: mnepb.Status_STATUS_OK, + } + } + return &mnepb.SetChangeListResponse{ + Timestamp: time.Now().UnixNano(), + Status: mnepb.Status_STATUS_OK, + Responses: responses, + }, nil +} + +// Commit calls commit on the pending change with ID. +func (n *NetworkElementServer) Commit(u uuid.UUID) error { + ch, err := n.changeStore.GetChange(u) + if err != nil { + return err + } + + if err := ch.Commit(); err != nil { + return err + } + + // Set all the changes within the network elements model + networkElement, err := n.mneService.Get(store.Query{ID: ch.AssociatedDeviceID()}) + if err != nil { + return err + } + diff, err := networkElement.GetPlugin().Diff(ch.PreviousState(), ch.IntendedState()) + if err != nil { + return err + } + for _, update := range diff.GetUpdate() { + if err := networkElement.GetPlugin().SetNode(update.GetPath(), update.GetVal()); err != nil { + return err + } + } + for _, deletePath := range diff.GetDelete() { + if err := networkElement.GetPlugin().DeleteNode(deletePath); err != nil { + return err + } + } + + // update the network element + return n.mneService.Update(networkElement) +} + +// Confirm calls confirm on pending the pending change with ID. +func (n *NetworkElementServer) Confirm(u uuid.UUID) error { + ch, err := n.changeStore.GetChange(u) + if err != nil { + return err + } + return ch.Confirm() +} + +// SetPathList sets a list of paths. +func (n *NetworkElementServer) SetPathList(ctx context.Context, request *mnepb.SetPathListRequest) (*mnepb.SetPathListResponse, error) { + labels := prometheus.Labels{"service": "mne", "rpc": "set"} + start := metrics.StartHook(labels, grpcRequestsTotal) + defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) + + responses := make([]*mnepb.SetResponse, len(request.ChangeRequest)) + + for i, r := range request.ChangeRequest { + mneID, err := uuid.Parse(r.Mneid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + cid, err := n.ChangeMNE(mneID, r.ApiOp, r.Path, r.Value) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + responses[i] = &mnepb.SetResponse{ + Status: mnepb.Status_STATUS_OK, + Id: cid.String(), + } + } + return &mnepb.SetPathListResponse{ + Timestamp: time.Now().UnixNano(), + Status: mnepb.Status_STATUS_OK, + Responses: responses, + }, nil +} + +// ChangeMNE creates a change from the provided Operation, path and value. +// The Change is Pending and times out after the specified timeout period. +func (n *NetworkElementServer) ChangeMNE(duid uuid.UUID, operation mnepb.ApiOperation, path string, value ...string) (uuid.UUID, error) { + mne, err := n.mneService.Get(store.Query{ + ID: duid, + }) + if err != nil { + return uuid.Nil, err + } + + p, err := ygot.StringToStructuredPath(path) + if err != nil { + return uuid.Nil, err + } + + plugin := mne.GetPlugin() + + validatedChangeModel, err := plugin.ValidateChange(operation, p, []byte(value[0])) + if err != nil { + return uuid.Nil, err + } + + filteredMarshaledModel, err := plugin.PruneConfigFalse(validatedChangeModel) + if err != nil { + return uuid.Nil, err + } + + if operation != mnepb.ApiOperation_API_OPERATION_DELETE && len(value) != 1 { + return uuid.Nil, &customerrs.InvalidParametersError{ + Func: n.ChangeMNE, + Param: value, + } + } + + callback := func(original, modified []byte) error { + ctx := context.WithValue(context.Background(), types.CtxKeyOperation, operation) // nolint + payload := change.Payload{Original: original, Modified: modified} + pathToSet := path + if err := mne.Transport().Set(ctx, payload, pathToSet, plugin); err != nil { + return err + } + return n.mneService.Update(mne) + } + + currentModel, err := mne.GetModelAsFilteredCopy() + if err != nil { + return uuid.Nil, err + } + + ch := nucleus.NewChange(duid, currentModel, filteredMarshaledModel, callback) + + if err := n.changeStore.Add(ch); err != nil { + return uuid.Nil, err + } + + return ch.ID(), nil +} + +// DeleteMne deletes a mne. +func (n *NetworkElementServer) DeleteMne(ctx context.Context, request *mnepb.DeleteMneRequest) (*mnepb.DeleteMneResponse, error) { + mneID, err := uuid.Parse(request.Mneid) + if err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + + if err := n.deleteMne(mneID); err != nil { + log.Error(err) + return nil, status.Errorf(codes.Aborted, "%v", err) + } + return &mnepb.DeleteMneResponse{ + Timestamp: time.Now().UnixNano(), + Status: mnepb.Status_STATUS_OK, + }, nil +} + +func (n *NetworkElementServer) deleteMne(id uuid.UUID) error { + mne, err := n.mneService.Get(store.Query{ + ID: id, + Name: id.String(), + }) + + if err != nil { + return err + } + + // Note: cSBI not supported currently, so this is commented fow now. + // Might be needed or removed in the future. + // + // switch mne.(type) { + // case *CsbiNetworkElement: + // return pnd.handleCsbiDeletion(mne) + // default: + // return pnd.networkElementService.Delete(mne) + // } + + return n.mneService.Delete(mne) +} + +// SubscribePath subscribes to specifc paths of an mne. +func (n *NetworkElementServer) SubscribePath(request *mnepb.SubscribePathRequest, stream mnepb.NetworkElementService_SubscribePathServer) error { + mneID, err := uuid.Parse(request.Mneid) + if err != nil { + return err + } + + if err := n.subscribePath(mneID, request.Sublist); err != nil { + return err + } + + return nil +} + +func (n *NetworkElementServer) subscribePath(uuid uuid.UUID, subList *mnepb.SubscriptionList) error { + mne, err := n.mneService.Get(store.Query{ + ID: uuid, + }) + if err != nil { + return err + } + + mode, err := n.mapModeToAristaFork(subList.GetMode()) + if err != nil { + return err + } + + for _, sub := range subList.Subscription { + streamMode, err := n.mapStreamModeToAristaFork(sub.GetStreamMode()) + if err != nil { + return err + } + + opts := &aGNMI.SubscribeOptions{ + Mode: mode, + StreamMode: streamMode, + Paths: [][]string{n.splitStringPath(sub.GetPath())}, + SampleInterval: sub.SampleInterval, + } + + ctx := context.Background() + ctx = context.WithValue(ctx, types.CtxKeyOpts, opts) + + if err = mne.Transport().Subscribe(ctx); err != nil { + return err + } + } + + return nil +} + +func (n *NetworkElementServer) splitStringPath(s string) []string { + return strings.Split(s, "/") +} + +func (n *NetworkElementServer) mapStreamModeToAristaFork(mode mnepb.StreamMode) (string, error) { + switch mode { + case mnepb.StreamMode_STREAM_MODE_TARGET_DEFINED: + return "target_defined", nil + case mnepb.StreamMode_STREAM_MODE_ON_CHANGE: + return "on_change", nil + case mnepb.StreamMode_STREAM_MODE_SAMPLE: + return "sample", nil + default: + return "", fmt.Errorf("StreamMode of type: %T is not supported", mode) + } +} + +func (n *NetworkElementServer) mapModeToAristaFork(mode mnepb.SubscriptionMode) (string, error) { + switch mode { + case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM: + return "stream", nil + case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_ONCE: + return "once", nil + case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_POLL: + return "poll", nil + default: + return "", fmt.Errorf("SubscriptionMode of type: %T is not supported", mode) + } +} diff --git a/controller/northbound/server/networkElement_test.go b/controller/northbound/server/networkElement_test.go new file mode 100644 index 0000000000000000000000000000000000000000..85b531ccf58ed77894067362939e3a3f004e8156 --- /dev/null +++ b/controller/northbound/server/networkElement_test.go @@ -0,0 +1,473 @@ +package server + +// import ( +// "context" +// "errors" +// "reflect" +// "testing" + +// cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict" +// mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" +// spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" +// tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" +// "code.fbi.h-da.de/danet/gosdn/controller/conflict" +// "code.fbi.h-da.de/danet/gosdn/controller/nucleus" +// "code.fbi.h-da.de/danet/gosdn/controller/store" +// "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" +// "github.com/google/uuid" +// ) + +// func TestNetworkElementServer_AddNetworkElement(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// name string +// opts *tpb.TransportOption +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// { +// name: "default", +// args: args{ +// name: "fridolin", +// opts: &tpb.TransportOption{ +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// }, +// }, +// wantErr: false, +// }, +// } +// for _, tt := range tests { +// tt := tt + +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() + +// sbi := &nucleus.OpenConfig{} +// sbi.SetID(sbiUUID) +// if err := mneServer.sbiService.Add(sbi); err != nil { +// t.Error(err) +// } + +// _, err := mneServer.addNetworkElement(context.TODO(), tt.args.name, tt.args.opts, sbiUUID, pndUUID) +// if (err != nil) != tt.wantErr { +// t.Errorf("AddNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } + +// if tt.name != "fails wrong type" { +// if err == nil { +// mne, err := mneServer.mneService.Get(store.Query{Name: tt.args.name}) +// if err != nil { +// t.Errorf("AddNetworkElement() error = %v", err) +// return +// } +// if mne.Name() != tt.args.name { +// t.Errorf("AddNetworkElement() got = %v, want %v", mne.Name(), tt.args.name) +// } +// if err := mneServer.mneService.Delete(mne); err != nil { +// t.Error(err) +// } +// } +// } +// }) + +// cleanMneAndSbiTestStore(mneServer) +// } +// } + +// func TestNetworkElementServer_RemoveNetworkElement(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// uuid uuid.UUID +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// {name: "default", args: args{uuid: uuid.MustParse(mneID)}, wantErr: false}, +// {name: "fails", args: args{uuid: uuid.New()}, wantErr: true}, +// } + +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, uuid.MustParse(sbiID)) +// if err != nil { +// t.Error("could not create sbi") +// } + +// err = mneServer.sbiService.Add(sbi) +// if err != nil { +// t.Error("could not add sbi") +// } +// mne := &nucleus.CommonNetworkElement{ +// UUID: mneUUID, +// Model: &openconfig.Device{}, +// } +// mne.SetSBI(sbi) +// mne.SetTransport(nil) + +// err = mneServer.mneService.Add(mne) +// if err != nil { +// t.Error(err) +// } + +// if err := mneServer.deleteMne(tt.args.uuid); (err != nil) != tt.wantErr { +// t.Errorf("RemoveNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } +// }) + +// cleanMneAndSbiTestStore(mneServer) +// } +// } + +// // Somehow, provided mock transport does not get used? +// func TestNetworkElementServer_getPath(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// uuid uuid.UUID +// path string +// rErr error +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// { +// name: "default", +// args: args{ +// uuid: mneUUID, +// path: "", +// rErr: nil, +// }, +// wantErr: false, +// }, +// { +// name: "error", +// args: args{ +// uuid: uuid.New(), +// path: "", +// rErr: errors.New("deliberate test fail"), +// }, +// wantErr: true, +// }, +// } + +// for _, tt := range tests { +// tt := tt + +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() + +// // sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG) +// // if err != nil { +// // t.Error("could not create sbi") +// // } + +// // err = mneServer.sbiService.Add(sbi) +// // if err != nil { +// // t.Error("could not add sbi") +// // } + +// // transport := mocks.Transport{} +// // transport.On("Get", context.TODO(), mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) +// // transport.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) + +// // networkElementWithMockTransport := &nucleus.CommonNetworkElement{ +// // UUID: mneUUID, +// // Model: &openconfig.Device{}, +// // } + +// // networkElementWithMockTransport.SetSBI(sbi) +// // networkElementWithMockTransport.SetTransport(&transport) + +// // _ = mneServer.mneService.Add(networkElementWithMockTransport) + +// // _, err = mneServer.getPath(context.TODO(), tt.args.uuid, tt.args.path) +// // if (err != nil) != tt.wantErr { +// // t.Errorf("getPath() error = %v, wantErr %v", err, tt.wantErr) +// // } +// }) + +// cleanMneAndSbiTestStore(mneServer) +// } +// } + +// func TestNetworkElementServer_GetAll(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// ctx context.Context +// request *mnepb.GetAllNetworkElementRequest +// } +// tests := []struct { +// name string +// args args +// want *mnepb.GetAllNetworkElementResponse +// wantErr bool +// }{ +// { +// name: "default", +// args: args{ +// ctx: context.TODO(), +// request: &mnepb.GetAllNetworkElementRequest{}, +// }, +// want: &mnepb.GetAllNetworkElementResponse{ +// Status: mnepb.Status_STATUS_OK, +// NetworkElement: []*mnepb.ManagedNetworkElement{ +// { +// Id: mneID, +// Name: "test", +// }, +// }, +// }, +// wantErr: false, +// }, +// } +// for _, tt := range tests { +// tt := tt + +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() + +// sbi, _ := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG) +// _ = mneServer.sbiService.Add(sbi) + +// testMne := &nucleus.CommonNetworkElement{ +// UUID: mneUUID, +// Model: &openconfig.Device{}, +// } + +// testMne.SetName("test") +// testMne.SetSBI(sbi) +// testMne.SetPnd(uuid.New()) + +// _ = mneServer.mneService.Add(testMne) + +// got, err := mneServer.GetAll(tt.args.ctx, tt.args.request) +// if (err != nil) != tt.wantErr { +// t.Errorf("NetworkElementServer.GetAll() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if !(got.NetworkElement[0].Id == testMne.UUID.String() && got.NetworkElement[0].Name == testMne.Name()) { +// t.Errorf("NetworkElementServer.GetAll() = %v, want %v", got, tt.want) +// } +// }) + +// cleanMneAndSbiTestStore(mneServer) +// } +// } + +// func TestNetworkElementServer_Get(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// ctx context.Context +// request *mnepb.GetNetworkElementRequest +// } +// tests := []struct { +// name string +// args args +// want *mnepb.GetNetworkElementResponse +// wantErr bool +// }{ +// { +// name: "default get by id", +// args: args{ +// ctx: context.TODO(), +// request: &mnepb.GetNetworkElementRequest{ +// NetworkElementId: mneID, +// }, +// }, +// want: &mnepb.GetNetworkElementResponse{ +// Status: mnepb.Status_STATUS_OK, +// NetworkElement: &mnepb.ManagedNetworkElement{ +// Id: mneID, +// Name: "test", +// }, +// }, +// wantErr: false, +// }, +// // { +// // name: "error wrong id", +// // args: args{ +// // ctx: context.TODO(), +// // request: &mnepb.GetNetworkElementRequest{ +// // NetworkElementId: uuid.NewString(), +// // }, +// // }, +// // want: &mnepb.GetNetworkElementResponse{ +// // Status: mnepb.Status_STATUS_ERROR, +// // NetworkElement: &mnepb.ManagedNetworkElement{}, +// // }, +// // wantErr: true, +// // }, +// } +// for _, tt := range tests { +// tt := tt + +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() + +// sbi, _ := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, uuid.MustParse(sbiID)) +// _ = mneServer.sbiService.Add(sbi) + +// testMne := &nucleus.CommonNetworkElement{ +// UUID: mneUUID, +// Model: &openconfig.Device{}, +// } + +// testMne.SetName("test") +// testMne.SetSBI(sbi) +// testMne.SetPnd(uuid.New()) + +// _ = mneServer.mneService.Add(testMne) + +// got, err := mneServer.Get(tt.args.ctx, tt.args.request) +// if !tt.wantErr { +// if !(got.NetworkElement.Id == testMne.ID().String() && got.NetworkElement.Name == testMne.Name()) { +// t.Errorf("NetworkElementServer.Get() = %v, want %v", got, tt.want) +// } +// } else if (err != nil) != tt.wantErr { +// t.Errorf("NetworkElementServer.Get() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// }) + +// cleanMneAndSbiTestStore(mneServer) +// } +// } + +// func TestNetworkElementServer_Update(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// ctx context.Context +// request *mnepb.UpdateNetworkElementRequest +// } +// tests := []struct { +// name string +// args args +// want *mnepb.UpdateNetworkElementResponse +// wantErr bool +// }{ +// { +// name: "stored mne name change", +// args: args{ +// ctx: context.TODO(), +// request: &mnepb.UpdateNetworkElementRequest{ +// NetworkElement: &mnepb.ManagedNetworkElement{ +// Id: mneID, +// Name: "not test anymore", +// Model: "model", +// Sbi: &spb.SouthboundInterface{Id: sbiID}, +// Metadata: &cpb.Metadata{ResourceVersion: 1}, +// AssociatedPnd: pndUUID.String(), +// TransportOption: &tpb.TransportOption{ +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// }, +// TransportAddress: "127.0.0.1", +// }, +// }, +// }, +// want: &mnepb.UpdateNetworkElementResponse{ +// Status: mnepb.Status_STATUS_OK, +// }, +// wantErr: false, +// }, +// } +// for _, tt := range tests { +// tt := tt + +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() + +// sbi, _ := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, uuid.MustParse(sbiID)) +// _ = mneServer.sbiService.Add(sbi) + +// testMne := &nucleus.CommonNetworkElement{ +// UUID: mneUUID, +// Model: &openconfig.Device{}, +// Metadata: conflict.Metadata{ResourceVersion: 0}, +// } + +// testMne.SetName("test") +// testMne.SetSBI(sbi) +// testMne.SetPnd(pndUUID) + +// _ = mneServer.mneService.Add(testMne) + +// got, err := mneServer.Update(tt.args.ctx, tt.args.request) +// if (err != nil) != tt.wantErr { +// t.Errorf("NetworkElementServer.Update() error = %v, wantErr %v", err, tt.wantErr) +// return +// } + +// changedMne, err := mneServer.mneService.Get(store.Query{ID: mneUUID}) +// if err != nil { +// t.Errorf("NetworkElementServer.Update() error = %v", err) +// } + +// if got.Status == tt.want.Status { +// if !(changedMne.Name() == tt.args.request.NetworkElement.Name) { +// t.Errorf("NetworkElementServer.Update() = %v, want %v", changedMne.Name(), tt.args.request.NetworkElement.Name) +// } +// } +// }) + +// cleanMneAndSbiTestStore(mneServer) +// } +// } + +// func TestNetworkElementServer_GetChangeList(t *testing.T) { +// mneServer := &NetworkElementServer{} +// createTestNetworkElementServer(t, mneServer) +// t.Cleanup(removeTestStores) + +// type args struct { +// ctx context.Context +// request *mnepb.GetChangeListRequest +// } +// tests := []struct { +// name string +// args args +// want *mnepb.GetChangeListResponse +// wantErr bool +// }{ +// // TODO: Add test cases. +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// got, err := mneServer.GetChangeList(tt.args.ctx, tt.args.request) +// if (err != nil) != tt.wantErr { +// t.Errorf("NetworkElementServer.GetChangeList() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if !reflect.DeepEqual(got, tt.want) { +// t.Errorf("NetworkElementServer.GetChangeList() = %v, want %v", got, tt.want) +// } +// }) +// } +// } diff --git a/controller/northbound/server/plugin.go b/controller/northbound/server/plugin.go index 215a531a4fa1dfdbf93b09a8b096c757a25b99e2..b31f9560009c6108f0f62ae4fffcdc318facd26d 100644 --- a/controller/northbound/server/plugin.go +++ b/controller/northbound/server/plugin.go @@ -11,6 +11,7 @@ import ( rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" "code.fbi.h-da.de/danet/gosdn/controller/metrics" + "code.fbi.h-da.de/danet/gosdn/controller/plugin/shared" "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" "github.com/prometheus/client_golang/prometheus" @@ -46,7 +47,7 @@ func (pis *PluginInternalServer) GetPluginSchema(request *pipb.GetPluginSchemaRe start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - buffer := make([]byte, int(MB)) + buffer := make([]byte, int(shared.MB)) plugin, err := pis.pluginService.Get(store.Query{ID: uuid.MustParse(request.GetPid())}) if err != nil { return handleRPCError(labels, err) diff --git a/controller/northbound/server/pnd.go b/controller/northbound/server/pnd.go index 0f8292c840b15748a3aba28b3ba236a956e68980..8c1cb3460a98e925bffa45218ea1570f16a9939e 100644 --- a/controller/northbound/server/pnd.go +++ b/controller/northbound/server/pnd.go @@ -1,569 +1,19 @@ package server import ( - "context" - "strings" - "time" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" - "code.fbi.h-da.de/danet/gosdn/controller/metrics" - "code.fbi.h-da.de/danet/gosdn/controller/store" - "github.com/google/uuid" - "github.com/openconfig/gnmi/proto/gnmi" - "github.com/openconfig/ygot/ygot" - "github.com/prometheus/client_golang/prometheus" - log "github.com/sirupsen/logrus" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -type byteSize float64 - -// constants representing human friendly data sizes as per https://www.socketloop.com/tutorials/golang-how-to-declare-kilobyte-megabyte-gigabyte-terabyte-and-so-on -const ( - _ = iota // ignore first value by assigning to blank identifier - KB byteSize = 1 << (10 * iota) - MB ) // PndServer implements a pnd server. type PndServer struct { ppb.UnimplementedPndServiceServer - pndStore networkdomain.PndStore + pndService networkdomain.Service } // NewPndServer receives a pndStore and returns a new pndServer. -func NewPndServer(pndStore networkdomain.PndStore) *PndServer { +func NewPndServer(pndService networkdomain.Service) *PndServer { return &PndServer{ - pndStore: pndStore, - } -} - -// GetMne gets a specific mne. -func (p PndServer) GetMne(ctx context.Context, request *ppb.GetMneRequest) (*ppb.GetMneResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - networkElement, err := pnd.GetNetworkElement(request.Mneid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - // TODO(path): This needs some adjustments when we're switching towards a new - // path request handling. - mne, err := fillMneBySpecificPath(networkElement, "/") - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - return &ppb.GetMneResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - Mne: mne, - }, nil -} - -// GetFlattenedMne gets a specific mne. -func (p PndServer) GetFlattenedMne(ctx context.Context, request *ppb.GetMneRequest) (*ppb.GetFlattenedMneResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - networkElement, err := pnd.GetNetworkElement(request.Mneid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - return &ppb.GetFlattenedMneResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - Mne: &ppb.FlattenedManagedNetworkElement{ - Id: networkElement.ID().String(), - Name: networkElement.Name(), - Pid: pnd.ID().String(), - Pluginid: networkElement.GetPlugin().ID().String(), - }, - }, nil -} - -// GetMneList returns a list of existing mnes. -func (p PndServer) GetMneList(ctx context.Context, request *ppb.GetMneListRequest) (*ppb.GetMneListResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - mnes := make([]*ppb.ManagedNetworkElement, len(pnd.NetworkElements())) - for i, networkElement := range pnd.NetworkElements() { - mne, err := fillMneBySpecificPath(networkElement, "/") - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - mnes[i] = mne - } - - return &ppb.GetMneListResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - Mne: mnes, - }, nil -} - -// GetFlattenedMneList returns a list of existing mnes. -func (p PndServer) GetFlattenedMneList(ctx context.Context, request *ppb.GetMneListRequest) (*ppb.GetFlattenedMneListResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - mnes := pnd.FlattenedNetworkElements() - flattenedMnes := make([]*ppb.FlattenedManagedNetworkElement, len(mnes)) - for i, mne := range mnes { - mne := &ppb.FlattenedManagedNetworkElement{ - - Id: mne.ID, - Name: mne.Name, - Pid: request.GetPid(), - Pluginid: mne.Plugin, - } - flattenedMnes[i] = mne - } - - return &ppb.GetFlattenedMneListResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - Mne: flattenedMnes, - }, nil -} - -func fillMneBySpecificPath(nme networkelement.NetworkElement, path string) (*ppb.ManagedNetworkElement, error) { - gnmiPath, err := ygot.StringToStructuredPath(path) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - notifications, err := nme.GetPlugin().GetNode(gnmiPath) - if err != nil { - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - mne := &ppb.ManagedNetworkElement{ - Id: nme.ID().String(), - Name: nme.Name(), - MneNotification: notifications, - } - - return mne, nil -} - -func stringArrayToUUIDs(sid []string) ([]uuid.UUID, error) { - UUIDs := make([]uuid.UUID, len(sid)) - for i, id := range sid { - parsed, err := uuid.Parse(id) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - UUIDs[i] = parsed - } - return UUIDs, nil -} - -// GetPath gets a path on a mne. -func (p PndServer) GetPath(ctx context.Context, request *ppb.GetPathRequest) (*ppb.GetPathResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - mneuid, err := uuid.Parse(request.Mneid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - // In case we get the path from grpc-gateway we have to replace - path := strings.ReplaceAll(request.Path, "||", "/") - - resp, err := pnd.Request(mneuid, path) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - return &ppb.GetPathResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - MneNotification: resp.(*gnmi.GetResponse).Notification, - }, nil -} - -// GetChange gets a specific change of a mne. -func (p PndServer) GetChange(ctx context.Context, request *ppb.GetChangeRequest) (*ppb.GetChangeResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - changes, err := fillChanges(pnd, false, request.Cuid...) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - return &ppb.GetChangeResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - Change: changes, - }, nil -} - -// GetChangeList gets all existing changes. -func (p PndServer) GetChangeList(ctx context.Context, request *ppb.GetChangeListRequest) (*ppb.GetChangeListResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "get"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - changes, err := fillChanges(pnd, true, "") - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - return &ppb.GetChangeListResponse{ - Timestamp: time.Now().UnixNano(), - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pnd.ID().String(), - Name: pnd.GetName(), - Description: pnd.GetDescription(), - }, - Change: changes, - }, nil -} - -func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*ppb.Change, error) { - var changeList []uuid.UUID - - switch all { - case true: - changeList = pnd.PendingChanges() - changeList = append(changeList, pnd.CommittedChanges()...) - default: - var err error - if len(cuid) == 0 { - return nil, &customerrs.InvalidParametersError{ - Func: fillChanges, - Param: "length of 'mneID' cannot be '0' when 'all' is set to 'false'", - } - } - changeList, err = stringArrayToUUIDs(cuid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - } - - changes := make([]*ppb.Change, len(changeList)) - for i, ch := range changeList { - c, err := pnd.GetChange(ch) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - //diff, err := ygot.Diff(c.PreviousState(), c.IntendedState()) - //if err != nil { - // log.Error(err) - // return nil, status.Errorf(codes.Aborted, "%v", err) - //} - - changes[i] = &ppb.Change{ - Id: ch.String(), - Age: c.Age().Microseconds(), - State: c.State(), - } - } - return changes, nil -} - -// SetMneList updates the list of mnes. -func (p PndServer) SetMneList(ctx context.Context, request *ppb.SetMneListRequest) (*ppb.SetMneListResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "set"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - return nil, handleRPCError(labels, err) - } - - networkElementIDs := make([]uuid.UUID, 0, len(request.Mne)) - for _, r := range request.Mne { - pluginID, err := uuid.Parse(r.GetPluginId()) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - mneID, err := pnd.AddNetworkElement(r.MneName, r.TransportOption, nil, pluginID) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - networkElementIDs = append(networkElementIDs, mneID) - } - - r := make([]*ppb.SetResponse, len(networkElementIDs)) - for i, mneID := range networkElementIDs { - r[i] = &ppb.SetResponse{Id: mneID.String(), Status: ppb.Status_STATUS_OK} - } - - return &ppb.SetMneListResponse{ - Timestamp: time.Now().UnixNano(), - Status: ppb.Status_STATUS_OK, - Responses: r, - }, nil -} - -// SetChangeList sets a list of changes. -func (p PndServer) SetChangeList(ctx context.Context, request *ppb.SetChangeListRequest) (*ppb.SetChangeListResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "set"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) + pndService: pndService, } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - return nil, handleRPCError(labels, err) - } - - responses := make([]*ppb.SetResponse, len(request.Change)) - - for i, r := range request.Change { - cuid, err := uuid.Parse(r.Cuid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - switch r.Op { - case ppb.Operation_OPERATION_COMMIT: - if err := pnd.Commit(cuid); err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - case ppb.Operation_OPERATION_CONFIRM: - if err := pnd.Confirm(cuid); err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - default: - return nil, &customerrs.InvalidParametersError{ - Param: r.Op, - } - } - - responses[i] = &ppb.SetResponse{ - Id: cuid.String(), - Status: ppb.Status_STATUS_OK, - } - } - return &ppb.SetChangeListResponse{ - Timestamp: time.Now().UnixNano(), - Status: ppb.Status_STATUS_OK, - Responses: responses, - }, nil -} - -// SetPathList sets a list of paths. -func (p PndServer) SetPathList(ctx context.Context, request *ppb.SetPathListRequest) (*ppb.SetPathListResponse, error) { - labels := prometheus.Labels{"service": "pnd", "rpc": "set"} - start := metrics.StartHook(labels, grpcRequestsTotal) - defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) - pid, err := uuid.Parse(request.Pid) - if err != nil { - return nil, handleRPCError(labels, err) - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - return nil, handleRPCError(labels, err) - } - - responses := make([]*ppb.SetResponse, len(request.ChangeRequest)) - - for i, r := range request.ChangeRequest { - mneID, err := uuid.Parse(r.Mneid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - cid, err := pnd.ChangeMNE(mneID, r.ApiOp, r.Path, r.Value) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - responses[i] = &ppb.SetResponse{ - Status: ppb.Status_STATUS_OK, - Id: cid.String(), - } - } - return &ppb.SetPathListResponse{ - Timestamp: time.Now().UnixNano(), - Status: ppb.Status_STATUS_OK, - Responses: responses, - }, nil -} - -// DeleteMne deletes a mne. -func (p PndServer) DeleteMne(ctx context.Context, request *ppb.DeleteMneRequest) (*ppb.DeleteMneResponse, error) { - pid, err := uuid.Parse(request.Pid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - - mneID, err := uuid.Parse(request.Mneid) - if err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - if err := pnd.RemoveNetworkElement(mneID); err != nil { - log.Error(err) - return nil, status.Errorf(codes.Aborted, "%v", err) - } - return &ppb.DeleteMneResponse{ - Timestamp: time.Now().UnixNano(), - Status: ppb.Status_STATUS_OK, - }, nil -} - -// SubscribePath subscribes to specifc paths of an mne. -func (p PndServer) SubscribePath(request *ppb.SubscribePathRequest, stream ppb.PndService_SubscribePathServer) error { - pid, err := uuid.Parse(request.Pid) - if err != nil { - return err - } - - pnd, err := p.pndStore.Get(store.Query{ID: pid}) - if err != nil { - return err - } - - mneID, err := uuid.Parse(request.Mneid) - if err != nil { - return err - } - - if err := pnd.SubscribePath(mneID, request.Sublist); err != nil { - return err - } - - return nil } diff --git a/controller/northbound/server/pnd_test.go b/controller/northbound/server/pnd_test.go index 92e73b74994461808a76914dac3e0d6a534ca052..ad745861c33f75121472357b70d6212594f3ebf3 100644 --- a/controller/northbound/server/pnd_test.go +++ b/controller/northbound/server/pnd_test.go @@ -1,337 +1,344 @@ package server -//import ( -// "context" -// "testing" -// "time" -// -// ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" -// spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" -// "code.fbi.h-da.de/danet/gosdn/controller/mocks" -// "code.fbi.h-da.de/danet/gosdn/controller/nucleus" -// "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" -// "github.com/google/uuid" -// "github.com/openconfig/gnmi/proto/gnmi" -// "github.com/stretchr/testify/mock" -//) -// -//func getTestPndServer(t *testing.T) *PndServer { -// var err error -// pndUUID, err = uuid.Parse(pndID) -// if err != nil { -// t.Fatal(err) -// } -// -// sbiUUID, err = uuid.Parse(sbiID) -// if err != nil { -// t.Fatal(err) -// } -// -// pendingChangeUUID, err = uuid.Parse(pendingChangeID) -// if err != nil { -// t.Fatal(err) -// } -// -// committedChangeUUID, err = uuid.Parse(committedChangeID) -// if err != nil { -// t.Fatal(err) -// } -// -// mneUUID, err = uuid.Parse(mneID) -// if err != nil { -// t.Fatal(err) -// } -// -// mockNetworkElement = &nucleus.CommonNetworkElement{ -// Plugin: &openconfig.Device{ -// System: &openconfig.OpenconfigSystem_System{ -// Config: &openconfig.OpenconfigSystem_System_Config{ -// Hostname: &hostname, -// DomainName: &domainname, -// }, -// }, -// }, -// UUID: mneUUID, -// } -// -// sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, sbiUUID) -// if err != nil { -// t.Fatal(err) -// } -// mockNetworkElement.(*nucleus.CommonNetworkElement).SetTransport(&mocks.Transport{}) -// mockNetworkElement.(*nucleus.CommonNetworkElement).SetName(hostname) -// sbiStore = nucleus.NewPluginStore(pndUUID) -// if err := sbiStore.Add(mockNetworkElement.SBI()); err != nil { -// t.Fatal(err) -// } -// -// mockChange := &mocks.Change{} -// mockChange.On("Age").Return(time.Hour) -// mockChange.On("State").Return(ppb.ChangeState_CHANGE_STATE_INCONSISTENT) -// -// mockPnd = &mocks.NetworkDomain{} -// mockPnd.On("ID").Return(pndUUID) -// mockPnd.On("GetName").Return("test") -// mockPnd.On("GetDescription").Return("test") -// mockPnd.On("GetSBIs").Return(sbiStore) -// mockPnd.On("GetSBI", mock.Anything).Return(mockNetworkElement.SBI(), nil) -// mockPnd.On("NetworkElements").Return([]uuid.UUID{mneUUID}) -// mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID}) -// mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID}) -// mockPnd.On("GetChange", mock.Anything).Return(mockChange, nil) -// mockPnd.On("AddNetworkElement", mock.Anything, mock.Anything, mock.Anything).Return(nil) -// mockPnd.On("GetNetworkElement", mock.Anything).Return(mockNetworkElement, nil) -// mockPnd.On("Commit", mock.Anything).Return(nil) -// mockPnd.On("Confirm", mock.Anything).Return(nil) -// mockPnd.On("ChangeMNE", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil) -// mockPnd.On("Request", mock.Anything, mock.Anything).Return(&gnmi.GetResponse{}, nil) -// -// pndStore := nucleus.NewMemoryPndStore() -// if err := pndStore.Add(mockPnd); err != nil { -// t.Fatal(err) -// } -// -// c := NewPndServer(pndStore) -// -// return c -//} -// -//// TODO: This test case does not make sense; needs to be adjusted. -//func Test_pnd_GetPath(t *testing.T) { -// initUUIDs(t) -// -// //opts := cmp.Options{ -// // cmpopts.SortSlices( -// // func(x, y *gnmi.Update) bool { -// // return x.GetVal().String() < y.GetVal().String() -// // }, -// // ), -// // cmp.Comparer(proto.Equal), -// //} -// -// type args struct { -// ctx context.Context -// request *ppb.GetPathRequest -// } -// tests := []struct { -// name string -// args args -// want []*gnmi.Notification -// wantErr bool -// }{ -// { -// name: "get path: system/config/hostname", -// args: args{ -// ctx: context.Background(), -// request: &ppb.GetPathRequest{ -// Timestamp: time.Now().UnixNano(), -// Mneid: mneUUID.String(), -// Path: "system/config/hostname", -// Pid: pndUUID.String(), -// }, -// }, -// want: []*gnmi.Notification{ -// { -// Update: []*gnmi.Update{ -// { -// Path: &gnmi.Path{ -// Elem: []*gnmi.PathElem{ -// { -// Name: "system", -// }, -// { -// Name: "config", -// }, -// { -// Name: "hostname", -// }, -// }, -// }, -// Val: &gnmi.TypedValue{ -// Value: &gnmi.TypedValue_StringVal{ -// StringVal: "manfred", -// }, -// }, -// }, -// }}, -// }, -// wantErr: false, -// }, -// { -// name: "get path: system", -// args: args{ -// ctx: context.Background(), -// request: &ppb.GetPathRequest{ -// Timestamp: time.Now().UnixNano(), -// Mneid: mneUUID.String(), -// Path: "system", -// Pid: pndUUID.String(), -// }, -// }, -// want: []*gnmi.Notification{ -// { -// Update: []*gnmi.Update{ -// { -// Path: &gnmi.Path{ -// Elem: []*gnmi.PathElem{ -// { -// Name: "system", -// }, -// }, -// }, -// Val: &gnmi.TypedValue{ -// Value: &gnmi.TypedValue_JsonIetfVal{ -// JsonIetfVal: []byte("{\n \"openconfig-system:config\": {\n \"domain-name\": \"uwe\",\n \"hostname\": \"manfred\"\n }\n}"), -// }, -// }, -// }, -// }}, -// }, -// wantErr: false, -// }, -// //{ -// // name: "get path: this/path/is/not/valid", -// // args: args{ -// // ctx: context.Background(), -// // request: &ppb.GetPathRequest{ -// // Timestamp: time.Now().UnixNano(), -// // Mneid: mneUUID.String(), -// // Path: "this/path/is/not/valid", -// // Pid: pndUUID.String(), -// // }, -// // }, -// // want: []*gnmi.Notification{}, -// // wantErr: true, -// //}, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// s := getTestPndServer(t) -// _, err := s.GetPath(tt.args.ctx, tt.args.request) -// if (err != nil) != tt.wantErr { -// t.Errorf("GetPath() error = %v, wantErr %v", err, tt.wantErr) -// return -// } -// -// //got := resp.GetMneNotification() -// -// //for i, n := range got { -// // if diff := cmp.Diff(n.GetUpdate(), tt.want[i].GetUpdate(), opts...); diff != "" { -// // t.Errorf("GetPath() diff in the received notification %d: \n%s", i+1, diff) -// // } -// //} -// }) -// } -//} -// -//func Test_pnd_Set(t *testing.T) { -// // type args struct { -// // ctx context.Context -// // request *ppb.SetRequest -// // } -// // tests := []struct { -// // name string -// // args args -// // want ppb.SetResponseStatus -// // wantErr bool -// // }{ -// // { -// // name: "set mne", -// // args: args{ -// // ctx: context.Background(), -// // request: &ppb.SetRequest{ -// // Mne: []*ppb.SetMne{ -// // { -// // Sbi: &spb.SouthboundInterface{ -// // Id: sbiID, -// // Type: spb.Type_TYPE_OPENCONFIG, -// // }, -// // DeviceName: hostname, -// // TransportOption: &transport.TransportOption{ -// // Address: "test", -// // Username: "test", -// // Password: "test", -// // TransportOption: &transport.TransportOption_GnmiTransportOption{ -// // GnmiTransportOption: &transport.GnmiTransportOption{}, -// // }, -// // }, -// // }, -// // }, -// // Pid: pndID, -// // }, -// // }, -// // want: ppb.SetResponse_OK, -// // }, -// // // { -// // // name: "set change", -// // // args: args{ -// // // ctx: context.Background(), -// // // request: &ppb.SetRequest{ -// // // Pid: pndID, -// // // Change: []*ppb.SetChange{ -// // // { -// // // Cuid: pendingChangeID, -// // // Op: ppb.SetChange_COMMIT, -// // // }, -// // // { -// // // Cuid: committedChangeID, -// // // Op: ppb.SetChange_CONFIRM, -// // // }, -// // // }, -// // // }, -// // // }, -// // // want: ppb.SetResponse_OK, -// // // }, -// // // { -// // // name: "change request", -// // // args: args{ -// // // ctx: context.Background(), -// // // request: &ppb.SetRequest{ -// // // Pid: pndID, -// // // ChangeRequest: []*ppb.ChangeRequest{ -// // // { -// // // Id: mneID, -// // // Path: "/system/config/hostname", -// // // Value: "herbert", -// // // ApiOp: ppb.ApiOperation_UPDATE, -// // // }, -// // // { -// // // Id: mneID, -// // // Path: "/system/config/hostname", -// // // Value: "fridolin", -// // // ApiOp: ppb.ApiOperation_REPLACE, -// // // }, -// // // { -// // // Id: mneID, -// // // Path: "/system/config/hostname", -// // // ApiOp: ppb.ApiOperation_DELETE, -// // // }, -// // // }, -// // // }, -// // // }, -// // // want: ppb.SetResponse_OK, -// // // }, -// // } -// // for _, tt := range tests { -// // t.Run(tt.name, func(t *testing.T) { -// // p := pndServer{ -// // UnimplementedPndServiceServer: ppb.UnimplementedPndServiceServer{}, -// // } -// // resp, err := p.Set(tt.args.ctx, tt.args.request) -// // if (err != nil) != tt.wantErr { -// // t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr) -// // return -// // } -// // got := resp.Status -// // if !reflect.DeepEqual(got, tt.want) { -// // t.Errorf("Set() got = %v, want %v", got, tt.want) -// // } -// // for _, r := range resp.Responses { -// // got = r.Status -// // if !reflect.DeepEqual(got, tt.want) { -// // t.Errorf("Set() got = %v, want %v", got, tt.want) -// // } -// // } -// // }) -// // } -//} +// import ( +// "context" +// "testing" +// "time" + +// mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" +// spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" +// eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" +// "code.fbi.h-da.de/danet/gosdn/controller/mocks" +// "code.fbi.h-da.de/danet/gosdn/controller/nucleus" +// "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" +// "github.com/google/uuid" +// "github.com/openconfig/gnmi/proto/gnmi" +// "github.com/stretchr/testify/mock" +// ) + +// func getTestPndServer(t *testing.T) *PndServer { +// var err error +// pndUUID, err = uuid.Parse(pndID) +// if err != nil { +// t.Fatal(err) +// } + +// sbiUUID, err = uuid.Parse(sbiID) +// if err != nil { +// t.Fatal(err) +// } + +// pendingChangeUUID, err = uuid.Parse(pendingChangeID) +// if err != nil { +// t.Fatal(err) +// } + +// committedChangeUUID, err = uuid.Parse(committedChangeID) +// if err != nil { +// t.Fatal(err) +// } + +// mneUUID, err = uuid.Parse(mneID) +// if err != nil { +// t.Fatal(err) +// } + +// mockNetworkElement = &nucleus.CommonNetworkElement{ +// Model: &openconfig.Device{ +// System: &openconfig.OpenconfigSystem_System{ +// Config: &openconfig.OpenconfigSystem_System_Config{ +// Hostname: &hostname, +// DomainName: &domainname, +// }, +// }, +// }, +// UUID: mneUUID, +// } + +// sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, sbiUUID) +// if err != nil { +// t.Fatal(err) +// } +// mockNetworkElement.(*nucleus.CommonNetworkElement).SetSBI(sbi) +// mockNetworkElement.(*nucleus.CommonNetworkElement).SetTransport(&mocks.Transport{}) +// mockNetworkElement.(*nucleus.CommonNetworkElement).SetName(hostname) +// sbiStore = nucleus.NewSbiStore() +// if err := sbiStore.Add(mockNetworkElement.SBI()); err != nil { +// t.Fatal(err) +// } + +// mockChange := &mocks.Change{} +// mockChange.On("Age").Return(time.Hour) +// mockChange.On("State").Return(mnepb.ChangeState_CHANGE_STATE_INCONSISTENT) + +// mockPnd = &mocks.NetworkDomain{} +// mockPnd.On("ID").Return(pndUUID) +// mockPnd.On("GetName").Return("test") +// mockPnd.On("GetDescription").Return("test") +// mockPnd.On("GetSBIs").Return(sbiStore) +// mockPnd.On("GetSBI", mock.Anything).Return(mockNetworkElement.SBI(), nil) +// mockPnd.On("NetworkElements").Return([]uuid.UUID{mneUUID}) +// mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID}) +// mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID}) +// mockPnd.On("GetChange", mock.Anything).Return(mockChange, nil) +// mockPnd.On("AddNetworkElement", mock.Anything, mock.Anything, mock.Anything).Return(nil) +// mockPnd.On("GetNetworkElement", mock.Anything).Return(mockNetworkElement, nil) +// mockPnd.On("Commit", mock.Anything).Return(nil) +// mockPnd.On("Confirm", mock.Anything).Return(nil) +// mockPnd.On("ChangeMNE", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil) +// mockPnd.On("Request", mock.Anything, mock.Anything).Return(&gnmi.GetResponse{}, nil) + +// pndStore := nucleus.NewMemoryPndStore() +// if err := pndStore.Add(mockPnd); err != nil { +// t.Fatal(err) +// } + +// pndService := nucleus.NewPndService(pndStore) +// eventService := eventservice.NewMockEventService() + +// sbiService := nucleus.NewSbiService(sbiStore, eventService) + +// c := NewPndServer(pndService, sbiService) + +// return c +// } + +// // TODO: This test case does not make sense; needs to be adjusted. +// func Test_pnd_GetPath(t *testing.T) { +// initUUIDs(t) + +// //opts := cmp.Options{ +// // cmpopts.SortSlices( +// // func(x, y *gnmi.Update) bool { +// // return x.GetVal().String() < y.GetVal().String() +// // }, +// // ), +// // cmp.Comparer(proto.Equal), +// //} + +// type args struct { +// ctx context.Context +// request *mnepb.GetPathRequest +// } +// tests := []struct { +// name string +// args args +// want []*gnmi.Notification +// wantErr bool +// }{ +// { +// name: "get path: system/config/hostname", +// args: args{ +// ctx: context.Background(), +// request: &mnepb.GetPathRequest{ +// Timestamp: time.Now().UnixNano(), +// Mneid: mneUUID.String(), +// Path: "system/config/hostname", +// Pid: pndUUID.String(), +// }, +// }, +// want: []*gnmi.Notification{ +// { +// Update: []*gnmi.Update{ +// { +// Path: &gnmi.Path{ +// Elem: []*gnmi.PathElem{ +// { +// Name: "system", +// }, +// { +// Name: "config", +// }, +// { +// Name: "hostname", +// }, +// }, +// }, +// Val: &gnmi.TypedValue{ +// Value: &gnmi.TypedValue_StringVal{ +// StringVal: "manfred", +// }, +// }, +// }, +// }}, +// }, +// wantErr: false, +// }, +// { +// name: "get path: system", +// args: args{ +// ctx: context.Background(), +// request: &mnepb.GetPathRequest{ +// Timestamp: time.Now().UnixNano(), +// Mneid: mneUUID.String(), +// Path: "system", +// Pid: pndUUID.String(), +// }, +// }, +// want: []*gnmi.Notification{ +// { +// Update: []*gnmi.Update{ +// { +// Path: &gnmi.Path{ +// Elem: []*gnmi.PathElem{ +// { +// Name: "system", +// }, +// }, +// }, +// Val: &gnmi.TypedValue{ +// Value: &gnmi.TypedValue_JsonIetfVal{ +// JsonIetfVal: []byte("{\n \"openconfig-system:config\": {\n \"domain-name\": \"uwe\",\n \"hostname\": \"manfred\"\n }\n}"), +// }, +// }, +// }, +// }}, +// }, +// wantErr: false, +// }, +// //{ +// // name: "get path: this/path/is/not/valid", +// // args: args{ +// // ctx: context.Background(), +// // request: &ppb.GetPathRequest{ +// // Timestamp: time.Now().UnixNano(), +// // Mneid: mneUUID.String(), +// // Path: "this/path/is/not/valid", +// // Pid: pndUUID.String(), +// // }, +// // }, +// // want: []*gnmi.Notification{}, +// // wantErr: true, +// //}, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// // s := getTestPndServer(t) +// // _, err := s.GetPath(tt.args.ctx, tt.args.request) +// // if (err != nil) != tt.wantErr { +// // t.Errorf("GetPath() error = %v, wantErr %v", err, tt.wantErr) +// // return +// // } + +// //got := resp.GetMneNotification() + +// //for i, n := range got { +// // if diff := cmp.Diff(n.GetUpdate(), tt.want[i].GetUpdate(), opts...); diff != "" { +// // t.Errorf("GetPath() diff in the received notification %d: \n%s", i+1, diff) +// // } +// //} +// }) +// } +// } + +// func Test_pnd_Set(t *testing.T) { +// // type args struct { +// // ctx context.Context +// // request *ppb.SetRequest +// // } +// // tests := []struct { +// // name string +// // args args +// // want ppb.SetResponseStatus +// // wantErr bool +// // }{ +// // { +// // name: "set mne", +// // args: args{ +// // ctx: context.Background(), +// // request: &ppb.SetRequest{ +// // Mne: []*ppb.SetMne{ +// // { +// // Sbi: &spb.SouthboundInterface{ +// // Id: sbiID, +// // Type: spb.Type_TYPE_OPENCONFIG, +// // }, +// // DeviceName: hostname, +// // TransportOption: &transport.TransportOption{ +// // Address: "test", +// // Username: "test", +// // Password: "test", +// // TransportOption: &transport.TransportOption_GnmiTransportOption{ +// // GnmiTransportOption: &transport.GnmiTransportOption{}, +// // }, +// // }, +// // }, +// // }, +// // Pid: pndID, +// // }, +// // }, +// // want: ppb.SetResponse_OK, +// // }, +// // // { +// // // name: "set change", +// // // args: args{ +// // // ctx: context.Background(), +// // // request: &ppb.SetRequest{ +// // // Pid: pndID, +// // // Change: []*ppb.SetChange{ +// // // { +// // // Cuid: pendingChangeID, +// // // Op: ppb.SetChange_COMMIT, +// // // }, +// // // { +// // // Cuid: committedChangeID, +// // // Op: ppb.SetChange_CONFIRM, +// // // }, +// // // }, +// // // }, +// // // }, +// // // want: ppb.SetResponse_OK, +// // // }, +// // // { +// // // name: "change request", +// // // args: args{ +// // // ctx: context.Background(), +// // // request: &ppb.SetRequest{ +// // // Pid: pndID, +// // // ChangeRequest: []*ppb.ChangeRequest{ +// // // { +// // // Id: mneID, +// // // Path: "/system/config/hostname", +// // // Value: "herbert", +// // // ApiOp: ppb.ApiOperation_UPDATE, +// // // }, +// // // { +// // // Id: mneID, +// // // Path: "/system/config/hostname", +// // // Value: "fridolin", +// // // ApiOp: ppb.ApiOperation_REPLACE, +// // // }, +// // // { +// // // Id: mneID, +// // // Path: "/system/config/hostname", +// // // ApiOp: ppb.ApiOperation_DELETE, +// // // }, +// // // }, +// // // }, +// // // }, +// // // want: ppb.SetResponse_OK, +// // // }, +// // } +// // for _, tt := range tests { +// // t.Run(tt.name, func(t *testing.T) { +// // p := pndServer{ +// // UnimplementedPndServiceServer: ppb.UnimplementedPndServiceServer{}, +// // } +// // resp, err := p.Set(tt.args.ctx, tt.args.request) +// // if (err != nil) != tt.wantErr { +// // t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr) +// // return +// // } +// // got := resp.Status +// // if !reflect.DeepEqual(got, tt.want) { +// // t.Errorf("Set() got = %v, want %v", got, tt.want) +// // } +// // for _, r := range resp.Responses { +// // got = r.Status +// // if !reflect.DeepEqual(got, tt.want) { +// // t.Errorf("Set() got = %v, want %v", got, tt.want) +// // } +// // } +// // }) +// // } +// } diff --git a/controller/northbound/server/test_util_test.go b/controller/northbound/server/test_util_test.go index 1edf907445eaae99841b11ae40b601311717ffca..72ded5bc087c580b3829a1daff782eb86b23d2b0 100644 --- a/controller/northbound/server/test_util_test.go +++ b/controller/northbound/server/test_util_test.go @@ -7,18 +7,15 @@ import ( "testing" "code.fbi.h-da.de/danet/gosdn/controller/conflict" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/mocks" - "code.fbi.h-da.de/danet/gosdn/controller/nucleus" "code.fbi.h-da.de/danet/gosdn/controller/rbac" "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" "github.com/sethvargo/go-password/password" - "github.com/stretchr/testify/mock" "golang.org/x/crypto/argon2" ) @@ -203,31 +200,31 @@ func createHashedAndSaltedPassword(plainPWD, salt string) string { return base64.RawStdEncoding.EncodeToString(argon2.IDKey([]byte(plainPWD), []byte(salt), 1, 64*1024, 4, 32)) } -func getMockPnd(t *testing.T) networkdomain.NetworkDomain { - mockNetworkElement = &nucleus.CommonNetworkElement{ - Plugin: &mocks.Plugin{}, - UUID: mneUUID, - } - - mockNetworkElement.(*nucleus.CommonNetworkElement).SetTransport(&mocks.Transport{}) - mockNetworkElement.(*nucleus.CommonNetworkElement).SetName(hostname) - - mockPnd = &mocks.NetworkDomain{} - mockPnd.On("ID").Return(pndUUID) - mockPnd.On("GetName").Return("test") - mockPnd.On("GetDescription").Return("test") - mockPnd.On("NetworkElements").Return([]uuid.UUID{mneUUID}) - mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID}) - mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID}) - mockPnd.On("AddNetworkElement", mock.Anything, mock.Anything, mock.Anything).Return(nil) - mockPnd.On("GetNetworkElement", mock.Anything).Return(mockNetworkElement, nil) - mockPnd.On("Commit", mock.Anything).Return(nil) - mockPnd.On("Confirm", mock.Anything).Return(nil) - mockPnd.On("ChangeMNE", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil) - mockPnd.On("Request", mock.Anything, mock.Anything).Return(nil, nil) - - return mockPnd -} +// func getMockPnd(t *testing.T) networkdomain.NetworkDomain { +// mockNetworkElement = &nucleus.CommonNetworkElement{ +// Plugin: &mocks.Plugin{}, +// UUID: mneUUID, +// } + +// mockNetworkElement.(*nucleus.CommonNetworkElement).SetTransport(&mocks.Transport{}) +// mockNetworkElement.(*nucleus.CommonNetworkElement).SetName(hostname) + +// mockPnd = &mocks.NetworkDomain{} +// mockPnd.On("ID").Return(pndUUID) +// mockPnd.On("GetName").Return("test") +// mockPnd.On("GetDescription").Return("test") +// mockPnd.On("NetworkElements").Return([]uuid.UUID{mneUUID}) +// mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID}) +// mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID}) +// mockPnd.On("AddNetworkElement", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) +// mockPnd.On("GetNetworkElement", mock.Anything).Return(mockNetworkElement, nil) +// mockPnd.On("Commit", mock.Anything).Return(nil) +// mockPnd.On("Confirm", mock.Anything).Return(nil) +// mockPnd.On("ChangeMNE", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil) +// mockPnd.On("Request", mock.Anything, mock.Anything).Return(nil, nil) + +// return mockPnd +// } func getMockPlugin(t *testing.T) plugin.Plugin { mockPlugin := &mocks.Plugin{} @@ -264,3 +261,45 @@ func initUUIDs(t *testing.T) { t.Fatal(err) } } + +// func createTestNetworkElementServer(t *testing.T, mneServer *NetworkElementServer) { +// initUUIDs(t) + +// eventService := eventservice.NewMockEventService() + +// pluginService := nucleus.NewPluginServiceMock() + +// pndStore := nucleus.NewPndStore(pluginService) +// pndService := nucleus.NewPndService(pndStore) + +// mneStore := nucleus.NewNetworkElementStore() +// mneService := nucleus.NewNetworkElementService(mneStore, pluginService, eventService) + +// changeStore := store.NewChangeStore() + +// *mneServer = *NewNetworkElementServer(mneService, pndService, pluginService, *changeStore) + +// //t.Cleanup(removeTestStores) +// } + +// func removeTestStores() { +// ex, err := os.Executable() +// if err != nil { +// log.Println(err) +// } +// exPath := filepath.Dir(ex) + +// fmt.Println(exPath) + +// err = os.RemoveAll(exPath + "/stores_testing") +// if err != nil { +// log.Println(err) +// } +// } + +// func cleanMneAndSbiTestStore(mneServer *NetworkElementServer) { +// mneToDelete, _ := mneServer.mneService.GetAll() +// for _, mne := range mneToDelete { +// _ = mneServer.mneService.Delete(mne) +// } +// } diff --git a/controller/northbound/server/user.go b/controller/northbound/server/user.go index e46718d841256b5635a62e7c907529625fd2fc9e..a50baaaab0fc4faee85aca99d707091b14a398fc 100644 --- a/controller/northbound/server/user.go +++ b/controller/northbound/server/user.go @@ -9,6 +9,7 @@ import ( cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict" apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" "code.fbi.h-da.de/danet/gosdn/controller/conflict" + rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/rbac" "code.fbi.h-da.de/danet/gosdn/controller/store" @@ -20,8 +21,6 @@ import ( "google.golang.org/grpc/status" "golang.org/x/crypto/argon2" - - rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" ) // UserServer holds a JWTManager and represents a UserServiceServer. diff --git a/controller/northbound/server/user_test.go b/controller/northbound/server/user_test.go index 41ffef625d1b955148353dc85da944c113461264..6b693a39cbdadb56390ac896716894a91f9706db 100644 --- a/controller/northbound/server/user_test.go +++ b/controller/northbound/server/user_test.go @@ -24,7 +24,7 @@ func getTestUserServer(t *testing.T) *UserServer { roleService := rbac.NewRoleService(roleStore, eventService) s := NewUserServer(jwtManager, userService) - err := clearAndCreateAuthTestSetup(s.userService, roleService) + err := clearAndCreateAuthTestSetup(userService, roleService) if err != nil { t.Fatalf("%v", err) } diff --git a/controller/nucleus/change.go b/controller/nucleus/change.go index 4c337bde03c0d8e3a5c7b9e5811979378bb47db7..b1bc268a5e2428390609f9a431a64317d54e5f28 100644 --- a/controller/nucleus/change.go +++ b/controller/nucleus/change.go @@ -7,7 +7,7 @@ import ( "sync" "time" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" "github.com/google/uuid" log "github.com/sirupsen/logrus" @@ -37,7 +37,7 @@ func NewChange(mne uuid.UUID, currentState, change []byte, callback func([]byte, c := &Change{ cuid: uuid.New(), duid: mne, - state: ppb.ChangeState_CHANGE_STATE_PENDING, + state: mnepb.ChangeState_CHANGE_STATE_PENDING, timestamp: time.Now(), previousState: currentState, intendedState: change, @@ -59,15 +59,15 @@ func NewChange(mne uuid.UUID, currentState, change []byte, callback func([]byte, type Change struct { cuid uuid.UUID duid uuid.UUID - state ppb.ChangeState + state mnepb.ChangeState timestamp time.Time previousState []byte intendedState []byte callback func([]byte, []byte) error stateMu sync.RWMutex errChan <-chan error - stateIn chan<- ppb.ChangeState - stateOut <-chan ppb.ChangeState + stateIn chan<- mnepb.ChangeState + stateOut <-chan mnepb.ChangeState stateManagerCancel context.CancelFunc } @@ -86,7 +86,7 @@ func (c *Change) AssociatedDeviceID() uuid.UUID { // the change is rolled back. func (c *Change) Commit() error { //TODO: check if already committed - c.stateIn <- ppb.ChangeState_CHANGE_STATE_COMMITTED + c.stateIn <- mnepb.ChangeState_CHANGE_STATE_COMMITTED select { case err := <-c.errChan: return err @@ -98,7 +98,7 @@ func (c *Change) Commit() error { // Confirm confirms a committed Change and stops the rollback timer. func (c *Change) Confirm() error { //TODO: check if already confirmed - c.stateIn <- ppb.ChangeState_CHANGE_STATE_CONFIRMED + c.stateIn <- mnepb.ChangeState_CHANGE_STATE_CONFIRMED select { case err := <-c.errChan: return err @@ -113,7 +113,7 @@ func (c *Change) Age() time.Duration { } // State returns the changes's state. -func (c *Change) State() ppb.ChangeState { +func (c *Change) State() mnepb.ChangeState { c.stateMu.RLock() state := c.state c.stateMu.RUnlock() @@ -132,9 +132,9 @@ func (c *Change) IntendedState() []byte { return c.intendedState } -func stateManager(ctx context.Context, ch *Change, timeout time.Duration) (chan<- ppb.ChangeState, <-chan ppb.ChangeState, <-chan error) { - stateIn := make(chan ppb.ChangeState) - stateOut := make(chan ppb.ChangeState) +func stateManager(ctx context.Context, ch *Change, timeout time.Duration) (chan<- mnepb.ChangeState, <-chan mnepb.ChangeState, <-chan error) { + stateIn := make(chan mnepb.ChangeState) + stateOut := make(chan mnepb.ChangeState) // A Goroutine, which is created while a new Change is initialized acts as // the receiver for errorChan errChan := make(chan error) @@ -150,13 +150,13 @@ func stateManager(ctx context.Context, ch *Change, timeout time.Duration) (chan< select { case <-ticker.C: state := ch.State() - if state == ppb.ChangeState_CHANGE_STATE_CONFIRMED { + if state == mnepb.ChangeState_CHANGE_STATE_CONFIRMED { continue } err := ch.callback(ch.intendedState, ch.previousState) if err != nil { ch.stateMu.Lock() - ch.state = ppb.ChangeState_CHANGE_STATE_INCONSISTENT + ch.state = mnepb.ChangeState_CHANGE_STATE_INCONSISTENT ch.stateMu.Unlock() log.Errorf("change %v timed out", ch.cuid) log.Error(err) @@ -166,14 +166,14 @@ func stateManager(ctx context.Context, ch *Change, timeout time.Duration) (chan< ticker.Stop() // TODO: keep the Change as pending, or remove it? ch.stateMu.Lock() - ch.state = ppb.ChangeState_CHANGE_STATE_PENDING + ch.state = mnepb.ChangeState_CHANGE_STATE_PENDING ch.stateMu.Unlock() log.Errorf("change %v timed out", ch.cuid) case s := <-stateIn: switch s { - case ppb.ChangeState_CHANGE_STATE_COMMITTED: + case mnepb.ChangeState_CHANGE_STATE_COMMITTED: state := ch.State() - if state == ppb.ChangeState_CHANGE_STATE_COMMITTED || state == ppb.ChangeState_CHANGE_STATE_CONFIRMED { + if state == mnepb.ChangeState_CHANGE_STATE_COMMITTED || state == mnepb.ChangeState_CHANGE_STATE_CONFIRMED { errChan <- fmt.Errorf("change %v already %s", ch.cuid, state.String()) continue } @@ -182,25 +182,25 @@ func stateManager(ctx context.Context, ch *Change, timeout time.Duration) (chan< err := ch.callback(ch.previousState, ch.intendedState) if err != nil { ch.stateMu.Lock() - ch.state = ppb.ChangeState_CHANGE_STATE_INCONSISTENT + ch.state = mnepb.ChangeState_CHANGE_STATE_INCONSISTENT ch.stateMu.Unlock() errChan <- err continue } ch.stateMu.Lock() - ch.state = ppb.ChangeState_CHANGE_STATE_COMMITTED + ch.state = mnepb.ChangeState_CHANGE_STATE_COMMITTED ch.stateMu.Unlock() stateOut <- state - case ppb.ChangeState_CHANGE_STATE_CONFIRMED: + case mnepb.ChangeState_CHANGE_STATE_CONFIRMED: state := ch.State() - if state != ppb.ChangeState_CHANGE_STATE_COMMITTED { + if state != mnepb.ChangeState_CHANGE_STATE_COMMITTED { errChan <- fmt.Errorf("cannot confirm uncommitted change %v", ch.cuid) continue } // The change has been confirmed and the timer is stopped, // since a rollback is not necessary anymore. ch.stateMu.Lock() - ch.state = ppb.ChangeState_CHANGE_STATE_CONFIRMED + ch.state = mnepb.ChangeState_CHANGE_STATE_CONFIRMED ch.stateMu.Unlock() stateOut <- state ch.stateManagerCancel() diff --git a/controller/nucleus/change_test.go b/controller/nucleus/change_test.go index bef50a8453e3c15fd10bd406f706722d6da91031..994760ffb952d2dffcf6e123dcf8498dea18db6d 100644 --- a/controller/nucleus/change_test.go +++ b/controller/nucleus/change_test.go @@ -1,305 +1,305 @@ package nucleus -//import ( -// "context" -// "errors" -// "reflect" -// "sync" -// "testing" -// "time" -// -// ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" -// "code.fbi.h-da.de/danet/gosdn/controller/config" -// "github.com/google/uuid" -// "github.com/openconfig/ygot/exampleoc" -// "github.com/openconfig/ygot/ygot" -//) -// -//var commitHostname = "commit" -//var rollbackHostname = "rollback" -// -//var commitDevice = &exampleoc.Device{ -// System: &exampleoc.System{ -// Hostname: &commitHostname, -// }, -//} -// -//var rollbackDevice = &exampleoc.Device{ -// System: &exampleoc.System{ -// Hostname: &rollbackHostname, -// }, -//} -// -//func TestChange_CommitRollback(t *testing.T) { -// wg := sync.WaitGroup{} -// wantErr := false -// want := rollbackHostname -// callback := make(chan string) -// c := &Change{ -// cuid: cuid, -// duid: mneid, -// timestamp: time.Now(), -// previousState: rollbackDevice, -// intendedState: commitDevice, -// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { -// hostname := *first.(*exampleoc.Device).System.Hostname -// t.Logf("callback in test %v", t.Name()) -// switch hostname { -// case rollbackHostname: -// callback <- rollbackHostname -// } -// return nil -// }, -// } -// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) -// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) -// c.stateIn = stateIn -// c.stateOut = stateOut -// c.errChan = errChan -// c.stateManagerCancel = stateManagerCancel -// wg.Add(1) -// go func() { -// defer wg.Done() -// time.Sleep(time.Millisecond * 10) -// if err := c.Commit(); (err != nil) != wantErr { -// t.Errorf("Commit() error = %v, wantErr %v", err, wantErr) -// } -// time.Sleep(config.ChangeTimeout) -// }() -// got := <-callback -// if !reflect.DeepEqual(got, want) { -// t.Errorf("Commit() = %v, want %v", got, want) -// } -// wg.Wait() -// c.stateManagerCancel() -//} -// -//func TestChange_CommitRollbackError(t *testing.T) { -// wg := sync.WaitGroup{} -// wg.Add(1) -// wantErr := false -// want := errors.New("this is an expected error") -// rollbackErrChannel := make(chan error) -// c := &Change{ -// cuid: cuid, -// duid: mneid, -// timestamp: time.Now(), -// previousState: rollbackDevice, -// intendedState: commitDevice, -// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { -// hostname := *second.(*exampleoc.Device).System.Hostname -// t.Logf("callback in test %v", t.Name()) -// switch hostname { -// case rollbackHostname: -// rollbackErrChannel <- errors.New("this is an expected error") -// } -// return nil -// }, -// } -// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) -// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) -// c.stateIn = stateIn -// c.stateOut = stateOut -// c.errChan = errChan -// c.stateManagerCancel = stateManagerCancel -// -// go func() { -// defer wg.Done() -// time.Sleep(time.Millisecond * 10) -// if err := c.Commit(); (err != nil) != wantErr { -// t.Errorf("Commit() error = %v, wantErr %v", err, wantErr) -// } -// time.Sleep(config.ChangeTimeout) -// }() -// got := <-rollbackErrChannel -// if !reflect.DeepEqual(got, want) { -// t.Errorf("Commit() = %v, want %v", got, want) -// } -// wg.Wait() -// c.stateManagerCancel() -//} -// -//func TestChange_CommitError(t *testing.T) { -// want := ppb.ChangeState_CHANGE_STATE_INCONSISTENT -// c := &Change{ -// cuid: cuid, -// duid: mneid, -// timestamp: time.Now(), -// previousState: rollbackDevice, -// intendedState: commitDevice, -// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { -// return errors.New("this is an expected error") -// }, -// } -// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) -// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) -// c.stateIn = stateIn -// c.stateOut = stateOut -// c.errChan = errChan -// c.stateManagerCancel = stateManagerCancel -// -// time.Sleep(time.Millisecond * 10) -// if err := c.Commit(); err == nil { -// t.Errorf("Commit() expected error, error = %v", err) -// } -// got := c.State() -// if !reflect.DeepEqual(got, want) { -// t.Errorf("Commit() = %v, want %v", got, want) -// } -// c.stateManagerCancel() -//} -// -//func TestChange_Commit(t *testing.T) { -// want := ppb.ChangeState_CHANGE_STATE_COMMITTED -// c := &Change{ -// cuid: cuid, -// duid: mneid, -// timestamp: time.Now(), -// previousState: rollbackDevice, -// intendedState: commitDevice, -// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { -// t.Logf("callback in test %v", t.Name()) -// return nil -// }, -// } -// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) -// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) -// c.stateIn = stateIn -// c.stateOut = stateOut -// c.errChan = errChan -// c.stateManagerCancel = stateManagerCancel -// -// if err := c.Commit(); err != nil { -// t.Errorf("Commit() error = %v", err) -// } -// got := c.State() -// if !reflect.DeepEqual(got, want) { -// t.Errorf("Commit() = %v, want %v", got, want) -// } -// if err := c.Confirm(); err != nil { -// t.Errorf("Confirm() error = %v", err) -// } -//} -// -//func TestChange_Confirm(t *testing.T) { -// tests := []struct { -// name string -// wantErr bool -// }{ -// { -// name: "committed", -// wantErr: false, -// }, -// { -// name: "uncommitted", -// wantErr: true, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// c := &Change{ -// previousState: &exampleoc.Device{ -// System: &exampleoc.System{ -// Hostname: &rollbackHostname, -// }, -// }, -// intendedState: &exampleoc.Device{ -// System: &exampleoc.System{ -// Hostname: &commitHostname, -// }, -// }, -// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { -// t.Logf("callback in test %v", t.Name()) -// return nil -// }, -// } -// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) -// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) -// c.stateIn = stateIn -// c.stateOut = stateOut -// c.errChan = errChan -// c.stateManagerCancel = stateManagerCancel -// -// if tt.name == "committed" { -// if err := c.Commit(); err != nil { -// t.Errorf("Commit() error = %v, wantErr %v", err, tt.wantErr) -// } -// } -// if err := c.Confirm(); (err != nil) != tt.wantErr { -// t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr) -// } -// c.stateManagerCancel() -// }) -// } -//} -// -//func TestChange_ID(t *testing.T) { -// type fields struct { -// cuid uuid.UUID -// } -// tests := []struct { -// name string -// fields fields -// want uuid.UUID -// }{ -// { -// name: "default", -// fields: fields{cuid: cuid}, -// want: cuid, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// c := &Change{ -// cuid: tt.fields.cuid, -// } -// if got := c.ID(); !reflect.DeepEqual(got, tt.want) { -// t.Errorf("ID() = %v, want %v", got, tt.want) -// } -// }) -// } -//} -// -//func TestChange_State(t *testing.T) { -// tests := []struct { -// name string -// want ppb.ChangeState -// }{ -// { -// name: "pending", -// want: ppb.ChangeState_CHANGE_STATE_PENDING, -// }, -// { -// name: "committed", -// want: ppb.ChangeState_CHANGE_STATE_COMMITTED, -// }, -// { -// name: "confirmed", -// want: ppb.ChangeState_CHANGE_STATE_CONFIRMED, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// testName := t.Name() -// callback := func(first ygot.GoStruct, second ygot.GoStruct) error { -// t.Logf("callback in test %v", testName) -// return nil -// } -// c := NewChange(mneid, rollbackDevice, commitDevice, callback) -// if tt.name != "pending" { -// if err := c.Commit(); err != nil { -// t.Errorf("Commit() error = %v", err) -// } -// } -// if tt.name == "confirmed" { -// if err := c.Confirm(); err != nil { -// t.Errorf("Confirm() error = %v", err) -// } -// } -// if got := c.State(); !reflect.DeepEqual(got, tt.want) { -// t.Errorf("Change.State() = %v, want %v", got, tt.want) -// } -// c.stateManagerCancel() -// }) -// } -//} +// import ( +// "context" +// "errors" +// "reflect" +// "sync" +// "testing" +// "time" + +// mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" +// "code.fbi.h-da.de/danet/gosdn/controller/config" +// "github.com/google/uuid" +// "github.com/openconfig/ygot/exampleoc" +// "github.com/openconfig/ygot/ygot" +// ) + +// var commitHostname = "commit" +// var rollbackHostname = "rollback" + +// var commitDevice = &exampleoc.Device{ +// System: &exampleoc.System{ +// Hostname: &commitHostname, +// }, +// } + +// var rollbackDevice = &exampleoc.Device{ +// System: &exampleoc.System{ +// Hostname: &rollbackHostname, +// }, +// } + +// func TestChange_CommitRollback(t *testing.T) { +// wg := sync.WaitGroup{} +// wantErr := false +// want := rollbackHostname +// callback := make(chan string) +// c := &Change{ +// cuid: cuid, +// duid: mneid, +// timestamp: time.Now(), +// previousState: rollbackDevice, +// intendedState: commitDevice, +// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { +// hostname := *first.(*exampleoc.Device).System.Hostname +// t.Logf("callback in test %v", t.Name()) +// switch hostname { +// case rollbackHostname: +// callback <- rollbackHostname +// } +// return nil +// }, +// } +// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) +// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) +// c.stateIn = stateIn +// c.stateOut = stateOut +// c.errChan = errChan +// c.stateManagerCancel = stateManagerCancel +// wg.Add(1) +// go func() { +// defer wg.Done() +// time.Sleep(time.Millisecond * 10) +// if err := c.Commit(); (err != nil) != wantErr { +// t.Errorf("Commit() error = %v, wantErr %v", err, wantErr) +// } +// time.Sleep(config.ChangeTimeout) +// }() +// got := <-callback +// if !reflect.DeepEqual(got, want) { +// t.Errorf("Commit() = %v, want %v", got, want) +// } +// wg.Wait() +// c.stateManagerCancel() +// } + +// func TestChange_CommitRollbackError(t *testing.T) { +// wg := sync.WaitGroup{} +// wg.Add(1) +// wantErr := false +// want := errors.New("this is an expected error") +// rollbackErrChannel := make(chan error) +// c := &Change{ +// cuid: cuid, +// duid: mneid, +// timestamp: time.Now(), +// previousState: rollbackDevice, +// intendedState: commitDevice, +// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { +// hostname := *second.(*exampleoc.Device).System.Hostname +// t.Logf("callback in test %v", t.Name()) +// switch hostname { +// case rollbackHostname: +// rollbackErrChannel <- errors.New("this is an expected error") +// } +// return nil +// }, +// } +// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) +// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) +// c.stateIn = stateIn +// c.stateOut = stateOut +// c.errChan = errChan +// c.stateManagerCancel = stateManagerCancel + +// go func() { +// defer wg.Done() +// time.Sleep(time.Millisecond * 10) +// if err := c.Commit(); (err != nil) != wantErr { +// t.Errorf("Commit() error = %v, wantErr %v", err, wantErr) +// } +// time.Sleep(config.ChangeTimeout) +// }() +// got := <-rollbackErrChannel +// if !reflect.DeepEqual(got, want) { +// t.Errorf("Commit() = %v, want %v", got, want) +// } +// wg.Wait() +// c.stateManagerCancel() +// } + +// func TestChange_CommitError(t *testing.T) { +// want := mnepb.ChangeState_CHANGE_STATE_INCONSISTENT +// c := &Change{ +// cuid: cuid, +// duid: mneid, +// timestamp: time.Now(), +// previousState: rollbackDevice, +// intendedState: commitDevice, +// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { +// return errors.New("this is an expected error") +// }, +// } +// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) +// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) +// c.stateIn = stateIn +// c.stateOut = stateOut +// c.errChan = errChan +// c.stateManagerCancel = stateManagerCancel + +// time.Sleep(time.Millisecond * 10) +// if err := c.Commit(); err == nil { +// t.Errorf("Commit() expected error, error = %v", err) +// } +// got := c.State() +// if !reflect.DeepEqual(got, want) { +// t.Errorf("Commit() = %v, want %v", got, want) +// } +// c.stateManagerCancel() +// } + +// func TestChange_Commit(t *testing.T) { +// want := mnepb.ChangeState_CHANGE_STATE_COMMITTED +// c := &Change{ +// cuid: cuid, +// duid: mneid, +// timestamp: time.Now(), +// previousState: rollbackDevice, +// intendedState: commitDevice, +// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { +// t.Logf("callback in test %v", t.Name()) +// return nil +// }, +// } +// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) +// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) +// c.stateIn = stateIn +// c.stateOut = stateOut +// c.errChan = errChan +// c.stateManagerCancel = stateManagerCancel + +// if err := c.Commit(); err != nil { +// t.Errorf("Commit() error = %v", err) +// } +// got := c.State() +// if !reflect.DeepEqual(got, want) { +// t.Errorf("Commit() = %v, want %v", got, want) +// } +// if err := c.Confirm(); err != nil { +// t.Errorf("Confirm() error = %v", err) +// } +// } + +// func TestChange_Confirm(t *testing.T) { +// tests := []struct { +// name string +// wantErr bool +// }{ +// { +// name: "committed", +// wantErr: false, +// }, +// { +// name: "uncommitted", +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// c := &Change{ +// previousState: &exampleoc.Device{ +// System: &exampleoc.System{ +// Hostname: &rollbackHostname, +// }, +// }, +// intendedState: &exampleoc.Device{ +// System: &exampleoc.System{ +// Hostname: &commitHostname, +// }, +// }, +// callback: func(first ygot.GoStruct, second ygot.GoStruct) error { +// t.Logf("callback in test %v", t.Name()) +// return nil +// }, +// } +// stateManagerCtx, stateManagerCancel := context.WithCancel(context.Background()) +// stateIn, stateOut, errChan := stateManager(stateManagerCtx, c, time.Millisecond*100) +// c.stateIn = stateIn +// c.stateOut = stateOut +// c.errChan = errChan +// c.stateManagerCancel = stateManagerCancel + +// if tt.name == "committed" { +// if err := c.Commit(); err != nil { +// t.Errorf("Commit() error = %v, wantErr %v", err, tt.wantErr) +// } +// } +// if err := c.Confirm(); (err != nil) != tt.wantErr { +// t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr) +// } +// c.stateManagerCancel() +// }) +// } +// } + +// func TestChange_ID(t *testing.T) { +// type fields struct { +// cuid uuid.UUID +// } +// tests := []struct { +// name string +// fields fields +// want uuid.UUID +// }{ +// { +// name: "default", +// fields: fields{cuid: cuid}, +// want: cuid, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// c := &Change{ +// cuid: tt.fields.cuid, +// } +// if got := c.ID(); !reflect.DeepEqual(got, tt.want) { +// t.Errorf("ID() = %v, want %v", got, tt.want) +// } +// }) +// } +// } + +// func TestChange_State(t *testing.T) { +// tests := []struct { +// name string +// want mnepb.ChangeState +// }{ +// { +// name: "pending", +// want: mnepb.ChangeState_CHANGE_STATE_PENDING, +// }, +// { +// name: "committed", +// want: mnepb.ChangeState_CHANGE_STATE_COMMITTED, +// }, +// { +// name: "confirmed", +// want: mnepb.ChangeState_CHANGE_STATE_CONFIRMED, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// testName := t.Name() +// callback := func(first ygot.GoStruct, second ygot.GoStruct) error { +// t.Logf("callback in test %v", testName) +// return nil +// } +// c := NewChange(mneid, rollbackDevice, commitDevice, callback) +// if tt.name != "pending" { +// if err := c.Commit(); err != nil { +// t.Errorf("Commit() error = %v", err) +// } +// } +// if tt.name == "confirmed" { +// if err := c.Confirm(); err != nil { +// t.Errorf("Confirm() error = %v", err) +// } +// } +// if got := c.State(); !reflect.DeepEqual(got, tt.want) { +// t.Errorf("Change.State() = %v, want %v", got, tt.want) +// } +// c.stateManagerCancel() +// }) +// } +// } diff --git a/controller/nucleus/databasePndStore.go b/controller/nucleus/databasePndStore.go index a63018b6ae4cf13e39020da6a78e875e22fb3281..c5497a000e130713c4b1cc20ce7103ed5d259081 100644 --- a/controller/nucleus/databasePndStore.go +++ b/controller/nucleus/databasePndStore.go @@ -7,34 +7,57 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" - cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" - plugin_registry "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/database" "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" log "github.com/sirupsen/logrus" - "github.com/spf13/viper" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" ) // DatabasePndStore is used to store PrincipalNetworkDomains. type DatabasePndStore struct { - pndStoreName string - pendingChannels map[uuid.UUID]chan networkelement.Details - pluginService plugin.Service - csbiClient cpb.CsbiServiceClient - pluginRegistryClient plugin_registry.PluginRegistryServiceClient + pndStoreName string + pendingChannels map[uuid.UUID]chan networkelement.Details + pluginService plugin.Service } // Get takes a PrincipalNetworkDomain's UUID or name and returns the PrincipalNetworkDomain. If the requested // PrincipalNetworkDomain does not exist an error is returned. -func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.NetworkDomain, err error) { - var loadedPND LoadedPnd +func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.LoadedPnd, err error) { + var loadedPND networkdomain.LoadedPnd + if query.ID != uuid.Nil { + loadedPND, err := s.getByID(query.ID) + if err != nil { + return loadedPND, err + } + + return loadedPND, nil + } + + loadedPND, err = s.getByName(query.Name) + if err != nil { + return loadedPND, err + } + + // Note: add this if using cSBI again + // csbiClient, err := s.getCsbiClient() + // if err != nil { + // return loadedPND, err + // } + + // newPnd, err := NewPND( + // loadedPND.Name, + // loadedPND.Description, + // uuid.MustParse(loadedPND.ID), + // ) + + return loadedPND, nil +} + +func (s *DatabasePndStore) getByID(idOfPnd uuid.UUID) (loadedPnd networkdomain.LoadedPnd, err error) { client, ctx, cancel := database.GetMongoConnection() defer cancel() defer func() { @@ -43,49 +66,52 @@ func (s *DatabasePndStore) Get(query store.Query) (newPnd networkdomain.NetworkD err = fmt.Errorf("InternalError=%w DeferError=%+s", err, fErrString) } }() + db := client.Database(database.DatabaseName) collection := db.Collection(s.pndStoreName) - result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: query.ID.String()}}) + result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfPnd.String()}}) if result == nil { - return nil, customerrs.CouldNotFindError{ID: query.ID} + return loadedPnd, customerrs.CouldNotFindError{ID: idOfPnd} } - err = result.Decode(&loadedPND) + err = result.Decode(&loadedPnd) if err != nil { log.Printf("Failed marshalling %v", err) - - return nil, customerrs.CouldNotMarshallError{Identifier: query.ID, Type: loadedPND, Err: err} + return loadedPnd, customerrs.CouldNotMarshallError{Identifier: idOfPnd, Type: loadedPnd, Err: err} } - csbiClient, err := s.getCsbiClient() - if err != nil { - return nil, err - } + return loadedPnd, nil +} - pluginRegistryClient, err := s.getPluginRegistryClient() - if err != nil { - return nil, err +func (s *DatabasePndStore) getByName(nameOfPnd string) (loadedPnd networkdomain.LoadedPnd, err error) { + client, ctx, cancel := database.GetMongoConnection() + defer cancel() + defer func() { + if ferr := client.Disconnect(ctx); ferr != nil { + fErrString := ferr.Error() + err = fmt.Errorf("InternalError=%w DeferError=%+s", err, fErrString) + } + }() + + db := client.Database(database.DatabaseName) + collection := db.Collection(s.pndStoreName) + result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfPnd}}) + if result == nil { + return loadedPnd, customerrs.CouldNotFindError{ID: nameOfPnd} } - newPnd, err = NewPND( - loadedPND.Name, - loadedPND.Description, - uuid.MustParse(loadedPND.ID), - csbiClient, - pluginRegistryClient, - s.pluginService, - s.callback, - ) + err = result.Decode(&loadedPnd) if err != nil { - return nil, err + log.Printf("Failed marshalling %v", err) + return loadedPnd, customerrs.CouldNotMarshallError{Identifier: nameOfPnd, Type: loadedPnd, Err: err} } - return newPnd, nil + return loadedPnd, nil } // GetAll returns all stored pnds. -func (s *DatabasePndStore) GetAll() (pnds []networkdomain.NetworkDomain, err error) { - var loadedPnds []LoadedPnd +func (s *DatabasePndStore) GetAll() (pnds []networkdomain.LoadedPnd, err error) { + var loadedPnds []networkdomain.LoadedPnd client, ctx, cancel := database.GetMongoConnection() defer cancel() @@ -117,34 +143,28 @@ func (s *DatabasePndStore) GetAll() (pnds []networkdomain.NetworkDomain, err err return nil, customerrs.CouldNotMarshallError{Type: loadedPnds, Err: err} } - csbiClient, err := s.getCsbiClient() - if err != nil { - return nil, err - } - - pluginRegistryClient, err := s.getPluginRegistryClient() - if err != nil { - return nil, err - } - - for _, loadedPND := range loadedPnds { - newPnd, err := NewPND( - loadedPND.Name, - loadedPND.Description, - uuid.MustParse(loadedPND.ID), - csbiClient, - pluginRegistryClient, - s.pluginService, - s.callback, - ) - if err != nil { - return nil, err - } - - pnds = append(pnds, newPnd) - } - - return pnds, nil + // Note: add this if using cSBI again + // csbiClient, err := s.getCsbiClient() + // if err != nil { + // return nil, err + // } + + // for _, loadedPND := range loadedPnds { + // newPnd, err := NewPND( + // loadedPND.Name, + // loadedPND.Description, + // uuid.MustParse(loadedPND.ID), + // csbiClient, + // s.callback, + // ) + // if err != nil { + // return nil, err + // } + + // pnds = append(pnds, newPnd) + // } + + return loadedPnds, nil } // Add adds a pnd to the pnd store. @@ -211,40 +231,26 @@ func (s *DatabasePndStore) RemovePendingChannel(id uuid.UUID) { delete(s.pendingChannels, id) } -func (s *DatabasePndStore) callback(id uuid.UUID, ch chan networkelement.Details) { - if ch != nil { - s.AddPendingChannel(id, ch) - log.Infof("pending channel %v added", id) - } else { - s.RemovePendingChannel(id) - log.Infof("pending channel %v removed", id) - } -} - -func (s *DatabasePndStore) getCsbiClient() (cpb.CsbiServiceClient, error) { - if s.csbiClient == nil { - orchestrator := viper.GetString("csbi-orchestrator") - conn, err := grpc.Dial(orchestrator, grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - return nil, err - } - - s.csbiClient = cpb.NewCsbiServiceClient(conn) - } - - return s.csbiClient, nil -} - -func (s *DatabasePndStore) getPluginRegistryClient() (plugin_registry.PluginRegistryServiceClient, error) { - if s.pluginRegistryClient == nil { - pluginRegistry := viper.GetString("plugin-registry") - conn, err := grpc.Dial(pluginRegistry, grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - return nil, err - } - - s.pluginRegistryClient = plugin_registry.NewPluginRegistryServiceClient(conn) - } - - return s.pluginRegistryClient, nil -} +// func (s *DatabasePndStore) callback(id uuid.UUID, ch chan networkelement.Details) { +// if ch != nil { +// s.AddPendingChannel(id, ch) +// log.Infof("pending channel %v added", id) +// } else { +// s.RemovePendingChannel(id) +// log.Infof("pending channel %v removed", id) +// } +// } + +// func (s *DatabasePndStore) getCsbiClient() (cpb.CsbiServiceClient, error) { +// if s.csbiClient == nil { +// orchestrator := viper.GetString("csbi-orchestrator") +// conn, err := grpc.Dial(orchestrator, grpc.WithTransportCredentials(insecure.NewCredentials())) +// if err != nil { +// return nil, err +// } + +// s.csbiClient = cpb.NewCsbiServiceClient(conn) +// } + +// return s.csbiClient, nil +// } diff --git a/controller/nucleus/gnmi_transport_test.go b/controller/nucleus/gnmi_transport_test.go index 97bcff82224c75b706414f14b069d1939412b3ca..901275d633f0cb653c25c83a908e91c454b497a5 100644 --- a/controller/nucleus/gnmi_transport_test.go +++ b/controller/nucleus/gnmi_transport_test.go @@ -10,7 +10,7 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" "code.fbi.h-da.de/danet/gosdn/controller/mocks" @@ -315,7 +315,7 @@ func TestGnmi_Set(t *testing.T) { args: args{ payload: change.Payload{}, path: "/", - ctx: context.WithValue(context.Background(), types.CtxKeyOperation, ppb.ApiOperation_API_OPERATION_UPDATE), // nolint + ctx: context.WithValue(context.Background(), types.CtxKeyOperation, mnepb.ApiOperation_API_OPERATION_UPDATE), // nolint }, wantErr: true, }, @@ -345,7 +345,7 @@ func TestGnmi_Set(t *testing.T) { Modified: []byte("update2"), }, path: "/system/config/hostname", - ctx: context.WithValue(context.Background(), types.CtxKeyOperation, ppb.ApiOperation_API_OPERATION_UPDATE), // nolint + ctx: context.WithValue(context.Background(), types.CtxKeyOperation, mnepb.ApiOperation_API_OPERATION_UPDATE), // nolint }, wantErr: false, }, @@ -367,7 +367,7 @@ func TestGnmi_Set(t *testing.T) { Modified: []byte("delete2"), }, path: "/system/config/hostname", - ctx: context.WithValue(context.Background(), types.CtxKeyOperation, ppb.ApiOperation_API_OPERATION_DELETE), // nolint + ctx: context.WithValue(context.Background(), types.CtxKeyOperation, mnepb.ApiOperation_API_OPERATION_DELETE), // nolint }, wantErr: false, }, diff --git a/controller/nucleus/initialise_test.go b/controller/nucleus/initialise_test.go index 241449d00c50d4329197150e1410976fb72783b0..ac99f917528780d9baa85b0f2ddab2cb36185ade 100644 --- a/controller/nucleus/initialise_test.go +++ b/controller/nucleus/initialise_test.go @@ -6,8 +6,6 @@ import ( "path/filepath" "testing" - eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/store" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" @@ -152,55 +150,54 @@ func readTestUUIDs() { } } -func mockNetworkElement() networkelement.NetworkElement { - mockPlugin := &mocks.Plugin{} - mockPlugin.On("ID").Return(defaultPluginID) - mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil) - mockPlugin.On("Model", mock.Anything).Return([]byte( - "{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}"), - nil, - ) +// func mockNetworkElement() networkelement.NetworkElement { +// mockPlugin := &mocks.Plugin{} +// mockPlugin.On("ID").Return(defaultPluginID) +// mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil) +// mockPlugin.On("Model", mock.Anything).Return([]byte( +// "{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}"), +// nil, +// ) - return &CommonNetworkElement{ - UUID: mdid, - Plugin: mockPlugin, - transport: &mocks.Transport{}, - name: "mockNetworkElement", - } -} +// return &CommonNetworkElement{ +// UUID: mdid, +// Plugin: mockPlugin, +// transport: &mocks.Transport{}, +// name: "mockNetworkElement", +// } +// } -func newPnd() (*pndImplementation, error) { - mockPlugin := &mocks.Plugin{} - mockPlugin.On("ID").Return(defaultPluginID) - mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil) - mockPlugin.On("Model", mock.Anything).Return([]byte( - "{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}"), - nil, - ) +// func newPnd() (*pndImplementation, error) { +// mockPlugin := &mocks.Plugin{} +// mockPlugin.On("ID").Return(defaultPluginID) +// mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil) +// mockPlugin.On("Model", mock.Anything).Return([]byte( +// "{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}"), +// nil, +// ) - eventService := eventservice.NewMockEventService() +// eventService := eventservice.NewMockEventService() - deviceStore := NewMemoryNetworkElementStore() - pluginService := NewPluginServiceMock() - err := pluginService.Add(mockPlugin) - if err != nil { - return nil, err - } - deviceService := NewNetworkElementService( - deviceStore, - pluginService, - eventService, - ) +// deviceStore := NewMemoryNetworkElementStore() +// pluginService := NewPluginServiceMock() +// err := pluginService.Add(mockPlugin) +// if err != nil { +// return nil, err +// } +// deviceService := NewNetworkElementService( +// deviceStore, +// pluginService, +// eventService, +// ) - return &pndImplementation{ - Name: "default", - Description: "default test pnd", - pluginService: pluginService, - networkElementService: deviceService, - changes: store.NewChangeStore(), - Id: defaultPndID, - }, nil -} +// return &pndImplementation{ +// Name: "default", +// Description: "default test pnd", +// pluginService: pluginService, +// networkElementService: deviceService, +// Id: defaultPndID, +// }, nil +// } // removeTestGoStructs removes the plugins created during running the test in the current directory based on their name consisting of a uuid // and the time since they`ve been created. diff --git a/controller/nucleus/memoryPndStore.go b/controller/nucleus/memoryPndStore.go index e454095a2c6da10dac1edb8d28c890d2dae91051..8fe4286e95ba819ccf099b38ae8f819364a6817b 100644 --- a/controller/nucleus/memoryPndStore.go +++ b/controller/nucleus/memoryPndStore.go @@ -1,6 +1,8 @@ package nucleus import ( + "encoding/json" + "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" @@ -10,26 +12,38 @@ import ( // MemoryPndStore provides a in-memory implementation for a pnd store. type MemoryPndStore struct { - Store map[uuid.UUID]networkdomain.NetworkDomain + Store map[uuid.UUID]networkdomain.LoadedPnd pendingChannels map[uuid.UUID]chan networkelement.Details } // NewMemoryPndStore returns a in-memory implementation for a pnd store. func NewMemoryPndStore() networkdomain.PndStore { return &MemoryPndStore{ - Store: make(map[uuid.UUID]networkdomain.NetworkDomain), + Store: make(map[uuid.UUID]networkdomain.LoadedPnd), pendingChannels: make(map[uuid.UUID]chan networkelement.Details), } } // Add adds a pnd to the store. func (t *MemoryPndStore) Add(item networkdomain.NetworkDomain) error { - _, ok := t.Store[item.ID()] + var pnd networkdomain.LoadedPnd + + b, err := json.Marshal(item) + if err != nil { + return err + } + + err = json.Unmarshal(b, &pnd) + if err != nil { + return err + } + + _, ok := t.Store[uuid.MustParse(pnd.ID)] if ok { return nil } - t.Store[item.ID()] = item + t.Store[item.ID()] = pnd return nil } @@ -42,18 +56,19 @@ func (t *MemoryPndStore) Delete(item networkdomain.NetworkDomain) error { } // Get provides a the query interface to find a stored pnd. -func (t *MemoryPndStore) Get(query store.Query) (networkdomain.NetworkDomain, error) { +func (t *MemoryPndStore) Get(query store.Query) (networkdomain.LoadedPnd, error) { + // First search for direct hit on UUID. item, ok := t.Store[query.ID] if !ok { - return nil, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name} + return item, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name} } return item, nil } // GetAll returns all pnds currently on the store. -func (t *MemoryPndStore) GetAll() ([]networkdomain.NetworkDomain, error) { - var allItems []networkdomain.NetworkDomain +func (t *MemoryPndStore) GetAll() ([]networkdomain.LoadedPnd, error) { + var allItems []networkdomain.LoadedPnd for _, item := range t.Store { allItems = append(allItems, item) diff --git a/controller/nucleus/metrics.go b/controller/nucleus/metrics.go deleted file mode 100644 index d8a4b3b04eedc4b818a8c859f295e168f65746f9..0000000000000000000000000000000000000000 --- a/controller/nucleus/metrics.go +++ /dev/null @@ -1,56 +0,0 @@ -package nucleus - -import ( - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promauto" -) - -var ( - networkElementCreationsTotal = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "device_creations_total", - Help: "Total number of created devices", - }, - []string{"type"}, - ) - - networkElementCreationDurationSecondsTotal = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "device_creation_duration_seconds_total", - Help: "Total time needed to create devices", - }, - []string{"type"}, - ) - - networkElementCreationDurationSeconds = promauto.NewHistogramVec( - prometheus.HistogramOpts{ - Name: "device_creation_duration_seconds", - Help: "Histogram of network element creation times", - }, - []string{"type"}, - ) - - networkElementDeletionsTotal = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "device_deletions_total", - Help: "Total number of deleted devices", - }, - []string{"type"}, - ) - - networkElementDeletionDurationSecondsTotal = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "device_deletion_duration_seconds_total", - Help: "Total time needed to delete devices", - }, - []string{"type"}, - ) - - networkElementDeletionDurationSeconds = promauto.NewHistogramVec( - prometheus.HistogramOpts{ - Name: "device_deletion_duration_seconds", - Help: "Histogram of network element deletion times", - }, - []string{"type"}, - ) -) diff --git a/controller/nucleus/networkElement.go b/controller/nucleus/networkElement.go index 81250efd4b2c01f0e670ec9b7594579aec63f13e..8ba007ae7ab40011a052f34771e3f9c4bbc3f0f4 100644 --- a/controller/nucleus/networkElement.go +++ b/controller/nucleus/networkElement.go @@ -20,7 +20,9 @@ func NewNetworkElement( name string, uuidInput uuid.UUID, opt *tpb.TransportOption, - plugin plugin.Plugin, metadata conflict.Metadata) (networkelement.NetworkElement, error) { + pndID uuid.UUID, + plugin plugin.Plugin, + metadata conflict.Metadata) (networkelement.NetworkElement, error) { t, err := NewTransport(opt, plugin) if err != nil { return nil, err @@ -45,6 +47,7 @@ func NewNetworkElement( name: name, transportOptions: opt, Metadata: metadata, + pndID: pndID, }, }, nil } @@ -55,6 +58,7 @@ func NewNetworkElement( transport: t, name: name, transportOptions: opt, + pndID: pndID, Metadata: metadata, }, nil } @@ -78,6 +82,9 @@ type CommonNetworkElement struct { transportOptions *tpb.TransportOption Metadata conflict.Metadata + + // ID of the PND this network element is associated with. + pndID uuid.UUID } // ID returns the UUID of the Network Element. @@ -145,6 +152,16 @@ func (n *CommonNetworkElement) GetMetadata() conflict.Metadata { return n.Metadata } +// PndID returns the ID of the associated PND. +func (n *CommonNetworkElement) PndID() uuid.UUID { + return n.pndID +} + +// SetPnd sets the Network Element's PndId. +func (n *CommonNetworkElement) SetPnd(id uuid.UUID) { + n.pndID = id +} + // CsbiNetworkElement is used for the cSBI functionality. type CsbiNetworkElement struct { CommonNetworkElement @@ -186,6 +203,11 @@ func (n *CsbiNetworkElement) GetMetadata() conflict.Metadata { return n.Metadata } +// PndID returns the ID of the associated PND. +func (n *CsbiNetworkElement) PndID() uuid.UUID { + return n.pndID +} + // ProcessResponse processes a response for the Network Element. func (d *CsbiNetworkElement) ProcessResponse(resp proto.Message) error { // TODO: callback to send response to caller @@ -228,6 +250,14 @@ func (n *CommonNetworkElement) MarshalJSON() ([]byte, error) { pluginUUID := n.Plugin.ID() + var pndUUID uuid.UUID + + if n.pndID == uuid.Nil { + pndUUID = uuid.UUID{} + } else { + pndUUID = n.pndID + } + modelAsString, err := n.Plugin.Model(false) if err != nil { return []byte{}, err @@ -243,6 +273,7 @@ func (n *CommonNetworkElement) MarshalJSON() ([]byte, error) { TransportOptionType spb.Type `json:"transport_option"` Plugin uuid.UUID `json:"plugin,omitempty"` Model string `bson:"model,omitempty"` + PndID uuid.UUID `json:"pnd_id,omitempty"` }{ ID: n.ID(), Name: n.Name(), @@ -253,6 +284,7 @@ func (n *CommonNetworkElement) MarshalJSON() ([]byte, error) { TransportOptionType: transportOptionType, Plugin: pluginUUID, Model: string(modelAsString), + PndID: pndUUID, }) } @@ -298,6 +330,7 @@ func (n *CommonNetworkElement) MarshalBSON() ([]byte, error) { TransportOptionType spb.Type `bson:"transport_option"` Plugin string `bson:"plugin,omitempty"` Model string `bson:"model,omitempty"` + PndID string `bson:"pnd_id,omitempty"` }{ ID: n.ID().String(), Name: n.Name(), @@ -308,6 +341,7 @@ func (n *CommonNetworkElement) MarshalBSON() ([]byte, error) { TransportOptionType: transportOptionType, Plugin: pluginUUID.String(), Model: modelAsString, + PndID: n.pndID.String(), }) } diff --git a/controller/nucleus/networkElementFilesystemStore.go b/controller/nucleus/networkElementFilesystemStore.go index 251fb229a59af45d4d125d5f8f72991f5b40dad2..d4b5850cd0e33126db0708855ac63554c9fe12f7 100644 --- a/controller/nucleus/networkElementFilesystemStore.go +++ b/controller/nucleus/networkElementFilesystemStore.go @@ -8,28 +8,23 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/store" - "github.com/google/uuid" log "github.com/sirupsen/logrus" ) // FilesystemNetworkElementStore is the filesystem implementation of the network element store. type FilesystemNetworkElementStore struct { - pndUUID uuid.UUID fileMutex sync.Mutex pathToNetworkElementFile string } // NewFilesystemNetworkElementStore returns a filesystem implementation for a pnd store. -func NewFilesystemNetworkElementStore(pndUUID uuid.UUID) networkelement.Store { - networkElementFilenameForUUID := store.GetStoreFilenameForUUID(pndUUID, store.NetworkElementFilenameSuffix) - - if err := store.EnsureFilesystemStorePathExists(networkElementFilenameForUUID); err != nil { +func NewFilesystemNetworkElementStore() networkelement.Store { + if err := store.EnsureFilesystemStorePathExists(store.NetworkElementFilenameSuffix); err != nil { log.Error(err) } return &FilesystemNetworkElementStore{ - pathToNetworkElementFile: store.GetCompletePathToFileStore(networkElementFilenameForUUID), + pathToNetworkElementFile: store.GetCompletePathToFileStore(store.NetworkElementFilenameSuffix), fileMutex: sync.Mutex{}, - pndUUID: pndUUID, } } diff --git a/controller/nucleus/networkElementFilesystemStore_test.go b/controller/nucleus/networkElementFilesystemStore_test.go index b6a70cb1393f1fe4bf64a6518105fb950f63f126..5050219fd07be715a65b449dc63708a0585a3d16 100644 --- a/controller/nucleus/networkElementFilesystemStore_test.go +++ b/controller/nucleus/networkElementFilesystemStore_test.go @@ -31,7 +31,6 @@ func returnBasicTransportOption() tpb.TransportOption { func TestAddNetworkElement(t *testing.T) { defer ensureStoreFileForTestsIsRemoved(store.NetworkElementFilenameSuffix) - pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") mneID, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") pluginID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") trop := returnBasicTransportOption() @@ -40,8 +39,8 @@ func TestAddNetworkElement(t *testing.T) { plugin1.On("ID").Return(pluginID1) plugin1.On("Model", mock.Anything).Return([]byte{}, nil) - networkElementStore := NewNetworkElementStore(pndID) - mne, _ := NewNetworkElement("testNetworkElement", mneID, &trop, plugin1, conflict.Metadata{}) + networkElementStore := NewNetworkElementStore() + mne, _ := NewNetworkElement("testNetworkElement", mneID, &trop, defaultPndID, plugin1, conflict.Metadata{}) err := networkElementStore.Add(mne) if err != nil { @@ -52,8 +51,7 @@ func TestAddNetworkElement(t *testing.T) { func TestGetAllNetworkElements(t *testing.T) { defer ensureStoreFileForTestsIsRemoved(store.NetworkElementFilenameSuffix) - pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") - networkElementStore := NewNetworkElementStore(pndID) + networkElementStore := NewNetworkElementStore() pluginID, _ := uuid.Parse("ssssssss-ssss-ssss-ssss-ssssssssssss") plugin := &mocks.Plugin{} @@ -65,12 +63,12 @@ func TestGetAllNetworkElements(t *testing.T) { transportOptions := returnBasicTransportOption() - mne1, err := NewNetworkElement("testname", mneID1, &transportOptions, plugin, conflict.Metadata{}) + mne1, err := NewNetworkElement("testname", mneID1, &transportOptions, defaultPndID, plugin, conflict.Metadata{}) if err != nil { t.Error(err) } - mne2, err := NewNetworkElement("testname2", mneID2, &transportOptions, plugin, conflict.Metadata{}) + mne2, err := NewNetworkElement("testname2", mneID2, &transportOptions, defaultPndID, plugin, conflict.Metadata{}) if err != nil { t.Error(err) } @@ -107,8 +105,7 @@ func TestGetAllNetworkElements(t *testing.T) { func TestGetNetworkElement(t *testing.T) { defer ensureStoreFileForTestsIsRemoved(store.NetworkElementFilenameSuffix) - pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") - networkElementStore := NewNetworkElementStore(pndID) + networkElementStore := NewNetworkElementStore() pluginID, _ := uuid.Parse("ssssssss-ssss-ssss-ssss-ssssssssssss") plugin := &mocks.Plugin{} @@ -120,12 +117,12 @@ func TestGetNetworkElement(t *testing.T) { trop := returnBasicTransportOption() - mne1, err := NewNetworkElement("testname", mneID1, &trop, plugin, conflict.Metadata{}) + mne1, err := NewNetworkElement("testname", mneID1, &trop, defaultPndID, plugin, conflict.Metadata{}) if err != nil { t.Error(err) } - mne2, err := NewNetworkElement("testname2", mneID2, &trop, plugin, conflict.Metadata{}) + mne2, err := NewNetworkElement("testname2", mneID2, &trop, defaultPndID, plugin, conflict.Metadata{}) if err != nil { t.Error(err) } @@ -155,7 +152,6 @@ func TestGetNetworkElement(t *testing.T) { func TestUpdateNetworkElement(t *testing.T) { defer ensureStoreFileForTestsIsRemoved(store.NetworkElementFilenameSuffix) - pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") mneID, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") pluginID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") @@ -167,15 +163,15 @@ func TestUpdateNetworkElement(t *testing.T) { plugin1.On("ID").Return(pluginID1) plugin1.On("Model", mock.Anything).Return([]byte{}, nil) - networkElementStore := NewNetworkElementStore(pndID) - mne, _ := NewNetworkElement("testNetworkElement", mneID, &trop, plugin1, conflict.Metadata{}) + networkElementStore := NewNetworkElementStore() + mne, _ := NewNetworkElement("testNetworkElement", mneID, &trop, defaultPndID, plugin1, conflict.Metadata{}) err := networkElementStore.Add(mne) if err != nil { t.Error(err) } - mne, _ = NewNetworkElement(updatedNetworkElementName, mneID, &trop, plugin1, conflict.Metadata{}) + mne, _ = NewNetworkElement(updatedNetworkElementName, mneID, &trop, defaultPndID, plugin1, conflict.Metadata{}) err = networkElementStore.Update(mne) if err != nil { @@ -198,8 +194,7 @@ func TestUpdateNetworkElement(t *testing.T) { func TestDeleteNetworkElement(t *testing.T) { defer ensureStoreFileForTestsIsRemoved(store.NetworkElementFilenameSuffix) - pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") - networkElementStore := NewNetworkElementStore(pndID) + networkElementStore := NewNetworkElementStore() pluginID, _ := uuid.Parse("ssssssss-ssss-ssss-ssss-ssssssssssss") plugin := &mocks.Plugin{} @@ -211,12 +206,12 @@ func TestDeleteNetworkElement(t *testing.T) { trop := returnBasicTransportOption() - mne1, err := NewNetworkElement("testname", mneID1, &trop, plugin, conflict.Metadata{}) + mne1, err := NewNetworkElement("testname", mneID1, &trop, defaultPndID, plugin, conflict.Metadata{}) if err != nil { t.Error(err) } - mne2, err := NewNetworkElement("testname2", mneID2, &trop, plugin, conflict.Metadata{}) + mne2, err := NewNetworkElement("testname2", mneID2, &trop, defaultPndID, plugin, conflict.Metadata{}) if err != nil { t.Error(err) } diff --git a/controller/nucleus/networkElementService.go b/controller/nucleus/networkElementService.go index 61c5d5be601fffa971ae1d65f6d0afe6eb43d220..245acdda76ac1691168c4a3cb95ec6173703962c 100644 --- a/controller/nucleus/networkElementService.go +++ b/controller/nucleus/networkElementService.go @@ -220,6 +220,7 @@ func (s *NetworkElementService) createNetworkElementFromStore(loadedNetworkEleme }, Type: spb.Type_TYPE_OPENCONFIG, }, + uuid.MustParse(loadedNetworkElement.PndID), pluginForNetworkElement, loadedNetworkElement.Metadata, ) diff --git a/controller/nucleus/networkElementService_test.go b/controller/nucleus/networkElementService_test.go index dab138965e353268adb4d6a6584409c8f0af6016..2de46525240fa716d25ad965084c66a52ddddb58 100644 --- a/controller/nucleus/networkElementService_test.go +++ b/controller/nucleus/networkElementService_test.go @@ -3,6 +3,7 @@ package nucleus import ( "testing" + rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" @@ -10,6 +11,7 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" "github.com/stretchr/testify/mock" + "google.golang.org/grpc" ) func getMockNetworkElement(mneID uuid.UUID, plugin plugin.Plugin) (networkelement.NetworkElement, error) { @@ -17,6 +19,7 @@ func getMockNetworkElement(mneID uuid.UUID, plugin plugin.Plugin) (networkelemen UUID: mneID, Plugin: plugin, transport: &mocks.Transport{}, + pndID: uuid.New(), }, nil } @@ -34,7 +37,7 @@ func getNetworkElementTestStores(t *testing.T, mneID uuid.UUID) (networkelement. networkElementStore := NewMemoryNetworkElementStore() pluginService := NewPluginService(pluginStore, eventService, func(lp plugin.LoadedPlugin) (plugin.Plugin, error) { return mockPlugin, nil - }) + }, rpb.NewPluginRegistryServiceClient(&grpc.ClientConn{})) networkElementService := NewNetworkElementService( networkElementStore, pluginService, diff --git a/controller/nucleus/networkElementStore.go b/controller/nucleus/networkElementStore.go index 72b663adbe7a82750386736c77f0987b3e1a12bc..3d1449c204a5cee0f3706444681d6e8ce41fbac9 100644 --- a/controller/nucleus/networkElementStore.go +++ b/controller/nucleus/networkElementStore.go @@ -1,28 +1,25 @@ package nucleus import ( - "fmt" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/store" - "github.com/google/uuid" log "github.com/sirupsen/logrus" ) // NewNetworkElementStore returns a NetworkElementStore. -func NewNetworkElementStore(pndUUID uuid.UUID) networkelement.Store { +func NewNetworkElementStore() networkelement.Store { storeMode := store.GetStoreMode() log.Debugf("StoreMode: %s", storeMode) switch storeMode { case store.Database: return &DatabaseNetworkElementStore{ - storeName: fmt.Sprintf("networkElement-store-%s.json", pndUUID.String()), + storeName: "networkElement-store.json", } default: - store := NewFilesystemNetworkElementStore(pndUUID) + store := NewFilesystemNetworkElementStore() return store } } diff --git a/controller/nucleus/networkElementWatcher.go b/controller/nucleus/networkElementWatcher.go index b93d067738176c9b5e05233064c106836a00fe9b..9ff8ee31efdc05473b0ce038680be11c3c692260 100644 --- a/controller/nucleus/networkElementWatcher.go +++ b/controller/nucleus/networkElementWatcher.go @@ -8,7 +8,6 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/event" eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" @@ -21,7 +20,7 @@ import ( const ( subscribeSampleInterval uint64 = 1000000000 // 1 second in nanoseconds - // TODO: These gNMI options are adjusted to arista gNMI fork. Change when switching to native gNMI. + // Note: These gNMI options are adjusted to arista gNMI fork. Change when switching to native gNMI. gNMISubscribeMode string = "stream" gNMIStreamMode string = "on_change" ) @@ -29,7 +28,7 @@ const ( // NetworkElementWatcher is a component that subscribes to network elements via gNMI from within the controller and handles // responses by triggering the internal event process. type NetworkElementWatcher struct { - pndStore networkdomain.PndStore + mneService networkelement.Service networkelementSubcriptions map[uuid.UUID]*networkelementSubscriptionHelper eventService eventInterfaces.Service } @@ -40,19 +39,19 @@ type networkelementSubscriptionHelper struct { stopFunc context.CancelFunc } -// NewNetworkElementWatcher takes a pndStore to subscribe to network element paths. -func NewNetworkElementWatcher(pndStore networkdomain.PndStore, eventService eventInterfaces.Service) *NetworkElementWatcher { +// NewNetworkElementWatcher allows to subscribe to network element paths. +func NewNetworkElementWatcher(mneService networkelement.Service, eventService eventInterfaces.Service) *NetworkElementWatcher { return &NetworkElementWatcher{ - pndStore: pndStore, + mneService: mneService, networkelementSubcriptions: make(map[uuid.UUID]*networkelementSubscriptionHelper), eventService: eventService, } } -// SubToNetworkElements subscribes to every available network element in each network domain according to provided SubscribeOptions. +// SubscribeToNetworkElements subscribes to every available network element in each network domain according to provided SubscribeOptions. // Paths should be provided in the following format [][]string{{"system", "config", "hostname"}} // SubscribeOptions can be nil. Use nil for a fixed, pre-defined set of gNMI subscription options (streaming in sample mode each second). -func (n *NetworkElementWatcher) SubToNetworkElements(paths [][]string, opts *gnmi.SubscribeOptions) { +func (n *NetworkElementWatcher) SubscribeToNetworkElements(paths [][]string, opts *gnmi.SubscribeOptions) { if opts == nil { opts = &gnmi.SubscribeOptions{ Mode: gNMISubscribeMode, @@ -62,37 +61,37 @@ func (n *NetworkElementWatcher) SubToNetworkElements(paths [][]string, opts *gnm } } - pnds, err := n.pndStore.GetAll() + mnes, err := n.mneService.GetAll() if err != nil { log.Error(err) + return } - for _, pnd := range pnds { - n.subscribeToPndNetworkElements(pnd, opts) + for _, mne := range mnes { + n.subscribeToNetworkElement(mne, opts) } } -func (n *NetworkElementWatcher) subscribeToPndNetworkElements(pnd networkdomain.NetworkDomain, opts *gnmi.SubscribeOptions) { - for _, mne := range pnd.NetworkElements() { - subID := uuid.New() +func (n *NetworkElementWatcher) subscribeToNetworkElement(mne networkelement.NetworkElement, opts *gnmi.SubscribeOptions) { + subID := uuid.New() - stopContext, cancel := context.WithCancel(context.Background()) - n.addToNetworkElementSubscriptions(subID, &networkelementSubscriptionHelper{ - stopSubscribeCtx: stopContext, - stopFunc: cancel, - }) - go n.callSubscribe(stopContext, pnd.ID().String(), mne, opts) - } + stopContext, cancel := context.WithCancel(context.Background()) + n.addToNetworkElementSubscriptions(subID, &networkelementSubscriptionHelper{ + stopSubscribeCtx: stopContext, + stopFunc: cancel, + }) + + go n.callSubscribe(stopContext, mne, opts) } -func (n *NetworkElementWatcher) callSubscribe(stopContext context.Context, pndID string, mne networkelement.NetworkElement, opts *gnmi.SubscribeOptions) { +func (n *NetworkElementWatcher) callSubscribe(stopContext context.Context, mne networkelement.NetworkElement, opts *gnmi.SubscribeOptions) { gNMIOptionsCtx := context.Background() gNMIOptionsCtx = context.WithValue(gNMIOptionsCtx, types.CtxKeyOpts, opts) // SubscriptionInformation contains pnd ID, network element ID and name to be used in the internal subscribe to check // from which network element a response was sent if err := mne.Transport().ControlPlaneSubscribe(gNMIOptionsCtx, n.handleSubscribeResponse, &transport.SubscriptionInformation{ - PndID: pndID, + PndID: mne.PndID().String(), NetworkElementID: mne.ID().String(), NetworkElementName: mne.Name(), StopContext: stopContext, @@ -147,17 +146,7 @@ func (n *NetworkElementWatcher) handleSubscribeResponse(resp *gpb.SubscribeRespo } func (n *NetworkElementWatcher) handleSubscribeResponseUpdate(resp *gpb.SubscribeResponse_Update, subscriptionInfo *transport.SubscriptionInformation) { - pndID, err := uuid.Parse(subscriptionInfo.PndID) - if err != nil { - log.Error(err) - } - - pnd, err := n.pndStore.Get(store.Query{ID: pndID}) - if err != nil { - log.Error(err) - } - - mne, err := pnd.GetNetworkElement(subscriptionInfo.NetworkElementID) + mne, err := n.mneService.Get(store.Query{ID: uuid.MustParse(subscriptionInfo.NetworkElementID)}) if err != nil { log.Error(err) } diff --git a/controller/nucleus/networkElement_test.go b/controller/nucleus/networkElement_test.go index 5d24298e81fcf31c9dd466c28e0c0239db18a513..6294cf07da1784ed6ab591113f56e27b11098f48 100644 --- a/controller/nucleus/networkElement_test.go +++ b/controller/nucleus/networkElement_test.go @@ -1,120 +1,126 @@ package nucleus -import ( - "reflect" - "testing" +// import ( +// "reflect" +// "testing" - "code.fbi.h-da.de/danet/gosdn/controller/conflict" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" - "code.fbi.h-da.de/danet/gosdn/controller/mocks" +// "code.fbi.h-da.de/danet/gosdn/controller/conflict" +// "code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound" +// "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" - tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" +// tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" - "github.com/google/uuid" -) +// "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" +// "github.com/google/uuid" +// "github.com/openconfig/ygot/ygot" +// ) -func TestNetworkElement_Id(t *testing.T) { - type fields struct { - Plugin plugin.Plugin - Transport transport.Transport - UUID uuid.UUID - Name string - } - tests := []struct { - name string - fields fields - want uuid.UUID - }{ - { - name: "default", - fields: fields{ - UUID: mneid, - }, - want: mneid, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - d := &CommonNetworkElement{ - Plugin: tt.fields.Plugin, - transport: tt.fields.Transport, - UUID: tt.fields.UUID, - name: tt.fields.Name, - } - if got := d.ID(); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ID() = %v, want %v", got, tt.want) - } - }) - } -} +// func TestNetworkElement_Id(t *testing.T) { +// type fields struct { +// Model ygot.ValidatedGoStruct +// SBI southbound.SouthboundInterface +// Transport transport.Transport +// UUID uuid.UUID +// Name string +// } +// tests := []struct { +// name string +// fields fields +// want uuid.UUID +// }{ +// { +// name: "default", +// fields: fields{ +// UUID: mneid, +// }, +// want: mneid, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// d := &CommonNetworkElement{ +// Model: tt.fields.Model, +// sbi: tt.fields.SBI, +// transport: tt.fields.Transport, +// UUID: tt.fields.UUID, +// name: tt.fields.Name, +// } +// if got := d.ID(); !reflect.DeepEqual(got, tt.want) { +// t.Errorf("ID() = %v, want %v", got, tt.want) +// } +// }) +// } +// } -func TestNewNetworkElement(t *testing.T) { - mockPlugin := mockPlugin(t) - type args struct { - plugin plugin.Plugin - opts *tpb.TransportOption - name string - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "default", - args: args{ - plugin: mockPlugin, - opts: &tpb.TransportOption{ - Address: "test:///", - Username: "test", - Password: "test", - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{ - Compression: "", - GrpcDialOptions: nil, - Token: "", - Encoding: 0, - }, - }, - }, - name: "MyNetworkElement", - }, - }, - { - name: "invalid options", - args: args{ - plugin: mockPlugin, - opts: &tpb.TransportOption{ - Address: "test:///", - Username: "test", - Password: "test", - }, - name: "MyNetworkElement", - }, - wantErr: true, - }, - } - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - resp, err := NewNetworkElement(tt.args.name, uuid.Nil, tt.args.opts, tt.args.plugin, conflict.Metadata{}) - if (err != nil) != tt.wantErr { - t.Errorf("NewNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - return - } - if resp != nil { - if reflect.TypeOf(resp.GetPlugin()) != reflect.TypeOf(&mocks.Plugin{}) { - t.Error("NewNetworkElement() returned invalid plugin") - } - if reflect.TypeOf(resp.Transport()) != reflect.TypeOf(&Gnmi{}) { - t.Error("NewNetworkElement() returned invalid transport") - } - if resp.Name() != "MyNetworkElement" { - t.Error("NewNetworkElement() returned wrong name") - } - } - }) - } -} +// func TestNewNetworkElement(t *testing.T) { +// sbi := &OpenConfig{} +// type args struct { +// sbi southbound.SouthboundInterface +// opts *tpb.TransportOption +// name string +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// { +// name: "default", +// args: args{ +// sbi: sbi, +// opts: &tpb.TransportOption{ +// Address: "test:///", +// Username: "test", +// Password: "test", +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{ +// Compression: "", +// GrpcDialOptions: nil, +// Token: "", +// Encoding: 0, +// }, +// }, +// }, +// name: "MyNetworkElement", +// }, +// }, +// { +// name: "invalid options", +// args: args{ +// sbi: sbi, +// opts: &tpb.TransportOption{ +// Address: "test:///", +// Username: "test", +// Password: "test", +// }, +// name: "MyNetworkElement", +// }, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() +// resp, err := NewNetworkElement(tt.args.name, uuid.Nil, tt.args.opts, tt.args.sbi, conflict.Metadata{}) +// if (err != nil) != tt.wantErr { +// t.Errorf("NewNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if resp != nil { +// if reflect.TypeOf(resp.GetPlugin()) != reflect.TypeOf(&openconfig.Device{}) { +// t.Error("NewNetworkElement() returned invalid GoStruct") +// } +// if reflect.TypeOf(resp.Transport()) != reflect.TypeOf(&Gnmi{}) { +// t.Error("NewNetworkElement() returned invalid transport") +// } +// if reflect.TypeOf(resp.SBI()) != reflect.TypeOf(&OpenConfig{}) { +// t.Error("NewNetworkElement() returned invalid GoStruct") +// } +// if resp.Name() != "MyNetworkElement" { +// t.Error("NewNetworkElement() returned wrong name") +// } +// } +// }) +// } +// } diff --git a/controller/nucleus/pluginService.go b/controller/nucleus/pluginService.go index 220177b70258fe1c9475c0e178c4a5389a64d796..2a8c28c80da6f63c412de938133f56001607f31f 100644 --- a/controller/nucleus/pluginService.go +++ b/controller/nucleus/pluginService.go @@ -1,15 +1,27 @@ package nucleus import ( + "context" "errors" - + "fmt" + "io" + "os" + "path/filepath" + "strings" + "time" + + rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" + "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/event" eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" + "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util" "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" hcplugin "github.com/hashicorp/go-plugin" log "github.com/sirupsen/logrus" + "github.com/spf13/viper" + "google.golang.org/grpc" ) const ( @@ -22,14 +34,16 @@ type PluginService struct { pluginStore plugin.Store eventService eventInterfaces.Service createPluginFromStoreFn func(plugin.LoadedPlugin) (plugin.Plugin, error) + pluginRegistryClient rpb.PluginRegistryServiceClient } // NewPluginService creates a plugin service. -func NewPluginService(pluginStore plugin.Store, eventService eventInterfaces.Service, createPluginFromStoreFn func(plugin.LoadedPlugin) (plugin.Plugin, error)) plugin.Service { +func NewPluginService(pluginStore plugin.Store, eventService eventInterfaces.Service, createPluginFromStoreFn func(plugin.LoadedPlugin) (plugin.Plugin, error), pluginRegistryClient rpb.PluginRegistryServiceClient) plugin.Service { return &PluginService{ pluginStore: pluginStore, eventService: eventService, createPluginFromStoreFn: createPluginFromStoreFn, + pluginRegistryClient: pluginRegistryClient, } } @@ -119,3 +133,111 @@ func (s *PluginService) createPluginFromStore(loadedPlugin plugin.LoadedPlugin) return plugin, nil } + +// RequestPlugin request a plugin from the plugin-registry. +func (s *PluginService) RequestPlugin(requestID uuid.UUID) (plugin.Plugin, error) { + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*1) + defer cancel() + + pluginDownloadRequest := &rpb.GetDownloadRequest{ + Timestamp: time.Now().UnixNano(), + Id: requestID.String(), + } + + dClient, err := s.pluginRegistryClient.Download(ctx, pluginDownloadRequest) + if err != nil { + return nil, err + } + + if err := saveStreamToFile(dClient, util.BundledPluginName, requestID); err != nil { + return nil, err + } + + if err := util.UnzipPlugin(requestID); err != nil { + return nil, err + } + + plugin, err := NewPlugin(requestID) + if err != nil { + return nil, err + } + + if err := s.Add(plugin); err != nil { + return nil, err + } + + return plugin, nil +} + +// StreamClient allows to distinguish between the different ygot +// generated GoStruct clients, which return a stream of bytes. +type StreamClient interface { + Recv() (*rpb.GetDownloadPayload, error) + grpc.ClientStream +} + +// saveStreamToFile takes a StreamClient and processes the included gRPC +// stream. A file with the provided filename is created within the goSDN's +// 'plugin-folder'. Each file is stored in its own folder based on a new +// uuid.UUID. +func saveStreamToFile(sc StreamClient, filename string, id uuid.UUID) (err error) { + folderName := viper.GetString("plugin-folder") + path := filepath.Join(folderName, id.String(), filename) + + // clean path to prevent attackers to get access to to directories elsewhere on the system + path = filepath.Clean(path) + if !strings.HasPrefix(path, folderName) { + return &customerrs.InvalidParametersError{ + Func: saveStreamToFile, + Param: path, + } + } + + // create the directory hierarchy based on the path + if err := os.MkdirAll(filepath.Dir(path), 0770); err != nil { + return err + } + // create the gostructs.go file at path + f, err := os.Create(path) + if err != nil { + return err + } + + defer func() { + if ferr := f.Close(); ferr != nil { + fErrString := ferr.Error() + err = fmt.Errorf("InternalError=%w error closing file:%+s", err, fErrString) + } + }() + + // receive byte stream + for { + payload, err := sc.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + break + } + closeErr := sc.CloseSend() + if closeErr != nil { + return closeErr + } + + return err + } + n, err := f.Write(payload.Chunk) + if err != nil { + closeErr := sc.CloseSend() + if closeErr != nil { + return closeErr + } + + return err + } + log.WithField("n", n).Trace("wrote bytes") + } + if err := f.Sync(); err != nil { + return err + } + + return nil +} diff --git a/controller/nucleus/pluginServiceMock.go b/controller/nucleus/pluginServiceMock.go index f08d3f60b64ee19643b13db1a8f3bbc58688726e..a580657fcd7c203ea0bcbb51260c021f3f71d124 100644 --- a/controller/nucleus/pluginServiceMock.go +++ b/controller/nucleus/pluginServiceMock.go @@ -58,3 +58,9 @@ func (t *PluginServiceMock) GetAll() ([]plugin.Plugin, error) { return allItems, nil } + +// RequestPlugin is a mock for requesting a plugin from the registry. +// TODO: add plugin mock here. +func (t *PluginServiceMock) RequestPlugin(uuid.UUID) (plugin.Plugin, error) { + return nil, nil +} diff --git a/controller/nucleus/pndFilesystemStore.go b/controller/nucleus/pndFilesystemStore.go index 7c6ed54bc14447ce7c02f4269bcce59d67f5cf99..386fc025a7da4f45123520b8b1967966dcfbc8e7 100644 --- a/controller/nucleus/pndFilesystemStore.go +++ b/controller/nucleus/pndFilesystemStore.go @@ -5,8 +5,6 @@ import ( "os" "sync" - cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" - plugin_registry "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" @@ -14,19 +12,15 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" log "github.com/sirupsen/logrus" - "github.com/spf13/viper" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" ) // FilesystemPndStore provides a filesystem implementation for a pnd store. type FilesystemPndStore struct { - pendingChannels map[uuid.UUID]chan networkelement.Details - pluginService plugin.Service - csbiClient cpb.CsbiServiceClient - pluginRegistryClient plugin_registry.PluginRegistryServiceClient - pathToPndFile string - fileMutex sync.Mutex + pendingChannels map[uuid.UUID]chan networkelement.Details + pluginService plugin.Service + // csbiClient cpb.CsbiServiceClient + pathToPndFile string + fileMutex sync.Mutex } // NewFilesystemPndStore returns a filesystem implementation for a pnd store. @@ -43,8 +37,8 @@ func NewFilesystemPndStore(pluginService plugin.Service) FilesystemPndStore { } } -func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.NetworkDomain, error) { - var loadedPnds []LoadedPnd +func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.LoadedPnd, error) { + var loadedPnds []networkdomain.LoadedPnd content, err := os.ReadFile(t.pathToPndFile) if err != nil { @@ -58,25 +52,16 @@ func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.NetworkDomai pnds := make([]networkdomain.NetworkDomain, len(loadedPnds)) - csbiClient, err := t.getCsbiClient() - if err != nil { - return nil, err - } - - pluginRegistryClient, err := t.getPluginRegistryClient() - if err != nil { - return nil, err - } + // csbiClient, err := t.getCsbiClient() + // if err != nil { + // return nil, err + // } for i, loadedPND := range loadedPnds { - newPnd, err := NewPND( + newPnd := NewPND( + uuid.MustParse(loadedPND.ID), loadedPND.Name, loadedPND.Description, - uuid.MustParse(loadedPND.ID), - csbiClient, - pluginRegistryClient, - t.pluginService, - t.callback, ) if err != nil { return nil, err @@ -84,10 +69,10 @@ func (t *FilesystemPndStore) readAllPndsFromFile() ([]networkdomain.NetworkDomai pnds[i] = newPnd } - return pnds, nil + return loadedPnds, nil } -func (t *FilesystemPndStore) writeAllPndsToFile(pnds []networkdomain.NetworkDomain) error { +func (t *FilesystemPndStore) writeAllPndsToFile(pnds []networkdomain.LoadedPnd) error { serializedData, err := json.Marshal(pnds) if err != nil { return err @@ -111,7 +96,13 @@ func (t *FilesystemPndStore) Add(pndToAdd networkdomain.NetworkDomain) error { return err } - pnds = append(pnds, pndToAdd) + var loadedPnd networkdomain.LoadedPnd + loadedPnd, err = store.TransformObjectToLoadedObject[networkdomain.NetworkDomain, networkdomain.LoadedPnd](pndToAdd) + if err != nil { + return err + } + + pnds = append(pnds, loadedPnd) err = t.writeAllPndsToFile(pnds) if err != nil { @@ -132,7 +123,7 @@ func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) err } for i, pnd := range pnds { - if pnd.ID() == pndToDelete.ID() { + if pnd.ID == pndToDelete.ID().String() { //remove item from slice pnds[i] = pnds[len(pnds)-1] pnds = pnds[:len(pnds)-1] @@ -150,26 +141,28 @@ func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) err } // Get provides a the query interface to find a stored pnd. -func (t *FilesystemPndStore) Get(query store.Query) (networkdomain.NetworkDomain, error) { +func (t *FilesystemPndStore) Get(query store.Query) (networkdomain.LoadedPnd, error) { t.fileMutex.Lock() defer t.fileMutex.Unlock() + var loadedPND networkdomain.LoadedPnd + pnds, err := t.readAllPndsFromFile() if err != nil { - return nil, err + return loadedPND, err } for _, pnd := range pnds { - if pnd.ID() == query.ID || pnd.GetName() == query.Name { + if pnd.ID == query.ID.String() || pnd.Name == query.Name { return pnd, nil } } - return nil, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name} + return loadedPND, &customerrs.CouldNotFindError{ID: query.ID, Name: query.Name} } // GetAll returns all pnds currently on the store. -func (t *FilesystemPndStore) GetAll() ([]networkdomain.NetworkDomain, error) { +func (t *FilesystemPndStore) GetAll() ([]networkdomain.LoadedPnd, error) { t.fileMutex.Lock() defer t.fileMutex.Unlock() @@ -198,40 +191,26 @@ func (t *FilesystemPndStore) RemovePendingChannel(id uuid.UUID) { delete(t.pendingChannels, id) } -func (t *FilesystemPndStore) callback(id uuid.UUID, ch chan networkelement.Details) { - if ch != nil { - t.AddPendingChannel(id, ch) - log.Infof("pending channel %v added", id) - } else { - t.RemovePendingChannel(id) - log.Infof("pending channel %v removed", id) - } -} - -func (t *FilesystemPndStore) getCsbiClient() (cpb.CsbiServiceClient, error) { - if t.csbiClient == nil { - orchestrator := viper.GetString("csbi-orchestrator") - conn, err := grpc.Dial(orchestrator, grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - return nil, err - } - - t.csbiClient = cpb.NewCsbiServiceClient(conn) - } - - return t.csbiClient, nil -} - -func (t *FilesystemPndStore) getPluginRegistryClient() (plugin_registry.PluginRegistryServiceClient, error) { - if t.pluginRegistryClient == nil { - pluginRegistry := viper.GetString("plugin-registry") - conn, err := grpc.Dial(pluginRegistry, grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - return nil, err - } - - t.pluginRegistryClient = plugin_registry.NewPluginRegistryServiceClient(conn) - } - - return t.pluginRegistryClient, nil -} +// func (t *FilesystemPndStore) callback(id uuid.UUID, ch chan networkelement.Details) { +// if ch != nil { +// t.AddPendingChannel(id, ch) +// log.Infof("pending channel %v added", id) +// } else { +// t.RemovePendingChannel(id) +// log.Infof("pending channel %v removed", id) +// } +// } + +// func (t *FilesystemPndStore) getCsbiClient() (cpb.CsbiServiceClient, error) { +// if t.csbiClient == nil { +// orchestrator := viper.GetString("csbi-orchestrator") +// conn, err := grpc.Dial(orchestrator, grpc.WithTransportCredentials(insecure.NewCredentials())) +// if err != nil { +// return nil, err +// } + +// t.csbiClient = cpb.NewCsbiServiceClient(conn) +// } + +// return t.csbiClient, nil +// } diff --git a/controller/nucleus/pndFilesystemStore_test.go b/controller/nucleus/pndFilesystemStore_test.go index bc43f74c240caffc9019902716495a2e6ae061cb..e4a1e69dc33353cead9fdfe8326d8c27a09a56df 100644 --- a/controller/nucleus/pndFilesystemStore_test.go +++ b/controller/nucleus/pndFilesystemStore_test.go @@ -15,7 +15,7 @@ func TestAddPnd(t *testing.T) { pndStore := NewPndStore(pluginServiceMock) pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") - pnd, _ := NewPND("testpnd", "test", pndID, nil, nil, pluginServiceMock, nil) + pnd := NewPND(pndID, "testpnd", "test") err := pndStore.Add(pnd) @@ -31,8 +31,8 @@ func TestGetAllPnds(t *testing.T) { pndStore := NewPndStore(pluginServiceMock) pndID1, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") pndID2, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bab") - pnd1, _ := NewPND("testpnd", "test", pndID1, nil, nil, pluginServiceMock, nil) - pnd2, _ := NewPND("testpnd2", "test", pndID2, nil, nil, pluginServiceMock, nil) + pnd1 := NewPND(pndID1, "testpnd", "test") + pnd2 := NewPND(pndID2, "testpnd2", "test") inputPnds := [2]networkdomain.NetworkDomain{pnd1, pnd2} @@ -49,14 +49,14 @@ func TestGetAllPnds(t *testing.T) { } for i, pnd := range returnPnds { - if pnd.GetName() != inputPnds[i].GetName() { - t.Errorf("GetAll() = %v, want %v", pnd.GetName(), inputPnds[i].GetName()) + if pnd.Name != inputPnds[i].GetName() { + t.Errorf("GetAll() = %v, want %v", pnd.Name, inputPnds[i].GetName()) } - if pnd.GetDescription() != inputPnds[i].GetDescription() { - t.Errorf("GetAll() = %v, want %v", pnd.GetDescription(), inputPnds[i].GetDescription()) + if pnd.Description != inputPnds[i].GetDescription() { + t.Errorf("GetAll() = %v, want %v", pnd.Description, inputPnds[i].GetDescription()) } - if pnd.ID() != inputPnds[i].ID() { - t.Errorf("GetAll() = %v, want %v", pnd.ID(), inputPnds[i].ID()) + if pnd.ID != inputPnds[i].ID().String() { + t.Errorf("GetAll() = %v, want %v", pnd.ID, inputPnds[i].ID()) } } } @@ -68,8 +68,8 @@ func TestGetPnd(t *testing.T) { pndStore := NewPndStore(pluginServiceMock) pndID1, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") pndID2, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bab") - pnd1, _ := NewPND("testpnd", "test", pndID1, nil, nil, pluginServiceMock, nil) - pnd2, _ := NewPND("testpnd2", "test", pndID2, nil, nil, pluginServiceMock, nil) + pnd1 := NewPND(pndID1, "testpnd", "test") + pnd2 := NewPND(pndID2, "testpnd2", "test") inputPnds := [2]networkdomain.NetworkDomain{pnd1, pnd2} @@ -85,14 +85,14 @@ func TestGetPnd(t *testing.T) { t.Error(err) } - if returnPnd.GetName() != pnd2.GetName() { - t.Errorf("GetAll() = %v, want %v", pnd2.GetName(), returnPnd.GetName()) + if returnPnd.Name != pnd2.GetName() { + t.Errorf("GetAll() = %v, want %v", pnd2.GetName(), returnPnd.Name) } - if returnPnd.GetDescription() != pnd2.GetDescription() { - t.Errorf("GetAll() = %v, want %v", pnd2.GetDescription(), returnPnd.GetDescription()) + if returnPnd.Description != pnd2.GetDescription() { + t.Errorf("GetAll() = %v, want %v", pnd2.GetDescription(), returnPnd.Description) } - if returnPnd.ID() != pnd2.ID() { - t.Errorf("GetAll() = %v, want %v", pnd2.ID(), returnPnd.ID()) + if returnPnd.ID != pnd2.ID().String() { + t.Errorf("GetAll() = %v, want %v", pnd2.ID(), returnPnd.ID) } } @@ -103,8 +103,8 @@ func TestDeletePnd(t *testing.T) { pndStore := NewPndStore(pluginServiceMock) pndID1, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad") pndID2, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bab") - pnd1, _ := NewPND("testpnd", "test", pndID1, nil, nil, pluginServiceMock, nil) - pnd2, _ := NewPND("testpnd2", "test", pndID2, nil, nil, pluginServiceMock, nil) + pnd1 := NewPND(pndID1, "testpnd", "test") + pnd2 := NewPND(pndID2, "testpnd2", "test") inputPnds := [2]networkdomain.NetworkDomain{pnd1, pnd2} @@ -132,14 +132,14 @@ func TestDeletePnd(t *testing.T) { //only check first element in this case for i, pnd := range returnPnds[1:] { - if pnd.GetName() != inputPnds[i].GetName() { - t.Errorf("GetAll() = %v, want %v", pnd.GetName(), inputPnds[i].GetName()) + if pnd.Name != inputPnds[i].GetName() { + t.Errorf("GetAll() = %v, want %v", pnd.Name, inputPnds[i].GetName()) } - if pnd.GetDescription() != inputPnds[i].GetDescription() { - t.Errorf("GetAll() = %v, want %v", pnd.GetDescription(), inputPnds[i].GetDescription()) + if pnd.Description != inputPnds[i].GetDescription() { + t.Errorf("GetAll() = %v, want %v", pnd.Description, inputPnds[i].GetDescription()) } - if pnd.ID() != inputPnds[i].ID() { - t.Errorf("GetAll() = %v, want %v", pnd.ID(), inputPnds[i].ID()) + if pnd.ID != inputPnds[i].ID().String() { + t.Errorf("GetAll() = %v, want %v", pnd.ID, inputPnds[i].ID()) } } } diff --git a/controller/nucleus/pndService.go b/controller/nucleus/pndService.go new file mode 100644 index 0000000000000000000000000000000000000000..fc2124a87706f6f7bd3653d731aafdd7e8ab277b --- /dev/null +++ b/controller/nucleus/pndService.go @@ -0,0 +1,71 @@ +package nucleus + +import ( + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" + "code.fbi.h-da.de/danet/gosdn/controller/store" + "github.com/google/uuid" +) + +// PndService provides a PND service implementation. +type PndService struct { + pndStore networkdomain.PndStore +} + +// NewPndService creates a PND service. +func NewPndService(pndStore networkdomain.PndStore) networkdomain.Service { + pndService := &PndService{ + pndStore: pndStore, + } + + return pndService +} + +// Add adds a PND to the PND store. +func (p *PndService) Add(pndToAdd networkdomain.NetworkDomain) error { + err := p.pndStore.Add(pndToAdd) + if err != nil { + return err + } + + return nil +} + +// Delete deletes a PND from the PND store. +func (p *PndService) Delete(pndToDelete networkdomain.NetworkDomain) error { + err := p.pndStore.Delete(pndToDelete) + if err != nil { + return err + } + + return nil +} + +// Get takes a PND's UUID or name and returns the PND. +func (p *PndService) Get(query store.Query) (networkdomain.NetworkDomain, error) { + loadedPnd, err := p.pndStore.Get(query) + if err != nil { + return nil, err + } + + return p.createPndFromStore(loadedPnd), nil +} + +// GetAll returns all stores PNDs. +func (p *PndService) GetAll() ([]networkdomain.NetworkDomain, error) { + var pnds []networkdomain.NetworkDomain + + loadedPnds, err := p.pndStore.GetAll() + if err != nil { + return nil, err + } + + for _, loadedPnd := range loadedPnds { + pnds = append(pnds, p.createPndFromStore(loadedPnd)) + } + + return pnds, nil +} + +func (p *PndService) createPndFromStore(loadedPnd networkdomain.LoadedPnd) networkdomain.NetworkDomain { + return NewPND(uuid.MustParse(loadedPnd.ID), loadedPnd.Name, loadedPnd.Description) +} diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go index 4d034a546777373a5e65687a625e034016b83a15..b9577dead6f7814154b800dbb85445df35163e72 100644 --- a/controller/nucleus/principalNetworkDomain.go +++ b/controller/nucleus/principalNetworkDomain.go @@ -1,183 +1,39 @@ package nucleus import ( - "context" - "errors" - "fmt" - "io" - "os" - "path/filepath" - "strings" - "time" - - "code.fbi.h-da.de/danet/gosdn/controller/conflict" - "code.fbi.h-da.de/danet/gosdn/controller/metrics" - "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" - "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util" "go.mongodb.org/mongo-driver/bson" - cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" - rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" - eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" - "google.golang.org/grpc" - "google.golang.org/protobuf/proto" - - "code.fbi.h-da.de/danet/gosdn/controller/customerrs" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" - eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" - - "code.fbi.h-da.de/danet/gosdn/controller/store" - "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" "github.com/google/uuid" - gpb "github.com/openconfig/gnmi/proto/gnmi" - "github.com/openconfig/ygot/ygot" - "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" - "github.com/spf13/viper" ) -// NOTE: Until we've added database support for changes, we will hold -// changeStores in memory for now. -var changeStoreMap = make(map[uuid.UUID]*store.ChangeStore) - -// NewPND creates a Principle Network Domain. -func NewPND( - name string, - description string, - id uuid.UUID, - c cpb.CsbiServiceClient, - p rpb.PluginRegistryServiceClient, - ps plugin.Service, - callback func(uuid.UUID, chan networkelement.Details), -) (networkdomain.NetworkDomain, error) { - eventService, err := eventservice.NewEventService() - if err != nil { - return nil, err - } - networkElementStore := NewNetworkElementStore(id) - networkElementService := NewNetworkElementService( - networkElementStore, - ps, - eventService, - ) - - changeStore, ok := changeStoreMap[id] - if !ok { - changeStore = store.NewChangeStore() - changeStoreMap[id] = changeStore - } - +// NewPNDEntity creates a PND object as it is stored in the storage. +func NewPND(pndID uuid.UUID, name string, description string) networkdomain.NetworkDomain { pnd := &pndImplementation{ - Name: name, - Description: description, - pluginService: ps, - networkElementService: networkElementService, - changes: changeStore, - Id: id, - - csbiClient: c, - pluginRegistryClient: p, - callback: callback, - eventService: eventService, + Id: pndID, + Name: name, + Description: description, } - return pnd, nil + return pnd } type pndImplementation struct { - Name string `json:"name,omitempty"` - Description string `json:"description,omitempty"` - pluginService plugin.Service - networkElementService networkelement.Service - changes *store.ChangeStore + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` //nolint Id uuid.UUID `json:"id,omitempty"` - csbiClient cpb.CsbiServiceClient - pluginRegistryClient rpb.PluginRegistryServiceClient - callback func(uuid.UUID, chan networkelement.Details) - eventService eventInterfaces.Service -} - -func (pnd *pndImplementation) PendingChanges() []uuid.UUID { - return pnd.changes.Pending() -} - -func (pnd *pndImplementation) CommittedChanges() []uuid.UUID { - return pnd.changes.Committed() -} - -func (pnd *pndImplementation) ConfirmedChanges() []uuid.UUID { - return pnd.changes.Confirmed() -} - -func (pnd *pndImplementation) GetChange(cuid uuid.UUID) (change.Change, error) { - return pnd.changes.GetChange(cuid) -} - -func (pnd *pndImplementation) Commit(u uuid.UUID) error { - ch, err := pnd.changes.GetChange(u) - if err != nil { - return err - } - if err := ch.Commit(); err != nil { - return err - } - - // Set all the changes within the network elements model - networkElement, err := pnd.networkElementService.Get(store.Query{ID: ch.AssociatedDeviceID()}) - if err != nil { - return err - } - diff, err := networkElement.GetPlugin().Diff(ch.PreviousState(), ch.IntendedState()) - if err != nil { - return err - } - for _, update := range diff.GetUpdate() { - if err := networkElement.GetPlugin().SetNode(update.GetPath(), update.GetVal()); err != nil { - return err - } - } - for _, deletePath := range diff.GetDelete() { - if err := networkElement.GetPlugin().DeleteNode(deletePath); err != nil { - return err - } - } - - // update the network element - return pnd.networkElementService.Update(networkElement) -} - -func (pnd *pndImplementation) Confirm(u uuid.UUID) error { - ch, err := pnd.changes.GetChange(u) - if err != nil { - return err - } - return ch.Confirm() + // csbiClient cpb.CsbiServiceClient + // callback func(uuid.UUID, chan networkelement.Details) } func (pnd *pndImplementation) ID() uuid.UUID { return pnd.Id } -func (pnd *pndImplementation) NetworkElements() []networkelement.NetworkElement { - allNetworkElements, _ := pnd.networkElementService.GetAll() - - return allNetworkElements -} - -func (pnd *pndImplementation) FlattenedNetworkElements() []networkelement.LoadedNetworkElement { - allNetworkElements, _ := pnd.networkElementService.GetAllAsLoaded() - - return allNetworkElements -} - // GetName returns the name of the PND. func (pnd *pndImplementation) GetName() string { return pnd.Name @@ -188,367 +44,6 @@ func (pnd *pndImplementation) GetDescription() string { return pnd.Description } -// AddNetworkElement adds a new network element to the PND. The UUID for the networkElementID is optional and should normally be empty. -func (pnd *pndImplementation) AddNetworkElement(name string, opt *tpb.TransportOption, requestPluginFunc func(uuid.UUID) (plugin.Plugin, error), pluginID uuid.UUID, optionalNetworkElementID ...uuid.UUID) (uuid.UUID, error) { - networkElementID := uuid.Nil - if len(optionalNetworkElementID) > 0 { - networkElementID = optionalNetworkElementID[0] - } - - if requestPluginFunc == nil { - requestPluginFunc = pnd.requestPlugin - } - - labels := prometheus.Labels{"type": opt.Type.String()} - start := metrics.StartHook(labels, networkElementCreationsTotal) - defer metrics.FinishHook(labels, start, networkElementCreationDurationSecondsTotal, networkElementCreationDurationSeconds) - - plugin, err := requestPluginFunc(pluginID) - if err != nil { - return uuid.Nil, err - } - - mne, err := NewNetworkElement(name, networkElementID, opt, plugin, conflict.Metadata{ResourceVersion: 0}) - if err != nil { - return uuid.Nil, err - } - - return pnd.addNetworkElement(mne) -} - -// TODO: (maba): This should be changed to UUID. -func (pnd *pndImplementation) GetNetworkElement(identifier string) (networkelement.NetworkElement, error) { - id, err := uuid.Parse(identifier) - if err != nil { - id = uuid.Nil - } - - mne, err := pnd.networkElementService.Get(store.Query{ - ID: id, - Name: identifier, - }) - if mne == nil { - return nil, fmt.Errorf("no network element found") - } - if err != nil { - return nil, err - } - - return mne, nil -} - -// RemoveNetworkElement removes a network element from the PND. -func (pnd *pndImplementation) RemoveNetworkElement(uuid uuid.UUID) error { - return pnd.removeNetworkElement(uuid) -} - -// UpdateNetworkElement updates a network element from the PND. -func (pnd *pndImplementation) UpdateNetworkElement(networkElementID uuid.UUID, modelAsString string) error { - err := pnd.networkElementService.UpdateModel(networkElementID, modelAsString) - if err != nil { - return err - } - - err = pnd.ensureIntendedConfigurationIsAppliedOnNetworkElement(networkElementID) - if err != nil { - return err - } - - return err -} - -// addNetworkElement adds a network element to the PND's network element store. -func (pnd *pndImplementation) addNetworkElement(mne networkelement.NetworkElement) (uuid.UUID, error) { - err := pnd.networkElementService.Add(mne) - if err != nil { - return uuid.Nil, err - } - - if mne.IsTransportValid() { - _, err = pnd.Request(mne.ID(), "/") - if err != nil { - return uuid.Nil, err - } - } - - return mne.ID(), nil -} - -func (pnd *pndImplementation) removeNetworkElement(id uuid.UUID) error { - mne, err := pnd.networkElementService.Get(store.Query{ - ID: id, - Name: id.String(), - }) - if err != nil { - return err - } - - if mne == nil { - return fmt.Errorf("no network element found") - } - - labels := prometheus.Labels{"type": mne.Transport().Type()} - start := metrics.StartHook(labels, networkElementDeletionsTotal) - defer metrics.FinishHook(labels, start, networkElementDeletionDurationSecondsTotal, networkElementDeletionDurationSeconds) - switch mne.(type) { - case *CsbiNetworkElement: - return pnd.handleCsbiDeletion(mne) - default: - return pnd.networkElementService.Delete(mne) - } -} - -func (pnd *pndImplementation) MarshalNetworkElement(identifier string) (string, error) { - foundNetworkElement, err := pnd.networkElementService.Get(store.Query{ - ID: uuid.MustParse(identifier), - Name: identifier, - }) - if err != nil { - return "", err - } - - model, err := foundNetworkElement.GetModel() - if err != nil { - return "", err - } - - log.WithFields(log.Fields{ - "pnd": pnd.Id, - "Identifier": identifier, - "Name": foundNetworkElement.Name, - }).Info("marshalled network element") - - return string(model), nil -} - -// Request sends a get request to a specific network element. -func (pnd *pndImplementation) Request(uuid uuid.UUID, path string) (proto.Message, error) { - mne, err := pnd.networkElementService.Get(store.Query{ - ID: uuid, - Name: uuid.String(), - }) - if err != nil { - return nil, err - } - if mne == nil { - return nil, fmt.Errorf("no network element found") - } - ctx := context.Background() - res, err := mne.Transport().Get(ctx, path) - if err != nil { - return nil, err - } - resp, ok := res.(proto.Message) - if !ok { - return nil, &customerrs.InvalidTypeAssertionError{ - Value: res, - Type: (*proto.Message)(nil), - } - } - err = mne.ProcessResponse(resp) - if err != nil { - return nil, err - } - - modelAsString, err := mne.GetModelAsString() - if err != nil { - return nil, err - } - - err = pnd.networkElementService.UpdateModel(uuid, modelAsString) - if err != nil { - return nil, err - } - - return resp, nil -} - -// RequestAll sends a request for all registered network elements. -func (pnd *pndImplementation) RequestAll(path string) error { - allNetworkElements, err := pnd.networkElementService.GetAllAsLoaded() - if err != nil { - return err - } - - for _, mne := range allNetworkElements { - mneUUID, err := uuid.Parse(mne.ID) - if err != nil { - return err - } - _, err = pnd.Request(mneUUID, path) - if err != nil { - return err - } - } - // TODO: (maba): this is not returning any useful information; this should - // return some feedback if the requests were successful - log.WithFields(log.Fields{ - "pnd": pnd.Id, - "path": path, - }).Info("sent request to all network elements") - return nil -} - -func (pnd *pndImplementation) ensureIntendedConfigurationIsAppliedOnNetworkElement(mneID uuid.UUID) error { - mne, err := pnd.networkElementService.Get(store.Query{ - ID: mneID, - }) - if err != nil { - return err - } - - model, err := mne.GetModelAsFilteredCopy() - if err != nil { - return err - } - - req := &gpb.SetRequest{} - path, err := ygot.StringToStructuredPath("/") - if err != nil { - return err - } - - req.Update = []*gpb.Update{{ - Path: path, - Val: &gpb.TypedValue{ - Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: model}, - }, - }} - - response, err := mne.Transport().CustomSet(context.Background(), req) - if err != nil { - log.Errorf("Failed to apply model of network element err=%+v, response=%+v", err, response) - return err - } - - return nil -} - -// ChangeMNE creates a change from the provided Operation, path and value. -// The Change is Pending and times out after the specified timeout period. -func (pnd *pndImplementation) ChangeMNE(duid uuid.UUID, operation ppb.ApiOperation, path string, value ...string) (uuid.UUID, error) { - mne, err := pnd.networkElementService.Get(store.Query{ - ID: duid, - }) - if err != nil { - return uuid.Nil, err - } - - p, err := ygot.StringToStructuredPath(path) - if err != nil { - return uuid.Nil, err - } - - plugin := mne.GetPlugin() - - validatedChangeModel, err := plugin.ValidateChange(operation, p, []byte(value[0])) - if err != nil { - return uuid.Nil, err - } - - filteredMarshaledModel, err := plugin.PruneConfigFalse(validatedChangeModel) - if err != nil { - return uuid.Nil, err - } - - if operation != ppb.ApiOperation_API_OPERATION_DELETE && len(value) != 1 { - return uuid.Nil, &customerrs.InvalidParametersError{ - Func: pnd.ChangeMNE, - Param: value, - } - } - - callback := func(original, modified []byte) error { - ctx := context.WithValue(context.Background(), types.CtxKeyOperation, operation) // nolint - payload := change.Payload{Original: original, Modified: modified} - pathToSet := path - if err := mne.Transport().Set(ctx, payload, pathToSet, plugin); err != nil { - return err - } - return pnd.networkElementService.Update(mne) - } - - currentModel, err := mne.GetModelAsFilteredCopy() - if err != nil { - return uuid.Nil, err - } - - ch := NewChange(duid, currentModel, filteredMarshaledModel, callback) - - if err := pnd.changes.Add(ch); err != nil { - return uuid.Nil, err - } - - return ch.cuid, nil -} - -func (pnd *pndImplementation) SubscribePath(uuid uuid.UUID, subList *ppb.SubscriptionList) error { - mne, err := pnd.networkElementService.Get(store.Query{ - ID: uuid, - }) - if err != nil { - return err - } - - mode, err := mapModeToAristaFork(subList.GetMode()) - if err != nil { - return err - } - - for _, sub := range subList.Subscription { - streamMode, err := mapStreamModeToAristaFork(sub.GetStreamMode()) - if err != nil { - return err - } - - opts := &gnmi.SubscribeOptions{ - Mode: mode, - StreamMode: streamMode, - Paths: [][]string{splitStringPath(sub.GetPath())}, - SampleInterval: sub.SampleInterval, - } - - ctx := context.Background() - ctx = context.WithValue(ctx, types.CtxKeyOpts, opts) - - if err = mne.Transport().Subscribe(ctx); err != nil { - return err - } - } - - return nil -} - -func splitStringPath(s string) []string { - return strings.Split(s, "/") -} - -func mapStreamModeToAristaFork(mode ppb.StreamMode) (string, error) { - switch mode { - case ppb.StreamMode_STREAM_MODE_TARGET_DEFINED: - return "target_defined", nil - case ppb.StreamMode_STREAM_MODE_ON_CHANGE: - return "on_change", nil - case ppb.StreamMode_STREAM_MODE_SAMPLE: - return "sample", nil - default: - return "", fmt.Errorf("StreamMode of type: %T is not supported", mode) - } -} - -func mapModeToAristaFork(mode ppb.SubscriptionMode) (string, error) { - switch mode { - case ppb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM: - return "stream", nil - case ppb.SubscriptionMode_SUBSCRIPTION_MODE_ONCE: - return "once", nil - case ppb.SubscriptionMode_SUBSCRIPTION_MODE_POLL: - return "poll", nil - default: - return "", fmt.Errorf("SubscriptionMode of type: %T is not supported", mode) - } -} - // nolint // handleRollbackError will be implemented in the near future func handleRollbackError(id uuid.UUID, err error) { @@ -556,24 +51,24 @@ func handleRollbackError(id uuid.UUID, err error) { // TODO: Notion of invalid state needed. } -func (pnd *pndImplementation) handleCsbiDeletion(mne networkelement.NetworkElement) error { - log.Infof("csbi deletion triggered for %v", mne.ID().String()) - ctx, cancel := context.WithTimeout(context.Background(), time.Minute) - defer cancel() - req := &cpb.DeleteRequest{ - Timestamp: time.Now().UnixNano(), - Did: []string{mne.ID().String()}, - } - resp, err := pnd.csbiClient.Delete(ctx, req) - if err != nil { - return err - } - log.WithFields(log.Fields{ - "uuid": mne.ID().String(), - "status": resp.Status, - }).Info("csbi deleted") - return nil -} +// func (pnd *pndImplementation) handleCsbiDeletion(mne networkelement.NetworkElement) error { +// log.Infof("csbi deletion triggered for %v", mne.ID().String()) +// ctx, cancel := context.WithTimeout(context.Background(), time.Minute) +// defer cancel() +// req := &cpb.DeleteRequest{ +// Timestamp: time.Now().UnixNano(), +// Did: []string{mne.ID().String()}, +// } +// resp, err := pnd.csbiClient.Delete(ctx, req) +// if err != nil { +// return err +// } +// log.WithFields(log.Fields{ +// "uuid": mne.ID().String(), +// "status": resp.Status, +// }).Info("csbi deleted") +// return nil +// } //NOTE: csbi is currently not support; will be removed in the near future. //func (pnd *pndImplementation) handleCsbiEnrolment(name string, opt *tpb.TransportOption) (uuid.UUID, error) { @@ -702,114 +197,6 @@ func (pnd *pndImplementation) handleCsbiDeletion(mne networkelement.NetworkEleme // return uuid.Nil, nil //} -// requestPlugin request a plugin from the plugin-registry. -func (pnd *pndImplementation) requestPlugin(requestID uuid.UUID) (plugin.Plugin, error) { - ctx, cancel := context.WithTimeout(context.Background(), time.Minute*1) - defer cancel() - - pluginDownloadRequest := &rpb.GetDownloadRequest{ - Timestamp: time.Now().UnixNano(), - Id: requestID.String(), - } - - dClient, err := pnd.pluginRegistryClient.Download(ctx, pluginDownloadRequest) - if err != nil { - return nil, err - } - - if err := saveStreamToFile(dClient, util.BundledPluginName, requestID); err != nil { - return nil, err - } - - if err := util.UnzipPlugin(requestID); err != nil { - return nil, err - } - - plugin, err := NewPlugin(requestID) - if err != nil { - return nil, err - } - - if err := pnd.pluginService.Add(plugin); err != nil { - return nil, err - } - - return plugin, nil -} - -// StreamClient allows to distinguish between the different ygot -// generated GoStruct clients, which return a stream of bytes. -type StreamClient interface { - Recv() (*rpb.GetDownloadPayload, error) - grpc.ClientStream -} - -// saveStreamToFile takes a StreamClient and processes the included gRPC -// stream. A file with the provided filename is created within the goSDN's -// 'plugin-folder'. Each file is stored in its own folder based on a new -// uuid.UUID. -func saveStreamToFile(sc StreamClient, filename string, id uuid.UUID) (err error) { - folderName := viper.GetString("plugin-folder") - path := filepath.Join(folderName, id.String(), filename) - - // clean path to prevent attackers to get access to to directories elsewhere on the system - path = filepath.Clean(path) - if !strings.HasPrefix(path, folderName) { - return &customerrs.InvalidParametersError{ - Func: saveStreamToFile, - Param: path, - } - } - - // create the directory hierarchy based on the path - if err := os.MkdirAll(filepath.Dir(path), 0770); err != nil { - return err - } - // create the gostructs.go file at path - f, err := os.Create(path) - if err != nil { - return err - } - - defer func() { - if ferr := f.Close(); ferr != nil { - fErrString := ferr.Error() - err = fmt.Errorf("InternalError=%w error closing file:%+s", err, fErrString) - } - }() - - // receive byte stream - for { - payload, err := sc.Recv() - if err != nil { - if errors.Is(err, io.EOF) { - break - } - closeErr := sc.CloseSend() - if closeErr != nil { - return closeErr - } - - return err - } - n, err := f.Write(payload.Chunk) - if err != nil { - closeErr := sc.CloseSend() - if closeErr != nil { - return closeErr - } - - return err - } - log.WithField("n", n).Trace("wrote bytes") - } - if err := f.Sync(); err != nil { - return err - } - - return nil -} - // MarshalBSON implements the MarshalBSON interface to store a network element as BSON. func (pnd *pndImplementation) MarshalBSON() ([]byte, error) { return bson.Marshal(&struct { diff --git a/controller/nucleus/principalNetworkDomain_test.go b/controller/nucleus/principalNetworkDomain_test.go index 1ff916ece606592ed6d6d85e823be17a67ddf9c4..0ce34a5a00c51b035fe59c28933f39b35700734d 100644 --- a/controller/nucleus/principalNetworkDomain_test.go +++ b/controller/nucleus/principalNetworkDomain_test.go @@ -1,983 +1,984 @@ package nucleus -import ( - "errors" - "reflect" - "testing" - - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" - "code.fbi.h-da.de/danet/gosdn/controller/conflict" - "code.fbi.h-da.de/danet/gosdn/controller/customerrs" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" - "code.fbi.h-da.de/danet/gosdn/controller/mocks" - "code.fbi.h-da.de/danet/gosdn/controller/store" - "github.com/google/uuid" - gpb "github.com/openconfig/gnmi/proto/gnmi" - "github.com/stretchr/testify/mock" -) - -func TestNewPND(t *testing.T) { - p, err := newPnd() - if err != nil { - t.Fatal(err) - return - } - - type args struct { - name string - description string - pid uuid.UUID - } - tests := []struct { - name string - args args - want networkdomain.NetworkDomain - wantErr bool - }{ - { - name: "default", - args: args{ - name: "default", - description: "default test pnd", - pid: defaultPndID, - }, - want: p, - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - pluginService := NewPluginServiceMock() - got, err := NewPND(tt.args.name, tt.args.description, tt.args.pid, nil, nil, pluginService, nil) - if (err != nil) != tt.wantErr { - t.Errorf("NewPND() error = %v, wantErr %v", err, tt.wantErr) - return - } - if got.GetName() != tt.want.GetName() { - t.Errorf("NewPND.GetName() = %v, want %v", got, tt.want) - } - if got.ID() != tt.want.ID() { - t.Errorf("NewPND.ID() = %v, want %v", got, tt.want) - } - if got.GetDescription() != tt.want.GetDescription() { - t.Errorf("NewPND.GetDescription() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_pndImplementation_AddNetworkElement(t *testing.T) { - type args struct { - name string - opts *tpb.TransportOption - requestPluginFn func(uuid.UUID) (plugin.Plugin, error) - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "default", - args: args{ - name: "fridolin", - opts: &tpb.TransportOption{ - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}, - }, - }, - requestPluginFn: func(u uuid.UUID) (plugin.Plugin, error) { - mockPlugin := &mocks.Plugin{} - mockPlugin.On("ID").Return(u) - mockPlugin.On("Model", mock.Anything).Return([]byte("mockModel"), nil) - return mockPlugin, nil - }, - }, - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - mockPlugin := &mocks.Plugin{} - mockPlugin.On("ID").Return(defaultPluginID) - mockPlugin.On("Model", mock.Anything).Return([]byte("mockModel"), nil) - mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil) - - pnd, err := newPnd() - if err != nil { - t.Fatal(err) - } - err = pnd.pluginService.Add(mockPlugin) - if err != nil { - t.Fatal(err) - } - - _, err = pnd.AddNetworkElement(tt.args.name, tt.args.opts, tt.args.requestPluginFn, defaultPluginID, defaultPndID) - if (err != nil) != tt.wantErr { - t.Errorf("AddNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - } - - if tt.name != "fails wrong type" { - if err == nil { - mne, err := pnd.networkElementService.Get(store.Query{ID: defaultPndID}) - if err != nil { - t.Errorf("AddNetworkElement() error = %v", err) - return - } - if mne.Name() != tt.args.name { - t.Errorf("AddNetworkElement() got = %v, want %v", mne.Name(), tt.args.name) - } - if err := pnd.networkElementService.Delete(mne); err != nil { - t.Error(err) - } - } - } - }) - } -} - -func Test_pndImplementation_GetDescription(t *testing.T) { - tests := []struct { - name string - want string - }{ - {name: "default", want: "default test pnd"}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - pnd, err := newPnd() - if err != nil { - t.Errorf("GetDescription() = %v", err) - } - if got := pnd.GetDescription(); got != tt.want { - t.Errorf("GetDescription() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_pndImplementation_GetName(t *testing.T) { - tests := []struct { - name string - want string - }{ - {name: "default", want: "default"}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - pnd, err := newPnd() - if err != nil { - t.Errorf("GetName() = %v", err) - } - if got := pnd.GetName(); got != tt.want { - t.Errorf("GetName() = %v, want %v", got, tt.want) - } - }) - } -} - -func Test_pndImplementation_MarshalNetworkElement(t *testing.T) { - type args struct { - uuid uuid.UUID - } - tests := []struct { - name string - args args - want string - wantErr bool - }{ - { - name: "default", - want: "{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}", - args: args{mdid}, - wantErr: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - pnd, err := newPnd() - if err != nil { - t.Error(err) - } - - mne := mockNetworkElement() - - _, err = pnd.addNetworkElement(mne) - if err != nil { - t.Error(err) - } - got, err := pnd.MarshalNetworkElement(tt.args.uuid.String()) - if (err != nil) != tt.wantErr { - t.Errorf("MarshalNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - return - } - if got != tt.want { - t.Errorf("MarshalNetworkElement() got = %v, want %v", got, tt.want) - } - if err := pnd.networkElementService.Delete(mne); err != nil { - t.Error(err) - } - }) - } -} - -func Test_pndImplementation_RemoveNetworkElement(t *testing.T) { - type args struct { - uuid uuid.UUID - networkElementLength int - } - tests := []struct { - name string - args args - wantErr bool - }{ - {name: "default", args: args{uuid: mdid, networkElementLength: 0}, wantErr: false}, - {name: "fails", args: args{uuid: uuid.New(), networkElementLength: 1}, wantErr: true}, - } - - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - pnd, err := newPnd() - if err != nil { - t.Error(err) - } - - mne := mockNetworkElement() - - _, err = pnd.addNetworkElement(mne) - if err != nil { - t.Error(err) - } - if err := pnd.RemoveNetworkElement(tt.args.uuid); (err != nil) != tt.wantErr { - t.Errorf("RemoveNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - } - ne, err := pnd.networkElementService.GetAll() - if err != nil { - t.Errorf("RemoveNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - } - if len(ne) != tt.args.networkElementLength { - t.Errorf("RemoveNetworkElement() error = length of network is: %v, want: %v", len(ne), tt.args.networkElementLength) - } - }) - } -} - -func Test_pndImplementation_Request(t *testing.T) { - type args struct { - uuid uuid.UUID - path string - rErr error - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "default", - args: args{ - uuid: mdid, - path: "", - rErr: nil, - }, - wantErr: false, - }, - { - name: "error", - args: args{ - uuid: mneid, - path: "", - rErr: errors.New("deliberate test fail"), - }, - wantErr: true, - }, - } - - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - pluginService := NewPluginServiceMock() - networkElementService := NewNetworkElementServiceMock() - - pnd := pndImplementation{ - Name: "default", - Description: "default test pnd", - pluginService: pluginService, - networkElementService: networkElementService, - changes: store.NewChangeStore(), - Id: defaultPndID, - } - - transport := mocks.Transport{} - transport.On("Get", mockContext, mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) - transport.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) - - networkElementWithMockTransport := &CommonNetworkElement{ - UUID: mdid, - Plugin: mockPlugin(t), - transport: &transport, - } - - _, _ = pnd.addNetworkElement(networkElementWithMockTransport) - - _, err := pnd.Request(tt.args.uuid, tt.args.path) - if (err != nil) != tt.wantErr { - t.Errorf("Request() error = %v, wantErr %v", err, tt.wantErr) - } - - mne, _ := pnd.networkElementService.Get(store.Query{ID: mdid}) - if mne == nil { - return - } - if err := pnd.networkElementService.Delete(mne); err != nil { - t.Error(err) - } - }) - } -} - -func Test_pndImplementation_RequestAll(t *testing.T) { - type args struct { - uuid uuid.UUID - path string - rErr error - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "default", - args: args{ - uuid: mdid, - path: "", - rErr: nil, - }, - wantErr: false, - }, - { - name: "error", - args: args{ - uuid: mneid, - path: "", - rErr: errors.New("deliberate test fail"), - }, - wantErr: true, - }, - } - - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - pluginService := NewPluginServiceMock() - networkElementService := NewNetworkElementServiceMock() - - pnd := pndImplementation{ - Name: "default", - Description: "default test pnd", - pluginService: pluginService, - networkElementService: networkElementService, - changes: store.NewChangeStore(), - Id: defaultPndID, - } - - transport := mocks.Transport{} - transport.On("Get", mockContext, mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) - transport.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) - - networkElementWithMockTransport := &CommonNetworkElement{ - UUID: mdid, - Plugin: mockPlugin(t), - transport: &transport, - } - - _, _ = pnd.addNetworkElement(networkElementWithMockTransport) - - mne, _ := pnd.networkElementService.Get(store.Query{ID: mdid}) - if mne == nil { - return - } - if err := pnd.networkElementService.Delete(mne); err != nil { - t.Error(err) - } - }) - } -} - -//func Test_pndImplementation_ChangeMNE(t *testing.T) { -// opts := &tpb.TransportOption{ -// TransportOption: &tpb.TransportOption_GnmiTransportOption{ -// GnmiTransportOption: &tpb.GnmiTransportOption{}, -// }, -// } -// type args struct { -// operation ppb.ApiOperation -// path string -// value []string -// } -// tests := []struct { -// name string -// args args -// wantErr bool -// }{ -// { -// name: "update", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_UPDATE, -// path: "/system/config/hostname", -// value: []string{"ceos3000"}, -// }, -// wantErr: false, -// }, -// { -// name: "replace", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_REPLACE, -// path: "/system/config/hostname", -// value: []string{"ceos3000"}, -// }, -// wantErr: false, -// }, -// { -// name: "delete", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_DELETE, -// path: "/system/config/hostname", -// }, -// wantErr: false, -// }, -// { -// name: "delete w/args", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_DELETE, -// path: "/system/config/hostname", -// value: []string{"ceos3000"}, -// }, -// wantErr: false, -// }, -// -// // Negative test cases -// { -// name: "invalid operation", -// args: args{ -// operation: 54, -// }, -// wantErr: true, -// }, -// { -// name: "invalid arg count", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_UPDATE, -// path: "/system/config/hostname", -// value: []string{"ceos3000", "ceos3001"}, -// }, -// wantErr: true, -// }, -// { -// name: "invalid arg count - update, no args", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_UPDATE, -// path: "/system/config/hostname", -// }, -// wantErr: true, -// }, -// { -// name: "invalid arg count - replace, no args", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_UPDATE, -// path: "/system/config/hostname", -// }, -// wantErr: true, -// }, -// { -// name: "network element not found", -// args: args{ -// operation: ppb.ApiOperation_API_OPERATION_UPDATE, -// }, -// wantErr: true, -// }, -// } -// for _, tt := range tests { -// tt := tt -// t.Run(tt.name, func(t *testing.T) { -// t.Parallel() -// pnd := newPnd() -// _, err := pnd.AddNetworkElement("testnetworkElement", opts, defaultSbiID) -// if err != nil { -// t.Error(err) -// return -// } -// -// networkElements, err := pnd.networkElementService.GetAllAsLoaded() -// if err != nil { -// err := errors.New("error fetching network element") -// t.Error(err) -// return -// } -// -// neUUID, err := uuid.Parse(networkElements[0].ID) -// if err != nil { -// err := errors.New("error parsing network element uuid") -// t.Error(err) -// return -// } -// -// _, err = pnd.ChangeMNE(neUUID, tt.args.operation, tt.args.path, tt.args.value...) -// if (err != nil) != tt.wantErr { -// t.Errorf("ChangeMNE() error = %v, wantErr %v", err, tt.wantErr) -// return -// } -// if !tt.wantErr { -// if len(pnd.changes.Store) != 1 { -// t.Errorf("ChangeMNE() unexpected change count. got %v, want 1", len(pnd.changes.Store)) -// } -// } -// }) -// } -//} - -func Test_pndImplementation_GetNetworkElement(t *testing.T) { - pnd, err := newPnd() - if err != nil { - t.Error(err) - return - } - - mne := mockNetworkElement() - _, err = pnd.addNetworkElement(mne) - if err != nil { - t.Error(err) - return - } - - mPlugin, ok := mockPlugin(t).(plugin.Plugin) - if !ok { - t.Errorf("GetNetworkElement(), failed type conversion -> %v", &customerrs.InvalidTypeAssertionError{ - Value: mockPlugin(t), - Type: (*plugin.Plugin)(nil), - }) - return - } - pluginModel, err := mPlugin.Model(false) - if err != nil { - t.Error(err) - return - } - - type args struct { - uuid uuid.UUID - } - tests := []struct { - name string - args args - want []byte - wantErr bool - }{ - { - name: "default", - args: args{uuid: mdid}, - want: pluginModel, - wantErr: false, - }, - { - name: "network element not found", - args: args{uuid: mneid}, - want: nil, - wantErr: true, - }, - } - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - foundNetworkElement, err := pnd.GetNetworkElement(tt.args.uuid.String()) - if (err != nil) != tt.wantErr { - t.Errorf("GetNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - return - } - if foundNetworkElement != nil { - model, err := foundNetworkElement.GetModel() - if err != nil { - t.Errorf("GetNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - } - if !reflect.DeepEqual(model, tt.want) { - t.Errorf("GetNetworkElement() got = %v, want %v", model, tt.want) - } - } - }) - } -} - -func Test_pndImplementation_GetNetworkElementByName(t *testing.T) { - opts := &tpb.TransportOption{ - Address: "", - Username: "test", - Password: "test", - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}, - }, - } - - pnd, err := newPnd() - if err != nil { - t.Error(err) - return - } - mockPlugin := mockPlugin(t) - pluginModel, err := mockPlugin.Model(false) - if err != nil { - t.Error(err) - return - } - mne, err := NewNetworkElement("my-mne", mneid, opts, mockPlugin, conflict.Metadata{ResourceVersion: 0}) - if err != nil { - t.Error(err) - return - } - _, err = pnd.addNetworkElement(mne) - if err != nil { - t.Error(err) - return - } - type args struct { - name string - } - tests := []struct { - name string - args args - want []byte - wantErr bool - }{ - { - name: "default", - args: args{name: mne.Name()}, - want: pluginModel, - wantErr: false, - }, - { - name: "network element not found", - args: args{name: "test-mne"}, - want: nil, - wantErr: true, - }, - } - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - foundNetworkElement, err := pnd.GetNetworkElement(tt.args.name) - if (err != nil) != tt.wantErr { - t.Errorf("GetNetworkElementByName() error = %v, wantErr %v", err, tt.wantErr) - return - } - if foundNetworkElement != nil { - model, err := foundNetworkElement.GetModel() - if err != nil { - t.Errorf("GetNetworkElement() error = %v, wantErr %v", err, tt.wantErr) - } - if !reflect.DeepEqual(model, tt.want) { - t.Errorf("GetNetworkElementByName() got = %v, want %v", model, tt.want) - } - } - }) - } -} - -func Test_pndImplementation_Confirm(t *testing.T) { - tests := []struct { - name string - wantErr bool - }{ - { - name: "default", - wantErr: false, - }, - { - name: "uncommitted", - wantErr: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - pluginService := NewPluginServiceMock() - networkElementService := NewNetworkElementServiceMock() - - pnd := pndImplementation{ - Name: "default", - Description: "default test pnd", - pluginService: pluginService, - networkElementService: networkElementService, - changes: store.NewChangeStore(), - Id: defaultPndID, - } - - mne := mockNetworkElement() - mockPlugin, ok := mne.GetPlugin().(*mocks.Plugin) - if !ok { - t.Errorf("Confirm(), failed type conversion -> %v", &customerrs.InvalidTypeAssertionError{ - Value: mne.GetPlugin(), - Type: (*mocks.Plugin)(nil), - }) - return - } - mockPlugin.On("ValidateChange", mock.Anything, mock.Anything, mock.Anything).Return([]byte{}, nil) - mockPlugin.On("PruneConfigFalse", mock.Anything).Return([]byte{}, nil) - mockPlugin.On("Diff", mock.Anything, mock.Anything, mock.Anything).Return(&gpb.Notification{}, nil) - tr, ok := mne.Transport().(*mocks.Transport) - if !ok { - t.Errorf("Confirm(), failed type conversion -> %v", &customerrs.InvalidTypeAssertionError{ - Value: mne.Transport(), - Type: (*mocks.Transport)(nil), - }) - return - } - - tr.On("Set", mockContext, mock.Anything, mock.Anything, mock.Anything).Return(nil) - _, err := pnd.addNetworkElement(mne) - if err != nil { - t.Error(err) - return - } - u, err := pnd.ChangeMNE(mne.ID(), ppb.ApiOperation_API_OPERATION_UPDATE, "system/config/hostname", "ceos3000") - if err != nil { - t.Error(err) - return - } - if tt.name != "uncommitted" { - if err := pnd.Commit(u); (err != nil) != tt.wantErr { - t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr) - return - } - } - if err := pnd.Confirm(u); (err != nil) != tt.wantErr { - t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -//func Test_pndImplementation_PendingChanges(t *testing.T) { -// testName := t.Name() -// callback := func(first ygot.GoStruct, second ygot.GoStruct) error { -// log.Infof("callback in test %v", testName) -// return nil -// } -// -// store := store.NewChangeStore() -// pending := NewChange(mneid, &openconfig.Device{}, &openconfig.Device{}, callback) -// if err := store.Add(pending); err != nil { -// t.Error(err) -// return -// } -// tests := []struct { -// name string -// want []uuid.UUID -// }{ -// { -// name: "default", -// want: []uuid.UUID{pending.cuid}, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// pnd := newPnd() -// pnd.changes = store -// if got := pnd.PendingChanges(); !reflect.DeepEqual(got, tt.want) { -// t.Errorf("pndImplementation.PendingChanges() = %v, want %v", got, tt.want) -// } -// }) -// } -//} -// -//func Test_pndImplementation_CommittedChanges(t *testing.T) { -// testName := t.Name() -// callback := func(first ygot.GoStruct, second ygot.GoStruct) error { -// log.Infof("callback in test %v", testName) -// return nil -// } -// -// store := store.NewChangeStore() -// committed := NewChange(mneid, &openconfig.Device{}, &openconfig.Device{}, callback) -// if err := committed.Commit(); err != nil { -// t.Error(err) -// return -// } -// if err := store.Add(committed); err != nil { -// t.Error(err) -// return -// } -// tests := []struct { -// name string -// want []uuid.UUID -// }{ -// { -// name: "default", -// want: []uuid.UUID{committed.cuid}, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// pnd := newPnd() -// pnd.changes = store -// if got := pnd.CommittedChanges(); !reflect.DeepEqual(got, tt.want) { -// t.Errorf("pndImplementation.CommittedChanges() = %v, want %v", got, tt.want) -// } -// }) -// } -//} -// -//func Test_pndImplementation_ConfirmedChanges(t *testing.T) { -// testName := t.Name() -// callback := func(first ygot.GoStruct, second ygot.GoStruct) error { -// log.Infof("callback in test %v", testName) -// return nil -// } -// store := store.NewChangeStore() -// confirmed := NewChange(mneid, &openconfig.Device{}, &openconfig.Device{}, callback) -// if err := confirmed.Commit(); err != nil { -// t.Error(err) -// return -// } -// if err := confirmed.Confirm(); err != nil { -// t.Error(err) -// return -// } -// if err := store.Add(confirmed); err != nil { -// t.Error(err) -// return -// } -// tests := []struct { -// name string -// want []uuid.UUID -// }{ -// { -// name: "default", -// want: []uuid.UUID{confirmed.cuid}, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// pnd := newPnd() -// pnd.changes = store -// if got := pnd.ConfirmedChanges(); !reflect.DeepEqual(got, tt.want) { -// t.Errorf("pndImplementation.ConfirmedChanges() = %v, want %v", got, tt.want) -// } -// }) -// } -//} -// -//func Test_pndImplementation_saveStreamToFile(t *testing.T) { -// defer removeTestGoStructs() -// -// type genericGoStructClientArg struct { -// fn string -// rtrn []interface{} -// times int -// } -// // Create a new mock for GenericGoStructClient. With -// // genericGoStructClientArg it is possible to set the Return values of the -// // mocks methods. -// newGenericGoStructClient := func(args ...genericGoStructClientArg) *mocks.GenericGoStructClient { -// ggsc := &mocks.GenericGoStructClient{} -// for _, arg := range args { -// ggsc.On(arg.fn).Return(arg.rtrn...).Times(arg.times) -// } -// ggsc.On("CloseSend").Return(nil) -// return ggsc -// } -// -// type args struct { -// id uuid.UUID -// client StreamClient -// } -// tests := []struct { -// name string -// args args -// wantErr bool -// }{ -// { -// name: "default", -// args: args{ -// id: uuid.New(), -// client: newGenericGoStructClient( -// []genericGoStructClientArg{ -// { -// fn: "Recv", -// rtrn: []interface{}{ -// &csbi.Payload{Chunk: []byte("test")}, -// nil, -// }, -// times: 3, -// }, -// { -// fn: "Recv", -// rtrn: []interface{}{ -// &csbi.Payload{Chunk: nil}, -// io.EOF, -// }, -// times: 1, -// }, -// }...), -// }, -// wantErr: false, -// }, -// { -// name: "unexpected EOF error", -// args: args{ -// id: uuid.New(), -// client: newGenericGoStructClient( -// []genericGoStructClientArg{ -// { -// fn: "Recv", -// rtrn: []interface{}{ -// &csbi.Payload{Chunk: nil}, -// io.ErrUnexpectedEOF, -// }, -// times: 1, -// }, -// { -// fn: "CloseSend", -// rtrn: []interface{}{ -// nil, -// }, -// times: 1, -// }, -// }...), -// }, -// wantErr: true, -// }, -// } -// var wg sync.WaitGroup -// for _, tt := range tests { -// wg.Add(1) -// tt := tt -// -// // waitgroup and extra func needed to be able to clean up generated pnd directories while running test cases in parallel mode, -// // var x is just a dummy to be able to call the func, -// // outer t.Run() required for defered wg.Done(). -// // reference: https://stackoverflow.com/a/63609718 -// x := func() { -// defer wg.Done() -// t.Run("parallel waiting func", func(t *testing.T) { -// t.Run(tt.name, func(t *testing.T) { -// t.Parallel() -// err := saveStreamToFile(tt.args.client, util.GoStructName, tt.args.id) -// if (err != nil) != tt.wantErr { -// t.Errorf("saveGoStructsToFile() error = %v, wantErr %v", err, tt.wantErr) -// } -// }) -// }) -// } -// x() -// } -// wg.Wait() -//} +// import ( +// "io" +// "reflect" +// "testing" + +// ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" +// tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" + +// "code.fbi.h-da.de/danet/gosdn/controller/conflict" +// eventservice "code.fbi.h-da.de/danet/gosdn/controller/eventService" +// "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" +// "code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin" +// "code.fbi.h-da.de/danet/gosdn/controller/mocks" +// "code.fbi.h-da.de/danet/gosdn/controller/store" +// "github.com/google/uuid" +// gpb "github.com/openconfig/gnmi/proto/gnmi" +// "github.com/stretchr/testify/mock" +// ) + +// func TestNewPND(t *testing.T) { +// p, err := newPnd() +// if err != nil { +// t.Fatal(err) +// return +// } + +// type args struct { +// name string +// description string +// pid uuid.UUID +// } +// tests := []struct { +// name string +// args args +// want networkdomain.NetworkDomain +// wantErr bool +// }{ +// { +// name: "default", +// args: args{ +// name: "default", +// description: "default test pnd", +// pid: defaultPndID, +// }, +// want: p, +// wantErr: false, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// pluginService := NewPluginServiceMock() +// got, err := NewPND(tt.args.name, tt.args.description, tt.args.pid, nil, nil, pluginService, nil) +// if (err != nil) != tt.wantErr { +// t.Errorf("NewPND() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if got.GetName() != tt.want.GetName() { +// t.Errorf("NewPND.GetName() = %v, want %v", got, tt.want) +// } +// if got.ID() != tt.want.ID() { +// t.Errorf("NewPND.ID() = %v, want %v", got, tt.want) +// } +// if got.GetDescription() != tt.want.GetDescription() { +// t.Errorf("NewPND.GetDescription() = %v, want %v", got, tt.want) +// } +// }) +// } +// } + +// func Test_pndImplementation_AddNetworkElement(t *testing.T) { +// type args struct { +// name string +// opts *tpb.TransportOption +// requestPluginFn func(uuid.UUID) (plugin.Plugin, error) +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// { +// name: "default", +// args: args{ +// name: "fridolin", +// opts: &tpb.TransportOption{ +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// }, +// requestPluginFn: func(u uuid.UUID) (plugin.Plugin, error) { +// mockPlugin := &mocks.Plugin{} +// mockPlugin.On("ID").Return(u) +// mockPlugin.On("Model", mock.Anything).Return([]byte("mockModel"), nil) +// return mockPlugin, nil +// }, +// }, +// wantErr: false, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// mockPlugin := &mocks.Plugin{} +// mockPlugin.On("ID").Return(defaultPluginID) +// mockPlugin.On("Model", mock.Anything).Return([]byte("mockModel"), nil) +// mockPlugin.On("Unmarshal", mock.Anything, mock.Anything).Return(nil) + +// pnd, err := newPnd() +// if err != nil { +// t.Fatal(err) +// } +// err = pnd.pluginService.Add(mockPlugin) +// if err != nil { +// t.Fatal(err) +// } + +// _, err := pnd.AddNetworkElement(tt.args.name, tt.args.opts, tt.args.requestPluginFn, defaultPluginID, defaultPndID) +// if (err != nil) != tt.wantErr { +// t.Errorf("AddNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } + +// if tt.name != "fails wrong type" { +// if err == nil { +// mne, err := pnd.networkElementService.Get(store.Query{ID: defaultPndID}) +// if err != nil { +// t.Errorf("AddNetworkElement() error = %v", err) +// return +// } +// if mne.Name() != tt.args.name { +// t.Errorf("AddNetworkElement() got = %v, want %v", mne.Name(), tt.args.name) +// } +// if err := pnd.networkElementService.Delete(mne); err != nil { +// t.Error(err) +// } +// } +// } +// }) +// } +// } + +// func Test_pndImplementation_GetDescription(t *testing.T) { +// tests := []struct { +// name string +// want string +// }{ +// {name: "default", want: "default test pnd"}, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// pnd, err := newPnd() +// if err != nil { +// t.Errorf("GetDescription() = %v", err) +// } +// if got := pnd.GetDescription(); got != tt.want { +// t.Errorf("GetDescription() = %v, want %v", got, tt.want) +// } +// }) +// } +// } + +// func Test_pndImplementation_GetName(t *testing.T) { +// tests := []struct { +// name string +// want string +// }{ +// {name: "default", want: "default"}, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// pnd, err := newPnd() +// if err != nil { +// t.Errorf("GetName() = %v", err) +// } +// if got := pnd.GetName(); got != tt.want { +// t.Errorf("GetName() = %v, want %v", got, tt.want) +// } +// }) +// } +// } + +// func Test_pndImplementation_MarshalNetworkElement(t *testing.T) { +// type args struct { +// uuid uuid.UUID +// } +// tests := []struct { +// name string +// args args +// want string +// wantErr bool +// }{ +// { +// name: "default", +// want: "{\n\t\"Acl\": null,\n\t\"Bfd\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"Keychains\": null,\n\t\"Lldp\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}", +// args: args{mdid}, +// wantErr: false, +// }, +// } + +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// pnd, err := newPnd() +// if err != nil { +// t.Error(err) +// } + +// mne := mockNetworkElement() + +// _, err = pnd.addNetworkElement(mne) +// if err != nil { +// t.Error(err) +// } +// got, err := pnd.MarshalNetworkElement(tt.args.uuid.String()) +// if (err != nil) != tt.wantErr { +// t.Errorf("MarshalNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if got != tt.want { +// t.Errorf("MarshalNetworkElement() got = %v, want %v", got, tt.want) +// } +// if err := pnd.networkElementService.Delete(mne); err != nil { +// t.Error(err) +// } +// }) +// } +// } + +// func Test_pndImplementation_RemoveNetworkElement(t *testing.T) { +// type args struct { +// uuid uuid.UUID +// networkElementLength int +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// {name: "default", args: args{uuid: mdid, networkElementLength: 0}, wantErr: false}, +// {name: "fails", args: args{uuid: uuid.New(), networkElementLength: 1}, wantErr: true}, +// } + +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() +// pnd, err := newPnd() +// if err != nil { +// t.Error(err) +// } + +// mne := mockNetworkElement() + +// _, err = pnd.addNetworkElement(mne) +// if err != nil { +// t.Error(err) +// } +// if err := pnd.RemoveNetworkElement(tt.args.uuid); (err != nil) != tt.wantErr { +// t.Errorf("RemoveNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } +// ne, err := pnd.networkElementService.GetAll() +// if err != nil { +// t.Errorf("RemoveNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } +// if len(ne) != tt.args.networkElementLength { +// t.Errorf("RemoveNetworkElement() error = length of network is: %v, want: %v", len(ne), tt.args.networkElementLength) +// } +// }) +// } +// } + +// // func Test_pndImplementation_Request(t *testing.T) { +// // type args struct { +// // uuid uuid.UUID +// // path string +// // rErr error +// // } +// // tests := []struct { +// // name string +// // args args +// // wantErr bool +// // }{ +// // { +// // name: "default", +// // args: args{ +// // uuid: mdid, +// // path: "", +// // rErr: nil, +// // }, +// // wantErr: false, +// // }, +// // { +// // name: "error", +// // args: args{ +// // uuid: mneid, +// // path: "", +// // rErr: errors.New("deliberate test fail"), +// // }, +// // wantErr: true, +// // }, +// // } + +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() +// pluginService := NewPluginServiceMock() +// networkElementService := NewNetworkElementServiceMock() + +// pnd := pndImplementation{ +// Name: "default", +// Description: "default test pnd", +// pluginService: pluginService, +// networkElementService: networkElementService, +// changes: store.NewChangeStore(), +// Id: defaultPndID, +// } + +// transport := mocks.Transport{} +// transport.On("Get", mockContext, mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) +// transport.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) + +// networkElementWithMockTransport := &CommonNetworkElement{ +// UUID: mdid, +// Plugin: mockPlugin(t), +// transport: &transport, +// } + +// // _, _ = pnd.addNetworkElement(networkElementWithMockTransport) + +// _, err := pnd.Request(tt.args.uuid, tt.args.path) +// if (err != nil) != tt.wantErr { +// t.Errorf("Request() error = %v, wantErr %v", err, tt.wantErr) +// } + +// // mne, _ := pnd.networkElementService.Get(store.Query{ID: mdid}) +// // if mne == nil { +// // return +// // } +// // if err := pnd.networkElementService.Delete(mne); err != nil { +// // t.Error(err) +// // } +// // }) +// // } +// // } + +// // func Test_pndImplementation_RequestAll(t *testing.T) { +// // type args struct { +// // uuid uuid.UUID +// // path string +// // rErr error +// // } +// // tests := []struct { +// // name string +// // args args +// // wantErr bool +// // }{ +// // { +// // name: "default", +// // args: args{ +// // uuid: mdid, +// // path: "", +// // rErr: nil, +// // }, +// // wantErr: false, +// // }, +// // { +// // name: "error", +// // args: args{ +// // uuid: mneid, +// // path: "", +// // rErr: errors.New("deliberate test fail"), +// // }, +// // wantErr: true, +// // }, +// // } + +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() +// pluginService := NewPluginServiceMock() +// networkElementService := NewNetworkElementServiceMock() + +// pnd := pndImplementation{ +// Name: "default", +// Description: "default test pnd", +// pluginService: pluginService, +// networkElementService: networkElementService, +// changes: store.NewChangeStore(), +// Id: defaultPndID, +// } + +// transport := mocks.Transport{} +// transport.On("Get", mockContext, mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) +// transport.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) + +// networkElementWithMockTransport := &CommonNetworkElement{ +// UUID: mdid, +// Plugin: mockPlugin(t), +// transport: &transport, +// } + +// // _, _ = pnd.addNetworkElement(networkElementWithMockTransport) + +// // mne, _ := pnd.networkElementService.Get(store.Query{ID: mdid}) +// // if mne == nil { +// // return +// // } +// // if err := pnd.networkElementService.Delete(mne); err != nil { +// // t.Error(err) +// // } +// // }) +// // } +// // } + +// //func Test_pndImplementation_ChangeMNE(t *testing.T) { +// // opts := &tpb.TransportOption{ +// // TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// // GnmiTransportOption: &tpb.GnmiTransportOption{}, +// // }, +// // } +// // type args struct { +// // operation ppb.ApiOperation +// // path string +// // value []string +// // } +// // tests := []struct { +// // name string +// // args args +// // wantErr bool +// // }{ +// // { +// // name: "update", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_UPDATE, +// // path: "/system/config/hostname", +// // value: []string{"ceos3000"}, +// // }, +// // wantErr: false, +// // }, +// // { +// // name: "replace", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_REPLACE, +// // path: "/system/config/hostname", +// // value: []string{"ceos3000"}, +// // }, +// // wantErr: false, +// // }, +// // { +// // name: "delete", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_DELETE, +// // path: "/system/config/hostname", +// // }, +// // wantErr: false, +// // }, +// // { +// // name: "delete w/args", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_DELETE, +// // path: "/system/config/hostname", +// // value: []string{"ceos3000"}, +// // }, +// // wantErr: false, +// // }, +// // +// // // Negative test cases +// // { +// // name: "invalid operation", +// // args: args{ +// // operation: 54, +// // }, +// // wantErr: true, +// // }, +// // { +// // name: "invalid arg count", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_UPDATE, +// // path: "/system/config/hostname", +// // value: []string{"ceos3000", "ceos3001"}, +// // }, +// // wantErr: true, +// // }, +// // { +// // name: "invalid arg count - update, no args", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_UPDATE, +// // path: "/system/config/hostname", +// // }, +// // wantErr: true, +// // }, +// // { +// // name: "invalid arg count - replace, no args", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_UPDATE, +// // path: "/system/config/hostname", +// // }, +// // wantErr: true, +// // }, +// // { +// // name: "network element not found", +// // args: args{ +// // operation: ppb.ApiOperation_API_OPERATION_UPDATE, +// // }, +// // wantErr: true, +// // }, +// // } +// // for _, tt := range tests { +// // tt := tt +// // t.Run(tt.name, func(t *testing.T) { +// // t.Parallel() +// // pnd := newPnd() +// // _, err := pnd.AddNetworkElement("testnetworkElement", opts, defaultSbiID) +// // if err != nil { +// // t.Error(err) +// // return +// // } +// // +// // networkElements, err := pnd.networkElementService.GetAllAsLoaded() +// // if err != nil { +// // err := errors.New("error fetching network element") +// // t.Error(err) +// // return +// // } +// // +// // neUUID, err := uuid.Parse(networkElements[0].ID) +// // if err != nil { +// // err := errors.New("error parsing network element uuid") +// // t.Error(err) +// // return +// // } +// // +// // _, err = pnd.ChangeMNE(neUUID, tt.args.operation, tt.args.path, tt.args.value...) +// // if (err != nil) != tt.wantErr { +// // t.Errorf("ChangeMNE() error = %v, wantErr %v", err, tt.wantErr) +// // return +// // } +// // if !tt.wantErr { +// // if len(pnd.changes.Store) != 1 { +// // t.Errorf("ChangeMNE() unexpected change count. got %v, want 1", len(pnd.changes.Store)) +// // } +// // } +// // }) +// // } +// //} + +// func Test_pndImplementation_GetNetworkElement(t *testing.T) { +// pnd, err := newPnd() +// if err != nil { +// t.Error(err) +// return +// } + +// mne := mockNetworkElement() +// _, err = pnd.addNetworkElement(mne) +// if err != nil { +// t.Error(err) +// return +// } + +// mPlugin, ok := mockPlugin(t).(plugin.Plugin) +// if !ok { +// t.Errorf("GetNetworkElement(), failed type conversion -> %v", &customerrs.InvalidTypeAssertionError{ +// Value: mockPlugin(t), +// Type: (*plugin.Plugin)(nil), +// }) +// return +// } +// pluginModel, err := mPlugin.Model(false) +// if err != nil { +// t.Error(err) +// return +// } + +// type args struct { +// uuid uuid.UUID +// } +// tests := []struct { +// name string +// args args +// want []byte +// wantErr bool +// }{ +// { +// name: "default", +// args: args{uuid: mdid}, +// want: pluginModel, +// wantErr: false, +// }, +// { +// name: "network element not found", +// args: args{uuid: mneid}, +// want: nil, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() +// foundNetworkElement, err := pnd.GetNetworkElement(tt.args.uuid.String()) +// if (err != nil) != tt.wantErr { +// t.Errorf("GetNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if foundNetworkElement != nil { +// model, err := foundNetworkElement.GetModel() +// if err != nil { +// t.Errorf("GetNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } +// if !reflect.DeepEqual(model, tt.want) { +// t.Errorf("GetNetworkElement() got = %v, want %v", model, tt.want) +// } +// } +// }) +// } +// } + +// func Test_pndImplementation_GetNetworkElementByName(t *testing.T) { +// opts := &tpb.TransportOption{ +// Address: "", +// Username: "test", +// Password: "test", +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// } + +// pnd, err := newPnd() +// if err != nil { +// t.Error(err) +// return +// } +// mockPlugin := mockPlugin(t) +// pluginModel, err := mockPlugin.Model(false) +// if err != nil { +// t.Error(err) +// return +// } +// mne, err := NewNetworkElement("my-mne", mneid, opts, mockPlugin, conflict.Metadata{ResourceVersion: 0}) +// if err != nil { +// t.Error(err) +// return +// } +// _, err = pnd.addNetworkElement(mne) +// if err != nil { +// t.Error(err) +// return +// } +// type args struct { +// name string +// } +// tests := []struct { +// name string +// args args +// want []byte +// wantErr bool +// }{ +// { +// name: "default", +// args: args{name: mne.Name()}, +// want: pluginModel, +// wantErr: false, +// }, +// { +// name: "network element not found", +// args: args{name: "test-mne"}, +// want: nil, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() +// foundNetworkElement, err := pnd.GetNetworkElement(tt.args.name) +// if (err != nil) != tt.wantErr { +// t.Errorf("GetNetworkElementByName() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if foundNetworkElement != nil { +// model, err := foundNetworkElement.GetModel() +// if err != nil { +// t.Errorf("GetNetworkElement() error = %v, wantErr %v", err, tt.wantErr) +// } +// if !reflect.DeepEqual(model, tt.want) { +// t.Errorf("GetNetworkElementByName() got = %v, want %v", model, tt.want) +// } +// } +// }) +// } +// } + +// // func Test_pndImplementation_Confirm(t *testing.T) { +// // tests := []struct { +// // name string +// // wantErr bool +// // }{ +// // { +// // name: "default", +// // wantErr: false, +// // }, +// // { +// // name: "uncommitted", +// // wantErr: true, +// // }, +// // } + +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// pluginService := NewPluginServiceMock() +// networkElementService := NewNetworkElementServiceMock() + +// pnd := pndImplementation{ +// Name: "default", +// Description: "default test pnd", +// pluginService: pluginService, +// networkElementService: networkElementService, +// changes: store.NewChangeStore(), +// Id: defaultPndID, +// } + +// mne := mockNetworkElement() +// mockPlugin, ok := mne.GetPlugin().(*mocks.Plugin) +// if !ok { +// t.Errorf("Confirm(), failed type conversion -> %v", &customerrs.InvalidTypeAssertionError{ +// Value: mne.GetPlugin(), +// Type: (*mocks.Plugin)(nil), +// }) +// return +// } +// mockPlugin.On("ValidateChange", mock.Anything, mock.Anything, mock.Anything).Return([]byte{}, nil) +// mockPlugin.On("PruneConfigFalse", mock.Anything).Return([]byte{}, nil) +// mockPlugin.On("Diff", mock.Anything, mock.Anything, mock.Anything).Return(&gpb.Notification{}, nil) +// tr, ok := mne.Transport().(*mocks.Transport) +// if !ok { +// t.Errorf("Confirm(), failed type conversion -> %v", &customerrs.InvalidTypeAssertionError{ +// Value: mne.Transport(), +// Type: (*mocks.Transport)(nil), +// }) +// return +// } + +// tr.On("Set", mockContext, mock.Anything, mock.Anything, mock.Anything).Return(nil) +// _, err := pnd.addNetworkElement(mne) +// if err != nil { +// t.Error(err) +// return +// } +// u, err := pnd.ChangeMNE(mne.ID(), ppb.ApiOperation_API_OPERATION_UPDATE, "system/config/hostname", "ceos3000") +// if err != nil { +// t.Error(err) +// return +// } +// if tt.name != "uncommitted" { +// if err := pnd.Commit(u); (err != nil) != tt.wantErr { +// t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// } +// if err := pnd.Confirm(u); (err != nil) != tt.wantErr { +// t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr) +// } +// }) +// } +// } + +// //func Test_pndImplementation_PendingChanges(t *testing.T) { +// // testName := t.Name() +// // callback := func(first ygot.GoStruct, second ygot.GoStruct) error { +// // log.Infof("callback in test %v", testName) +// // return nil +// // } +// // +// // store := store.NewChangeStore() +// // pending := NewChange(mneid, &openconfig.Device{}, &openconfig.Device{}, callback) +// // if err := store.Add(pending); err != nil { +// // t.Error(err) +// // return +// // } +// // tests := []struct { +// // name string +// // want []uuid.UUID +// // }{ +// // { +// // name: "default", +// // want: []uuid.UUID{pending.cuid}, +// // }, +// // } +// // for _, tt := range tests { +// // t.Run(tt.name, func(t *testing.T) { +// // pnd := newPnd() +// // pnd.changes = store +// // if got := pnd.PendingChanges(); !reflect.DeepEqual(got, tt.want) { +// // t.Errorf("pndImplementation.PendingChanges() = %v, want %v", got, tt.want) +// // } +// // }) +// // } +// //} +// // +// //func Test_pndImplementation_CommittedChanges(t *testing.T) { +// // testName := t.Name() +// // callback := func(first ygot.GoStruct, second ygot.GoStruct) error { +// // log.Infof("callback in test %v", testName) +// // return nil +// // } +// // +// // store := store.NewChangeStore() +// // committed := NewChange(mneid, &openconfig.Device{}, &openconfig.Device{}, callback) +// // if err := committed.Commit(); err != nil { +// // t.Error(err) +// // return +// // } +// // if err := store.Add(committed); err != nil { +// // t.Error(err) +// // return +// // } +// // tests := []struct { +// // name string +// // want []uuid.UUID +// // }{ +// // { +// // name: "default", +// // want: []uuid.UUID{committed.cuid}, +// // }, +// // } +// // for _, tt := range tests { +// // t.Run(tt.name, func(t *testing.T) { +// // pnd := newPnd() +// // pnd.changes = store +// // if got := pnd.CommittedChanges(); !reflect.DeepEqual(got, tt.want) { +// // t.Errorf("pndImplementation.CommittedChanges() = %v, want %v", got, tt.want) +// // } +// // }) +// // } +// //} +// // +// //func Test_pndImplementation_ConfirmedChanges(t *testing.T) { +// // testName := t.Name() +// // callback := func(first ygot.GoStruct, second ygot.GoStruct) error { +// // log.Infof("callback in test %v", testName) +// // return nil +// // } +// // store := store.NewChangeStore() +// // confirmed := NewChange(mneid, &openconfig.Device{}, &openconfig.Device{}, callback) +// // if err := confirmed.Commit(); err != nil { +// // t.Error(err) +// // return +// // } +// // if err := confirmed.Confirm(); err != nil { +// // t.Error(err) +// // return +// // } +// // if err := store.Add(confirmed); err != nil { +// // t.Error(err) +// // return +// // } +// // tests := []struct { +// // name string +// // want []uuid.UUID +// // }{ +// // { +// // name: "default", +// // want: []uuid.UUID{confirmed.cuid}, +// // }, +// // } +// // for _, tt := range tests { +// // t.Run(tt.name, func(t *testing.T) { +// // pnd := newPnd() +// // pnd.changes = store +// // if got := pnd.ConfirmedChanges(); !reflect.DeepEqual(got, tt.want) { +// // t.Errorf("pndImplementation.ConfirmedChanges() = %v, want %v", got, tt.want) +// // } +// // }) +// // } +// //} +// // +// //func Test_pndImplementation_saveStreamToFile(t *testing.T) { +// // defer removeTestGoStructs() +// // +// // type genericGoStructClientArg struct { +// // fn string +// // rtrn []interface{} +// // times int +// // } +// // // Create a new mock for GenericGoStructClient. With +// // // genericGoStructClientArg it is possible to set the Return values of the +// // // mocks methods. +// // newGenericGoStructClient := func(args ...genericGoStructClientArg) *mocks.GenericGoStructClient { +// // ggsc := &mocks.GenericGoStructClient{} +// // for _, arg := range args { +// // ggsc.On(arg.fn).Return(arg.rtrn...).Times(arg.times) +// // } +// // ggsc.On("CloseSend").Return(nil) +// // return ggsc +// // } +// // +// // type args struct { +// // id uuid.UUID +// // client StreamClient +// // } +// // tests := []struct { +// // name string +// // args args +// // wantErr bool +// // }{ +// // { +// // name: "default", +// // args: args{ +// // id: uuid.New(), +// // client: newGenericGoStructClient( +// // []genericGoStructClientArg{ +// // { +// // fn: "Recv", +// // rtrn: []interface{}{ +// // &csbi.Payload{Chunk: []byte("test")}, +// // nil, +// // }, +// // times: 3, +// // }, +// // { +// // fn: "Recv", +// // rtrn: []interface{}{ +// // &csbi.Payload{Chunk: nil}, +// // io.EOF, +// // }, +// // times: 1, +// // }, +// // }...), +// // }, +// // wantErr: false, +// // }, +// // { +// // name: "unexpected EOF error", +// // args: args{ +// // id: uuid.New(), +// // client: newGenericGoStructClient( +// // []genericGoStructClientArg{ +// // { +// // fn: "Recv", +// // rtrn: []interface{}{ +// // &csbi.Payload{Chunk: nil}, +// // io.ErrUnexpectedEOF, +// // }, +// // times: 1, +// // }, +// // { +// // fn: "CloseSend", +// // rtrn: []interface{}{ +// // nil, +// // }, +// // times: 1, +// // }, +// // }...), +// // }, +// // wantErr: true, +// // }, +// // } +// // var wg sync.WaitGroup +// // for _, tt := range tests { +// // wg.Add(1) +// // tt := tt +// // +// // // waitgroup and extra func needed to be able to clean up generated pnd directories while running test cases in parallel mode, +// // // var x is just a dummy to be able to call the func, +// // // outer t.Run() required for defered wg.Done(). +// // // reference: https://stackoverflow.com/a/63609718 +// // x := func() { +// // defer wg.Done() +// // t.Run("parallel waiting func", func(t *testing.T) { +// // t.Run(tt.name, func(t *testing.T) { +// // t.Parallel() +// // err := saveStreamToFile(tt.args.client, util.GoStructName, tt.args.id) +// // if (err != nil) != tt.wantErr { +// // t.Errorf("saveGoStructsToFile() error = %v, wantErr %v", err, tt.wantErr) +// // } +// // }) +// // }) +// // } +// // x() +// // } +// // wg.Wait() +// //} diff --git a/controller/plugin/shared/client.go b/controller/plugin/shared/client.go index fa9b0a030238254eab7e8c3dfe393bac43d2911a..125777996dd42376800cceb4662c53e471a6ba2d 100644 --- a/controller/plugin/shared/client.go +++ b/controller/plugin/shared/client.go @@ -6,8 +6,8 @@ import ( "golang.org/x/net/context" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/sirupsen/logrus" ) @@ -59,7 +59,7 @@ func (m *DeviceModelClient) Diff(original, modified []byte) (*gpb.Notification, return resp.GetNotification(), err } -func (m *DeviceModelClient) ValidateChange(operation ppb.ApiOperation, path *gpb.Path, value []byte) ([]byte, error) { +func (m *DeviceModelClient) ValidateChange(operation mnepb.ApiOperation, path *gpb.Path, value []byte) ([]byte, error) { resp, err := m.client.ValidateChange(context.Background(), &pb.ValidateChangeRequest{ Operation: operation, Path: path, diff --git a/controller/plugin/shared/interface.go b/controller/plugin/shared/interface.go index a1f9ffc96b13d6efd858cf8aa56372a6c9dd13f0..d6a233415c3ef0c7ea69a164004a6bbb8b6d3bf4 100644 --- a/controller/plugin/shared/interface.go +++ b/controller/plugin/shared/interface.go @@ -5,8 +5,8 @@ import ( "google.golang.org/grpc" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" "github.com/hashicorp/go-plugin" gpb "github.com/openconfig/gnmi/proto/gnmi" ) @@ -31,7 +31,7 @@ type DeviceModel interface { Model(filterReadOnly bool) ([]byte, error) Diff(original, modified []byte) (*gpb.Notification, error) SchemaTreeGzip() ([]byte, error) - ValidateChange(operation ppb.ApiOperation, path *gpb.Path, value []byte) ([]byte, error) + ValidateChange(operation mnepb.ApiOperation, path *gpb.Path, value []byte) ([]byte, error) PruneConfigFalse(value []byte) ([]byte, error) } diff --git a/controller/store/changeStores.go b/controller/store/changeStores.go index b312753591aa67d924934c7c8af2a41c8ff52853..06db18452024e3dfd9b59e68732285a6d9897786 100644 --- a/controller/store/changeStores.go +++ b/controller/store/changeStores.go @@ -6,7 +6,7 @@ import ( "github.com/google/uuid" log "github.com/sirupsen/logrus" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" ) // ChangeStore is used to store Changes. @@ -41,20 +41,20 @@ func (s *ChangeStore) GetChange(id uuid.UUID) (change.Change, error) { // Pending returns the UUIDs of all pending changes. func (s *ChangeStore) Pending() []uuid.UUID { - return filterChanges(s, ppb.ChangeState_CHANGE_STATE_PENDING) + return filterChanges(s, mnepb.ChangeState_CHANGE_STATE_PENDING) } // Committed returns the UUIDs of all pending changes. func (s *ChangeStore) Committed() []uuid.UUID { - return filterChanges(s, ppb.ChangeState_CHANGE_STATE_COMMITTED) + return filterChanges(s, mnepb.ChangeState_CHANGE_STATE_COMMITTED) } // Confirmed returns the UUIDs of all pending changes. func (s *ChangeStore) Confirmed() []uuid.UUID { - return filterChanges(s, ppb.ChangeState_CHANGE_STATE_CONFIRMED) + return filterChanges(s, mnepb.ChangeState_CHANGE_STATE_CONFIRMED) } -func filterChanges(store *ChangeStore, state ppb.ChangeState) []uuid.UUID { +func filterChanges(store *ChangeStore, state mnepb.ChangeState) []uuid.UUID { changes := make([]uuid.UUID, 0) for _, ch := range store.Store { switch c := ch.(type) { diff --git a/controller/test/integration/nucleusIntegration_test.go b/controller/test/integration/nucleusIntegration_test.go index 47c0494247e10dafec67e6b02624e61258a9d7be..8fdcb85f1813ca3303c4f6df09d7fe4d31e4b37d 100644 --- a/controller/test/integration/nucleusIntegration_test.go +++ b/controller/test/integration/nucleusIntegration_test.go @@ -1,549 +1,556 @@ package integration -import ( - "context" - "os" - "reflect" - "sort" - "testing" - "time" +// import ( +// "context" +// "os" +// "reflect" +// "sort" +// "testing" +// "time" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" - tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" - "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" - "code.fbi.h-da.de/danet/gosdn/controller/mocks" - "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" - "code.fbi.h-da.de/danet/gosdn/plugins/sdk" +// "github.com/google/uuid" - "code.fbi.h-da.de/danet/gosdn/controller/customerrs" - "code.fbi.h-da.de/danet/gosdn/controller/nucleus" - "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" - "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/proto" - "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" - "github.com/google/uuid" - gpb "github.com/openconfig/gnmi/proto/gnmi" - log "github.com/sirupsen/logrus" - pb "google.golang.org/protobuf/proto" -) +// mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" +// spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" +// tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" -const unreachable = "203.0.113.10:6030" -const testPath = "/system/config/hostname" +// "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" +// "code.fbi.h-da.de/danet/gosdn/controller/mocks" +// "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" +// "code.fbi.h-da.de/danet/gosdn/plugins/sdk" -var modifiedHostname = "ceos3000" -var testAddress = "10.254.254.105:6030" -var testUsername = "admin" -var testPassword = "arista" -var opt *tpb.TransportOption -var gnmiMessages map[string]pb.Message +// "code.fbi.h-da.de/danet/gosdn/controller/customerrs" +// "code.fbi.h-da.de/danet/gosdn/controller/nucleus" +// "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" +// "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util/proto" +// "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" +// "github.com/google/uuid" +// gpb "github.com/openconfig/gnmi/proto/gnmi" +// log "github.com/sirupsen/logrus" +// pb "google.golang.org/protobuf/proto" +// ) -func TestMain(m *testing.M) { - testSetupIntegration() - os.Exit(m.Run()) -} +// const unreachable = "203.0.113.10:6030" +// const testPath = "/system/config/hostname" -func testSetupIntegration() { - if os.Getenv("GOSDN_LOG") == "nolog" { - log.SetLevel(log.PanicLevel) - } +// var modifiedHostname = "ceos3000" +// var testAddress = "10.254.254.105:6030" +// var testUsername = "admin" +// var testPassword = "arista" +// var opt *tpb.TransportOption +// var gnmiMessages map[string]pb.Message - addr := os.Getenv("CEOS_TEST_ENDPOINT") - if addr != "" { - testAddress = addr - log.Infof("CEOS_TEST_ENDPOINT set to %v", testAddress) - } - u := os.Getenv("GOSDN_TEST_USER") - if u != "" { - testUsername = u - log.Infof("GOSDN_TEST_USER set to %v", testUsername) - } - p := os.Getenv("GOSDN_TEST_PASSWORD") - if p != "" { - testPassword = p - log.Infof("GOSDN_TEST_PASSWORD set to %v", testPassword) - } +// func TestMain(m *testing.M) { +// testSetupIntegration() +// os.Exit(m.Run()) +// } - gnmiMessages = map[string]pb.Message{ - "../proto/cap-resp-arista-ceos": &gpb.CapabilityResponse{}, - "../proto/req-full-node": &gpb.GetRequest{}, - "../proto/req-full-node-arista-ceos": &gpb.GetRequest{}, - "../proto/req-interfaces-arista-ceos": &gpb.GetRequest{}, - "../proto/req-interfaces-interface-arista-ceos": &gpb.GetRequest{}, - "../proto/req-interfaces-wildcard": &gpb.GetRequest{}, - "../proto/resp-full-node": &gpb.GetResponse{}, - "../proto/resp-full-node-arista-ceos": &gpb.GetResponse{}, - "../proto/resp-interfaces-arista-ceos": &gpb.GetResponse{}, - "../proto/resp-interfaces-interface-arista-ceos": &gpb.GetResponse{}, - "../proto/resp-interfaces-wildcard": &gpb.GetResponse{}, - "../proto/resp-set-system-config-hostname": &gpb.SetResponse{}, - } - for k, v := range gnmiMessages { - if err := proto.Read(k, v); err != nil { - log.Fatalf("error parsing %v: %v", k, err) - } - } +// func testSetupIntegration() { +// if os.Getenv("GOSDN_LOG") == "nolog" { +// log.SetLevel(log.PanicLevel) +// } - opt = &tpb.TransportOption{ - Address: testAddress, - Username: testUsername, - Password: testPassword, - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}, - }, - } -} +// addr := os.Getenv("CEOS_TEST_ENDPOINT") +// if addr != "" { +// testAddress = addr +// log.Infof("CEOS_TEST_ENDPOINT set to %v", testAddress) +// } +// u := os.Getenv("GOSDN_TEST_USER") +// if u != "" { +// testUsername = u +// log.Infof("GOSDN_TEST_USER set to %v", testUsername) +// } +// p := os.Getenv("GOSDN_TEST_PASSWORD") +// if p != "" { +// testPassword = p +// log.Infof("GOSDN_TEST_PASSWORD set to %v", testPassword) +// } -func TestGnmi_SetInvalidIntegration(t *testing.T) { - if testing.Short() { - t.Skip("skipping integration test") - } - type fields struct { - opt *tpb.TransportOption - } - type args struct { - ctx context.Context - payload change.Payload - path string - } - tests := []struct { - name string - fields fields - args args - wantErr bool - }{ - { - name: "destination unreachable", - fields: fields{ - opt: &tpb.TransportOption{ - Address: unreachable, - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}}, - }, - }, - args: args{ - ctx: context.Background(), - payload: change.Payload{}, - path: "/", - }, - wantErr: true, - }, - { - name: "invalid update", - fields: fields{opt: opt}, - args: args{ - ctx: context.Background(), - payload: change.Payload{}, - path: "/", - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) - if err != nil { - t.Errorf("SetInvalidIntegration() error = %v", err) - return - } - g, err := nucleus.NewTransport(tt.fields.opt, deviceModel) - if (err != nil) != tt.wantErr { - t.Errorf("SetInvalidIntegration() error = %v, wantErr %v", err, tt.wantErr) - return - } - err = g.Set(tt.args.ctx, tt.args.payload, tt.args.path, &mocks.Plugin{}) - if (err != nil) != tt.wantErr { - t.Errorf("SetInvalidIntegration() error = %v, wantErr %v", err, tt.wantErr) - return - } - }) - } -} +// gnmiMessages = map[string]pb.Message{ +// "../proto/cap-resp-arista-ceos": &gpb.CapabilityResponse{}, +// "../proto/req-full-node": &gpb.GetRequest{}, +// "../proto/req-full-node-arista-ceos": &gpb.GetRequest{}, +// "../proto/req-interfaces-arista-ceos": &gpb.GetRequest{}, +// "../proto/req-interfaces-interface-arista-ceos": &gpb.GetRequest{}, +// "../proto/req-interfaces-wildcard": &gpb.GetRequest{}, +// "../proto/resp-full-node": &gpb.GetResponse{}, +// "../proto/resp-full-node-arista-ceos": &gpb.GetResponse{}, +// "../proto/resp-interfaces-arista-ceos": &gpb.GetResponse{}, +// "../proto/resp-interfaces-interface-arista-ceos": &gpb.GetResponse{}, +// "../proto/resp-interfaces-wildcard": &gpb.GetResponse{}, +// "../proto/resp-set-system-config-hostname": &gpb.SetResponse{}, +// } +// for k, v := range gnmiMessages { +// if err := proto.Read(k, v); err != nil { +// log.Fatalf("error parsing %v: %v", k, err) +// } +// } -func TestGnmi_SetValidIntegration(t *testing.T) { - if testing.Short() { - t.Skip("skipping integration test") - } +// opt = &tpb.TransportOption{ +// Address: testAddress, +// Username: testUsername, +// Password: testPassword, +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// } +// } - opt := &tpb.TransportOption{ - Address: testAddress, - Username: testUsername, - Password: testPassword, - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}, - }, - } - pnd, err := nucleus.NewPND("test", "test", uuid.New(), nil, nil, nil, nil) - if err != nil { - t.Error(err) - return - } - _, err = pnd.AddNetworkElement("test", opt, nil, uuid.New(), uuid.Nil) - if err != nil { - t.Error(err) - return - } - mne, err := pnd.GetNetworkElement("test") - if err != nil { - t.Error(err) - return - } +// func TestGnmi_SetInvalidIntegration(t *testing.T) { +// if testing.Short() { +// t.Skip("skipping integration test") +// } +// type fields struct { +// opt *tpb.TransportOption +// } +// type args struct { +// ctx context.Context +// payload change.Payload +// path string +// } +// tests := []struct { +// name string +// fields fields +// args args +// wantErr bool +// }{ +// { +// name: "destination unreachable", +// fields: fields{ +// opt: &tpb.TransportOption{ +// Address: unreachable, +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}}, +// }, +// }, +// args: args{ +// ctx: context.Background(), +// payload: change.Payload{}, +// path: "/", +// }, +// wantErr: true, +// }, +// { +// name: "invalid update", +// fields: fields{opt: opt}, +// args: args{ +// ctx: context.Background(), +// payload: change.Payload{}, +// path: "/", +// }, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) +// if err != nil { +// t.Errorf("SetInvalidIntegration() error = %v", err) +// return +// } +// g, err := nucleus.NewTransport(tt.fields.opt, deviceModel) +// if (err != nil) != tt.wantErr { +// t.Errorf("SetInvalidIntegration() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// err = g.Set(tt.args.ctx, tt.args.payload, tt.args.path, &mocks.Plugin{}) +// if (err != nil) != tt.wantErr { +// t.Errorf("SetInvalidIntegration() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// }) +// } +// } - tests := []struct { - name string - apiOp ppb.ApiOperation - path string - value string - want string - }{ - { - name: "update", - apiOp: ppb.ApiOperation_API_OPERATION_UPDATE, - path: testPath, - value: modifiedHostname, - want: modifiedHostname, - }, - { - name: "replace", - apiOp: ppb.ApiOperation_API_OPERATION_REPLACE, - path: "/system/config/domain-name", - value: modifiedHostname, - want: modifiedHostname, - }, - { - name: "delete", - apiOp: ppb.ApiOperation_API_OPERATION_DELETE, - path: testPath, - }, - } - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - cuid, err := pnd.ChangeMNE(mne.ID(), tt.apiOp, tt.path, tt.value) - if err != nil { - t.Error(err) - return - } - if err := pnd.Commit(cuid); err != nil { - t.Error(err) - return - } - if err := pnd.Confirm(cuid); err != nil { - t.Error(err) - return - } - if tt.name != "delete" { - resp, err := pnd.Request(mne.ID(), tt.path) - if err != nil { - t.Error(err) - return - } - r, ok := resp.(*gpb.GetResponse) - if !ok { - t.Error(&customerrs.InvalidTypeAssertionError{ - Value: resp, - Type: &gpb.GetResponse{}, - }) - return - } - got := r.Notification[0].Update[0].Val.GetStringVal() - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("GetNetworkElement() got = %v, want %v", got, tt.want) - } - } - }) - } -} +// func TestGnmi_SetValidIntegration(t *testing.T) { +// if testing.Short() { +// t.Skip("skipping integration test") +// } -func TestGnmi_GetIntegration(t *testing.T) { - if testing.Short() { - t.Skip("skipping integration test") - } +// opt := &tpb.TransportOption{ +// Address: testAddress, +// Username: testUsername, +// Password: testPassword, +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}, +// }, +// } +// pnd, err := nucleus.NewPND("test", "test", uuid.New(), nil, nil, nil, nil) +// if err != nil { +// t.Error(err) +// return +// } +// _, err = pnd.AddNetworkElement("test", opt, nil, uuid.New(), pnd.ID()) +// if err != nil { +// t.Error(err) +// return +// } +// mne, err := pnd.GetNetworkElement("test") +// if err != nil { +// t.Error(err) +// return +// } - paths := []string{ - "/interfaces/interface", - "system/config/hostname", - } - type fields struct { - opt *tpb.TransportOption - } - type args struct { - ctx context.Context - params []string - } - tests := []struct { - name string - fields fields - args args - want interface{} - wantErr bool - }{ - { - name: "default", - fields: fields{opt: opt}, - args: args{ - ctx: context.Background(), - params: paths[:1], - }, - want: gnmiMessages["../proto/resp-interfaces-arista-ceos"], - wantErr: false, - }, - { - name: "destination unreachable", - fields: fields{ - opt: &tpb.TransportOption{ - Address: unreachable, - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}}, - }, - }, - args: args{ - ctx: context.Background(), - params: paths, - }, - want: nil, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) - if err != nil { - t.Errorf("Get() error = %v", err) - return - } - g, err := nucleus.NewTransport(tt.fields.opt, deviceModel) - if err != nil { - t.Error(err) - return - } - got, err := g.Get(tt.args.ctx, tt.args.params...) - if (err != nil) != tt.wantErr { - t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) - return - } - if reflect.TypeOf(got) != reflect.TypeOf(tt.want) { - t.Errorf("Get() got = %v, want %v", got, tt.want) - } - }) - } -} -func TestGnmi_SubscribeIntegration(t *testing.T) { - if testing.Short() { - t.Skip("skipping integration test") - } +// tests := []struct { +// name string +// apiOp mnepb.ApiOperation +// path string +// value string +// want string +// }{ +// { +// name: "update", +// apiOp: mnepb.ApiOperation_API_OPERATION_UPDATE, +// path: testPath, +// value: modifiedHostname, +// want: modifiedHostname, +// }, +// { +// name: "replace", +// apiOp: mnepb.ApiOperation_API_OPERATION_REPLACE, +// path: "/system/config/domain-name", +// value: modifiedHostname, +// want: modifiedHostname, +// }, +// { +// name: "delete", +// apiOp: mnepb.ApiOperation_API_OPERATION_DELETE, +// path: testPath, +// }, +// } +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// t.Parallel() - type fields struct { - opt *tpb.TransportOption - } - type args struct { - ctx context.Context - opts *gnmi.SubscribeOptions - } - tests := []struct { - name string - fields fields - args args - wantErr bool - }{ - { - name: "default", - fields: fields{ - opt: &tpb.TransportOption{ - Address: testAddress, - Username: testUsername, - Password: testPassword, - Tls: false, - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{ - Compression: "", - GrpcDialOptions: nil, - Token: "", - Encoding: 0, - }, - }, - }, - }, - args: args{ - ctx: context.Background(), - opts: &gnmi.SubscribeOptions{ - Mode: "stream", - StreamMode: "sample", - SampleInterval: uint64(1 * time.Second), - HeartbeatInterval: uint64(100 * time.Millisecond), - Paths: gnmi.SplitPaths([]string{ - "/interfaces/interface/name", - "/system/config/hostname", - }), - Target: testAddress, - }, - }, - wantErr: false, - }, - { - name: "wrong path", - fields: fields{ - opt: &tpb.TransportOption{ - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}}, - }, - }, - args: args{ - opts: &gnmi.SubscribeOptions{ - Mode: "stream", - StreamMode: "sample", - SampleInterval: uint64(1 * time.Second), - HeartbeatInterval: uint64(100 * time.Millisecond), - Paths: gnmi.SplitPaths([]string{ - "interfaces/interface/name", - "ystem/config/hostname", - }), - Target: testAddress, - }, - }, - wantErr: true, - }, - { - name: "destination unreachable", - fields: fields{ - opt: &tpb.TransportOption{ - Address: "203.0.113.10:6030", - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}}, - }, - }, - args: args{ - opts: &gnmi.SubscribeOptions{}, - }, - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var wantErr = tt.wantErr - deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) - if err != nil { - t.Errorf("Subscribe() error = %v", err) - return - } - g, err := nucleus.NewTransport(tt.fields.opt, deviceModel) - if err != nil { - t.Error(err) - return - } - ctx := context.WithValue(context.Background(), types.CtxKeyOpts, tt.args.opts) //nolint - ctx, cancel := context.WithCancel(ctx) - go func() { - subErr := g.Subscribe(ctx) - if (subErr != nil) != wantErr { - if !wantErr && subErr != nil { - if subErr.Error() != "rpc error: code = Canceled desc = context canceled" { - t.Errorf("Subscribe() error = %v, wantErr %v", subErr, tt.wantErr) - } - } - } - }() - time.Sleep(time.Second * 3) - cancel() - time.Sleep(time.Second * 1) - }) - } -} +// n := &server.NetworkElementServer{} -func TestGnmi_CapabilitiesIntegration(t *testing.T) { - if testing.Short() { - t.Skip("skipping integration test") - } - type fields struct { - opt *tpb.TransportOption - } - type args struct { - ctx context.Context - } - tests := []struct { - name string - fields fields - args args - want interface{} - wantErr bool - }{ - { - name: "supported models", - fields: fields{opt: opt}, - args: args{ctx: context.Background()}, - want: gnmiMessages["../proto/cap-resp-arista-ceos"].(*gpb.CapabilityResponse).SupportedModels, - wantErr: false, - }, - { - name: "supported encodings", - fields: fields{opt: opt}, - args: args{ctx: context.Background()}, - want: gnmiMessages["../proto/cap-resp-arista-ceos"].(*gpb.CapabilityResponse).SupportedEncodings, - wantErr: false, - }, - { - name: "gnmi version", - fields: fields{opt: opt}, - args: args{ctx: context.Background()}, - want: gnmiMessages["../proto/cap-resp-arista-ceos"].(*gpb.CapabilityResponse).GNMIVersion, - wantErr: false, - }, - { - name: "destination unreachable", - fields: fields{opt: &tpb.TransportOption{ - Address: "203.0.113.10:6030", - TransportOption: &tpb.TransportOption_GnmiTransportOption{ - GnmiTransportOption: &tpb.GnmiTransportOption{}}, - }, - }, - args: args{ctx: context.Background()}, - want: nil, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) - if err != nil { - t.Errorf("Capabilities() error = %v", err) - return - } - tr, err := nucleus.NewTransport(tt.fields.opt, deviceModel) - if err != nil { - t.Error(err) - return - } - g, ok := tr.(*nucleus.Gnmi) - if !ok { - t.Error(&customerrs.InvalidTypeAssertionError{ - Value: tr, - Type: &nucleus.Gnmi{}, - }) - } - resp, err := g.Capabilities(tt.args.ctx) - if (err != nil) != tt.wantErr { - t.Errorf("Capabilities() error = %v, wantErr %v", err, tt.wantErr) - return - } - var got interface{} - switch tt.name { - case "supported encodings": - got = resp.(*gpb.CapabilityResponse).SupportedEncodings - case "supported models": - t.Skip("test causes false negative") - got = resp.(*gpb.CapabilityResponse).SupportedModels - sort.Slice(got.([]*gpb.ModelData), func(i, j int) bool { - return got.([]*gpb.ModelData)[i].Name < got.([]*gpb.ModelData)[j].Name - }) - sort.Slice(tt.want.([]*gpb.ModelData), func(i, j int) bool { - return tt.want.([]*gpb.ModelData)[i].Name < tt.want.([]*gpb.ModelData)[j].Name - }) - case "gnmi version": - got = resp.(*gpb.CapabilityResponse).GNMIVersion - default: - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("Type() = %v, want %v", got, tt.want) - } - }) - } -} +// cuid, err := n.ChangeMNE(mne.ID(), tt.apiOp, tt.path, tt.value) +// if err != nil { +// t.Error(err) +// return +// } +// if err := n.Commit(cuid); err != nil { +// t.Error(err) +// return +// } +// if err := n.Confirm(cuid); err != nil { +// t.Error(err) +// return +// } +// if tt.name != "delete" { +// resp, err := pnd.Request(mne.ID(), tt.path) +// if err != nil { +// t.Error(err) +// return +// } +// r, ok := resp.(*gpb.GetResponse) +// if !ok { +// t.Error(&customerrs.InvalidTypeAssertionError{ +// Value: resp, +// Type: &gpb.GetResponse{}, +// }) +// return +// } +// got := r.Notification[0].Update[0].Val.GetStringVal() +// if !reflect.DeepEqual(got, tt.want) { +// t.Errorf("GetNetworkElement() got = %v, want %v", got, tt.want) +// } +// } +// }) +// } +// } + +// func TestGnmi_GetIntegration(t *testing.T) { +// if testing.Short() { +// t.Skip("skipping integration test") +// } + +// paths := []string{ +// "/interfaces/interface", +// "system/config/hostname", +// } +// type fields struct { +// opt *tpb.TransportOption +// } +// type args struct { +// ctx context.Context +// params []string +// } +// tests := []struct { +// name string +// fields fields +// args args +// want interface{} +// wantErr bool +// }{ +// { +// name: "default", +// fields: fields{opt: opt}, +// args: args{ +// ctx: context.Background(), +// params: paths[:1], +// }, +// want: gnmiMessages["../proto/resp-interfaces-arista-ceos"], +// wantErr: false, +// }, +// { +// name: "destination unreachable", +// fields: fields{ +// opt: &tpb.TransportOption{ +// Address: unreachable, +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}}, +// }, +// }, +// args: args{ +// ctx: context.Background(), +// params: paths, +// }, +// want: nil, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) +// if err != nil { +// t.Errorf("Get() error = %v", err) +// return +// } +// g, err := nucleus.NewTransport(tt.fields.opt, deviceModel) +// if err != nil { +// t.Error(err) +// return +// } +// got, err := g.Get(tt.args.ctx, tt.args.params...) +// if (err != nil) != tt.wantErr { +// t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if reflect.TypeOf(got) != reflect.TypeOf(tt.want) { +// t.Errorf("Get() got = %v, want %v", got, tt.want) +// } +// }) +// } +// } +// func TestGnmi_SubscribeIntegration(t *testing.T) { +// if testing.Short() { +// t.Skip("skipping integration test") +// } + +// type fields struct { +// opt *tpb.TransportOption +// } +// type args struct { +// ctx context.Context +// opts *gnmi.SubscribeOptions +// } +// tests := []struct { +// name string +// fields fields +// args args +// wantErr bool +// }{ +// { +// name: "default", +// fields: fields{ +// opt: &tpb.TransportOption{ +// Address: testAddress, +// Username: testUsername, +// Password: testPassword, +// Tls: false, +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{ +// Compression: "", +// GrpcDialOptions: nil, +// Token: "", +// Encoding: 0, +// }, +// }, +// }, +// }, +// args: args{ +// ctx: context.Background(), +// opts: &gnmi.SubscribeOptions{ +// Mode: "stream", +// StreamMode: "sample", +// SampleInterval: uint64(1 * time.Second), +// HeartbeatInterval: uint64(100 * time.Millisecond), +// Paths: gnmi.SplitPaths([]string{ +// "/interfaces/interface/name", +// "/system/config/hostname", +// }), +// Target: testAddress, +// }, +// }, +// wantErr: false, +// }, +// { +// name: "wrong path", +// fields: fields{ +// opt: &tpb.TransportOption{ +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}}, +// }, +// }, +// args: args{ +// opts: &gnmi.SubscribeOptions{ +// Mode: "stream", +// StreamMode: "sample", +// SampleInterval: uint64(1 * time.Second), +// HeartbeatInterval: uint64(100 * time.Millisecond), +// Paths: gnmi.SplitPaths([]string{ +// "interfaces/interface/name", +// "ystem/config/hostname", +// }), +// Target: testAddress, +// }, +// }, +// wantErr: true, +// }, +// { +// name: "destination unreachable", +// fields: fields{ +// opt: &tpb.TransportOption{ +// Address: "203.0.113.10:6030", +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}}, +// }, +// }, +// args: args{ +// opts: &gnmi.SubscribeOptions{}, +// }, +// wantErr: false, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// var wantErr = tt.wantErr +// deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) +// if err != nil { +// t.Errorf("Subscribe() error = %v", err) +// return +// } +// g, err := nucleus.NewTransport(tt.fields.opt, deviceModel) +// if err != nil { +// t.Error(err) +// return +// } +// ctx := context.WithValue(context.Background(), types.CtxKeyOpts, tt.args.opts) //nolint +// ctx, cancel := context.WithCancel(ctx) +// go func() { +// subErr := g.Subscribe(ctx) +// if (subErr != nil) != wantErr { +// if !wantErr && subErr != nil { +// if subErr.Error() != "rpc error: code = Canceled desc = context canceled" { +// t.Errorf("Subscribe() error = %v, wantErr %v", subErr, tt.wantErr) +// } +// } +// } +// }() +// time.Sleep(time.Second * 3) +// cancel() +// time.Sleep(time.Second * 1) +// }) +// } +// } + +// func TestGnmi_CapabilitiesIntegration(t *testing.T) { +// if testing.Short() { +// t.Skip("skipping integration test") +// } +// type fields struct { +// opt *tpb.TransportOption +// } +// type args struct { +// ctx context.Context +// } +// tests := []struct { +// name string +// fields fields +// args args +// want interface{} +// wantErr bool +// }{ +// { +// name: "supported models", +// fields: fields{opt: opt}, +// args: args{ctx: context.Background()}, +// want: gnmiMessages["../proto/cap-resp-arista-ceos"].(*gpb.CapabilityResponse).SupportedModels, +// wantErr: false, +// }, +// { +// name: "supported encodings", +// fields: fields{opt: opt}, +// args: args{ctx: context.Background()}, +// want: gnmiMessages["../proto/cap-resp-arista-ceos"].(*gpb.CapabilityResponse).SupportedEncodings, +// wantErr: false, +// }, +// { +// name: "gnmi version", +// fields: fields{opt: opt}, +// args: args{ctx: context.Background()}, +// want: gnmiMessages["../proto/cap-resp-arista-ceos"].(*gpb.CapabilityResponse).GNMIVersion, +// wantErr: false, +// }, +// { +// name: "destination unreachable", +// fields: fields{opt: &tpb.TransportOption{ +// Address: "203.0.113.10:6030", +// TransportOption: &tpb.TransportOption_GnmiTransportOption{ +// GnmiTransportOption: &tpb.GnmiTransportOption{}}, +// }, +// }, +// args: args{ctx: context.Background()}, +// want: nil, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// deviceModel, err := sdk.NewDeviceModel(openconfig.Schema, openconfig.Unmarshal, openconfig.SchemaTreeGzip) +// if err != nil { +// t.Errorf("Capabilities() error = %v", err) +// return +// } +// tr, err := nucleus.NewTransport(tt.fields.opt, deviceModel) +// if err != nil { +// t.Error(err) +// return +// } +// g, ok := tr.(*nucleus.Gnmi) +// if !ok { +// t.Error(&customerrs.InvalidTypeAssertionError{ +// Value: tr, +// Type: &nucleus.Gnmi{}, +// }) +// } +// resp, err := g.Capabilities(tt.args.ctx) +// if (err != nil) != tt.wantErr { +// t.Errorf("Capabilities() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// var got interface{} +// switch tt.name { +// case "supported encodings": +// got = resp.(*gpb.CapabilityResponse).SupportedEncodings +// case "supported models": +// t.Skip("test causes false negative") +// got = resp.(*gpb.CapabilityResponse).SupportedModels +// sort.Slice(got.([]*gpb.ModelData), func(i, j int) bool { +// return got.([]*gpb.ModelData)[i].Name < got.([]*gpb.ModelData)[j].Name +// }) +// sort.Slice(tt.want.([]*gpb.ModelData), func(i, j int) bool { +// return tt.want.([]*gpb.ModelData)[i].Name < tt.want.([]*gpb.ModelData)[j].Name +// }) +// case "gnmi version": +// got = resp.(*gpb.CapabilityResponse).GNMIVersion +// default: +// } +// if !reflect.DeepEqual(got, tt.want) { +// t.Errorf("Type() = %v, want %v", got, tt.want) +// } +// }) +// } +// } diff --git a/controller/topology/topologyService.go b/controller/topology/topologyService.go index 68530269302514decd0e15d262a6907d3ee99a77..f7934bf6c20332aaa64e24651fae1ca9102d1d5f 100644 --- a/controller/topology/topologyService.go +++ b/controller/topology/topologyService.go @@ -24,8 +24,8 @@ type Service interface { GetAll() ([]links.Link, error) } -// service is a service for ports. -type service struct { +// TopoService manages the links between nodes and their related ports. +type TopoService struct { store Store nodeService nodes.Service portService ports.Service @@ -39,7 +39,7 @@ func NewTopologyService( portService ports.Service, eventService eventInterfaces.Service, ) Service { - return &service{ + return &TopoService{ store: store, nodeService: nodeService, portService: portService, @@ -48,7 +48,7 @@ func NewTopologyService( } // AddLink adds a new link to the topology. -func (t *service) AddLink(link links.Link) error { +func (t *TopoService) AddLink(link links.Link) error { // These checks are also happening in the current NBI implementation. // This should be refactored to only to these checks here. // _, err := t.nodeService.EnsureExists(link.SourceNode) @@ -90,7 +90,7 @@ func (t *service) AddLink(link links.Link) error { } // UpdateLink updates an existing link. -func (t *service) UpdateLink(link links.Link) error { +func (t *TopoService) UpdateLink(link links.Link) error { err := t.store.Update(link) if err != nil { return err @@ -112,7 +112,7 @@ func (t *service) UpdateLink(link links.Link) error { } // DeleteLink deletes a link. -func (t *service) DeleteLink(link links.Link) error { +func (t *TopoService) DeleteLink(link links.Link) error { // TODO: Delete should also check if a node or port is used somewhere else and // if not, delete the node and its ports err := t.store.Delete(link) @@ -136,7 +136,7 @@ func (t *service) DeleteLink(link links.Link) error { } // GetAll returns the current topology. -func (t *service) GetAll() ([]links.Link, error) { +func (t *TopoService) GetAll() ([]links.Link, error) { topo, err := t.store.GetAll() if err != nil { return topo, err @@ -144,8 +144,8 @@ func (t *service) GetAll() ([]links.Link, error) { return topo, nil } -// GetAll returns the current topology. -func (t *service) Get(query query.Query) (links.Link, error) { +// Get returns the current topology. +func (t *TopoService) Get(query query.Query) (links.Link, error) { link, err := t.store.Get(query) if err != nil { return link, err diff --git a/controller/topology/topologyService_test.go b/controller/topology/topologyService_test.go index 899acc98c4e31b5e5b89258843efb76cf5a1be4d..e28df6d9e6990c63528bbd7130c5ea5e0d7f1c98 100644 --- a/controller/topology/topologyService_test.go +++ b/controller/topology/topologyService_test.go @@ -185,7 +185,7 @@ func TestTopologyService_AddLink(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - p := &service{ + p := &TopoService{ store: tt.fields.store, nodeService: tt.fields.nodeService, portService: tt.fields.portService, @@ -243,7 +243,7 @@ func TestTopologyService_Update(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - p := &service{ + p := &TopoService{ store: tt.fields.store, nodeService: tt.fields.nodeService, portService: tt.fields.portService, @@ -312,7 +312,7 @@ func TestNodeService_Delete(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - p := &service{ + p := &TopoService{ store: tt.fields.store, nodeService: tt.fields.nodeService, portService: tt.fields.portService, @@ -375,7 +375,7 @@ func TestTopologyService_Get(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - p := &service{ + p := &TopoService{ store: tt.fields.store, nodeService: tt.fields.nodeService, portService: tt.fields.portService, @@ -420,7 +420,7 @@ func TestTopologyService_GetAll(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - p := &service{ + p := &TopoService{ store: tt.fields.store, nodeService: tt.fields.nodeService, portService: tt.fields.portService, diff --git a/plugins/sdk/deviceModel.go b/plugins/sdk/deviceModel.go index 8a3b71da4ae41f8e7928f0384a7ffaed8884b7c2..1e920b4e7c72edf2e0a4ec6323facd7b031f6554 100644 --- a/plugins/sdk/deviceModel.go +++ b/plugins/sdk/deviceModel.go @@ -5,7 +5,7 @@ import ( "strconv" "time" - ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -189,14 +189,14 @@ func (d *DeviceModel) Diff(original, modified []byte) (*gpb.Notification, error) return ygot.Diff(originalAsValidatedCopy, modifiedAsValidatedCopy) } -func (d *DeviceModel) ValidateChange(operation ppb.ApiOperation, path *gpb.Path, value []byte) ([]byte, error) { +func (d *DeviceModel) ValidateChange(operation mnepb.ApiOperation, path *gpb.Path, value []byte) ([]byte, error) { modelCopy, err := createValidatedCopy(d.model) if err != nil { return nil, err } switch operation { - case ppb.ApiOperation_API_OPERATION_UPDATE, ppb.ApiOperation_API_OPERATION_REPLACE: + case mnepb.ApiOperation_API_OPERATION_UPDATE, mnepb.ApiOperation_API_OPERATION_REPLACE: _, entry, err := ytypes.GetOrCreateNode(d.schema.RootSchema(), modelCopy, path) if err != nil { return nil, err @@ -217,7 +217,7 @@ func (d *DeviceModel) ValidateChange(operation ppb.ApiOperation, path *gpb.Path, return nil, err } } - case ppb.ApiOperation_API_OPERATION_DELETE: + case mnepb.ApiOperation_API_OPERATION_DELETE: if err := ytypes.DeleteNode(d.schema.RootSchema(), modelCopy, path); err != nil { return nil, err }