diff --git a/proto/gosdn/gosdn_grpc.pb.go b/proto/gosdn/gosdn_grpc.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..079fa17e53ce59913fca244a81d5f7f9edfb692f
--- /dev/null
+++ b/proto/gosdn/gosdn_grpc.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package gosdn
+
+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
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GosdnClient is the client API for Gosdn service.
+//
+// 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 GosdnClient interface {
+	Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error)
+	Set(ctx context.Context, in *SetRequest, opts ...grpc.CallOption) (*SetResponse, error)
+}
+
+type gosdnClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGosdnClient(cc grpc.ClientConnInterface) GosdnClient {
+	return &gosdnClient{cc}
+}
+
+func (c *gosdnClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) {
+	out := new(GetResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.gosdn/Get", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *gosdnClient) Set(ctx context.Context, in *SetRequest, opts ...grpc.CallOption) (*SetResponse, error) {
+	out := new(SetResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.gosdn/Set", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GosdnServer is the server API for Gosdn service.
+// All implementations must embed UnimplementedGosdnServer
+// for forward compatibility
+type GosdnServer interface {
+	Get(context.Context, *GetRequest) (*GetResponse, error)
+	Set(context.Context, *SetRequest) (*SetResponse, error)
+	mustEmbedUnimplementedGosdnServer()
+}
+
+// UnimplementedGosdnServer must be embedded to have forward compatible implementations.
+type UnimplementedGosdnServer struct {
+}
+
+func (*UnimplementedGosdnServer) Get(context.Context, *GetRequest) (*GetResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (*UnimplementedGosdnServer) Set(context.Context, *SetRequest) (*SetResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Set not implemented")
+}
+func (*UnimplementedGosdnServer) mustEmbedUnimplementedGosdnServer() {}
+
+func RegisterGosdnServer(s *grpc.Server, srv GosdnServer) {
+	s.RegisterService(&_Gosdn_serviceDesc, srv)
+}
+
+func _Gosdn_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GosdnServer).Get(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.gosdn/Get",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GosdnServer).Get(ctx, req.(*GetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Gosdn_Set_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GosdnServer).Set(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.gosdn/Set",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GosdnServer).Set(ctx, req.(*SetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Gosdn_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "gosdn.gosdn",
+	HandlerType: (*GosdnServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "Get",
+			Handler:    _Gosdn_Get_Handler,
+		},
+		{
+			MethodName: "Set",
+			Handler:    _Gosdn_Set_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "proto/gosdn/gosdn.proto",
+}
diff --git a/proto/gosdn/pnd/pnd_grpc.pb.go b/proto/gosdn/pnd/pnd_grpc.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ae83f0cbe2544b01db12a6f66c73fc7e012e1719
--- /dev/null
+++ b/proto/gosdn/pnd/pnd_grpc.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+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
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// PndClient is the client API for Pnd service.
+//
+// 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 PndClient interface {
+	Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error)
+	Set(ctx context.Context, in *SetRequest, opts ...grpc.CallOption) (*SetResponse, error)
+}
+
+type pndClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewPndClient(cc grpc.ClientConnInterface) PndClient {
+	return &pndClient{cc}
+}
+
+func (c *pndClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) {
+	out := new(GetResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.pnd.pnd/Get", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *pndClient) Set(ctx context.Context, in *SetRequest, opts ...grpc.CallOption) (*SetResponse, error) {
+	out := new(SetResponse)
+	err := c.cc.Invoke(ctx, "/gosdn.pnd.pnd/Set", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// PndServer is the server API for Pnd service.
+// All implementations must embed UnimplementedPndServer
+// for forward compatibility
+type PndServer interface {
+	Get(context.Context, *GetRequest) (*GetResponse, error)
+	Set(context.Context, *SetRequest) (*SetResponse, error)
+	mustEmbedUnimplementedPndServer()
+}
+
+// UnimplementedPndServer must be embedded to have forward compatible implementations.
+type UnimplementedPndServer struct {
+}
+
+func (*UnimplementedPndServer) Get(context.Context, *GetRequest) (*GetResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (*UnimplementedPndServer) Set(context.Context, *SetRequest) (*SetResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Set not implemented")
+}
+func (*UnimplementedPndServer) mustEmbedUnimplementedPndServer() {}
+
+func RegisterPndServer(s *grpc.Server, srv PndServer) {
+	s.RegisterService(&_Pnd_serviceDesc, srv)
+}
+
+func _Pnd_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PndServer).Get(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.pnd.pnd/Get",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PndServer).Get(ctx, req.(*GetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Pnd_Set_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PndServer).Set(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/gosdn.pnd.pnd/Set",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PndServer).Set(ctx, req.(*SetRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Pnd_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "gosdn.pnd.pnd",
+	HandlerType: (*PndServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "Get",
+			Handler:    _Pnd_Get_Handler,
+		},
+		{
+			MethodName: "Set",
+			Handler:    _Pnd_Set_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "proto/gosdn/pnd/pnd.proto",
+}