Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
goSDN
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
danet
goSDN
Commits
2627fbf8
Commit
2627fbf8
authored
4 years ago
by
Manuel Kieweg
Browse files
Options
Downloads
Patches
Plain Diff
first gRPB NBI draft
parent
4adbe041
No related branches found
No related tags found
1 merge request
!155
Northbound Interface
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
northbound/client.go
+1
-1
1 addition, 1 deletion
northbound/client.go
northbound/server.go
+137
-13
137 additions, 13 deletions
northbound/server.go
with
138 additions
and
14 deletions
northbound/client.go
+
1
−
1
View file @
2627fbf8
package
n
orthbound
package
n
bi
This diff is collapsed.
Click to expand it.
northbound/server.go
+
137
−
13
View file @
2627fbf8
package
n
orthbound
package
n
bi
import
(
import
(
"code.fbi.h-da.de/cocsn/api/proto/gosdn"
pb
"code.fbi.h-da.de/cocsn/api/proto/gosdn"
"code.fbi.h-da.de/cocsn/api/proto/gosdn/pnd"
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"
"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
{
type
pndServer
struct
{
p
nd
.
UnimplementedPndServer
p
pb
.
UnimplementedPndServer
}
}
func
(
p
pndServer
)
Get
(
ctx
context
.
Context
,
request
*
pnd
.
GetRequest
)
(
*
pnd
.
GetResponse
,
error
)
{
func
(
p
pndServer
)
Get
(
ctx
context
.
Context
,
request
*
ppb
.
GetRequest
)
(
*
ppb
.
GetResponse
,
error
)
{
panic
(
"implement me"
)
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
*
p
nd
.
SetRequest
)
(
*
p
nd
.
SetResponse
,
error
)
{
func
(
p
pndServer
)
Set
(
ctx
context
.
Context
,
request
*
p
pb
.
SetRequest
)
(
*
p
pb
.
SetResponse
,
error
)
{
panic
(
"implement me"
)
panic
(
"implement me"
)
}
}
type
gosdnServer
struct
{
type
gosdnServer
struct
{
gosdn
.
UnimplementedGosdnServer
pb
.
UnimplementedGosdnServer
}
}
func
(
s
gosdnServer
)
Get
(
ctx
context
.
Context
,
request
*
gosdn
.
GetRequest
)
(
*
gosdn
.
GetResponse
,
error
)
{
func
(
s
gosdnServer
)
Get
(
ctx
context
.
Context
,
request
*
pb
.
GetRequest
)
(
*
pb
.
GetResponse
,
error
)
{
panic
(
"implement me"
)
panic
(
"implement me"
)
}
}
func
(
s
gosdnServer
)
Set
(
ctx
context
.
Context
,
request
*
gosdn
.
SetRequest
)
(
*
gosdn
.
SetResponse
,
error
)
{
func
(
s
gosdnServer
)
Set
(
ctx
context
.
Context
,
request
*
pb
.
SetRequest
)
(
*
pb
.
SetResponse
,
error
)
{
panic
(
"implement me"
)
panic
(
"implement me"
)
}
}
func
NewServer
()
*
Server
{
func
NewNBI
(
pnds
*
nucleus
.
PndStore
,
sbis
*
nucleus
.
SbiStore
)
*
NorthboundInterface
{
return
&
Server
{
pndc
=
pnds
sbic
=
sbis
pndLock
=
sync
.
RWMutex
{}
sbiLock
=
sync
.
RWMutex
{}
return
&
NorthboundInterface
{
Pnd
:
&
pndServer
{},
Pnd
:
&
pndServer
{},
Controller
:
&
gosdnServer
{},
Controller
:
&
gosdnServer
{},
}
}
}
}
type
Server
struct
{
type
NorthboundInterface
struct
{
Pnd
*
pndServer
Pnd
*
pndServer
Controller
*
gosdnServer
Controller
*
gosdnServer
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment