import re
import os
import random
def _random_mac():
macparts = [2]
macparts.extend([random.randint(0x00, 0xff) for i in range(5)])
return ':'.join(map(lambda x: "%02x" % x, macparts))
def get_mac(lsp=None, lrp=None):
_cmd = "ovn-nbctl list logical-switch-port "
if lsp:
_cmd = _cmd + lsp
lsp_info = os.popen(_cmd).read()
addresses = re.findall(r'addresses : \[\"(.*?)\"\]',
lsp_info, re.M | re.S)
all_macs = [addr.split(' ') for addr in addresses]
_cmd = "ovn-nbctl list logical-router-port "
if lrp:
_cmd = _cmd + lrp
lrp_info = os.popen(_cmd).read()
all_macs.extend(re.findall(r'mac : \"(.*?)\"',
lrp_info, re.M | re.S))
for _ in range(99):
mac = _random_mac()
if mac not in all_macs:
return mac
raise Exception(
'Unable to allocate an unused mac after 100 retries'
)
print(get_mac())
ovn:生成ovirt-provider-ovn风格的mac地址
于 2023-02-08 15:46:11 首次发布