Skip to content
Snippets Groups Projects
Commit d330f129 authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

change structure

parent 2627fbf8
No related branches found
No related tags found
1 merge request!155Northbound Interface
package nbi
package client
package nbi
import (
pb "code.fbi.h-da.de/cocsn/api/proto/gosdn"
ppb "code.fbi.h-da.de/cocsn/api/proto/gosdn/pnd"
"code.fbi.h-da.de/cocsn/gosdn/nucleus"
"code.fbi.h-da.de/cocsn/gosdn/nucleus/errors"
"context"
"github.com/google/uuid"
"github.com/openconfig/ygot/ygot"
"sync"
"time"
)
var pndLock sync.RWMutex
var sbiLock sync.RWMutex
var pndc *nucleus.PndStore
var sbic *nucleus.SbiStore
type pndServer struct {
ppb.UnimplementedPndServer
}
func (p pndServer) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse, error) {
switch request.Type {
case ppb.GetRequest_PND:
pid, err := uuid.Parse(request.Id)
if err != nil {
return nil, err
}
return handlePndRequest(pid)
case ppb.GetRequest_OND:
return handleOndRequest()
case ppb.GetRequest_ONDS:
return handleOndsRequest()
case ppb.GetRequest_SBI:
return handleSbiRequest()
case ppb.GetRequest_SBIS:
return handleSbisRequest()
case ppb.GetRequest_Changes:
return handleChangesRequest()
default:
return nil, errors.ErrOperationNotSupported{Op: request.Type}
}
}
func handlePndRequest(pid uuid.UUID) (*ppb.GetResponse, error) {
pndLock.RLock()
defer pndLock.RUnlock()
pnd, err := pndc.Get(pid)
if err != nil {
return nil, err
}
onds, err := fillOnds(pnd)
if err != nil {
return nil, err
}
sbis, err := fillSbis(pnd)
return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(),
Payload: &ppb.GetResponse_Pnd{
Pnd: &ppb.PrincipalNetworkDomain{
Id: pid.String(),
Name: pnd.GetName(),
Description: pnd.GetDescription(),
Onds: onds,
Sbis: sbis,
Changes: nil,
},
},
}, nil
}
func handleSbiRequest() (*ppb.GetResponse, error) {
return nil, errors.ErrNotYetImplemented{}
}
func handleSbisRequest() (*ppb.GetResponse, error) {
return nil, errors.ErrNotYetImplemented{}
}
func handleOndRequest() (*ppb.GetResponse, error) {
return nil, errors.ErrNotYetImplemented{}
}
func handleOndsRequest() (*ppb.GetResponse, error) {
return nil, errors.ErrNotYetImplemented{}
}
func handleChangesRequest() (*ppb.GetResponse, error) {
return nil, errors.ErrNotYetImplemented{}
}
func fillOnds(pnd nucleus.PrincipalNetworkDomain) (*ppb.OrchestratedNetworkingDevices, error) {
onds := make(map[string]*ppb.OrchestratedNetworkingDevice)
for _, id := range pnd.Devices() {
d, err := pnd.GetDevice(id)
if err != nil {
return nil, err
}
cfg := ygot.GNMINotificationsConfig{}
dev, err := ygot.TogNMINotifications(d, time.Now().UnixNano(), cfg)
if err != nil {
return nil, err
}
ond := &ppb.OrchestratedNetworkingDevice{
Id: id.String(),
Name: "",
Device: dev,
}
onds[id.String()] = ond
}
return &ppb.OrchestratedNetworkingDevices{Onds: onds}, nil
}
func fillSbis(pnd nucleus.PrincipalNetworkDomain) (*ppb.SouthboundInterfaces, error) {
sbis := make(map[string]*ppb.SouthboundInterface)
sbic := pnd.GetSBIs().(*nucleus.SbiStore)
for _,id := range sbic.UUIDs() {
sbi, err := sbic.Get(id)
if err != nil {
return nil, err
}
sbis[id.String()] = &ppb.SouthboundInterface{
Id: id.String(),
Schema: sbi.Schema().RootSchema().Name,
}
}
return &ppb.SouthboundInterfaces{Sbis: sbis}, nil
}
func fillChanges(pnd nucleus.PrincipalNetworkDomain) (*ppb.Changes, error) {
// TODO: Allow access to change at leaso on
return nil, errors.ErrNotYetImplemented{}
}
func (p pndServer) Set(ctx context.Context, request *ppb.SetRequest) (*ppb.SetResponse, error) {
panic("implement me")
}
type gosdnServer struct {
pb.UnimplementedGosdnServer
}
func (s gosdnServer) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse, error) {
panic("implement me")
}
func (s gosdnServer) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse, error) {
panic("implement me")
}
func NewNBI(pnds *nucleus.PndStore, sbis *nucleus.SbiStore) *NorthboundInterface {
pndc = pnds
sbic = sbis
pndLock = sync.RWMutex{}
sbiLock = sync.RWMutex{}
return &NorthboundInterface{
Pnd: &pndServer{},
Controller: &gosdnServer{},
}
}
type NorthboundInterface struct {
Pnd *pndServer
Controller *gosdnServer
}
package server
import (
pb "code.fbi.h-da.de/cocsn/api/proto/gosdn"
"code.fbi.h-da.de/cocsn/gosdn/nucleus"
"context"
"sync"
)
var pndLock sync.RWMutex
var sbiLock sync.RWMutex
var pndc *nucleus.PndStore
var sbic *nucleus.SbiStore
type gosdnServer struct {
pb.UnimplementedGosdnServer
}
func (s gosdnServer) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse, error) {
panic("implement me")
}
func (s gosdnServer) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse, error) {
panic("implement me")
}
func NewNBI(pnds *nucleus.PndStore, sbis *nucleus.SbiStore) *NorthboundInterface {
pndc = pnds
sbic = sbis
pndLock = sync.RWMutex{}
sbiLock = sync.RWMutex{}
return &NorthboundInterface{
Pnd: &pndServer{},
Controller: &gosdnServer{},
}
}
type NorthboundInterface struct {
Pnd *pndServer
Controller *gosdnServer
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment