From f399296fc38354c5ef092524f8d76f4e79b9249f Mon Sep 17 00:00:00 2001
From: Malte Bauch <malte.bauch@stud.h-da.de>
Date: Mon, 18 Jan 2021 21:30:01 +0100
Subject: [PATCH] changed gosdnCLI proto to be able to add PNDs

---
 api/proto/gosdnCLI.pb.go | 302 +++++++++++++++++++++++++++++++--------
 api/proto/gosdnCLI.proto |  14 ++
 2 files changed, 257 insertions(+), 59 deletions(-)

diff --git a/api/proto/gosdnCLI.pb.go b/api/proto/gosdnCLI.pb.go
index 62d48d127..e9c35e0d6 100644
--- a/api/proto/gosdnCLI.pb.go
+++ b/api/proto/gosdnCLI.pb.go
@@ -1,20 +1,19 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.25.0-devel
-// 	protoc        v3.12.4
+// 	protoc        v3.14.0
 // source: gosdnCLI.proto
 
 package gosdn
 
 import (
 	context "context"
-	proto "github.com/golang/protobuf/proto"
-	empty "github.com/golang/protobuf/ptypes/empty"
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	emptypb "google.golang.org/protobuf/types/known/emptypb"
 	reflect "reflect"
 	sync "sync"
 )
