import socket
import subprocess
+from string import maketrans
from ipaddr import IPNetwork, IPv6Network
try:
DEFAULT_IP_METRIC = 1024
ADDR_METRIC_SUPPORT = None
+ mac_translate_tab = maketrans(":.-,", " ")
+
def __init__(self, *args, **kargs):
utilsBase.__init__(self, *args, **kargs)
LinkUtils.ADDR_METRIC_SUPPORT = False
self.logger.info('address metric support: KO')
+ @classmethod
+ def mac_str_to_int(cls, mac):
+ mac_int = 0
+ if mac:
+ for n in mac.translate(cls.mac_translate_tab).split():
+ mac_int += int(n, 16)
+ return mac_int
+
@classmethod
def addr_metric_support(cls):
return cls.ADDR_METRIC_SUPPORT
def link_set_hwaddress(self, ifacename, hwaddress, force=False):
if not force:
- if self._cache_check('link', [ifacename, 'hwaddress'], hwaddress):
- return
+ link_hwaddress = self.link_get_hwaddress(ifacename)
+
+ if self.mac_str_to_int(link_hwaddress) == self.mac_str_to_int(hwaddress):
+ return False
+
self.link_down(ifacename)
cmd = 'link set dev %s address %s' % (ifacename, hwaddress)
if LinkUtils.ipbatch:
utils.exec_command('%s %s' % (utils.ip_cmd, cmd))
self.link_up(ifacename)
self._cache_update([ifacename, 'hwaddress'], hwaddress)
+ return True
def link_set_mtu(self, ifacename, mtu):
if ifupdownflags.flags.DRYRUN: