diff --git a/cmd/path-traversal/path_traversal.go b/cmd/path-traversal/path_traversal.go index 9952b95896c93721134b7ea829fcf60693140fba..e24c58abb3b7dd9605a769841282afd449229f97 100644 --- a/cmd/path-traversal/path_traversal.go +++ b/cmd/path-traversal/path_traversal.go @@ -1,62 +1,21 @@ package main import ( + "code.fbi.h-da.de/cocsn/gosdn/nucleus/util" schema "code.fbi.h-da.de/cocsn/yang-models/generated/arista" - "fmt" - "github.com/openconfig/goyang/pkg/yang" ) -type PathElement struct { - Children []*PathElement - Name string -} - -func (p *PathElement)Print() { - printPE(0, p) -} - -func printPE(indent int, pe *PathElement) { - for i := 0; i < indent; i++ { - fmt.Print(" ") - } - fmt.Println(pe.Name) - if len(pe.Children) > 0 { - for _,p := range pe.Children { - printPE(indent+1, p) - } - } -} - func main() { tree := schema.SchemaTree - paths := make(map[string]*PathElement) + paths := util.NewPaths() - for k,v := range tree { + for _,v := range tree { if v.Parent != nil { if v.Parent.Name == "device" { - pathElement := processEntry(v) + pathElement := paths.ProcessEntry(v) pathElement.Print() - paths[k] = pathElement } } } } -func processEntry(e *yang.Entry) *PathElement { - if e.Dir != nil { - elem := &PathElement{ - Children: make([]*PathElement, len(e.Dir)), - Name: e.Name, - } - i := 0 - for _,v := range e.Dir { - elem.Children[i] = processEntry(v) - i++ - } - return elem - } - leaf := &PathElement{ - Name: e.Name, - } - return leaf -} \ No newline at end of file diff --git a/nucleus/util/path_traversal.go b/nucleus/util/path_traversal.go new file mode 100644 index 0000000000000000000000000000000000000000..36ba100e1dbdd2b1cf9fb0cc66f8e37695f2c2ea --- /dev/null +++ b/nucleus/util/path_traversal.go @@ -0,0 +1,53 @@ +package util + +import ( + "fmt" + "github.com/openconfig/goyang/pkg/yang" +) + +type PathElement struct { + Children []*PathElement + Name string +} + +func (p *PathElement)Print() { + printPE(0, p) +} + +func printPE(indent int, pe *PathElement) { + for i := 0; i < indent; i++ { + fmt.Print(" ") + } + fmt.Println(pe.Name) + if len(pe.Children) > 0 { + for _,p := range pe.Children { + printPE(indent+1, p) + } + } +} + +func NewPaths() Paths { + return make(map[string]*PathElement) +} + +type Paths map[string]*PathElement + +func (p Paths)ProcessEntry(e *yang.Entry) *PathElement { + if e.Dir != nil { + elem := &PathElement{ + Children: make([]*PathElement, len(e.Dir)), + Name: e.Name, + } + i := 0 + for _,v := range e.Dir { + elem.Children[i] = p.ProcessEntry(v) + i++ + } + p[e.Name] = elem + return elem + } + leaf := &PathElement{ + Name: e.Name, + } + return leaf +} \ No newline at end of file