summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp>2014-07-31 14:59:48 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2014-07-31 15:05:15 +0900
commitcc3c00b663b99a7aa8ef381d06febfbab9185443 (patch)
tree22a2c4413439732e0248a99e44b3ddc5ac949952
parent6630328fcc655493e12b08fd59b8c75792248bae (diff)
bgp: add parameter for site_of_origins to neighbor_add and vrf_add method
Fujita-san, thank you for your comment and finding the bug that causes test case failure. I fixed the second and resend the whole patch. The first is the addition of site_of_origins parameter to neighbor_add and vrf_add method and fixes to some import error. Signed-off-by: Hiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/services/protocols/bgp/bgpspeaker.py13
-rw-r--r--ryu/services/protocols/bgp/info_base/vrf.py2
-rw-r--r--ryu/services/protocols/bgp/peer.py3
3 files changed, 16 insertions, 2 deletions
diff --git a/ryu/services/protocols/bgp/bgpspeaker.py b/ryu/services/protocols/bgp/bgpspeaker.py
index cc6d1224..01c4a2dd 100644
--- a/ryu/services/protocols/bgp/bgpspeaker.py
+++ b/ryu/services/protocols/bgp/bgpspeaker.py
@@ -48,6 +48,7 @@ from ryu.services.protocols.bgp.rtconf.base import CAP_MBGP_IPV6
from ryu.services.protocols.bgp.rtconf.base import CAP_MBGP_VPNV4
from ryu.services.protocols.bgp.rtconf.base import CAP_MBGP_VPNV6
from ryu.services.protocols.bgp.rtconf.base import MULTI_EXIT_DISC
+from ryu.services.protocols.bgp.rtconf.base import SITE_OF_ORIGINS
from ryu.services.protocols.bgp.rtconf.neighbors import DEFAULT_CAP_MBGP_IPV4
from ryu.services.protocols.bgp.rtconf.neighbors import DEFAULT_CAP_MBGP_VPNV4
from ryu.services.protocols.bgp.rtconf.neighbors import DEFAULT_CAP_MBGP_VPNV6
@@ -175,7 +176,8 @@ class BGPSpeaker(object):
enable_ipv4=DEFAULT_CAP_MBGP_IPV4,
enable_vpnv4=DEFAULT_CAP_MBGP_VPNV4,
enable_vpnv6=DEFAULT_CAP_MBGP_VPNV6,
- next_hop=None, password=None, multi_exit_disc=None):
+ next_hop=None, password=None, multi_exit_disc=None,
+ site_of_origins=None):
""" This method registers a new neighbor. The BGP speaker tries to
establish a bgp session with the peer (accepts a connection
from the peer and also tries to connect to it).
@@ -206,6 +208,8 @@ class BGPSpeaker(object):
The default is None and if not specified, MED value is
not sent to the neighbor. It must be an integer.
+ ``site_of_origins`` specifies site_of_origin values.
+ This parameter must be a list of string.
"""
bgp_neighbor = {}
bgp_neighbor[neighbors.IP_ADDRESS] = address
@@ -230,6 +234,9 @@ class BGPSpeaker(object):
if multi_exit_disc:
bgp_neighbor[MULTI_EXIT_DISC] = multi_exit_disc
+ if site_of_origins:
+ bgp_neighbor[SITE_OF_ORIGINS] = site_of_origins
+
call('neighbor.create', **bgp_neighbor)
def neighbor_del(self, address):
@@ -332,12 +339,16 @@ class BGPSpeaker(object):
``export_rts`` specifies route targets to be exported.
+ ``site_of_origins`` specifies site_of_origin values.
+ This parameter must be a list of string.
+
"""
vrf = {}
vrf[vrfs.ROUTE_DISTINGUISHER] = route_dist
vrf[vrfs.IMPORT_RTS] = import_rts
vrf[vrfs.EXPORT_RTS] = export_rts
+ vrf[vrfs.SITE_OF_ORIGINS] = site_of_origins
call('vrf.create', **vrf)
def vrf_del(self, route_dist):
diff --git a/ryu/services/protocols/bgp/info_base/vrf.py b/ryu/services/protocols/bgp/info_base/vrf.py
index 85a03992..35c85cb5 100644
--- a/ryu/services/protocols/bgp/info_base/vrf.py
+++ b/ryu/services/protocols/bgp/info_base/vrf.py
@@ -222,7 +222,7 @@ class VrfTable(Table):
local_administrator=int(local_admin),
subtype=subtype))
for soo in vrf_conf.soo_list:
- as_num, local_admin = rt.split(':')
+ as_num, local_admin = soo.split(':')
subtype = 3
communities.append(BGPTwoOctetAsSpecificExtendedCommunity(
as_number=int(as_num),
diff --git a/ryu/services/protocols/bgp/peer.py b/ryu/services/protocols/bgp/peer.py
index a0a2314f..d8eec52d 100644
--- a/ryu/services/protocols/bgp/peer.py
+++ b/ryu/services/protocols/bgp/peer.py
@@ -79,6 +79,9 @@ from ryu.lib.packet.bgp import BGP_ATTR_TYPE_MULTI_EXIT_DISC
from ryu.lib.packet.bgp import BGP_ATTR_TYPE_COMMUNITIES
from ryu.lib.packet.bgp import BGP_ATTR_TYPE_EXTENDED_COMMUNITIES
+from ryu.lib.packet.bgp import BGPTwoOctetAsSpecificExtendedCommunity
+from ryu.lib.packet.bgp import BGPIPv4AddressSpecificExtendedCommunity
+
LOG = logging.getLogger('bgpspeaker.peer')