@@ -26,10 +25,6 @@ const (
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
-// This is a compile-time assertion that a sufficiently up-to-date version
-// of the legacy proto package is being used.
-const _ = proto.ProtoPackageIsVersion4
-
 // The request message containing the user's name.
 type HelloRequest struct {
 	state         protoimpl.MessageState
@@ -326,6 +321,118 @@ func (x *TAPIReply) GetMessage() string {
 	return ""
 }
 
+//
+type PNDRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name        string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	Sbi         string `protobuf:"bytes,3,opt,name=sbi,proto3" json:"sbi,omitempty"`
+}
+
+func (x *PNDRequest) Reset() {
+	*x = PNDRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdnCLI_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PNDRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PNDRequest) ProtoMessage() {}
+
+func (x *PNDRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdnCLI_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 PNDRequest.ProtoReflect.Descriptor instead.
+func (*PNDRequest) Descriptor() ([]byte, []int) {
+	return file_gosdnCLI_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *PNDRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *PNDRequest) GetDescription() string {
+	if x != nil {
+		return x.Description
+	}
+	return ""
+}
+
+func (x *PNDRequest) GetSbi() string {
+	if x != nil {
+		return x.Sbi
+	}
+	return ""
+}
+
+//
+type PNDReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+}
+
+func (x *PNDReply) Reset() {
+	*x = PNDReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_gosdnCLI_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PNDReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PNDReply) ProtoMessage() {}
+
+func (x *PNDReply) ProtoReflect() protoreflect.Message {
+	mi := &file_gosdnCLI_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 PNDReply.ProtoReflect.Descriptor instead.
+func (*PNDReply) Descriptor() ([]byte, []int) {
+	return file_gosdnCLI_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *PNDReply) GetMessage() string {
+	if x != nil {
+		return x.Message
+	}
+	return ""
+}
+
 // The response message containing a string with a goSDN log
 type LogReply struct {
 	state         protoimpl.MessageState
@@ -338,7 +445,7 @@ type LogReply struct {
 func (x *LogReply) Reset() {
 	*x = LogReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_gosdnCLI_proto_msgTypes[6]
+		mi := &file_gosdnCLI_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -351,7 +458,7 @@ func (x *LogReply) String() string {
 func (*LogReply) ProtoMessage() {}
 
 func (x *LogReply) ProtoReflect() protoreflect.Message {
-	mi := &file_gosdnCLI_proto_msgTypes[6]
+	mi := &file_gosdnCLI_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -364,7 +471,7 @@ func (x *LogReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use LogReply.ProtoReflect.Descriptor instead.
 func (*LogReply) Descriptor() ([]byte, []int) {
-	return file_gosdnCLI_proto_rawDescGZIP(), []int{6}
+	return file_gosdnCLI_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *LogReply) GetLog() string {
@@ -396,37 +503,48 @@ var file_gosdnCLI_proto_rawDesc = []byte{
 	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
 	0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x09, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79,
 	0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1c, 0x0a, 0x08, 0x4c, 0x6f,
-	0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x32, 0xe4, 0x02, 0x0a, 0x07, 0x47, 0x72, 0x70,
-	0x63, 0x43, 0x6c, 0x69, 0x12, 0x34, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f,
-	0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65,
-	0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x68,
-	0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53,
-	0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52,
-	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
-	0x79, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70,
-	0x6c, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65,
-	0x74, 0x45, 0x64, 0x67, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41,
-	0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a,
-	0x0f, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, 0x74, 0x45, 0x64, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65,
-	0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50,
-	0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, 0x50, 0x49,
-	0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42,
-	0x50, 0x0a, 0x1e, 0x64, 0x65, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x67,
-	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6c, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
-	0x65, 0x42, 0x0c, 0x63, 0x6c, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x50,
-	0x01, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d,
-	0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x0a, 0x50, 0x4e,
+	0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 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, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10,
+	0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x62, 0x69,
+	0x22, 0x24, 0x0a, 0x08, 0x50, 0x4e, 0x44, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1c, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x6c, 0x6f, 0x67, 0x32, 0x97, 0x03, 0x0a, 0x07, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69,
+	0x12, 0x34, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x12, 0x13, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f,
+	0x77, 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64,
+	0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79,
+	0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x53,
+	0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00,
+	0x30, 0x01, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, 0x74, 0x45, 0x64, 0x67,
+	0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41,
+	0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x0f, 0x54, 0x41, 0x50,
+	0x49, 0x47, 0x65, 0x74, 0x45, 0x64, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, 0x74, 0x4c,
+	0x69, 0x6e, 0x6b, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x09, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x4e, 0x44, 0x12, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x50, 0x4e, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x4e, 0x44, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x50,
+	0x0a, 0x1e, 0x64, 0x65, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x67, 0x6f,
+	0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6c, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+	0x42, 0x0c, 0x63, 0x6c, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x50, 0x01,
+	0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64,
+	0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -441,7 +559,7 @@ func file_gosdnCLI_proto_rawDescGZIP() []byte {
 	return file_gosdnCLI_proto_rawDescData
 }
 
-var file_gosdnCLI_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_gosdnCLI_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
 var file_gosdnCLI_proto_goTypes = []interface{}{
 	(*HelloRequest)(nil),    // 0: proto.HelloRequest
 	(*HelloReply)(nil),      // 1: proto.HelloReply
@@ -449,24 +567,28 @@ var file_gosdnCLI_proto_goTypes = []interface{}{
 	(*ShutdownReply)(nil),   // 3: proto.ShutdownReply
 	(*TAPIRequest)(nil),     // 4: proto.TAPIRequest
 	(*TAPIReply)(nil),       // 5: proto.TAPIReply
-	(*LogReply)(nil),        // 6: proto.LogReply
-	(*empty.Empty)(nil),     // 7: google.protobuf.Empty
+	(*PNDRequest)(nil),      // 6: proto.PNDRequest
+	(*PNDReply)(nil),        // 7: proto.PNDReply
+	(*LogReply)(nil),        // 8: proto.LogReply
+	(*emptypb.Empty)(nil),   // 9: google.protobuf.Empty
 }
 var file_gosdnCLI_proto_depIdxs = []int32{
 	0, // 0: proto.GrpcCli.SayHello:input_type -> proto.HelloRequest
 	2, // 1: proto.GrpcCli.Shutdown:input_type -> proto.ShutdownRequest
-	7, // 2: proto.GrpcCli.CreateLogStream:input_type -> google.protobuf.Empty
+	9, // 2: proto.GrpcCli.CreateLogStream:input_type -> google.protobuf.Empty
 	4, // 3: proto.GrpcCli.TAPIGetEdge:input_type -> proto.TAPIRequest
 	4, // 4: proto.GrpcCli.TAPIGetEdgeNode:input_type -> proto.TAPIRequest
 	4, // 5: proto.GrpcCli.TAPIGetLink:input_type -> proto.TAPIRequest
-	1, // 6: proto.GrpcCli.SayHello:output_type -> proto.HelloReply
-	3, // 7: proto.GrpcCli.Shutdown:output_type -> proto.ShutdownReply
-	6, // 8: proto.GrpcCli.CreateLogStream:output_type -> proto.LogReply
-	5, // 9: proto.GrpcCli.TAPIGetEdge:output_type -> proto.TAPIReply
-	5, // 10: proto.GrpcCli.TAPIGetEdgeNode:output_type -> proto.TAPIReply
-	5, // 11: proto.GrpcCli.TAPIGetLink:output_type -> proto.TAPIReply
-	6, // [6:12] is the sub-list for method output_type
-	0, // [0:6] is the sub-list for method input_type
+	6, // 6: proto.GrpcCli.CreatePND:input_type -> proto.PNDRequest
+	1, // 7: proto.GrpcCli.SayHello:output_type -> proto.HelloReply
+	3, // 8: proto.GrpcCli.Shutdown:output_type -> proto.ShutdownReply
+	8, // 9: proto.GrpcCli.CreateLogStream:output_type -> proto.LogReply
+	5, // 10: proto.GrpcCli.TAPIGetEdge:output_type -> proto.TAPIReply
+	5, // 11: proto.GrpcCli.TAPIGetEdgeNode:output_type -> proto.TAPIReply
+	5, // 12: proto.GrpcCli.TAPIGetLink:output_type -> proto.TAPIReply
+	7, // 13: proto.GrpcCli.CreatePND:output_type -> proto.PNDReply
+	7, // [7:14] is the sub-list for method output_type
+	0, // [0:7] 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
@@ -551,6 +673,30 @@ func file_gosdnCLI_proto_init() {
 			}
 		}
 		file_gosdnCLI_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PNDRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdnCLI_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PNDReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_gosdnCLI_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LogReply); i {
 			case 0:
 				return &v.state
@@ -569,7 +715,7 @@ func file_gosdnCLI_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_gosdnCLI_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   7,
+			NumMessages:   9,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
@@ -600,7 +746,7 @@ type GrpcCliClient interface {
 	// Shutdown goSDN
 	Shutdown(ctx context.Context, in *ShutdownRequest, opts ...grpc.CallOption) (*ShutdownReply, error)
 	// creates a stream to receive goSDN logs
-	CreateLogStream(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error)
+	CreateLogStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error)
 	// By now solely TAPI specific calls can be issued from the grpc-cli
 	// TAPIGetEdge
 	TAPIGetEdge(ctx context.Context, in *TAPIRequest, opts ...grpc.CallOption) (*TAPIReply, error)
@@ -608,6 +754,8 @@ type GrpcCliClient interface {
 	TAPIGetEdgeNode(ctx context.Context, in *TAPIRequest, opts ...grpc.CallOption) (*TAPIReply, error)
 	// TAPIGetLink
 	TAPIGetLink(ctx context.Context, in *TAPIRequest, opts ...grpc.CallOption) (*TAPIReply, error)
+	// CreatePND
+	CreatePND(ctx context.Context, in *PNDRequest, opts ...grpc.CallOption) (*PNDReply, error)
 }
 
 type grpcCliClient struct {
@@ -636,7 +784,7 @@ func (c *grpcCliClient) Shutdown(ctx context.Context, in *ShutdownRequest, opts
 	return out, nil
 }
 
-func (c *grpcCliClient) CreateLogStream(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error) {
+func (c *grpcCliClient) CreateLogStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error) {
 	stream, err := c.cc.NewStream(ctx, &_GrpcCli_serviceDesc.Streams[0], "/proto.GrpcCli/CreateLogStream", opts...)
 	if err != nil {
 		return nil, err
@@ -695,6 +843,15 @@ func (c *grpcCliClient) TAPIGetLink(ctx context.Context, in *TAPIRequest, opts .
 	return out, nil
 }
 
+func (c *grpcCliClient) CreatePND(ctx context.Context, in *PNDRequest, opts ...grpc.CallOption) (*PNDReply, error) {
+	out := new(PNDReply)
+	err := c.cc.Invoke(ctx, "/proto.GrpcCli/CreatePND", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // GrpcCliServer is the server API for GrpcCli service.
 type GrpcCliServer interface {
 	// Sends a greeting
@@ -702,7 +859,7 @@ type GrpcCliServer interface {
 	// Shutdown goSDN
 	Shutdown(context.Context, *ShutdownRequest) (*ShutdownReply, error)
 	// creates a stream to receive goSDN logs
-	CreateLogStream(*empty.Empty, GrpcCli_CreateLogStreamServer) error
+	CreateLogStream(*emptypb.Empty, GrpcCli_CreateLogStreamServer) error
 	// By now solely TAPI specific calls can be issued from the grpc-cli
 	// TAPIGetEdge
 	TAPIGetEdge(context.Context, *TAPIRequest) (*TAPIReply, error)
@@ -710,6 +867,8 @@ type GrpcCliServer interface {
 	TAPIGetEdgeNode(context.Context, *TAPIRequest) (*TAPIReply, error)
 	// TAPIGetLink
 	TAPIGetLink(context.Context, *TAPIRequest) (*TAPIReply, error)
+	// CreatePND
+	CreatePND(context.Context, *PNDRequest) (*PNDReply, error)
 }
 
 // UnimplementedGrpcCliServer can be embedded to have forward compatible implementations.
@@ -722,7 +881,7 @@ func (*UnimplementedGrpcCliServer) SayHello(context.Context, *HelloRequest) (*He
 func (*UnimplementedGrpcCliServer) Shutdown(context.Context, *ShutdownRequest) (*ShutdownReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Shutdown not implemented")
 }
-func (*UnimplementedGrpcCliServer) CreateLogStream(*empty.Empty, GrpcCli_CreateLogStreamServer) error {
+func (*UnimplementedGrpcCliServer) CreateLogStream(*emptypb.Empty, GrpcCli_CreateLogStreamServer) error {
 	return status.Errorf(codes.Unimplemented, "method CreateLogStream not implemented")
 }
 func (*UnimplementedGrpcCliServer) TAPIGetEdge(context.Context, *TAPIRequest) (*TAPIReply, error) {
@@ -734,6 +893,9 @@ func (*UnimplementedGrpcCliServer) TAPIGetEdgeNode(context.Context, *TAPIRequest
 func (*UnimplementedGrpcCliServer) TAPIGetLink(context.Context, *TAPIRequest) (*TAPIReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method TAPIGetLink not implemented")
 }
+func (*UnimplementedGrpcCliServer) CreatePND(context.Context, *PNDRequest) (*PNDReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreatePND not implemented")
+}
 
 func RegisterGrpcCliServer(s *grpc.Server, srv GrpcCliServer) {
 	s.RegisterService(&_GrpcCli_serviceDesc, srv)
@@ -776,7 +938,7 @@ func _GrpcCli_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(in
 }
 
 func _GrpcCli_CreateLogStream_Handler(srv interface{}, stream grpc.ServerStream) error {
-	m := new(empty.Empty)
+	m := new(emptypb.Empty)
 	if err := stream.RecvMsg(m); err != nil {
 		return err
 	}
@@ -850,6 +1012,24 @@ func _GrpcCli_TAPIGetLink_Handler(srv interface{}, ctx context.Context, dec func
 	return interceptor(ctx, in, info, handler)
 }
 
+func _GrpcCli_CreatePND_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PNDRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GrpcCliServer).CreatePND(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/proto.GrpcCli/CreatePND",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GrpcCliServer).CreatePND(ctx, req.(*PNDRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _GrpcCli_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "proto.GrpcCli",
 	HandlerType: (*GrpcCliServer)(nil),
@@ -874,6 +1054,10 @@ var _GrpcCli_serviceDesc = grpc.ServiceDesc{
 			MethodName: "TAPIGetLink",
 			Handler:    _GrpcCli_TAPIGetLink_Handler,
 		},
+		{
+			MethodName: "CreatePND",
+			Handler:    _GrpcCli_CreatePND_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/api/proto/gosdnCLI.proto b/api/proto/gosdnCLI.proto
index 0e3636675..83f5ea867 100644
--- a/api/proto/gosdnCLI.proto
+++ b/api/proto/gosdnCLI.proto
@@ -25,6 +25,8 @@ service GrpcCli {
   rpc TAPIGetEdgeNode (TAPIRequest) returns (TAPIReply) {}
   // TAPIGetLink
   rpc TAPIGetLink (TAPIRequest) returns (TAPIReply) {}
+  // CreatePND
+  rpc CreatePND (PNDRequest) returns (PNDReply) {}
 }
 
 // The request message containing the user's name.
@@ -58,6 +60,18 @@ message TAPIReply {
   string message = 1;
 }
 
+//
+message PNDRequest {
+    string name = 1;
+    string description = 2;
+    string sbi = 3;
+}
+
+//
+message PNDReply {
+    string message = 1;
+}
+
 // The response message containing a string with a goSDN log
 message LogReply {
   string log = 1;
-- 
GitLab