Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • danet/gosdn
1 result
Select Git revision
Show changes
Commits on Source (11)
Showing
with 102 additions and 351 deletions
root = true
[*]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf
[{*.yaml, *.yml}]
indent_size = 2
......@@ -21,6 +21,7 @@ debug.test
# test files
report.xml
nucleus/util/proto/*_test
# Binary
gosdn
......
[submodule "documentation/manual"]
path = documentation/manual
url = https://git.overleaf.com/620142e0fbf7476b92f7240a
<mxfile host="Electron" modified="2022-02-15T16:47:42.703Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="alMCQy0yU2cNhvRWkT_G" version="16.5.1" type="device"><diagram id="pwvA0ZA2h6faCE5rpLjt" name="Seite-1">7VrbcuI4EP0aHiclX/DlMZDZnewlRRVbtTPzJmxhayMsRhYB9utXsiVjywqQBJjMLLyAu6221Oe01N1m4I0Xm18ZXOZ/0hSRgQvSzcC7G7iu44BAfEnJtpZEsVsLMoZTddNOMMX/IiUESrrCKSo7N3JKCcfLrjChRYES3pFBxui6e9ucku5TlzBDPcE0gaQv/RunPFercMOd/BPCWa6f7ARxrVlAfbNaSZnDlK5bIu/jwBszSnn9a7EZIyKdp/1Sj/vlGW0zMYYKfsyAf/7KN5+/RP7820P0NRrmvxW/rz4oK0+QrNSCB25AhL3RnAqz0q+EskoTfFvJqY4Grud5ADiwLQoy+Z3R6d2DNjBjWvywSghalVohplgbr7XKO3yrXc7oqkiRnLUj1OscczRdwkRq14JkQpbzBVFqAmeIjGDymFXDxmq6BS2QXAQmxBSJR4+bRXnz6iPkJWf0EWlNiuZwVc22lmvs3WbCT4hxtHkWC6dBWIQGogvE2VbcogZ4gSKFigo3VNfrHcccTZy8xS89DipaZ43pHfLihwL/BURwLUQwcEFFeisjSlwlBJYlTir3QMb74hZCOzhB4zyU9qLuoOtarhlaPKNlDBHI8VPXvM1d6gkTiiuia2RcA5k4vhl2jZR0xRKkxrUDzjRlgtw3JZyXId4zVSHYLP31oHqXiO4JWWUZnBF0DfAd9q5/OMCjS8a3f43v6g4/Oll8Dw9vFWeO7+H19D4Q3BmDKUb2MVp3h5nIHDEthF5gL0l4nk2hR5jvfuqHPQJNR/f2LR4Xe6AGb4V6HxYWGnTh1py+tQMehykIw/OlcmEH1CaBOLCfnQ3T6IrpWzH1Xe99YRr3MH2gjOcj6XUhv10uCU5g5eMLAPrSzfQkUdbdOp34yK3TPxckjq10PkdGJTzEtp/lxY3vu1rwpa2923Sutu2rCWJYrBixHyVBMw9Jz0Dw2PTMd+Ib4MW7T2A/fC+Uqzkvq7BVyKWwzJtkqkURKZ9ALmAtKokLPOtm+GMl555RNfngldibhtz4wmDbKu8r2N3yCZwIbNPQxcF+WW39PwXb72I0fG1kBwcMnRtsW81tgF3mcCl/zgnaKNRHp04Fhu1EwDmQCBzLDhfU3tuz/vAgixxgoVEjfOsJoV8f6U3DzO+Ozg4CI8WPLsyj4Cfm0ffjh++Hugf3Zob0TF2cI/32TI8jRkMMgCAYjwVUstoSJSG5JTiTBwmny5b0D1nnTWiJVaU2o5zThS4AW4pEACtLhxFUdhpBi1yizCO4EKW7fgULjApfTGxcfWxlfhBFzsizlJd72giFrH6tx6KOmcUmky+kbwrE15Q9ljciAuqJ769xByeoVf3QzsBWEISWGDALndOVqv2W0JVH759Hvue9Mx7121D34nyAH5pXBOBeojqX7SWTYMIPvAt3F8Hne/49ypicXOA0lY+xdre6J9/ZQXON90tN46oFWnBJ0Nx+n+oKmvliBrw30PrNoqrhO1MN3ytioJuaiUO3h5i1H/wKyMTl7l9adW63+6+b9/E/</diagram></mxfile>
\ No newline at end of file
<mxfile host="Electron" modified="2022-02-15T16:58:07.199Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="4rjQ50LPK_7HIPOel3GI" version="16.5.1" type="device"><diagram id="pwvA0ZA2h6faCE5rpLjt" name="Seite-1">7Vrfk6I4EP5rfJwpSBDhcXT27vZ+TFnlVd3uvUWIkJtI3BBGvb/+EkgQAp6jK25trbwoX5Mm6a+70x0dwdl69zNHm/QPFmM6Ak68G8HnEQCu6/jyQyH7CglCUAEJJ7F+6AAsyL9Yg45GCxLjvPWgYIwKsmmDEcsyHIkWhjhn2/ZjK0bbb92gBHeARYRoF/2LxCLVqwCTA/4LJklq3uz6YSVZI/OwXkmeophtGxD8MIIzzpiovq13M0yV8YxdqnE/HZHWE+M4E+8Z8M+f6e7T58BbfXkJ/g7G6a/Zb8WD1vKGaKEXPAI+lfqmKybVKrtSxkuJ/6VQU52OAITQcVzUhPxEfSZs8fxiFCy5gV+KiOIiNwI5xUp5JdXWEXtjcs6KLMZq1q4Ub1Mi8GKDIiXdSieTWCrWVIspWmI6RdFrUg6b6elmLMNqEYRSG5KvntWLgqvyknguOHvFRhLjFSrK2Va44R7UE37DXODdUS7cmmEZGpitseB7+YgeAH3tFDoqwETfbw8+5hrHSRv+ZcYh7dZJrfrAvPyiyT/DEUCPI1i84Cx+UhEl7yKK8pxEpXkQF124wdCBTqc2Ho47UXfSdA3TjHssYzCOKRLkra2+z1z6DXNGSkc3zACLmTB8HLeV5KzgEdbjmgFnq7JJ7qqSxkuw6KgqGayXfjmp8BbRPadFkqAlxfcAP3APvNMBHtwyvr17fJdPeMHV4nt8OlUMHN/j++59IrgTjmKC+8cY2TPhsnIkLJNyyb1ywmGSQsdhvvmuH3Yc6IVxkU4VGRJ/2mwoiVBpm+M8O1/L86UkDVCIueE7KfGGosTtK8mHyNTSQnz/Sd08eh4wwOem9HnXuts37+aYE7lizL+XxG8HH7QYfG/a99zw0YHh4fL7g/pGe4B7XuWuQy5GeVon6YaLKHyOhKQ1KxHgwN5s+H1t+tCqxuCl3NuK6ub+VmT3VfR3sttlmdPmyHMuJNtWBMIbk31ezf5jku0GbY688MLInpxQNDTZfbW8RXaeoo36uqJ4p1mfXrsUGDcLAfdEIXAV73CdHveowa/d9d26JzO5347ic/Z9S5W9jQztI5PTPmI1SI7j+7OZpEpVybKUp0+UJCoBCLZpoL+r+nzOcqIr7CUTgq1N4d4QRJJYVfJNkdZTAw3nkuU5JZnsxsyRvGM1c3Jis/LqdG5S4geBO4U9bYHVLTQ7gkx1Lb3pzMTMepeoHygeMyy2jL/mjzICqon/f28yukKPERzxwEYQTHpiwPau67UY3bbvo4xr9FC3+s5HxepKtXO2g0k7iDbdbQaP9+4dl7F9ck3iWL2mt5tsZ6zBSQP2OZHbJc2/JWmg2xfeSbMPWKyKre7uvxlp3easPGBZ6gOWO2MmF9VdOeww1nv+Mhxl96r7dFU1PhJnZ1fd7glFA1dUoFt1L9Th4sPUDtD8R41QYJ2QwvFgOVXeHv4OUVF8+FMJ/PAf</diagram></mxfile>
\ No newline at end of file
<mxfile host="Electron" modified="2022-02-17T14:42:51.009Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="oVOpiNiALXjf1fX8wkFb" version="16.5.1" type="device"><diagram id="pwvA0ZA2h6faCE5rpLjt" name="Seite-1">7Vpbd5s4EP41fqwPd8NjTJJut23Wu845bfOmgAzayMgVIrb3168E4iaU2ElwtnuO/RI0Iw1i5ptvBoWJHa53HynYpF9JDPHEMuLdxL6cWJZpGh7/IyT7SuIHViVIKIrlpFawRP9AKTSktEAxzHsTGSGYoU1fGJEsgxHryQClZNuftiK4f9cNSOBAsIwAHkq/oZil8imsWSv/DaIkre9sekGlWYN6snySPAUx2XZE9tXEDikhrLpa70KIhfNqv1Trrp/QNhujMGPHLPj7Nt19/+E7q583/p3vpr9nn4sP0sojwIV84InlYW5vviLcrPArJrTUeD8LsdX5xLJt2zBM0BV5ifibkOXlTW3gntbimyLCsMhrBd9iZbzSSu+wfe1ySooshmLXJldvU8TgcgMiod1ykHFZytZYqjG4h3gOooekXBbK7WYkg+IhEMaqiN86bB7KXpU/Ls8ZJQ+w1sRwBYpyt5W8jr3VbLjr+NqLkDK464hkID5CsoaM7vkUqbU9CQqZFdZMjrctxswaOGkHX/U6IGGdNKbbyPMLGfwXAMHSAEGJC8ziC5FRfBRhkOcoKt0DKBuKOxFqw2k85zwY9xJx6LqOa1yNZ2oZhRgw9NhPX5275B0WBJVAryNjKZEJgqnbN5KTgkZQrusmnGpKDfLQFHdeAtnAVBnB5tFfH1T7PbJ7gYskAfcYnhO8jb3lHE5w/z3z2znndznD8UfLb/cwVZw4v91z9T6Q3AkFMYL6NbXuElHeOSKScT2PvQDhaUhhAJj/vOoHAwDdEMrSuQgGl19sNhhFoPTN03E23hrn1wbpBI2YGRwZEudUITF1LfkpmJo7je6/i8HUcaxa8KOrvdz1RvvuaAEp4k8M6f+F+NXks5UIHkv7jhlMDTtof54+qd+pBpi6IqDghb96bsTlCsOdRMh8bAy5XQSZBxA0ClhMQ4OWRvhWuJhNMZeBtYM3AEYxpWLv1BiZHcaIUlkNw/PCkIdKcCmvAfgCo0SQLyObjvSLIPYFyZGk5nvCGFnXjN9RRDzSgivmQNppBB1wcV7HKONlvD7LMZQugG8sLH+Dks81nu+bc1tTT5Qy0y0lmSh32npf58x6l4iTrWkG2ZbQh3zKM6Da+PNFbYzi5D+BwE4SzDQ5oKLrNbVp83kR5X9YNA/Db2xxu7v+8ulO8z5Ztgv3sl34JCK6Ej2ACq4D7UG/ZwQ0kueArqEDjIrINYpjcSMliKWpgnEIlrbEMOc7QFnCRw4fMQrhNcFxJTGl5Ct5bAUZ3F5xRlrWTzKbt20zbBRtJ21fdPQZQ2z/V0lDJLvSzLbCdtBhXr25Elb6tQ2Vv3hlDpM1LJv5dqE4ee1MiQr6yEPTmzGZXfKrGORpE7Qx2mNbqdDWEO7Be8L9mHfmDjqeCrhSViU/dOqvlNTB4A41Wsc/X3Z7bVtbg19adqv6czjzD5bnsZs095U1d4AltV8fr+Jq/TVsyjg5UvCheZk+k+WZLMc8S7A1Zwkzd0iWakKNRpbemSyV5D81WbqGAgHjOLIci+M0b55LcTJzbgfPDDcCw/FmQH1tdocc55tTDcudrCU0f32aa85eTk1z5jvxnGMqPOcd9w+bV/Bc4QJ/Ft1YLAcbJ7oNzD/vTM03Eude7sx0faYb0JompV7AdGbgD5jO8zTdnPV2ntNi3vpVaU5LOX2yei6JjwjKWz8gcU7VlfFh+7VYNb395s6++hc=</diagram></mxfile>
\ No newline at end of file
<mxfile host="Electron" modified="2022-02-17T14:38:29.165Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/16.5.1 Chrome/96.0.4664.110 Electron/16.0.7 Safari/537.36" etag="cQigzejTX8Fo0TpT8GV8" version="16.5.1" type="device"><diagram id="pwvA0ZA2h6faCE5rpLjt" name="Seite-1">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</diagram></mxfile>
\ No newline at end of file
manual @ 302c0bdd
Subproject commit 302c0bdd3648867553ac26ab3c119d5f61a04c35
......@@ -8,6 +8,7 @@ require (
code.fbi.h-da.de/danet/forks/google v0.0.0-20210709163519-47ee8958ef40
code.fbi.h-da.de/danet/yang-models v0.1.0
github.com/docker/docker v20.10.11+incompatible
github.com/google/go-cmp v0.5.6
github.com/google/uuid v1.2.0
github.com/openconfig/gnmi v0.0.0-20210914185457-51254b657b7d
github.com/openconfig/goyang v0.3.1
......@@ -29,7 +30,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/google/go-cmp v0.5.6 // 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
......@@ -49,6 +49,7 @@ require (
golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 // indirect
golang.org/x/sys v0.0.0-20211123173158-ef496fb156ab // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 // indirect
gopkg.in/ini.v1 v1.64.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
......
......@@ -58,7 +58,7 @@ type ErrInvalidTypeAssertion struct {
}
func (e ErrInvalidTypeAssertion) Error() string {
return fmt.Sprintf("%v does not implement %v", e.Value, e.Type)
return fmt.Sprintf("%v does not implement %v", reflect.TypeOf(e.Value).Elem(), reflect.TypeOf(e.Type).Elem())
}
// ErrUnsupportedPath implements the Error interface and is called if the
......
......@@ -3,7 +3,6 @@ package nucleus
import (
"context"
"fmt"
"reflect"
"code.fbi.h-da.de/danet/gosdn/interfaces/change"
......@@ -39,9 +38,15 @@ type Gnmi struct {
// Do not call directly. Use NewTransport() instead.
func newGnmiTransport(opts *tpb.TransportOption, sbi southbound.SouthboundInterface) (*Gnmi, error) {
if opts == nil || sbi == nil {
return nil, &errors.ErrInvalidParameters{}
return nil, &errors.ErrInvalidParameters{
Func: newGnmiTransport,
Param: "'opts' and 'sbi' can not be nil",
}
} else if opts.TransportOption == nil {
return nil, &errors.ErrInvalidParameters{}
return nil, &errors.ErrInvalidParameters{
Func: newGnmiTransport,
Param: "'opts.TransportOption' can not be nil",
}
}
gnmiConfig := &gnmi.Config{
Addr: opts.Address,
......@@ -102,7 +107,7 @@ func (g *Gnmi) applyDiff(ctx context.Context, payload change.Payload) error {
case ppb.ApiOperation_REPLACE:
req.Replace = diff.Update
default:
return &errors.ErrOperationNotSupported{}
return &errors.ErrOperationNotSupported{Op: op}
}
} else if diff.Delete != nil {
req.Delete = diff.Delete
......@@ -131,11 +136,17 @@ func (g *Gnmi) Type() string {
func (g *Gnmi) ProcessResponse(resp interface{}, root interface{}, s *ytypes.Schema) error {
d, ok := root.(ygot.ValidatedGoStruct)
if !ok {
return &errors.ErrInvalidTypeAssertion{}
return &errors.ErrInvalidTypeAssertion{
Value: root,
Type: (*ygot.ValidatedGoStruct)(nil),
}
}
r, ok := resp.(*gpb.GetResponse)
if !ok {
return &errors.ErrInvalidTypeAssertion{}
return &errors.ErrInvalidTypeAssertion{
Value: resp,
Type: &gpb.GetResponse{},
}
}
rn := r.Notification
errs := make([]error, 0)
......@@ -219,8 +230,8 @@ func (g *Gnmi) subscribe(ctx context.Context) error {
opts, ok := ctx.Value(types.CtxKeyOpts).(*gnmi.SubscribeOptions)
if !ok {
return &errors.ErrInvalidTypeAssertion{
Value: reflect.TypeOf(ctx.Value(types.CtxKeyOpts)),
Type: reflect.TypeOf(&gnmi.SubscribeOptions{}),
Value: ctx.Value(types.CtxKeyOpts),
Type: &gnmi.SubscribeOptions{},
}
}
go func() {
......
......@@ -142,11 +142,18 @@ func (pnd *pndImplementation) AddSbi(s southbound.SouthboundInterface) error {
return pnd.addSbi(s)
}
// RemoveSbi removes a SBI from the PND
// TODO: this should to recursively through
// devices and remove the devices using
// this SBI
// RemoveSbi removes a SBI and all the associated devices from the PND
func (pnd *pndImplementation) RemoveSbi(id uuid.UUID) error {
associatedDevices, err := pnd.devices.GetDevicesAssociatedWithSbi(id)
if err != nil {
return err
}
// range over associated devices and remove each one of them
for _, d := range associatedDevices {
if err := pnd.removeDevice(d.ID()); err != nil {
return err
}
}
return pnd.removeSbi(id)
}
......@@ -290,7 +297,10 @@ func (pnd *pndImplementation) Request(uuid uuid.UUID, path string) (proto.Messag
}
resp, ok := res.(proto.Message)
if !ok {
return nil, &errors.ErrInvalidTypeAssertion{}
return nil, &errors.ErrInvalidTypeAssertion{
Value: res,
Type: (*proto.Message)(nil),
}
}
err = d.ProcessResponse(resp)
if err != nil {
......@@ -515,7 +525,10 @@ func loadPlugin(id uuid.UUID) (southbound.SouthboundInterface, error) {
var sbi southbound.SouthboundInterface
sbi, ok := symbol.(southbound.SouthboundInterface)
if !ok {
return nil, &errors.ErrInvalidTypeAssertion{}
return nil, &errors.ErrInvalidTypeAssertion{
Value: symbol,
Type: (*southbound.SouthboundInterface)(nil),
}
}
log.WithFields(log.Fields{
"identifier": sbi.SbiIdentifier(),
......
......@@ -409,6 +409,11 @@ func Test_pndImplementation_RemoveDevice(t *testing.T) {
}
func Test_pndImplementation_RemoveSbi(t *testing.T) {
opts := &tpb.TransportOption{
TransportOption: &tpb.TransportOption_GnmiTransportOption{
GnmiTransportOption: &tpb.GnmiTransportOption{},
},
}
type args struct {
id uuid.UUID
}
......@@ -420,6 +425,7 @@ func Test_pndImplementation_RemoveSbi(t *testing.T) {
{name: "default", args: args{id: defaultSbiID}, wantErr: false},
{name: "fails", args: args{id: uuid.New()}, wantErr: true},
{name: "fails empty", args: args{id: defaultSbiID}, wantErr: true},
{name: "exclusively remove associated devices", args: args{id: defaultSbiID}, wantErr: false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
......@@ -430,16 +436,42 @@ func Test_pndImplementation_RemoveSbi(t *testing.T) {
devices: store.NewDeviceStore(defaultPndID),
Id: defaultPndID,
}
if tt.name != "fails empty" {
if tt.name != "fails empty" && tt.name != "fails" {
if err := pnd.addSbi(&OpenConfig{id: defaultSbiID}); err != nil {
t.Error(err)
}
if err := pnd.AddDevice("associatedDevice", opts, tt.args.id); err != nil {
t.Error(err)
}
if err := pnd.AddDevice("associatedDevice2", opts, tt.args.id); err != nil {
t.Error(err)
}
if tt.name == "exclusively remove associated devices" {
newID := uuid.New()
if err := pnd.addSbi(&OpenConfig{id: newID}); err != nil {
t.Error(err)
}
if err := pnd.AddDevice("associatedDevice2", opts, newID); err != nil {
t.Error(err)
}
}
}
if err := pnd.RemoveSbi(tt.args.id); (err != nil) != tt.wantErr {
t.Errorf("RemoveSbi() error = %v, wantErr %v", err, tt.wantErr)
}
if pnd.sbic.Exists(tt.args.id) {
t.Errorf("RemoveDevice() SBI still in SBI store %v", pnd.sbic)
t.Errorf("RemoveSbi() SBI still in SBI store %v", pnd.sbic)
}
if tt.name == "exclusively remove associated devices" {
if len(pnd.devices.Store) != 1 {
t.Errorf("RemoveSbi() non associated devices should remain in the storage %v", pnd.devices)
}
} else {
if len(pnd.devices.Store) != 0 {
t.Errorf("RemoveSbi() associated devices have not been removed correctly %v", len(pnd.devices.Store))
}
}
})
}
......
......@@ -91,7 +91,10 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
}
validatedDeepCopy, ok := root.(ygot.ValidatedGoStruct)
if !ok {
return &errors.ErrInvalidTypeAssertion{}
return &errors.ErrInvalidTypeAssertion{
Value: root,
Type: (*ygot.ValidatedGoStruct)(nil),
}
}
// returns the node we want to fill with the data contained in 'bytes',
......@@ -102,7 +105,10 @@ func unmarshal(schema *ytypes.Schema, bytes []byte, path *gpb.Path, goStruct ygo
}
validatedCreatedNode, ok := createdNode.(ygot.ValidatedGoStruct)
if !ok {
return &errors.ErrInvalidTypeAssertion{}
return &errors.ErrInvalidTypeAssertion{
Value: createdNode,
Type: (*ygot.ValidatedGoStruct)(nil),
}
}
if err := openconfig.Unmarshal(bytes, validatedCreatedNode, opt...); err != nil {
......
File deleted
File deleted
2
interfaces
interface
interfaces
interface(
\ No newline at end of file

interfaces
interfaces(
\ No newline at end of file
2
interfaces
interface
interfaces
interface(
\ No newline at end of file
c
interfaces
interface[name=*]
state
name
interfaces
interface
name*
state
name(
\ No newline at end of file
File deleted