diff options
author | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2015-07-11 18:49:57 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-01-09 05:17:57 -0800 |
commit | 26c03bb779fbb59bb3de1c98a2c9d65e192b50bb (patch) | |
tree | f68629f1089561e494b26291bf3ec548c7eb93ef | |
parent | 6733b6afb27f3dd3943d8325d2656f9e98740c17 (diff) |
tools: avoid adding a new option to bgpyang2golang.py and fix gobgp.yang
pyang has an internal flag "multiple_modules" to handle multiple yang modules.
use it instead of introducing a new option --augment
also, fix warnings and errors in gobgp.yang which were there but not has been
detected for a while due to the usage of --augment.
by using "multiple_modules" flag, pyang detected them.
most notable error is wrong usage of list, which needs a key in its
substatement.
this patch adds key to some of them, and for others uses leaf-list
instead.
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
-rw-r--r-- | config/bgp_configs.go | 50 | ||||
-rw-r--r-- | server/server.go | 6 | ||||
-rw-r--r-- | table/policy.go | 65 | ||||
-rw-r--r-- | table/policy_test.go | 285 | ||||
-rw-r--r-- | test/lib/gobgp.py | 2 | ||||
-rw-r--r-- | test/scenario_test/route_server_policy_test.py | 94 | ||||
-rw-r--r-- | tools/pyang_plugins/README.rst | 4 | ||||
-rw-r--r-- | tools/pyang_plugins/bgpyang2golang.py | 34 | ||||
-rw-r--r-- | tools/pyang_plugins/gobgp.yang | 71 |
9 files changed, 203 insertions, 408 deletions
diff --git a/config/bgp_configs.go b/config/bgp_configs.go index c8d61dca..c0013581 100644 --- a/config/bgp_configs.go +++ b/config/bgp_configs.go @@ -155,6 +155,9 @@ type BmpServerConfig struct { //struct for container gobgp:bmp-server type BmpServer struct { + // original -> gobgp:address + //gobgp:address's original type is inet:ip-address + Address string // original -> gobgp:bmp-server-config Config BmpServerConfig // original -> gobgp:bmp-server-state @@ -234,6 +237,9 @@ type RpkiServerConfig struct { //struct for container gobgp:rpki-server type RpkiServer struct { + // original -> gobgp:address + //gobgp:address's original type is inet:ip-address + Address string // original -> gobgp:rpki-server-config Config RpkiServerConfig // original -> gobgp:rpki-server-state @@ -814,13 +820,6 @@ type MplsLabelRange struct { MaxLabel uint32 } -//struct for container gobgp:redistribute-route-type -type RedistributeRouteType struct { - // original -> gobgp:route-type - //gobgp:route-type's original type is ptypes:install-protocol-type - RouteType string -} - //struct for container gobgp:zebra type Zebra struct { // original -> gobgp:enabled @@ -829,7 +828,8 @@ type Zebra struct { // original -> gobgp:url Url string // original -> gobgp:redistribute-route-type - RedistributeRouteTypeList []RedistributeRouteType + //original type is list of identityref + RedistributeRouteType []string } //struct for container gobgp:mrt @@ -1631,18 +1631,12 @@ type PolicyDefinitions struct { PolicyDefinitionList []PolicyDefinition } -//struct for container gobgp:as-path -type AsPath struct { - // original -> gobgp:as-path - AsPath string -} - //struct for container bgp-pol:as-path-set type AsPathSet struct { // original -> bgp-pol:as-path-set-name AsPathSetName string // original -> gobgp:as-path - AsPathList []AsPath + AsPath []string } //struct for container bgp-pol:as-path-sets @@ -1651,18 +1645,12 @@ type AsPathSets struct { AsPathSetList []AsPathSet } -//struct for container gobgp:ext-community -type ExtCommunity struct { - // original -> gobgp:ext-community - ExtCommunity string -} - //struct for container bgp-pol:ext-community-set type ExtCommunitySet struct { // original -> bgp-pol:ext-community-set-name ExtCommunitySetName string // original -> gobgp:ext-community - ExtCommunityList []ExtCommunity + ExtCommunity []string } //struct for container bgp-pol:ext-community-sets @@ -1671,18 +1659,12 @@ type ExtCommunitySets struct { ExtCommunitySetList []ExtCommunitySet } -//struct for container gobgp:community -type Community struct { - // original -> gobgp:community - Community string -} - //struct for container bgp-pol:community-set type CommunitySet struct { // original -> bgp-pol:community-set-name CommunitySetName string // original -> gobgp:community - CommunityList []Community + Community []string } //struct for container bgp-pol:community-sets @@ -1721,19 +1703,13 @@ type TagSets struct { TagSetList []TagSet } -//struct for container gobgp:neighbor-info -type NeighborInfo struct { - // original -> gobgp:address - //gobgp:address's original type is inet:ip-address - Address string -} - //struct for container rpol:neighbor-set type NeighborSet struct { // original -> rpol:neighbor-set-name NeighborSetName string // original -> gobgp:neighbor-info - NeighborInfoList []NeighborInfo + //original type is list of inet:ip-address + NeighborInfo []string } //struct for container rpol:neighbor-sets diff --git a/server/server.go b/server/server.go index 280f0d8e..6d9306a6 100644 --- a/server/server.go +++ b/server/server.go @@ -182,11 +182,7 @@ func (server *BgpServer) Serve() { if g.Zebra.Url == "" { g.Zebra.Url = "unix:/var/run/quagga/zserv.api" } - redists := make([]string, 0, len(g.Zebra.RedistributeRouteTypeList)) - for _, t := range g.Zebra.RedistributeRouteTypeList { - redists = append(redists, t.RouteType) - } - err := server.NewZclient(g.Zebra.Url, redists) + err := server.NewZclient(g.Zebra.Url, g.Zebra.RedistributeRouteType) if err != nil { log.Error(err) } diff --git a/table/policy.go b/table/policy.go index 83c8f882..c9e65300 100644 --- a/table/policy.go +++ b/table/policy.go @@ -508,16 +508,16 @@ func NewNeighborSetFromApiStruct(a *api.DefinedSet) (*NeighborSet, error) { func NewNeighborSet(c config.NeighborSet) (*NeighborSet, error) { name := c.NeighborSetName if name == "" { - if len(c.NeighborInfoList) == 0 { + if len(c.NeighborInfo) == 0 { return nil, nil } return nil, fmt.Errorf("empty neighbor set name") } - list := make([]net.IP, 0, len(c.NeighborInfoList)) - for _, x := range c.NeighborInfoList { - addr := net.ParseIP(x.Address) + list := make([]net.IP, 0, len(c.NeighborInfo)) + for _, x := range c.NeighborInfo { + addr := net.ParseIP(x) if addr == nil { - return nil, fmt.Errorf("invalid address: %s", x.Address) + return nil, fmt.Errorf("invalid address: %s", x) } list = append(list, addr) } @@ -695,10 +695,7 @@ func (s *AsPathSet) ToApiStruct() *api.DefinedSet { func NewAsPathSetFromApiStruct(a *api.DefinedSet) (*AsPathSet, error) { c := config.AsPathSet{ AsPathSetName: a.Name, - AsPathList: make([]config.AsPath, 0, len(a.List)), - } - for _, x := range a.List { - c.AsPathList = append(c.AsPathList, config.AsPath{AsPath: x}) + AsPath: a.List, } return NewAsPathSet(c) } @@ -706,18 +703,18 @@ func NewAsPathSetFromApiStruct(a *api.DefinedSet) (*AsPathSet, error) { func NewAsPathSet(c config.AsPathSet) (*AsPathSet, error) { name := c.AsPathSetName if name == "" { - if len(c.AsPathList) == 0 { + if len(c.AsPath) == 0 { return nil, nil } return nil, fmt.Errorf("empty as-path set name") } - list := make([]*regexp.Regexp, 0, len(c.AsPathList)) - singleList := make([]*singleAsPathMatch, 0, len(c.AsPathList)) - for _, x := range c.AsPathList { - if s := NewSingleAsPathMatch(x.AsPath); s != nil { + list := make([]*regexp.Regexp, 0, len(c.AsPath)) + singleList := make([]*singleAsPathMatch, 0, len(c.AsPath)) + for _, x := range c.AsPath { + if s := NewSingleAsPathMatch(x); s != nil { singleList = append(singleList, s) } else { - exp, err := regexp.Compile(strings.Replace(x.AsPath, "_", ASPATH_REGEXP_MAGIC, -1)) + exp, err := regexp.Compile(strings.Replace(x, "_", ASPATH_REGEXP_MAGIC, -1)) if err != nil { return nil, fmt.Errorf("invalid regular expression: %s", x) } @@ -900,10 +897,7 @@ func ParseExtCommunityRegexp(arg string) (bgp.ExtendedCommunityAttrSubType, *reg func NewCommunitySetFromApiStruct(a *api.DefinedSet) (*CommunitySet, error) { c := config.CommunitySet{ CommunitySetName: a.Name, - CommunityList: make([]config.Community, 0, len(a.List)), - } - for _, x := range a.List { - c.CommunityList = append(c.CommunityList, config.Community{Community: x}) + Community: a.List, } return NewCommunitySet(c) } @@ -911,14 +905,14 @@ func NewCommunitySetFromApiStruct(a *api.DefinedSet) (*CommunitySet, error) { func NewCommunitySet(c config.CommunitySet) (*CommunitySet, error) { name := c.CommunitySetName if name == "" { - if len(c.CommunityList) == 0 { + if len(c.Community) == 0 { return nil, nil } return nil, fmt.Errorf("empty community set name") } - list := make([]*regexp.Regexp, 0, len(c.CommunityList)) - for _, x := range c.CommunityList { - exp, err := ParseCommunityRegexp(x.Community) + list := make([]*regexp.Regexp, 0, len(c.Community)) + for _, x := range c.Community { + exp, err := ParseCommunityRegexp(x) if err != nil { return nil, err } @@ -963,10 +957,7 @@ func (s *ExtCommunitySet) ToApiStruct() *api.DefinedSet { func NewExtCommunitySetFromApiStruct(a *api.DefinedSet) (*ExtCommunitySet, error) { c := config.ExtCommunitySet{ ExtCommunitySetName: a.Name, - ExtCommunityList: make([]config.ExtCommunity, 0, len(a.List)), - } - for _, x := range a.List { - c.ExtCommunityList = append(c.ExtCommunityList, config.ExtCommunity{ExtCommunity: x}) + ExtCommunity: a.List, } return NewExtCommunitySet(c) } @@ -974,15 +965,15 @@ func NewExtCommunitySetFromApiStruct(a *api.DefinedSet) (*ExtCommunitySet, error func NewExtCommunitySet(c config.ExtCommunitySet) (*ExtCommunitySet, error) { name := c.ExtCommunitySetName if name == "" { - if len(c.ExtCommunityList) == 0 { + if len(c.ExtCommunity) == 0 { return nil, nil } return nil, fmt.Errorf("empty ext-community set name") } - list := make([]*regexp.Regexp, 0, len(c.ExtCommunityList)) - subtypeList := make([]bgp.ExtendedCommunityAttrSubType, 0, len(c.ExtCommunityList)) - for _, x := range c.ExtCommunityList { - subtype, exp, err := ParseExtCommunityRegexp(x.ExtCommunity) + list := make([]*regexp.Regexp, 0, len(c.ExtCommunity)) + subtypeList := make([]bgp.ExtendedCommunityAttrSubType, 0, len(c.ExtCommunity)) + for _, x := range c.ExtCommunity { + subtype, exp, err := ParseExtCommunityRegexp(x) if err != nil { return nil, err } @@ -2794,18 +2785,16 @@ func NewRoutingPolicy() *RoutingPolicy { } func CanImportToVrf(v *Vrf, path *Path) bool { - f := func(arg []bgp.ExtendedCommunityInterface) []config.ExtCommunity { - ret := make([]config.ExtCommunity, 0, len(arg)) + f := func(arg []bgp.ExtendedCommunityInterface) []string { + ret := make([]string, 0, len(arg)) for _, a := range arg { - ret = append(ret, config.ExtCommunity{ - ExtCommunity: fmt.Sprintf("RT:%s", a.String()), - }) + ret = append(ret, fmt.Sprintf("RT:%s", a.String())) } return ret } set, _ := NewExtCommunitySet(config.ExtCommunitySet{ ExtCommunitySetName: v.Name, - ExtCommunityList: f(v.ImportRt), + ExtCommunity: f(v.ImportRt), }) matchSet := config.MatchExtCommunitySet{ ExtCommunitySet: v.Name, diff --git a/table/policy_test.go b/table/policy_test.go index 1ab6acce..099804d7 100644 --- a/table/policy_test.go +++ b/table/policy_test.go @@ -700,45 +700,32 @@ func TestAsPathConditionEvaluate(t *testing.T) { // create match condition asPathSet1 := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "^65001"}, - }, + AsPath: []string{"^65001"}, } asPathSet2 := config.AsPathSet{ AsPathSetName: "asset2", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65005$"}, - }, + AsPath: []string{"65005$"}, } asPathSet3 := config.AsPathSet{ AsPathSetName: "asset3", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65004"}, - config.AsPath{AsPath: "65005$"}, - }, + AsPath: []string{"65004", "65005$"}, } asPathSet4 := config.AsPathSet{ AsPathSetName: "asset4", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65000$"}, - }, + AsPath: []string{"65000$"}, } asPathSet5 := config.AsPathSet{ AsPathSetName: "asset5", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65010"}, - }, + AsPath: []string{"65010"}, } asPathSet6 := config.AsPathSet{ AsPathSetName: "asset6", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "^65010$"}, - }, + AsPath: []string{"^65010$"}, } m := make(map[string]DefinedSet) @@ -798,65 +785,47 @@ func TestMultipleAsPathConditionEvaluate(t *testing.T) { // create match condition asPathSet1 := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "^65001_65000"}, - }, + AsPath: []string{"^65001_65000"}, } asPathSet2 := config.AsPathSet{ AsPathSetName: "asset2", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65004_65005$"}, - }, + AsPath: []string{"65004_65005$"}, } asPathSet3 := config.AsPathSet{ AsPathSetName: "asset3", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65001_65000_54000"}, - }, + AsPath: []string{"65001_65000_54000"}, } asPathSet4 := config.AsPathSet{ AsPathSetName: "asset4", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "54000_65004_65005"}, - }, + AsPath: []string{"54000_65004_65005"}, } asPathSet5 := config.AsPathSet{ AsPathSetName: "asset5", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "^65001 65000 54000 65004 65005$"}, - }, + AsPath: []string{"^65001 65000 54000 65004 65005$"}, } asPathSet6 := config.AsPathSet{ AsPathSetName: "asset6", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: ".*_[0-9]+_65005"}, - }, + AsPath: []string{".*_[0-9]+_65005"}, } asPathSet7 := config.AsPathSet{ AsPathSetName: "asset7", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: ".*_5[0-9]+_[0-9]+"}, - }, + AsPath: []string{".*_5[0-9]+_[0-9]+"}, } asPathSet8 := config.AsPathSet{ AsPathSetName: "asset8", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "6[0-9]+_6[0-9]+_5[0-9]+"}, - }, + AsPath: []string{"6[0-9]+_6[0-9]+_5[0-9]+"}, } asPathSet9 := config.AsPathSet{ AsPathSetName: "asset9", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "6[0-9]+__6[0-9]+"}, - }, + AsPath: []string{"6[0-9]+__6[0-9]+"}, } m := make(map[string]DefinedSet) @@ -945,7 +914,7 @@ func TestAsPathCondition(t *testing.T) { for k, v := range tests { s, _ := NewAsPathSet(config.AsPathSet{ AsPathSetName: k, - AsPathList: []config.AsPath{config.AsPath{AsPath: k}}, + AsPath: []string{k}, }) c, _ := NewAsPathCondition(config.MatchAsPathSet{ AsPathSet: k, @@ -987,7 +956,7 @@ func TestAsPathConditionWithOtherCondition(t *testing.T) { // create policy asPathSet := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{config.AsPath{AsPath: "65005$"}}, + AsPath: []string{"65005$"}, } ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24") @@ -1053,44 +1022,40 @@ func TestAs4PathConditionEvaluate(t *testing.T) { // create match condition asPathSet1 := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("^%d", createAs4Value("65001.1"))}, - }, + AsPath: []string{fmt.Sprintf("^%d", createAs4Value("65001.1"))}, } asPathSet2 := config.AsPathSet{ AsPathSetName: "asset2", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d$", createAs4Value("65005.1"))}, - }, + AsPath: []string{fmt.Sprintf("%d$", createAs4Value("65005.1"))}, } asPathSet3 := config.AsPathSet{ AsPathSetName: "asset3", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d", createAs4Value("65004.1"))}, - config.AsPath{AsPath: fmt.Sprintf("%d$", createAs4Value("65005.1"))}, + AsPath: []string{ + fmt.Sprintf("%d", createAs4Value("65004.1")), + fmt.Sprintf("%d$", createAs4Value("65005.1")), }, } asPathSet4 := config.AsPathSet{ AsPathSetName: "asset4", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d$", createAs4Value("65000.1"))}, + AsPath: []string{ + fmt.Sprintf("%d$", createAs4Value("65000.1")), }, } asPathSet5 := config.AsPathSet{ AsPathSetName: "asset5", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d", createAs4Value("65010.1"))}, + AsPath: []string{ + fmt.Sprintf("%d", createAs4Value("65010.1")), }, } asPathSet6 := config.AsPathSet{ AsPathSetName: "asset6", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d$", createAs4Value("65010.1"))}, + AsPath: []string{ + fmt.Sprintf("%d$", createAs4Value("65010.1")), }, } @@ -1160,65 +1125,59 @@ func TestMultipleAs4PathConditionEvaluate(t *testing.T) { // create match condition asPathSet1 := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("^%d_%d", createAs4Value("65001.1"), createAs4Value("65000.1"))}, + AsPath: []string{ + fmt.Sprintf("^%d_%d", createAs4Value("65001.1"), createAs4Value("65000.1")), }, } asPathSet2 := config.AsPathSet{ AsPathSetName: "asset2", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d_%d$", createAs4Value("65004.1"), createAs4Value("65005.1"))}, + AsPath: []string{ + fmt.Sprintf("%d_%d$", createAs4Value("65004.1"), createAs4Value("65005.1")), }, } asPathSet3 := config.AsPathSet{ AsPathSetName: "asset3", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d_%d_%d", createAs4Value("65001.1"), createAs4Value("65000.1"), createAs4Value("54000.1"))}, + AsPath: []string{ + fmt.Sprintf("%d_%d_%d", createAs4Value("65001.1"), createAs4Value("65000.1"), createAs4Value("54000.1")), }, } asPathSet4 := config.AsPathSet{ AsPathSetName: "asset4", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d_%d_%d", createAs4Value("54000.1"), createAs4Value("65004.1"), createAs4Value("65005.1"))}, + AsPath: []string{ + fmt.Sprintf("%d_%d_%d", createAs4Value("54000.1"), createAs4Value("65004.1"), createAs4Value("65005.1")), }, } asPathSet5 := config.AsPathSet{ AsPathSetName: "asset5", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("^%d %d %d %d %d$", createAs4Value("65001.1"), createAs4Value("65000.1"), createAs4Value("54000.1"), createAs4Value("65004.1"), createAs4Value("65005.1"))}, + AsPath: []string{ + fmt.Sprintf("^%d %d %d %d %d$", createAs4Value("65001.1"), createAs4Value("65000.1"), createAs4Value("54000.1"), createAs4Value("65004.1"), createAs4Value("65005.1")), }, } asPathSet6 := config.AsPathSet{ AsPathSetName: "asset6", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf(".*_[0-9]+_%d", createAs4Value("65005.1"))}, + AsPath: []string{ + fmt.Sprintf(".*_[0-9]+_%d", createAs4Value("65005.1")), }, } asPathSet7 := config.AsPathSet{ AsPathSetName: "asset7", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: ".*_3[0-9]+_[0-9]+"}, - }, + AsPath: []string{".*_3[0-9]+_[0-9]+"}, } asPathSet8 := config.AsPathSet{ AsPathSetName: "asset8", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "4[0-9]+_4[0-9]+_3[0-9]+"}, - }, + AsPath: []string{"4[0-9]+_4[0-9]+_3[0-9]+"}, } asPathSet9 := config.AsPathSet{ AsPathSetName: "asset9", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "4[0-9]+__4[0-9]+"}, - }, + AsPath: []string{"4[0-9]+__4[0-9]+"}, } m := make(map[string]DefinedSet) @@ -1291,9 +1250,7 @@ func TestAs4PathConditionWithOtherCondition(t *testing.T) { // create policy asPathSet := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{config.AsPath{ - AsPath: fmt.Sprintf("%d$", createAs4Value("65005.1")), - }}, + AsPath: []string{fmt.Sprintf("%d$", createAs4Value("65005.1"))}, } ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24") @@ -1351,52 +1308,37 @@ func TestAs4PathConditionEvaluateMixedWith2byteAS(t *testing.T) { // create match condition asPathSet1 := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("^%d", createAs4Value("65001.1"))}, - }, + AsPath: []string{fmt.Sprintf("^%d", createAs4Value("65001.1"))}, } asPathSet2 := config.AsPathSet{ AsPathSetName: "asset2", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "4000$"}, - }, + AsPath: []string{"4000$"}, } asPathSet3 := config.AsPathSet{ AsPathSetName: "asset3", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d", createAs4Value("65004.1"))}, - config.AsPath{AsPath: "4000$"}, - }, + AsPath: []string{fmt.Sprintf("%d", createAs4Value("65004.1")), "4000$"}, } asPathSet4 := config.AsPathSet{ AsPathSetName: "asset4", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: fmt.Sprintf("%d_%d_%d", createAs4Value("54000.1"), 100, 5000)}, - }, + AsPath: []string{fmt.Sprintf("%d_%d_%d", createAs4Value("54000.1"), 100, 5000)}, } asPathSet5 := config.AsPathSet{ AsPathSetName: "asset5", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: ".*_[0-9]+_100"}, - }, + AsPath: []string{".*_[0-9]+_100"}, } asPathSet6 := config.AsPathSet{ AsPathSetName: "asset6", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: ".*_3[0-9]+_[0]+"}, - }, + AsPath: []string{".*_3[0-9]+_[0]+"}, } asPathSet7 := config.AsPathSet{ AsPathSetName: "asset7", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: ".*_3[0-9]+_[1]+"}, - }, + AsPath: []string{".*_3[0-9]+_[1]+"}, } m := make(map[string]DefinedSet) @@ -1478,76 +1420,58 @@ func TestCommunityConditionEvaluate(t *testing.T) { // create match condition comSet1 := config.CommunitySet{ CommunitySetName: "comset1", - CommunityList: []config.Community{ - config.Community{Community: "65001:10"}, - config.Community{Community: "65001:50"}, - config.Community{Community: "65001:100"}, - }, + Community: []string{"65001:10", "65001:50", "65001:100"}, } comSet2 := config.CommunitySet{ CommunitySetName: "comset2", - CommunityList: []config.Community{ - config.Community{Community: "65001:200"}, - }, + Community: []string{"65001:200"}, } comSet3 := config.CommunitySet{ CommunitySetName: "comset3", - CommunityList: []config.Community{ - config.Community{Community: "4259905936"}, - }, + Community: []string{"4259905936"}, } comSet4 := config.CommunitySet{ CommunitySetName: "comset4", - CommunityList: []config.Community{ - config.Community{Community: "^[0-9]*:300$"}, - }, + Community: []string{"^[0-9]*:300$"}, } comSet5 := config.CommunitySet{ CommunitySetName: "comset5", - CommunityList: []config.Community{ - config.Community{Community: "INTERNET"}, - }, + Community: []string{"INTERNET"}, } comSet6 := config.CommunitySet{ CommunitySetName: "comset6", - CommunityList: []config.Community{ - config.Community{Community: "NO_EXPORT"}, - }, + Community: []string{"NO_EXPORT"}, } comSet7 := config.CommunitySet{ CommunitySetName: "comset7", - CommunityList: []config.Community{ - config.Community{Community: "NO_ADVERTISE"}, - }, + Community: []string{"NO_ADVERTISE"}, } comSet8 := config.CommunitySet{ CommunitySetName: "comset8", - CommunityList: []config.Community{ - config.Community{Community: "NO_EXPORT_SUBCONFED"}, - }, + Community: []string{"NO_EXPORT_SUBCONFED"}, } comSet9 := config.CommunitySet{ CommunitySetName: "comset9", - CommunityList: []config.Community{ - config.Community{Community: "65001:\\d+"}, - config.Community{Community: "\\d+:\\d00"}, + Community: []string{ + "65001:\\d+", + "\\d+:\\d00", }, } comSet10 := config.CommunitySet{ CommunitySetName: "comset10", - CommunityList: []config.Community{ - config.Community{Community: "65001:1"}, - config.Community{Community: "65001:2"}, - config.Community{Community: "65001:3"}, + Community: []string{ + "65001:1", + "65001:2", + "65001:3", }, } @@ -1628,25 +1552,17 @@ func TestCommunityConditionEvaluateWithOtherCondition(t *testing.T) { // create policy asPathSet := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65005$"}, - }, + AsPath: []string{"65005$"}, } comSet1 := config.CommunitySet{ CommunitySetName: "comset1", - CommunityList: []config.Community{ - config.Community{Community: "65001:100"}, - config.Community{Community: "65001:200"}, - config.Community{Community: "65001:300"}, - }, + Community: []string{"65001:100", "65001:200", "65001:300"}, } comSet2 := config.CommunitySet{ CommunitySetName: "comset2", - CommunityList: []config.Community{ - config.Community{Community: "65050:\\d+"}, - }, + Community: []string{"65050:\\d+"}, } ps := createPrefixSet("ps1", "10.10.0.0/16", "21..24") @@ -2044,72 +1960,48 @@ func TestExtCommunityConditionEvaluate(t *testing.T) { // create match condition ecomSet1 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet1", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:65001:200"}, - }, + ExtCommunity: []string{"RT:65001:200"}, } ecomSet2 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet2", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:10.0.0.1:300"}, - }, + ExtCommunity: []string{"RT:10.0.0.1:300"}, } ecomSet3 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet3", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: fmt.Sprintf("RT:%s:200", convUintStr(65030000))}, - }, + ExtCommunity: []string{fmt.Sprintf("RT:%s:200", convUintStr(65030000))}, } ecomSet4 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet4", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:65002:200"}, - }, + ExtCommunity: []string{"RT:65002:200"}, } ecomSet5 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet5", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:10.0.0.2:300"}, - }, + ExtCommunity: []string{"RT:10.0.0.2:300"}, } ecomSet6 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet6", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: fmt.Sprintf("RT:%s:200", convUintStr(65030001))}, - }, + ExtCommunity: []string{fmt.Sprintf("RT:%s:200", convUintStr(65030001))}, } ecomSet7 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet7", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "SoO:65010:300"}, - }, + ExtCommunity: []string{"SoO:65010:300"}, } ecomSet8 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet8", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "SoO:10.0.10.10:[0-9]+"}, - }, + ExtCommunity: []string{"SoO:10.0.10.10:[0-9]+"}, } ecomSet9 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet9", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:[0-9]+:[0-9]+"}, - }, + ExtCommunity: []string{"RT:[0-9]+:[0-9]+"}, } ecomSet10 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet10", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:.+:\\d00"}, - config.ExtCommunity{ExtCommunity: "SoO:.+:\\d00"}, - }, + ExtCommunity: []string{"RT:.+:\\d00", "SoO:.+:\\d00"}, } ecomSet11 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet11", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:65001:2"}, - config.ExtCommunity{ExtCommunity: "SoO:11.0.10.10:[0-9]+"}, - }, + ExtCommunity: []string{"RT:65001:2", "SoO:11.0.10.10:[0-9]+"}, } m := make(map[string]DefinedSet) @@ -2240,22 +2132,16 @@ func TestExtCommunityConditionEvaluateWithOtherCondition(t *testing.T) { // create policy asPathSet := config.AsPathSet{ AsPathSetName: "asset1", - AsPathList: []config.AsPath{ - config.AsPath{AsPath: "65005$"}, - }, + AsPath: []string{"65005$"}, } ecomSet1 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet1", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:65001:201"}, - }, + ExtCommunity: []string{"RT:65001:201"}, } ecomSet2 := config.ExtCommunitySet{ ExtCommunitySetName: "ecomSet2", - ExtCommunityList: []config.ExtCommunity{ - config.ExtCommunity{ExtCommunity: "RT:[0-9]+:[0-9]+"}, - }, + ExtCommunity: []string{"RT:[0-9]+:[0-9]+"}, } ps := createPrefixSet("ps1", "10.10.1.0/16", "21..24") @@ -2837,10 +2723,7 @@ func createPrefixSet(name string, prefix string, maskLength string) config.Prefi func createNeighborSet(name string, addr string) config.NeighborSet { ns := config.NeighborSet{ NeighborSetName: name, - NeighborInfoList: []config.NeighborInfo{ - config.NeighborInfo{ - Address: addr, - }}, + NeighborInfo: []string{addr}, } return ns } diff --git a/test/lib/gobgp.py b/test/lib/gobgp.py index 7e29519c..22b68385 100644 --- a/test/lib/gobgp.py +++ b/test/lib/gobgp.py @@ -284,7 +284,7 @@ class GoBGPContainer(BGPContainer): if self.zebra: config['Global']['Zebra'] = {'Enabled': True, - 'RedistributeRouteTypeList':[{'RouteType': 'connect'}],} + 'RedistributeRouteType':['connect']} with open('{0}/gobgpd.conf'.format(self.config_dir), 'w') as f: print colors.yellow('[{0}\'s new config]'.format(self.name)) diff --git a/test/scenario_test/route_server_policy_test.py b/test/scenario_test/route_server_policy_test.py index b2a4bc29..0fdc3967 100644 --- a/test/scenario_test/route_server_policy_test.py +++ b/test/scenario_test/route_server_policy_test.py @@ -106,10 +106,8 @@ class ImportPolicy(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -175,10 +173,8 @@ class ExportPolicy(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[q2]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[q2]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -264,10 +260,8 @@ class ImportPolicyUpdate(object): 'PrefixList': [p0, p1]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -315,10 +309,8 @@ class ImportPolicyUpdate(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -398,10 +390,8 @@ class ExportPolicyUpdate(object): 'PrefixList': [p0, p1]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[q2]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[q2]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -448,10 +438,8 @@ class ExportPolicyUpdate(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[q2]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[q2]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -546,10 +534,8 @@ class ImportPolicyIPV6(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -618,10 +604,8 @@ class ExportPolicyIPV6(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[q2]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[q2]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -703,10 +687,8 @@ class ImportPolicyIPV6Update(object): 'PrefixList': [p0, p1]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -749,10 +731,8 @@ class ImportPolicyIPV6Update(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -830,10 +810,8 @@ class ExportPolicyIPv6Update(object): 'PrefixList': [p0, p1]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[q2]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[q2]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -876,10 +854,8 @@ class ExportPolicyIPv6Update(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[q2]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[q2]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -993,7 +969,7 @@ class ImportPolicyAsPathCondition(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPathList': [{'AsPath': '^{0}'.format(e1.asn)}]}]}} + as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPath': ['^{0}'.format(e1.asn)]}]}} g1.set_bgp_defined_set(as0) @@ -1046,7 +1022,7 @@ class ImportPolicyAsPathAnyCondition(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPathList': [{'AsPath': '65098'}]}]}} + as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPath': ['65098']}]}} g1.set_bgp_defined_set(as0) @@ -1099,7 +1075,7 @@ class ImportPolicyAsPathOriginCondition(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPathList': [{'AsPath': '65090$'}]}]}} + as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPath': ['65090$']}]}} g1.set_bgp_defined_set(as0) @@ -1152,7 +1128,7 @@ class ImportPolicyAsPathOnlyCondition(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPathList': [{'AsPath': '^65100$'}]}]}} + as0 = {'AsPathSets': {'AsPathSetList': [{'AsPathSetName': 'as0', 'AsPath': ['^65100$']}]}} g1.set_bgp_defined_set(as0) @@ -1208,7 +1184,7 @@ class ImportPolicyAsPathMismatchCondition(object): q2 = env.q2 cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', - 'CommunityList': [{'Community': '65100:10'}]}]}} + 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1270,7 +1246,7 @@ class ImportPolicyCommunityCondition(object): q1 = env.q1 q2 = env.q2 cs0 = {'CommunitySets': - {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1324,7 +1300,7 @@ class ImportPolicyCommunityRegexp(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '6[0-9]+:[0-9]+'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['6[0-9]+:[0-9]+']}]}} g1.set_bgp_defined_set(cs0) @@ -1386,7 +1362,7 @@ class ImportPolicyCommunityAction(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1461,7 +1437,7 @@ class ImportPolicyCommunityReplace(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1528,7 +1504,7 @@ class ImportPolicyCommunityRemove(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1613,7 +1589,7 @@ class ImportPolicyCommunityNull(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1688,7 +1664,7 @@ class ExportPolicyCommunityAdd(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1762,7 +1738,7 @@ class ExportPolicyCommunityReplace(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1836,7 +1812,7 @@ class ExportPolicyCommunityRemove(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -1913,7 +1889,7 @@ class ExportPolicyCommunityNull(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -2368,7 +2344,7 @@ class InPolicyReject(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -2428,7 +2404,7 @@ class InPolicyAccept(object): e1 = env.e1 q1 = env.q1 q2 = env.q2 - cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'CommunityList': [{'Community': '65100:10'}]}]}} + cs0 = {'CommunitySets': {'CommunitySetList': [{'CommunitySetName': 'cs0', 'Community': ['65100:10']}]}} g1.set_bgp_defined_set(cs0) @@ -2503,10 +2479,8 @@ class InPolicyUpdate(object): 'PrefixList': [p0, p1]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -2555,10 +2529,8 @@ class InPolicyUpdate(object): 'PrefixList': [p0]} g1.set_prefix_set(ps0) - n0 = {'Address': g1.peers[e1]['neigh_addr'].split('/')[0]} - ns0 = {'NeighborSetName': 'ns0', - 'NeighborInfoList': [n0]} + 'NeighborInfo': [g1.peers[e1]['neigh_addr'].split('/')[0]]} g1.set_neighbor_set(ns0) st0 = {'Name': 'st0', @@ -2861,7 +2833,7 @@ class ImportPolicyExCommunityOriginCondition(object): q2 = env.q2 es0 = {'ExtCommunitySets': {'ExtCommunitySetList': [{'ExtCommunitySetName': 'es0', - 'ExtCommunityList': [{'ExtCommunity': 'SoO:65001.65100:200'}]}]}} + 'ExtCommunity': ['SoO:65001.65100:200']}]}} g1.set_bgp_defined_set(es0) @@ -2913,7 +2885,7 @@ class ImportPolicyExCommunityTargetCondition(object): q2 = env.q2 es0 = {'ExtCommunitySets': {'ExtCommunitySetList': [{'ExtCommunitySetName': 'es0', - 'ExtCommunityList': [{'ExtCommunity': 'RT:6[0-9]+:3[0-9]+'}]}]}} + 'ExtCommunity': ['RT:6[0-9]+:3[0-9]+']}]}} g1.set_bgp_defined_set(es0) diff --git a/tools/pyang_plugins/README.rst b/tools/pyang_plugins/README.rst index eaf3f89e..10b44d71 100644 --- a/tools/pyang_plugins/README.rst +++ b/tools/pyang_plugins/README.rst @@ -21,6 +21,6 @@ How to use -p $YANG_DIR/experimental/openconfig/bgp \ -p $YANG_DIR/experimental/openconfig/policy \ -f golang $YANG_DIR/experimental/openconfig/bgp/bgp.yang \ - --augment $YANG_DIR/experimental/openconfig/bgp/bgp-policy.yang \ - --augment $GOBGP_PATH/tools/pyang_plugins/gobgp.yang \ + $YANG_DIR/bgp/bgp.yang $YANG_DIR/bgp/bgp-policy.yang \ + $GOBGP_PATH/tools/pyang_plugins/gobgp.yang \ | gofmt > $GOBGP_PATH/config/bgp_configs.go diff --git a/tools/pyang_plugins/bgpyang2golang.py b/tools/pyang_plugins/bgpyang2golang.py index ed02b451..3b7702e9 100644 --- a/tools/pyang_plugins/bgpyang2golang.py +++ b/tools/pyang_plugins/bgpyang2golang.py @@ -45,21 +45,9 @@ def pyang_plugin_init(): class GolangPlugin(plugin.PyangPlugin): def add_output_format(self, fmts): + self.multiple_modules = True fmts['golang'] = self - - - def add_opts(self, optparser): - optlist = [ - optparse.make_option("--augment", - dest="augment", action="append", - help="Yang file which has augment statements"), - ] - g = optparser.add_option_group("GolangPlugin specific options") - g.add_options(optlist) - - - def emit(self, ctx, modules, fd): ctx.golang_identity_map = {} @@ -70,20 +58,8 @@ class GolangPlugin(plugin.PyangPlugin): ctx.prefix_rel = {} ctx.module_deps = [] - check_module_deps(ctx, modules[0]) - - # load augment module - if ctx.opts.augment: - aug_mod_path = ctx.opts.augment - for p in aug_mod_path: - with open(p) as fd: - try: - text = fd.read() - except IOError as ex: - sys.stderr.write("error %s: %s\n" % (aug_mod_path, str(ex))) - sys.exit(1) - aug_mod = ctx.add_module(p, text) - check_module_deps(ctx, aug_mod) + for m in modules: + check_module_deps(ctx, m) # visit yang statements visit_modules(ctx) @@ -207,6 +183,8 @@ def emit_class_def(ctx, yang_statement, struct_name, prefix): if is_leaflist(child): type_obj = child.search_one('type') type_name = type_obj.arg + val_name_go = val_name_go + 'List' + tag_name += '-list' # case leafref if type_name == 'leafref': @@ -532,7 +510,7 @@ _type_translation_map = { 'inet:ip-prefix': 'string', 'inet:ipv4-address': 'string', 'inet:as-number': 'uint32', - 'bgp-set-community-option-type' : 'string', + 'bgp-set-community-option-type': 'string', 'identityref' : 'string', 'inet:port-number': 'uint16', 'yang:timeticks': 'int64', diff --git a/tools/pyang_plugins/gobgp.yang b/tools/pyang_plugins/gobgp.yang index c849127e..73f886ad 100644 --- a/tools/pyang_plugins/gobgp.yang +++ b/tools/pyang_plugins/gobgp.yang @@ -1,4 +1,4 @@ -module bgp-gobgp { +module gobgp { yang-version "1"; @@ -13,6 +13,7 @@ module bgp-gobgp { import policy-types {prefix ptypes; } import bgp-policy {prefix bgp-pol; } import ietf-inet-types { prefix inet; } + import ietf-yang-types { prefix yang; } // meta organization @@ -403,12 +404,16 @@ module bgp-gobgp { description "additional RPKI structure"; container rpki-servers { - description - "List of RPKI servers configured on the local system"; list rpki-server { - container rpki-server { - uses gobgp-rpki-server-set; + key "address"; + description + "List of RPKI servers configured on the local system"; + leaf address { + type leafref { + path "../config/address"; + } } + uses gobgp-rpki-server-set; } } } @@ -457,12 +462,16 @@ module bgp-gobgp { description "BGP Monitoring Protocol servers"; container bmp-servers { - description - "List of BMP servers configured on the local system"; list bmp-server { - container bmp-server { - uses gobgp-bmp-server-set; + key "address"; + description + "List of BMP servers configured on the local system"; + leaf address { + type leafref { + path "../config/address"; + } } + uses gobgp-bmp-server-set; } } } @@ -568,12 +577,10 @@ module bgp-gobgp { augment "/rpol:routing-policy/rpol:defined-sets/rpol:neighbor-sets/rpol:neighbor-set" { description "alternative for the existing neighbor element"; - list neighbor-info { - leaf address { - type inet:ip-address; - description + leaf-list neighbor-info { + description "neighbor ip address"; - } + type inet:ip-address; } } @@ -581,12 +588,10 @@ module bgp-gobgp { "bgp-pol:bgp-defined-sets/bgp-pol:community-sets/bgp-pol:community-set" { description "alternative for the existing community-member"; - list community { - leaf community { - type string; - description - "community set member"; - } + leaf-list community { + description + "community set member"; + type string; } } @@ -594,12 +599,10 @@ module bgp-gobgp { "bgp-pol:bgp-defined-sets/bgp-pol:ext-community-sets/bgp-pol:ext-community-set" { description "alternative for the existing ext-community-member"; - list ext-community { - leaf ext-community { - type string; - description - "extended community set member"; - } + leaf-list ext-community { + type string; + description + "extended community set member"; } } @@ -607,12 +610,10 @@ module bgp-gobgp { "bgp-pol:bgp-defined-sets/bgp-pol:as-path-sets/bgp-pol:as-path-set" { description "alternative for the existing as-path-set-member"; - list as-path { - leaf as-path { - type string; - description - "AS path expression"; - } + leaf-list as-path { + type string; + description + "AS path expression"; } } @@ -661,9 +662,9 @@ module bgp-gobgp { description "Configure url for zebra."; } - list redistribute-route-type { - leaf route-type { - type ptypes:install-protocol-type; + leaf-list redistribute-route-type { + type identityref { + base ptypes:install-protocol-type; } } } |