
Commit If2539f94b5479f0d6afa64c973082cbe8c5309ac made get_random_mac more versatile. However, in the process it introduced incompatibilities with the current behavior of randomizing mac as outlined in the respective bug report. This patch reverts the logic of get_random_mac back to its original behavior for backwards compatibility as we suspect no one is relying on the new behavior from If2539f94b5479f0d6afa64c973082cbe8c5309ac. Change-Id: I047ff3e17c19fc80a47d3c73ee955103a71d2b30 Closes-Bug: #1720046
58 lines
1.9 KiB
Python
58 lines
1.9 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
|
|
import socket
|
|
|
|
from neutron_lib import constants
|
|
|
|
|
|
def get_hostname():
|
|
"""Get the hostname of the system.
|
|
|
|
:returns: The hostname of the system.
|
|
"""
|
|
return socket.gethostname()
|
|
|
|
|
|
def get_random_mac(base_mac):
|
|
"""Get a random MAC address string of the specified base format.
|
|
|
|
The first 3 octets will remain unchanged. If the 4th octet is not
|
|
00, it will also be used. 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.randint(0x00, 0xff),
|
|
random.randint(0x00, 0xff), random.randint(0x00, 0xff)]
|
|
if base_mac[3] != '00':
|
|
mac[3] = int(base_mac[3], 16)
|
|
return ':'.join(["%02x" % x for x in mac])
|
|
|
|
|
|
def is_port_trusted(port):
|
|
"""Used to determine if port can be trusted not to attack network.
|
|
|
|
Trust is currently based on the device_owner field starting with 'network:'
|
|
since we restrict who can use that in the default policy.json file.
|
|
|
|
:param port: The port dict to inspect the 'device_owner' for.
|
|
:returns: True if the port dict's 'device_owner' value starts with the
|
|
networking prefix. False otherwise.
|
|
"""
|
|
return port['device_owner'].startswith(
|
|
constants.DEVICE_OWNER_NETWORK_PREFIX)
|