summaryrefslogtreecommitdiffhomepage
path: root/table/destination.go
diff options
context:
space:
mode:
authorISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>2015-04-03 07:44:32 +0000
committerISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>2015-04-03 08:02:56 +0000
commitcd0d357a553bafa977a86e5fcc78c9f2a301db1a (patch)
tree3490984d4e6c3cb807c688298122cdfa97c8dc23 /table/destination.go
parent8bd986b7e89cb28763aec75e1a14357e38a49e0b (diff)
table: support displaying evpn destination through cli
evpn nlri key is not expressed in CIDR format. in that case give up sorting. we can think later how to sort evpn nlri after we decided the way to express evpn nlri key(current evpn nlri key is insufficient to keep evpn nlris unique in evpn table). this patch also add a MarshalJSON method to EVPNDestination for displaying evpn routes through cli Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'table/destination.go')
-rw-r--r--table/destination.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/table/destination.go b/table/destination.go
index a79daa2b..23c5c00f 100644
--- a/table/destination.go
+++ b/table/destination.go
@@ -1005,3 +1005,28 @@ func NewEVPNDestination(nlri bgp.AddrPrefixInterface) *EVPNDestination {
//need Processing
return EVPNDestination
}
+
+func (evpnd *EVPNDestination) MarshalJSON() ([]byte, error) {
+ nlri := evpnd.getNlri().(*bgp.EVPNNLRI)
+ idx := func() int {
+ for i, p := range evpnd.DestinationDefault.knownPathList {
+ if p == evpnd.DestinationDefault.getBestPath() {
+ return i
+ }
+ }
+ log.WithFields(log.Fields{
+ "Topic": "Table",
+ "Key": nlri.String(),
+ }).Panic("no best path")
+ return 0
+ }()
+ return json.Marshal(struct {
+ Prefix string
+ Paths []Path
+ BestPathIdx int
+ }{
+ Prefix: nlri.String(),
+ Paths: evpnd.knownPathList,
+ BestPathIdx: idx,
+ })
+}