summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--table/destination.go25
-rw-r--r--table/table.go5
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]))