Files
neutron-lib/neutron_lib/utils/net.py
Boden R 5deda57e17 revert get_random_mac behavior from review 400408
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
2017-10-05 11:00:14 -06:00

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)