diff --git a/go.mod b/go.mod index 67eb76db4dd1ffe73e9c85c0c1b8a1e2f516fd91..9551496609103f4cdfefe36ac7452be0caf3476b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module code.fbi.h-da.de/danet/gosdn go 1.17 require ( - code.fbi.h-da.de/danet/api v0.2.5-0.20220208132534-98ec7f81567f + code.fbi.h-da.de/danet/api v0.2.5-0.20220301081709-d68d321135a7 code.fbi.h-da.de/danet/forks/goarista v0.0.0-20210709163519-47ee8958ef40 code.fbi.h-da.de/danet/forks/google v0.0.0-20210709163519-47ee8958ef40 code.fbi.h-da.de/danet/yang-models v0.1.0 @@ -23,6 +23,8 @@ require ( google.golang.org/protobuf v1.27.1 ) +require github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.2 + require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.1 // indirect @@ -30,7 +32,6 @@ require ( github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect diff --git a/go.sum b/go.sum index b51351f2e34627514dbe670e358bd275589a1e22..b411756bc45d99c3ba32a40f163a7cd159ddce74 100644 --- a/go.sum +++ b/go.sum @@ -46,8 +46,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -code.fbi.h-da.de/danet/api v0.2.5-0.20220208132534-98ec7f81567f h1:+/JvX942Za21HLwG0E26bSct7EFpSBW0t+XYlDFUw+k= -code.fbi.h-da.de/danet/api v0.2.5-0.20220208132534-98ec7f81567f/go.mod h1:J1wwKAHhP3HprrzoNs6f5C56znzvns69FU56oItc3kc= +code.fbi.h-da.de/danet/api v0.2.5-0.20220301081709-d68d321135a7 h1:DxcOZDploBC0GdyURQQprwo6jOTUUQ8spXgRQXtK4xE= +code.fbi.h-da.de/danet/api v0.2.5-0.20220301081709-d68d321135a7/go.mod h1:J1wwKAHhP3HprrzoNs6f5C56znzvns69FU56oItc3kc= code.fbi.h-da.de/danet/forks/goarista v0.0.0-20210709163519-47ee8958ef40 h1:x7rVYGqfJSMWuYBp+JE6JVMcFP03Gx0mnR2ftsgqjVI= code.fbi.h-da.de/danet/forks/goarista v0.0.0-20210709163519-47ee8958ef40/go.mod h1:uVe3gCeF2DcIho8K9CIO46uAkHW/lUF+fAaUX1vHrF0= code.fbi.h-da.de/danet/forks/google v0.0.0-20210709163519-47ee8958ef40 h1:B45k5tGEdjjdsKK4f+0dQoyReFmsWdwYEzHofA7DPM8= diff --git a/northbound/server/pnd.go b/northbound/server/pnd.go index ec1201a39c6ffa021d2a8abe0715f06e324e1dab..bb70bf51484c7f25ee1cc96ead2f7a0d0796019f 100644 --- a/northbound/server/pnd.go +++ b/northbound/server/pnd.go @@ -8,6 +8,7 @@ import ( spb "code.fbi.h-da.de/danet/api/go/gosdn/southbound" "code.fbi.h-da.de/danet/gosdn/interfaces/networkdomain" "code.fbi.h-da.de/danet/gosdn/metrics" + "code.fbi.h-da.de/danet/gosdn/nucleus" "code.fbi.h-da.de/danet/gosdn/nucleus/errors" "github.com/google/uuid" "github.com/openconfig/ygot/ygot" @@ -218,6 +219,7 @@ func fillSbis(pnd networkdomain.NetworkDomain, all bool, sid ...string) ([]*spb. log.Error(err) return nil, status.Errorf(codes.Aborted, "%v", err) } + sbis[i] = &spb.SouthboundInterface{ Id: id.String(), } @@ -238,7 +240,6 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) { return UUIDs, nil } -//TODO: add body to request tod eal with / problem 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) @@ -502,26 +503,60 @@ func (p pndServer) SetPathList(ctx context.Context, request *ppb.SetPathListRequ } -//TODO: update proto for setSBI and add sbiList after! -// func (p pndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListRequest) (*ppb.SetSbiListResponse, 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 := pndc.GetPND(pid) -// if err != nil { -// return nil, handleRPCError(labels, err) -// } - -// for _, r := range request.Sbi { -// err := pnd.AddSbi() -// } - -// } +func (p pndServer) SetSbiList(ctx context.Context, request *ppb.SetSbiListRequest) (*ppb.SetSbiListResponse, 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 := pndc.GetPND(pid) + if err != nil { + return nil, handleRPCError(labels, err) + } + + for _, r := range request.Sbi { + sbiType := filterSbiType(r.SbiType) + sbi, err := nucleus.NewSBI(sbiType) + if err != nil { + return nil, handleRPCError(labels, err) + } + + err = pnd.AddSbi(sbi) + if err != nil { + return nil, handleRPCError(labels, err) + } + } + + return &ppb.SetSbiListResponse{ + Timestamp: time.Now().UnixNano(), + Status: ppb.Status_STATUS_OK, + Responses: []*ppb.SetResponse{ + { + Status: ppb.Status_STATUS_OK, + }, + }, + }, nil +} + +func filterSbiType(sbiType ppb.SbiType) spb.Type { + var spbType spb.Type + + switch sbiType { + case ppb.SbiType_SBI_TYPE_OPENCONFIG: + spbType = spb.Type_TYPE_OPENCONFIG + case ppb.SbiType_SBI_TYPE_CONTAINERISED: + spbType = spb.Type_TYPE_CONTAINERISED + case ppb.SbiType_SBI_TYPE_PLUGIN: + spbType = spb.Type_TYPE_PLUGIN + default: + spbType = spb.Type_TYPE_UNSPECIFIED + } + + return spbType +} func (p pndServer) DeleteOnd(ctx context.Context, request *ppb.DeleteOndRequest) (*ppb.DeleteOndResponse, error) { pid, err := uuid.Parse(request.Pid)