From 0597f5225609cf00c3374ece5bdcdebce9787b49 Mon Sep 17 00:00:00 2001 From: sbalineni Date: Thu, 16 Jul 2015 14:37:59 -0700 Subject: [PATCH] DM: Fix for configuring ebgp AS attribute, irb gw addr 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 irb gateway address Closes-Bug: #1475365 Closes-Bug: #1475452 Change-Id: I1c77829ccb0093d697bb53aa3d93d17b7b88aafa --- .../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 4dd10ba64ce..d238559ecf9 100644 --- a/src/config/device-manager/device_manager/db.py +++ b/src/config/device-manager/device_manager/db.py @@ -172,14 +172,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() @@ -623,7 +623,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'))