Pass VF MAC address to ovs to set in case of netdev VIFHostDevice. In case of DPDK representor port, Nova will pass through the VF PCI as a hostdev and os-vif should pass the MAC to ovs as it would be responsible for setting its MAC. Moreover, when not using dpdk, libvirt does the mac cleanup, since the VF is managed by libvirt, but when using DPDK, libvirt does not manage the VF so we need to cleanup MAC address in os-vif. Change-Id: I5368c318cc0cfd7b5644d3da0dccbce7a48d6a85 Closes-Bug: #1829734
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
import random
|
|
|
|
|
|
def get_random_mac(base_mac):
|
|
"""Get a random MAC address string of the specified base format.
|
|
The first 3 octets will remain unchanged and the others will be
|
|
randomly generated.
|
|
|
|
:param base_mac: Base MAC address represented by an array of 6 strings/int
|
|
:returns: The MAC address string.
|
|
"""
|
|
|
|
mac = [int(base_mac[0], 16), int(base_mac[1], 16),
|
|
int(base_mac[2], 16), random.getrandbits(8),
|
|
random.getrandbits(8), random.getrandbits(8)]
|
|
return ':'.join(["%02x" % byte for byte in mac])
|
|
|
|
|
|
def set_mask(data, mask):
|
|
return data | mask
|
|
|
|
|
|
def unset_mask(data, mask, bit_size=32):
|
|
return data & ((2 ** bit_size - 1) ^ mask)
|