From 197c30729d2c6854b106f92e6c668e1db3f3e5b3 Mon Sep 17 00:00:00 2001 From: sbalineni Date: Thu, 16 Jul 2015 14:44:34 -0700 Subject: [PATCH] DM: Fix for configuring ebgp AS attribute, irb GW address Currently DM is mistakenly looking for AS value in session parameters, instead it should find it in Router Params list. Also fixes the issue of hard coded prefix len of IRB GW address Change-Id: Ie83427d9fd923d1592c6536532836bf9dc542b15 Closes-Bug: #1475365 Closes-Bug: #1475452 --- .../device-manager/device_manager/db.py | 8 +++--- .../device_manager/physical_router_config.py | 25 +++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/config/device-manager/device_manager/db.py b/src/config/device-manager/device_manager/db.py index c1ce461614d..e50f276eb41 100644 --- a/src/config/device-manager/device_manager/db.py +++ b/src/config/device-manager/device_manager/db.py @@ -175,14 +175,14 @@ def push_config(self): self.config_manager.reset_bgp_config() bgp_router = BgpRouterDM.get(self.bgp_router) if bgp_router: - for peer_uuid, params in bgp_router.bgp_routers.items(): + for peer_uuid, attr in bgp_router.bgp_routers.items(): peer = BgpRouterDM.get(peer_uuid) if peer is None: continue external = (bgp_router.params['autonomous_system'] != peer.params['autonomous_system']) self.config_manager.add_bgp_peer(peer.params['address'], - params, external) + peer.params, attr, external) self.config_manager.set_bgp_config(bgp_router.params) self.config_manager.set_global_routing_options(bgp_router.params) bgp_router_ips = bgp_router.get_all_bgp_router_ips() @@ -626,7 +626,9 @@ def update(self, obj=None): self.prefixes.add('%s/%d' % (subnet['subnet']['ip_prefix'], subnet['subnet']['ip_prefix_len']) ) - self.gateways.add(subnet['default_gateway']) + self.gateways.add('%s/%d' % (subnet['default_gateway'], + subnet['subnet']['ip_prefix_len']) + ) # end update def get_vrf_name(self, vrf_type): diff --git a/src/config/device-manager/device_manager/physical_router_config.py b/src/config/device-manager/device_manager/physical_router_config.py index ddc14cf3550..4285ee74aed 100644 --- a/src/config/device-manager/device_manager/physical_router_config.py +++ b/src/config/device-manager/device_manager/physical_router_config.py @@ -343,7 +343,7 @@ def add_routing_instance(self, ri_name, import_targets, export_targets, inet = etree.SubElement(family, "inet") for gateway in gateways: addr = etree.SubElement(inet, "address") - etree.SubElement(addr, "name").text = gateway + "/24" + etree.SubElement(addr, "name").text = gateway lo_intf = etree.SubElement(interfaces_config, "interface") etree.SubElement(lo_intf, "name").text = "lo0" @@ -541,11 +541,14 @@ def delete_bgp_config(self): self.bgp_config_sent = False # end delete_config - def add_bgp_peer(self, router, params, external): + def add_bgp_peer(self, router, params, attr, external): + peer_data = {} + peer_data['params'] = params + peer_data['attr'] = attr if external: - self.external_peers[router] = params + self.external_peers[router] = peer_data else: - self.bgp_peers[router] = params + self.bgp_peers[router] = peer_data self.send_bgp_config() # end add_peer @@ -560,19 +563,21 @@ def delete_bgp_peer(self, router): # end delete_bgp_peer def _get_neighbor_config_xml(self, bgp_config, peers): - for peer, params in peers.items(): + for peer, peer_data in peers.items(): + params = peer_data.get('params', {}) + attr = peer_data.get('attr', {}) nbr = etree.SubElement(bgp_config, "neighbor") etree.SubElement(nbr, "name").text = peer - bgp_sessions = params.get('session') + bgp_sessions = attr.get('session') if bgp_sessions: # for now assume only one session session_attrs = bgp_sessions[0].get('attributes', []) - for attr in session_attrs: + for session_attr in session_attrs: # For not, only consider the attribute if bgp-router is # not specified - if attr.get('bgp_router') is None: - self._add_family_etree(nbr, attr) - self.add_bgp_auth_config(nbr, attr) + if session_attr.get('bgp_router') is None: + self._add_family_etree(nbr, session_attr) + self.add_bgp_auth_config(nbr, session_attr) break if params.get('autonomous_system') is not None: etree.SubElement(nbr, "peer-as").text = str(params.get('autonomous_system'))