diff options
-rw-r--r-- | table/destination.go | 25 | ||||
-rw-r--r-- | table/table.go | 5 |
2 files changed, 29 insertions, 1 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, + }) +} diff --git a/table/table.go b/table/table.go index 656f132c..28799a24 100644 --- a/table/table.go +++ b/table/table.go @@ -56,7 +56,10 @@ func NewTableDefault(scope_id int) *TableDefault { } func cidr2prefix(cidr string) patricia.Prefix { - _, n, _ := net.ParseCIDR(cidr) + _, n, err := net.ParseCIDR(cidr) + if err != nil { + return patricia.Prefix(cidr) + } var buffer bytes.Buffer for i := 0; i < len(n.IP); i++ { buffer.WriteString(fmt.Sprintf("%08b", n.IP[i])) |