self.vrf_fix_local_table = True
self.vrf_count = 0
self.vrf_helper = policymanager.policymanager_api.get_module_globals(module_name=self.__class__.__name__, attr='vrf-helper')
-
+ self.vrf_close_socks_on_down = policymanager.policymanager_api.get_module_globals(module_name=self.__class__.__name__, attr='vrf-close-socks-on-down')
self.warn_on_vrf_map_write_err = True
def _iproute2_vrf_map_initialize(self, writetodisk=True):
vrf_table,
mode))
+ def _close_sockets(self, ifaceobj, ifindex):
+ if not self.vrf_close_socks_on_down:
+ return
+
+ try:
+ utils.exec_command('/bin/ss -aK \"dev == %s\"'
+ %ifindex)
+ except Exception, e:
+ self.logger.info('%s: closing socks using ss'
+ ' failed (%s)\n' %(ifaceobj.name, str(e)))
+ pass
+
def _down_vrf_dev(self, ifaceobj, vrf_table, ifaceobj_getfunc=None):
+ if not self.ipcmd.link_exists(ifaceobj.name):
+ return
+
if vrf_table == 'auto':
vrf_table = self._get_iproute2_vrf_table(ifaceobj.name)
self.logger.info('%s: %s' %(ifaceobj.name, str(e)))
pass
+ ifindex = self.ipcmd.link_get_ifindex(ifaceobj.name)
+
try:
self.ipcmd.link_delete(ifaceobj.name)
except Exception, e:
self.logger.info('%s: %s' %(ifaceobj.name, str(e)))
pass
+ self._close_sockets(ifaceobj, ifindex)
+
try:
self._iproute2_vrf_table_entry_del(vrf_table)
except Exception, e:
return True
return os.path.exists('/sys/class/net/%s' %ifacename)
+ def link_get_ifindex(self, ifacename):
+ if ifupdownflags.flags.DRYRUN:
+ return True
+ return self.read_file_oneline('/sys/class/net/%s/ifindex' %ifacename)
+
def is_vlan_device_by_name(self, ifacename):
if re.search(r'\.', ifacename):
return True