in azurelinuxagent/pa/rdma/rdma.py [0:0]
def update_iboip_interfaces(self, mac_ip_array):
net_dir = "/sys/class/net"
nics = os.listdir(net_dir)
count = 0
for nic in nics:
mac_addr = None
with open(os.path.join(net_dir, nic, "address")) as address_file:
mac_addr = address_file.read()
if not mac_addr:
logger.error("RDMA: can't read address for device {0}".format(nic))
continue
mac_addr = mac_addr.upper()
# if this is an IB interface, match IB-specific regex
if re.match(r"ib\w+", nic):
match = re.match(r".+(\w\w):(\w\w):(\w\w):\w\w:\w\w:(\w\w):(\w\w):(\w\w)\n", mac_addr)
else:
match = re.match(r"^(\w\w):(\w\w):(\w\w):(\w\w):(\w\w):(\w\w)$", mac_addr)
if not match:
logger.error("RDMA: failed to parse address for device {0} address {1}".format(nic, mac_addr))
continue
# format an MAC address without :
mac_addr = ""
mac_addr = mac_addr.join(match.groups(0))
for mac_ip in mac_ip_array:
if mac_ip[0] == mac_addr:
ret = 0
try:
# bring up the interface and set its IP address
ip_command = ["ip", "link", "set", nic, "up"]
shellutil.run_command(ip_command)
ip_command = ["ip", "addr", "add", "{0}/16".format(mac_ip[1]), "dev", nic]
shellutil.run_command(ip_command)
except shellutil.CommandError as error:
ret = error.returncode
if ret == 0:
logger.info("RDMA: set address {0} to device {1}".format(mac_ip[1], nic))
if ret and ret != 2:
# return value 2 means the address is already set
logger.error("RDMA: failed to set IP address {0} on device {1}".format(mac_ip[1], nic))
else:
count += 1
break
return count