diff --git a/northbound/client.go b/northbound/client.go deleted file mode 100644 index d0b2c91c94937844ed08444c7e8f53ea94583ffc..0000000000000000000000000000000000000000 --- a/northbound/client.go +++ /dev/null @@ -1 +0,0 @@ -package nbi diff --git a/northbound/client/client.go b/northbound/client/client.go new file mode 100644 index 0000000000000000000000000000000000000000..da13c8ef3ca33e1788a7b9560e0ade4e46b5f6f6 --- /dev/null +++ b/northbound/client/client.go @@ -0,0 +1 @@ +package client diff --git a/northbound/server.go b/northbound/server.go deleted file mode 100644 index 2e45ee2b91476ad5d3694eb0650a42dc14da707e..0000000000000000000000000000000000000000 --- a/northbound/server.go +++ /dev/null @@ -1,167 +0,0 @@ -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 -} diff --git a/northbound/server/server.go b/northbound/server/server.go new file mode 100644 index 0000000000000000000000000000000000000000..592504b0a42b79437f5581935386ccffeef03a73 --- /dev/null +++ b/northbound/server/server.go @@ -0,0 +1,41 @@ +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 +}