summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIWASE Yusuke <iwase.yusuke0@gmail.com>2016-08-22 17:21:42 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-08-25 13:34:19 +0900
commit37df91f7f46407fe0b1f12d56f6c3b71d69156cd (patch)
tree82c4c69d1d1e814a09c8071e8932501e3ce828db
parentc2c421bddd1c9dce3b1d600eda743e7022516545 (diff)
BGPSpeaker: Suppress RD in EVPN VRF on SSH console
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.yusuke0@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/services/protocols/bgp/info_base/base.py8
-rw-r--r--ryu/services/protocols/bgp/info_base/vrf.py14
-rw-r--r--ryu/services/protocols/bgp/operator/internal_api.py4
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 3cdf1a50..c1130798 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 17f6b56a..620d5226 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 e624c826..ae18f427 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,