mirror of
https://github.com/faucetsdn/ryu.git
synced 2026-05-08 13:56:09 +02:00
bgp: fix logic for checking BGP capability
BGPOpen that is set to sent_open_msg and recv_open_msg doesn't have caps and BGP capabilities are stored in opt_param as List. I changed the way of checking BGP capabilities. Signed-off-by: Hiroshi Yokoi <yokoi.hiroshi@po.ntts.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
86192caf07
commit
bd9ae63bca
@ -174,12 +174,17 @@ class BgpProtocol(Protocol, Activity):
|
||||
raise ValueError('Did not yet receive peers open message.')
|
||||
|
||||
err_cap_enabled = False
|
||||
local_cap = self.sent_open_msg.caps
|
||||
peer_cap = self.recv_open_msg.caps
|
||||
local_caps = self.sent_open_msg.opt_param
|
||||
peer_caps = self.recv_open_msg.opt_param
|
||||
|
||||
local_cap = [cap for cap in local_caps
|
||||
if cap.cap_code == BGP_CAP_ENHANCED_ROUTE_REFRESH]
|
||||
peer_cap = [cap for cap in peer_caps
|
||||
if cap.cap_code == BGP_CAP_ENHANCED_ROUTE_REFRESH]
|
||||
|
||||
# Both local and peer should advertise ERR capability for it to be
|
||||
# enabled.
|
||||
if (local_cap.get(BGP_CAP_ENHANCED_ROUTE_REFRESH) and
|
||||
peer_cap.get(BGP_CAP_ENHANCED_ROUTE_REFRESH)):
|
||||
if local_cap and peer_cap:
|
||||
err_cap_enabled = True
|
||||
|
||||
return err_cap_enabled
|
||||
@ -218,19 +223,22 @@ class BgpProtocol(Protocol, Activity):
|
||||
|
||||
@property
|
||||
def negotiated_afs(self):
|
||||
local_caps = self.sent_open_msg.caps
|
||||
remote_caps = self.recv_open_msg.caps
|
||||
local_caps = self.sent_open_msg.opt_param
|
||||
remote_caps = self.recv_open_msg.opt_param
|
||||
|
||||
local_mbgp_cap = [cap for cap in local_caps
|
||||
if cap.cap_code == BGP_CAP_MULTIPROTOCOL]
|
||||
remote_mbgp_cap = [cap for cap in remote_caps
|
||||
if cap.cap_code == BGP_CAP_MULTIPROTOCOL]
|
||||
|
||||
local_mbgp_cap = local_caps.get(BGP_CAP_MULTIPROTOCOL)
|
||||
remote_mbgp_cap = remote_caps.get(BGP_CAP_MULTIPROTOCOL)
|
||||
# Check MP_BGP capabilities were advertised.
|
||||
if local_mbgp_cap and remote_mbgp_cap:
|
||||
local_families = {
|
||||
(peer_cap.route_family.afi, peer_cap.route_family.safi)
|
||||
(peer_cap.afi, peer_cap.safi)
|
||||
for peer_cap in local_mbgp_cap
|
||||
}
|
||||
remote_families = {
|
||||
(peer_cap.route_family.afi, peer_cap.route_family.safi)
|
||||
(peer_cap.afi, peer_cap.safi)
|
||||
for peer_cap in remote_mbgp_cap
|
||||
}
|
||||
afi_safi = local_families.intersection(remote_families)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user