From 355e5790dfd4a5941cd5c93586473819cc7e3bbd Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Tue, 20 Jan 2015 16:02:32 +0900 Subject: table: remove Path's best Path can be shared in multiple local ribs so having "best" in Path is wrong. The info "best" path is stored in Destination so CLI uses it. Signed-off-by: FUJITA Tomonori --- table/destination.go | 28 ++++++++++++++++++---------- table/path.go | 8 -------- 2 files changed, 18 insertions(+), 18 deletions(-) (limited to 'table') diff --git a/table/destination.go b/table/destination.go index e602deb0..865ab03e 100644 --- a/table/destination.go +++ b/table/destination.go @@ -96,19 +96,27 @@ func NewDestinationDefault(nlri bgp.AddrPrefixInterface) *DestinationDefault { func (dd *DestinationDefault) MarshalJSON() ([]byte, error) { prefix := dd.getNlri().(*bgp.NLRInfo).Prefix - for _, p := range dd.knownPathList { - if p == dd.getBestPath() { - p.setBest(true) - } else { - p.setBest(false) + + idx := func() int { + for i, p := range dd.knownPathList { + if p == dd.getBestPath() { + return i + } } - } + log.WithFields(log.Fields{ + "Topic": "Table", + "Key": prefix.String(), + }).Panic("no best path") + return 0 + }() return json.Marshal(struct { - Prefix string - Paths []Path + Prefix string + Paths []Path + BestPathIdx int }{ - Prefix: prefix.String(), - Paths: dd.knownPathList, + Prefix: prefix.String(), + Paths: dd.knownPathList, + BestPathIdx: idx, }) } diff --git a/table/path.go b/table/path.go index 276555ee..027630cb 100644 --- a/table/path.go +++ b/table/path.go @@ -40,7 +40,6 @@ type Path interface { setMedSetByTargetNeighbor(medSetByTargetNeighbor bool) getMedSetByTargetNeighbor() bool clone(IsWithdraw bool) Path - setBest(isBest bool) MarshalJSON() ([]byte, error) } @@ -52,7 +51,6 @@ type PathDefault struct { nlri bgp.AddrPrefixInterface pathAttrs []bgp.PathAttributeInterface medSetByTargetNeighbor bool - isBest bool } func NewPathDefault(rf bgp.RouteFamily, source *PeerInfo, nlri bgp.AddrPrefixInterface, nexthop net.IP, isWithdraw bool, pattrs []bgp.PathAttributeInterface, medSetByTargetNeighbor bool) *PathDefault { @@ -73,21 +71,15 @@ func NewPathDefault(rf bgp.RouteFamily, source *PeerInfo, nlri bgp.AddrPrefixInt return path } -func (pd *PathDefault) setBest(isBest bool) { - pd.isBest = isBest -} - func (pd *PathDefault) MarshalJSON() ([]byte, error) { return json.Marshal(struct { Network string Nexthop string Attrs []bgp.PathAttributeInterface - Best string }{ Network: pd.getPrefix(), Nexthop: pd.nexthop.String(), Attrs: pd.getPathAttrs(), - Best: fmt.Sprint(pd.isBest), }) } -- cgit v1.2.3