summaryrefslogtreecommitdiffhomepage
path: root/table
diff options
context:
space:
mode:
authorISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>2015-03-31 08:54:13 +0000
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-04-04 13:50:53 +0900
commit3febf8129ee052adf013b6f8559e9cb950f3cdd5 (patch)
tree697a1e233383653e93043a57ab42cb598b47e304 /table
parent9c37e5aee02e9a0c7577237aa722bc76e22ccb3e (diff)
table: change Path.clone to copy path attributes and make it public
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'table')
-rw-r--r--table/message.go2
-rw-r--r--table/path.go23
-rw-r--r--table/table_manager.go2
3 files changed, 14 insertions, 13 deletions
diff --git a/table/message.go b/table/message.go
index 4bc531e3..7c290780 100644
--- a/table/message.go
+++ b/table/message.go
@@ -131,7 +131,7 @@ func cloneAttrSlice(attrs []bgp.PathAttributeInterface) []bgp.PathAttributeInter
func CloneAndUpdatePathAttrs(pathList []Path, global *config.Global, peer *config.Neighbor) []Path {
newPathList := make([]Path, 0, len(pathList))
for _, p := range pathList {
- clone := p.clone(p.IsWithdraw())
+ clone := p.Clone(p.IsWithdraw())
clone.updatePathAttrs(global, peer)
newPathList = append(newPathList, clone)
}
diff --git a/table/path.go b/table/path.go
index 468da2f2..71bf2c1e 100644
--- a/table/path.go
+++ b/table/path.go
@@ -42,7 +42,7 @@ type Path interface {
getPrefix() string
setMedSetByTargetNeighbor(medSetByTargetNeighbor bool)
getMedSetByTargetNeighbor() bool
- clone(IsWithdraw bool) Path
+ Clone(IsWithdraw bool) Path
getTimestamp() time.Time
setTimestamp(t time.Time)
MarshalJSON() ([]byte, error)
@@ -94,11 +94,6 @@ func cloneAsPath(asAttr *bgp.PathAttributeAsPath) *bgp.PathAttributeAsPath {
}
func (pd *PathDefault) updatePathAttrs(global *config.Global, peer *config.Neighbor) {
- newPathAttrs := make([]bgp.PathAttributeInterface, len(pd.pathAttrs))
- for i, v := range pd.pathAttrs {
- newPathAttrs[i] = v
- }
- pd.pathAttrs = newPathAttrs
if peer.RouteServer.RouteServerClient {
return
@@ -212,7 +207,7 @@ func (pd *PathDefault) MarshalJSON() ([]byte, error) {
}
// create new PathAttributes
-func (pd *PathDefault) clone(isWithdraw bool) Path {
+func (pd *PathDefault) Clone(isWithdraw bool) Path {
nlri := pd.nlri
if isWithdraw {
if pd.IsWithdraw() {
@@ -221,7 +216,13 @@ func (pd *PathDefault) clone(isWithdraw bool) Path {
nlri = &bgp.WithdrawnRoute{pd.nlri.(*bgp.NLRInfo).IPAddrPrefix}
}
}
- return CreatePath(pd.source, nlri, pd.pathAttrs, isWithdraw, pd.timestamp)
+
+ newPathAttrs := make([]bgp.PathAttributeInterface, len(pd.pathAttrs))
+ for i, v := range pd.pathAttrs {
+ newPathAttrs[i] = v
+ }
+
+ return CreatePath(pd.source, nlri, newPathAttrs, isWithdraw, pd.timestamp)
}
func (pd *PathDefault) GetRouteFamily() bgp.RouteFamily {
@@ -377,7 +378,7 @@ func NewIPv6Path(source *PeerInfo, nlri bgp.AddrPrefixInterface, isWithdraw bool
return ipv6Path
}
-func (ipv6p *IPv6Path) clone(isWithdraw bool) Path {
+func (ipv6p *IPv6Path) Clone(isWithdraw bool) Path {
nlri := ipv6p.nlri
return CreatePath(ipv6p.source, nlri, ipv6p.pathAttrs, isWithdraw, ipv6p.PathDefault.timestamp)
}
@@ -433,7 +434,7 @@ func NewIPv4VPNPath(source *PeerInfo, nlri bgp.AddrPrefixInterface, isWithdraw b
return ipv4VPNPath
}
-func (ipv4vpnp *IPv4VPNPath) clone(isWithdraw bool) Path {
+func (ipv4vpnp *IPv4VPNPath) Clone(isWithdraw bool) Path {
nlri := ipv4vpnp.nlri
return CreatePath(ipv4vpnp.source, nlri, ipv4vpnp.pathAttrs, isWithdraw, ipv4vpnp.PathDefault.timestamp)
}
@@ -490,7 +491,7 @@ func NewEVPNPath(source *PeerInfo, nlri bgp.AddrPrefixInterface, isWithdraw bool
return EVPNPath
}
-func (evpnp *EVPNPath) clone(isWithdraw bool) Path {
+func (evpnp *EVPNPath) Clone(isWithdraw bool) Path {
nlri := evpnp.nlri
return CreatePath(evpnp.source, nlri, evpnp.pathAttrs, isWithdraw, evpnp.PathDefault.timestamp)
}
diff --git a/table/table_manager.go b/table/table_manager.go
index f7619d11..abb00cf9 100644
--- a/table/table_manager.go
+++ b/table/table_manager.go
@@ -204,7 +204,7 @@ func (manager *TableManager) calculate(destinationList []Destination) ([]Path, e
p := destination.getBestPath()
destination.setOldBestPath(p)
- newPaths = append(newPaths, p.clone(true))
+ newPaths = append(newPaths, p.Clone(true))
}
destination.setBestPath(nil)
} else {