1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

addons: dhcp: add vrf awareness

Ticket: CM-10292, CM-10282
Reviewed By: dsa, nikhil, julien
Testing Done: Tested dhcp config on an vrf slave

- Add support for policy module_globals variable
  "vrf-exec-cmd-prefix". It is read into per module
  self.vrf_exec_cmd_prefix variable

- If self.vrf_exec_cmd_prefix is present and interface is a
  vrf slave, use ifupdown2 will call such command in vrf
  context using:
    "%s %s %s" %(<vrf-exec-cmd-prefix>, <vrfname>, <cmd>)

- This also fixes calling of dhcp refresh when a dhcp slave is
  removed from a vrf

Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
This commit is contained in:
Roopa Prabhu
2016-04-05 16:11:41 -07:00
parent f50f16fa71
commit 717cee3187
4 changed files with 64 additions and 28 deletions

View File

@@ -313,9 +313,13 @@ class vrf(moduleBase):
self.ipcmd.link_set(ifacename, 'master', vrfname)
return
def _down_dhcp_slave(self, ifaceobj):
def _down_dhcp_slave(self, ifaceobj, vrfname):
try:
self.dhclientcmd.release(ifaceobj.name)
dhclient_cmd_prefix = None
if vrfname and self.vrf_exec_cmd_prefix:
dhclient_cmd_prefix = '%s %s' %(self.vrf_exec_cmd_prefix,
vrfname)
self.dhclientcmd.release(ifaceobj.name, dhclient_cmd_prefix)
except:
# ignore any dhclient release errors
pass
@@ -327,7 +331,7 @@ class vrf(moduleBase):
self.vrf_mgmt_devname == vrfname):
self._kill_ssh_connections(ifaceobj.name)
if self._is_dhcp_slave(ifaceobj):
self._down_dhcp_slave(ifaceobj)
self._down_dhcp_slave(ifaceobj, vrfname)
def _up_vrf_slave(self, ifacename, vrfname, ifaceobj=None,
ifaceobj_getfunc=None, vrf_exists=False):
@@ -681,6 +685,7 @@ class vrf(moduleBase):
# check if we were a slave before
master = self.ipcmd.link_get_master(ifaceobj.name)
if master:
self._iproute2_vrf_map_initialize()
if self._is_vrf_dev(master):
self._down_vrf_slave(ifaceobj.name, ifaceobj,
master)
@@ -701,7 +706,7 @@ class vrf(moduleBase):
vrf_table = self._get_iproute2_vrf_table(ifaceobj.name)
try:
self.exec_command('/usr/cumulus/bin/cl-vrf service disable %s' %ifaceobj.name)
self.exec_command('/usr/bin/vrf service disable %s' %ifaceobj.name)
except Exception, e:
self.logger.info('%s: %s' %(ifaceobj.name, str(e)))
pass