|
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
|