anaconda/anaconda-40.22.3.13/pyanaconda/modules/network/utils.py
2024-11-14 21:39:56 -08:00

117 lines
3.5 KiB
Python

#
# Utility functions for network module
#
# Copyright (C) 2019 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details. You should have received a copy of the
# GNU General Public License along with this program; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
import os
import glob
from functools import wraps
from pyanaconda.core import util
from pyanaconda.core.configuration.anaconda import conf
from pyanaconda.core.regexes import IBFT_CONFIGURED_DEVICE_NAME
from pyanaconda.anaconda_loggers import get_module_logger
log = get_module_logger(__name__)
# TODO move somewhwere
# We duplicate this in dracut/parse-kickstart
def get_s390_settings(devname):
cfg = {
'SUBCHANNELS': '',
}
subchannels = []
for symlink in sorted(glob.glob("/sys/class/net/%s/device/cdev[0-9]*" % devname)):
subchannels.append(os.path.basename(os.readlink(symlink)))
if not subchannels:
return cfg
cfg['SUBCHANNELS'] = ','.join(subchannels)
return cfg
def prefix2netmask(prefix):
""" Convert prefix (CIDR bits) to netmask """
_bytes = []
for _i in range(4):
if prefix >= 8:
_bytes.append(255)
prefix -= 8
else:
_bytes.append(256 - 2 ** (8 - prefix))
prefix = 0
netmask = ".".join(str(byte) for byte in _bytes)
return netmask
def netmask2prefix(netmask):
""" Convert netmask to prefix (CIDR bits) """
prefix = 0
while prefix < 33:
if (prefix2netmask(prefix) == netmask):
return prefix
prefix += 1
return prefix
def get_default_route_iface(family="inet"):
"""Get the device having default route.
:return: the name of the network device having default route
"""
routes = util.execWithCapture("ip", ["-f", family, "route", "show"])
if not routes:
log.debug("Could not get default %s route device", family)
return None
for line in routes.split("\n"):
if line.startswith("default"):
parts = line.split()
if len(parts) >= 5 and parts[3] == "dev":
return parts[4]
else:
log.debug("Could not parse default %s route device", family)
return None
return None
def guard_by_system_configuration(return_value):
def wrap(function):
@wraps(function)
def wrapped(*args, **kwargs):
if not conf.system.can_configure_network:
log.debug("Network configuration is disabled on this system.")
return return_value
else:
return function(*args, **kwargs)
return wrapped
return wrap
def is_ibft_configured_device(iface):
return IBFT_CONFIGURED_DEVICE_NAME.match(iface)
def is_nbft_device(iface):
return iface.startswith("nbft")