Skip to content

Commit

Permalink
DM: Fix for configuring ebgp AS attribute, irb GW address
Browse files Browse the repository at this point in the history
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
  • Loading branch information
sbalineni committed Jul 17, 2015
1 parent 0c38838 commit 197c307
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
8 changes: 5 additions & 3 deletions src/config/device-manager/device_manager/db.py
Expand Up @@ -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()
Expand Down Expand Up @@ -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):
Expand Down
25 changes: 15 additions & 10 deletions src/config/device-manager/device_manager/physical_router_config.py
Expand Up @@ -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"
Expand Down Expand Up @@ -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

Expand All @@ -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'))
Expand Down

0 comments on commit 197c307

Please sign in to comment.