Because the NLRI_CLASS of the VRF EVPN Table is the same as the
NLRI_CLASS of the Global EVPN Table, the str representation can not
be distinguished with 'formatted_nlri_str' format.
So, 'show vrf' commands on the SSH console returns the str outputs
with Route Distinguisher (RD) even if the route on the VRF Table
can be identified without RD value.

This patch implements the str representation properties to output
BGP routes on SSH console.

Current: RD '65001:100' is duplicated
  bgpd> show vrf all
  VPN: ('65001:100', 'evpn')
   *>  65001:100:multicast_etag(ethernet_tag_id:300,ip_addr:10.10.1.0) None     
0.0.0.0              Only Path                     ?

With this patch:
  bgpd> show vrf all
  VPN: ('65001:100', 'evpn')
   *>  multicast_etag(ethernet_tag_id:300,ip_addr:10.10.1.0) None     0.0.0.0   
           Only Path                     ?

Signed-off-by: IWASE Yusuke <iwase.yusu...@gmail.com>
---
 ryu/services/protocols/bgp/info_base/base.py        |  8 ++++++++
 ryu/services/protocols/bgp/info_base/vrf.py         | 14 ++++++++++++++
 ryu/services/protocols/bgp/operator/internal_api.py |  4 ++--
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/ryu/services/protocols/bgp/info_base/base.py 
b/ryu/services/protocols/bgp/info_base/base.py
index 3cdf1a5..c113079 100644
--- a/ryu/services/protocols/bgp/info_base/base.py
+++ b/ryu/services/protocols/bgp/info_base/base.py
@@ -337,6 +337,10 @@ class Destination(object):
         return self._nlri
 
     @property
+    def nlri_str(self):
+        return self._nlri.formatted_nlri_str
+
+    @property
     def best_path(self):
         return self._best_path
 
@@ -778,6 +782,10 @@ class Path(object):
         return self._nlri
 
     @property
+    def nlri_str(self):
+        return self._nlri.formatted_nlri_str
+
+    @property
     def is_withdraw(self):
         return self._is_withdraw
 
diff --git a/ryu/services/protocols/bgp/info_base/vrf.py 
b/ryu/services/protocols/bgp/info_base/vrf.py
index 17f6b56..620d522 100644
--- a/ryu/services/protocols/bgp/info_base/vrf.py
+++ b/ryu/services/protocols/bgp/info_base/vrf.py
@@ -299,6 +299,13 @@ class VrfDest(Destination):
         super(VrfDest, self).__init__(table, nlri)
         self._route_dist = self._table.vrf_conf.route_dist
 
+    @property
+    def nlri_str(self):
+        # Returns `prefix` without the route distinguisher value, because
+        # a destination in VRF space can be identified without the route
+        # distinguisher.
+        return self._nlri.prefix
+
     def _best_path_lost(self):
         # Have to send update messages for withdraw of best-path to Network
         # controller or Global table.
@@ -483,6 +490,13 @@ class VrfPath(Path):
     def label_list(self):
         return self._label_list[:]
 
+    @property
+    def nlri_str(self):
+        # Returns `prefix` without the route distinguisher value, because
+        # a destination in VRF space can be identified without the route
+        # distinguisher.
+        return self._nlri.prefix
+
     @staticmethod
     def create_puid(route_dist, ip_prefix):
         assert route_dist and ip_prefix
diff --git a/ryu/services/protocols/bgp/operator/internal_api.py 
b/ryu/services/protocols/bgp/operator/internal_api.py
index e624c82..ae18f42 100644
--- a/ryu/services/protocols/bgp/operator/internal_api.py
+++ b/ryu/services/protocols/bgp/operator/internal_api.py
@@ -101,7 +101,7 @@ class InternalApi(object):
 
     def _dst_to_dict(self, dst):
         ret = {'paths': [],
-               'prefix': dst.nlri.formatted_nlri_str}
+               'prefix': dst.nlri_str}
 
         def _path_to_dict(dst, path):
 
@@ -143,7 +143,7 @@ class InternalApi(object):
 
             return {'best': (path == dst.best_path),
                     'bpr': bpr,
-                    'prefix': path.nlri.formatted_nlri_str,
+                    'prefix': path.nlri_str,
                     'labels': labels,
                     'nexthop': nexthop,
                     'metric': med,
-- 
2.7.4


------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to