Blame libnmstate/nm/infiniband.py

Packit Service 293802
#
Packit Service 293802
# Copyright (c) 2020 Red Hat, Inc.
Packit Service 293802
#
Packit Service 293802
# This file is part of nmstate
Packit Service 293802
#
Packit Service 293802
# This program is free software: you can redistribute it and/or modify
Packit Service 293802
# it under the terms of the GNU Lesser General Public License as published by
Packit Service 293802
# the Free Software Foundation, either version 2.1 of the License, or
Packit Service 293802
# (at your option) any later version.
Packit Service 293802
#
Packit Service 293802
# This program is distributed in the hope that it will be useful,
Packit Service 293802
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 293802
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 293802
# GNU Lesser General Public License for more details.
Packit Service 293802
#
Packit Service 293802
# You should have received a copy of the GNU Lesser General Public License
Packit Service 293802
# along with this program. If not, see <https://www.gnu.org/licenses/>.
Packit Service 293802
#
Packit Service 293802
Packit Service 293802
import logging
Packit Service 293802
Packit Service 293802
from libnmstate.schema import InfiniBand
Packit Service 293802
from libnmstate.schema import Interface
Packit Service 293802
from libnmstate.schema import InterfaceType
Packit Service 293802
from .common import NM
Packit Service 293802
Packit Service 293802
_NM_IB_MODE_DATAGRAM = "datagram"
Packit Service 293802
_NM_IB_MODE_CONNECTED = "connected"
Packit Service 293802
Packit Service 293802
Packit Service 5e62f7
def get_infiniband_config(nm_profile):
Packit Service 5e62f7
    if nm_profile:
Packit Service 5e62f7
        ib_setting = nm_profile.get_setting_infiniband()
Packit Service 293802
        if ib_setting:
Packit Service 293802
            mode = _nm_ib_mode_to_nmstate(ib_setting.get_transport_mode())
Packit Service 293802
            if not mode:
Packit Service 293802
                logging.warning(
Packit Service 293802
                    "Unknown InfiniBand transport mode "
Packit Service 293802
                    f"{ib_setting.get_transport_mode()} for interface "
Packit Service 5e62f7
                    f"{nm_profile.get_interface_name()}"
Packit Service 293802
                )
Packit Service 293802
                return {}
Packit Service 293802
Packit Service 293802
            pkey = ib_setting.get_p_key()
Packit Service 293802
            if pkey == -1:
Packit Service 293802
                pkey = str(InfiniBand.DEFAULT_PKEY)
Packit Service 293802
            else:
Packit Service 293802
                pkey = hex(pkey)
Packit Service 293802
Packit Service 293802
            base_iface = ib_setting.get_parent()
Packit Service 293802
            if base_iface is None:
Packit Service 293802
                base_iface = ""
Packit Service 293802
Packit Service 293802
            return {
Packit Service 293802
                Interface.TYPE: InterfaceType.INFINIBAND,
Packit Service 293802
                InfiniBand.CONFIG_SUBTREE: {
Packit Service 293802
                    InfiniBand.PKEY: pkey,
Packit Service 293802
                    InfiniBand.MODE: mode,
Packit Service 293802
                    InfiniBand.BASE_IFACE: base_iface,
Packit Service 293802
                },
Packit Service 293802
            }
Packit Service 293802
    return {}
Packit Service 293802
Packit Service 293802
Packit Service 293802
def _nm_ib_mode_to_nmstate(nm_ib_mode):
Packit Service 293802
    if nm_ib_mode == _NM_IB_MODE_DATAGRAM:
Packit Service 293802
        return InfiniBand.Mode.DATAGRAM
Packit Service 293802
    elif nm_ib_mode == _NM_IB_MODE_CONNECTED:
Packit Service 293802
        return InfiniBand.Mode.CONNECTED
Packit Service 293802
    else:
Packit Service 293802
        return None
Packit Service 293802
Packit Service 293802
Packit Service 293802
def create_setting(iface_info, base_con_profile, original_iface_info):
Packit Service 293802
    ib_config = iface_info.get(InfiniBand.CONFIG_SUBTREE)
Packit Service 293802
    if not ib_config:
Packit Service 293802
        return None
Packit Service 293802
Packit Service 293802
    ib_setting = None
Packit Service 293802
    if base_con_profile:
Packit Service 293802
        ib_setting = base_con_profile.get_setting_infiniband()
Packit Service 293802
        if ib_setting:
Packit Service 293802
            ib_setting = ib_setting.duplicate()
Packit Service 293802
Packit Service 293802
    if not ib_setting:
Packit Service 293802
        ib_setting = NM.SettingInfiniband.new()
Packit Service 293802
Packit Service 293802
    if Interface.MTU in original_iface_info:
Packit Service 293802
        ib_setting.props.mtu = original_iface_info[Interface.MTU]
Packit Service 293802
    if Interface.MAC in original_iface_info:
Packit Service 293802
        ib_setting.props.mac_address = original_iface_info[Interface.MAC]
Packit Service 293802
Packit Service 293802
    if ib_config[InfiniBand.PKEY] == InfiniBand.DEFAULT_PKEY:
Packit Service 293802
        ib_setting.props.p_key = -1
Packit Service 293802
    else:
Packit Service 293802
        ib_setting.props.p_key = ib_config[InfiniBand.PKEY]
Packit Service 293802
    ib_setting.props.transport_mode = ib_config[InfiniBand.MODE]
Packit Service 293802
Packit Service 293802
    if InfiniBand.BASE_IFACE in ib_config:
Packit Service 293802
        if ib_config[InfiniBand.BASE_IFACE]:
Packit Service 293802
            ib_setting.props.parent = ib_config[InfiniBand.BASE_IFACE]
Packit Service 293802
        else:
Packit Service 293802
            ib_setting.props.parent = None
Packit Service 293802
Packit Service 293802
    return ib_setting