diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-01-03 23:05:23 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-01-04 20:30:51 +0900 |
commit | 52ddad958f10ae9ea7ab8c40130825c903d08c52 (patch) | |
tree | 4097992e648a41e75928e89dad134ff67abfff37 /table | |
parent | a3cb22a9027b4fd9f360f873b976472aad4ae173 (diff) |
table: remove Path's source version
Even if a connection with peer is down and up, table code gets
BGPmessages belonging the first connection before the event of the
peer down in order. So we don't need source version stuff inherent
from Ryu BGP code.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'table')
-rw-r--r-- | table/destination.go | 14 | ||||
-rw-r--r-- | table/destination_test.go | 6 | ||||
-rw-r--r-- | table/path.go | 35 | ||||
-rw-r--r-- | table/path_test.go | 34 | ||||
-rw-r--r-- | table/table.go | 2 | ||||
-rw-r--r-- | table/table_manager_test.go | 17 | ||||
-rw-r--r-- | table/table_test.go | 6 |
7 files changed, 38 insertions, 76 deletions
diff --git a/table/destination.go b/table/destination.go index 73cae66c..2954c699 100644 --- a/table/destination.go +++ b/table/destination.go @@ -41,12 +41,11 @@ const ( ) type PeerInfo struct { - AS uint32 - ID net.IP - VersionNum int - LocalID net.IP - RF bgp.RouteFamily - Address net.IP + AS uint32 + ID net.IP + LocalID net.IP + RF bgp.RouteFamily + Address net.IP } type Destination interface { @@ -172,11 +171,10 @@ func (dd *DestinationDefault) addNewPath(newPath Path) { func (dd *DestinationDefault) removeOldPathsFromSource(source *PeerInfo) []Path { removePaths := make([]Path, 0) - sourceVerNum := source.VersionNum tempKnownPathList := make([]Path, 0) for _, path := range dd.knownPathList { - if path.getSource() == source && path.getSourceVerNum() < sourceVerNum { + if path.getSource() == source { removePaths = append(removePaths, path) } else { tempKnownPathList = append(tempKnownPathList, path) diff --git a/table/destination_test.go b/table/destination_test.go index e003ce67..2398773e 100644 --- a/table/destination_test.go +++ b/table/destination_test.go @@ -111,9 +111,9 @@ func TestDestinationCalculate(t *testing.T) { } func DestCreatePeer() []*PeerInfo { - peerD1 := &PeerInfo{VersionNum: 4, AS: 65000} - peerD2 := &PeerInfo{VersionNum: 4, AS: 65001} - peerD3 := &PeerInfo{VersionNum: 4, AS: 65002} + peerD1 := &PeerInfo{AS: 65000} + peerD2 := &PeerInfo{AS: 65001} + peerD3 := &PeerInfo{AS: 65002} peerD := []*PeerInfo{peerD1, peerD2, peerD3} return peerD } diff --git a/table/path.go b/table/path.go index bc92ed16..80969ab1 100644 --- a/table/path.go +++ b/table/path.go @@ -33,8 +33,6 @@ type Path interface { getSource() *PeerInfo setNexthop(nexthop net.IP) getNexthop() net.IP - setSourceVerNum(sourceVerNum int) - getSourceVerNum() int setWithdraw(withdraw bool) IsWithdraw() bool getNlri() bgp.AddrPrefixInterface @@ -50,7 +48,6 @@ type PathDefault struct { routeFamily bgp.RouteFamily source *PeerInfo nexthop net.IP - sourceVerNum int withdraw bool nlri bgp.AddrPrefixInterface pathAttrs []bgp.PathAttributeInterface @@ -58,7 +55,7 @@ type PathDefault struct { isBest bool } -func NewPathDefault(rf bgp.RouteFamily, source *PeerInfo, nlri bgp.AddrPrefixInterface, sourceVerNum int, nexthop net.IP, isWithdraw bool, pattrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *PathDefault { +func NewPathDefault(rf bgp.RouteFamily, source *PeerInfo, nlri bgp.AddrPrefixInterface, nexthop net.IP, isWithdraw bool, pattrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *PathDefault { if !isWithdraw && pattrs == nil { log.Error("Need to provide nexthop and patattrs for path that is not a withdraw.") @@ -71,7 +68,6 @@ func NewPathDefault(rf bgp.RouteFamily, source *PeerInfo, nlri bgp.AddrPrefixInt path.nlri = nlri path.source = source path.nexthop = nexthop - path.sourceVerNum = sourceVerNum path.withdraw = isWithdraw path.medSetByTargetNeighbor = medSetByTargetNeighbor path.isBest = false @@ -145,14 +141,6 @@ func (pd *PathDefault) getNexthop() net.IP { return pd.nexthop } -func (pd *PathDefault) setSourceVerNum(sourceVerNum int) { - pd.sourceVerNum = sourceVerNum -} - -func (pd *PathDefault) getSourceVerNum() int { - return pd.sourceVerNum -} - func (pd *PathDefault) setWithdraw(withdraw bool) { pd.withdraw = withdraw } @@ -206,7 +194,7 @@ func (pd *PathDefault) getPathAttr(pattrType bgp.BGPAttrType) (int, bgp.PathAttr // return Path's string representation func (pi *PathDefault) String() string { - str := fmt.Sprintf("IPv4Path Source: %d, ", pi.getSourceVerNum()) + str := fmt.Sprintf("IPv4Path Source: %v, ", pi.getSource()) str = str + fmt.Sprintf(" NLRI: %s, ", pi.getPrefix().String()) str = str + fmt.Sprintf(" nexthop: %s, ", pi.getNexthop().String()) str = str + fmt.Sprintf(" withdraw: %s, ", pi.IsWithdraw()) @@ -231,19 +219,14 @@ func CreatePath(source *PeerInfo, nlri bgp.AddrPrefixInterface, attrs []bgp.Path rf := bgp.RouteFamily(int(nlri.AFI())<<16 | int(nlri.SAFI())) log.Debugf("afi: %d, safi: %d ", int(nlri.AFI()), nlri.SAFI()) var path Path - var sourceVerNum int = 1 - - if source != nil { - sourceVerNum = source.VersionNum - } switch rf { case bgp.RF_IPv4_UC: log.Debugf("RouteFamily : %s", bgp.RF_IPv4_UC.String()) - path = NewIPv4Path(source, nlri, sourceVerNum, isWithdraw, attrs, false) + path = NewIPv4Path(source, nlri, isWithdraw, attrs, false) case bgp.RF_IPv6_UC: log.Debugf("RouteFamily : %s", bgp.RF_IPv6_UC.String()) - path = NewIPv6Path(source, nlri, sourceVerNum, isWithdraw, attrs, false) + path = NewIPv6Path(source, nlri, isWithdraw, attrs, false) } return path } @@ -255,9 +238,9 @@ type IPv4Path struct { *PathDefault } -func NewIPv4Path(source *PeerInfo, nlri bgp.AddrPrefixInterface, sourceVerNum int, isWithdraw bool, attrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *IPv4Path { +func NewIPv4Path(source *PeerInfo, nlri bgp.AddrPrefixInterface, isWithdraw bool, attrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *IPv4Path { ipv4Path := &IPv4Path{} - ipv4Path.PathDefault = NewPathDefault(bgp.RF_IPv4_UC, source, nlri, sourceVerNum, nil, isWithdraw, attrs, medSetByTargetNeighbor) + ipv4Path.PathDefault = NewPathDefault(bgp.RF_IPv4_UC, source, nlri, nil, isWithdraw, attrs, medSetByTargetNeighbor) if !isWithdraw { _, nexthop_attr := ipv4Path.getPathAttr(bgp.BGP_ATTR_TYPE_NEXT_HOP) ipv4Path.nexthop = nexthop_attr.(*bgp.PathAttributeNextHop).Value @@ -276,9 +259,9 @@ type IPv6Path struct { *PathDefault } -func NewIPv6Path(source *PeerInfo, nlri bgp.AddrPrefixInterface, sourceVerNum int, isWithdraw bool, attrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *IPv6Path { +func NewIPv6Path(source *PeerInfo, nlri bgp.AddrPrefixInterface, isWithdraw bool, attrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *IPv6Path { ipv6Path := &IPv6Path{} - ipv6Path.PathDefault = NewPathDefault(bgp.RF_IPv6_UC, source, nlri, sourceVerNum, nil, isWithdraw, attrs, medSetByTargetNeighbor) + ipv6Path.PathDefault = NewPathDefault(bgp.RF_IPv6_UC, source, nlri, nil, isWithdraw, attrs, medSetByTargetNeighbor) if !isWithdraw { _, mpattr := ipv6Path.getPathAttr(bgp.BGP_ATTR_TYPE_MP_REACH_NLRI) ipv6Path.nexthop = mpattr.(*bgp.PathAttributeMpReachNLRI).Nexthop @@ -311,7 +294,7 @@ func (ipv6p *IPv6Path) getPrefix() net.IP { // return IPv6Path's string representation func (ipv6p *IPv6Path) String() string { - str := fmt.Sprintf("IPv6Path Source: %d, ", ipv6p.getSourceVerNum()) + str := fmt.Sprintf("IPv6Path Source: %v, ", ipv6p.getSource()) str = str + fmt.Sprintf(" NLRI: %s, ", ipv6p.getPrefix().String()) str = str + fmt.Sprintf(" nexthop: %s, ", ipv6p.getNexthop().String()) str = str + fmt.Sprintf(" withdraw: %s, ", ipv6p.IsWithdraw()) diff --git a/table/path_test.go b/table/path_test.go index feed46ed..b913520f 100644 --- a/table/path_test.go +++ b/table/path_test.go @@ -13,14 +13,14 @@ func TestPathNewIPv4(t *testing.T) { peerP := PathCreatePeer() msgP := PathCreateMSG(peerP) pathP := PathCreatePath(msgP) - ipv4p := NewIPv4Path(pathP[0].getSource(), pathP[0].getNlri(), pathP[0].getSourceVerNum(), true, pathP[0].getPathAttrs(), pathP[0].getMedSetByTargetNeighbor()) + ipv4p := NewIPv4Path(pathP[0].getSource(), pathP[0].getNlri(), true, pathP[0].getPathAttrs(), pathP[0].getMedSetByTargetNeighbor()) assert.NotNil(t, ipv4p) } func TestPathNewIPv6(t *testing.T) { peerP := PathCreatePeer() msgP := PathCreateMSG(peerP) pathP := PathCreatePath(msgP) - ipv6p := NewIPv6Path(pathP[0].getSource(), pathP[0].getNlri(), pathP[0].getSourceVerNum(), true, pathP[0].getPathAttrs(), pathP[0].getMedSetByTargetNeighbor()) + ipv6p := NewIPv6Path(pathP[0].getSource(), pathP[0].getNlri(), true, pathP[0].getPathAttrs(), pathP[0].getMedSetByTargetNeighbor()) assert.NotNil(t, ipv6p) } @@ -41,7 +41,7 @@ func TestPathIPv4GetDefault(t *testing.T) { } func TestPathIPv6SetDefault(t *testing.T) { - pd := &PathDefault{sourceVerNum: 4} + pd := &PathDefault{} ipv6p := &IPv6Path{} ipv6p.setPathDefault(pd) r_pd := ipv6p.getPathDefault() @@ -49,7 +49,7 @@ func TestPathIPv6SetDefault(t *testing.T) { } func TestPathIPv6GetDefault(t *testing.T) { - pd := &PathDefault{sourceVerNum: 5} + pd := &PathDefault{} ipv6p := &IPv6Path{} ipv6p.setPathDefault(pd) r_pd := ipv6p.getPathDefault() @@ -64,7 +64,7 @@ func TestPathGetRouteFamily(t *testing.T) { func TestPathSetSource(t *testing.T) { pd := &PathDefault{} - pr := &PeerInfo{AS: 65000, VersionNum: 4} + pr := &PeerInfo{AS: 65000} pd.setSource(pr) r_pr := pd.getSource() assert.Equal(t, r_pr, pr) @@ -72,7 +72,7 @@ func TestPathSetSource(t *testing.T) { func TestPathGetSource(t *testing.T) { pd := &PathDefault{} - pr := &PeerInfo{AS: 65001, VersionNum: 4} + pr := &PeerInfo{AS: 65001} pd.setSource(pr) r_pr := pd.getSource() assert.Equal(t, r_pr, pr) @@ -94,22 +94,6 @@ func TestPathgetNexthop(t *testing.T) { assert.Equal(t, nh, ip) } -func TestPathSetSourceVerNum(t *testing.T) { - pd := &PathDefault{} - svn := 4 - pd.setSourceVerNum(svn) - r_svn := pd.getSourceVerNum() - assert.Equal(t, r_svn, svn) -} - -func TestPathGetSourceVerNum(t *testing.T) { - pd := &PathDefault{} - svn := 5 - pd.setSourceVerNum(svn) - r_svn := pd.getSourceVerNum() - assert.Equal(t, r_svn, svn) -} - func TestPathSetWithdraw(t *testing.T) { pd := &PathDefault{} wd := true @@ -182,9 +166,9 @@ func TestPathGetAttribute(t *testing.T) { } func PathCreatePeer() []*PeerInfo { - peerP1 := &PeerInfo{VersionNum: 4, AS: 65000} - peerP2 := &PeerInfo{VersionNum: 4, AS: 65001} - peerP3 := &PeerInfo{VersionNum: 4, AS: 65002} + peerP1 := &PeerInfo{AS: 65000} + peerP2 := &PeerInfo{AS: 65001} + peerP3 := &PeerInfo{AS: 65002} peerP := []*PeerInfo{peerP1, peerP2, peerP3} return peerP } diff --git a/table/table.go b/table/table.go index 0be4c75f..de36510d 100644 --- a/table/table.go +++ b/table/table.go @@ -114,7 +114,7 @@ func (td *TableDefault) DeleteDestByPeer(peerInfo *PeerInfo) []Destination { for _, dest := range td.destinations { newKnownPathList := make([]Path, 0) for _, p := range dest.getKnownPathList() { - if peerInfo != p.getSource() || peerInfo.VersionNum != p.getSourceVerNum() { + if p.getSource() != peerInfo { newKnownPathList = append(newKnownPathList, p) } } diff --git a/table/table_manager_test.go b/table/table_manager_test.go index 63d114f3..4440a909 100644 --- a/table/table_manager_test.go +++ b/table/table_manager_test.go @@ -38,28 +38,25 @@ func getLogger(lv log.Level) *log.Logger { func peerR1() *PeerInfo { peer := &PeerInfo{ - VersionNum: 4, - AS: 65000, - ID: net.ParseIP("10.0.0.3").To4(), - LocalID: net.ParseIP("10.0.0.1").To4(), + AS: 65000, + ID: net.ParseIP("10.0.0.3").To4(), + LocalID: net.ParseIP("10.0.0.1").To4(), } return peer } func peerR2() *PeerInfo { peer := &PeerInfo{ - VersionNum: 4, - AS: 65100, + AS: 65100, } return peer } func peerR3() *PeerInfo { peer := &PeerInfo{ - VersionNum: 4, - AS: 65000, - ID: net.ParseIP("10.0.0.2").To4(), - LocalID: net.ParseIP("10.0.0.1").To4(), + AS: 65000, + ID: net.ParseIP("10.0.0.2").To4(), + LocalID: net.ParseIP("10.0.0.1").To4(), } return peer } diff --git a/table/table_test.go b/table/table_test.go index 0827df74..74381e8b 100644 --- a/table/table_test.go +++ b/table/table_test.go @@ -107,9 +107,9 @@ func TestTableGetDestinations(t *testing.T) { } func TableCreatePeer() []*PeerInfo { - peerT1 := &PeerInfo{VersionNum: 4, AS: 65000} - peerT2 := &PeerInfo{VersionNum: 4, AS: 65001} - peerT3 := &PeerInfo{VersionNum: 4, AS: 65002} + peerT1 := &PeerInfo{AS: 65000} + peerT2 := &PeerInfo{AS: 65001} + peerT3 := &PeerInfo{AS: 65002} peerT := []*PeerInfo{peerT1, peerT2, peerT3} return peerT } |