Add case to test Get Channel Info via IPMI
Command "Get Channel Info" is belongs to the IPMI Messaging
Support Commands in IPMI SPEC.
Signed-off-by: Tony Lee <tony.lee@quantatw.com>
Change-Id: Ia6c5e2c9b1ec8904df5859e450863f32b49f2558
diff --git a/data/ipmi_variable.py b/data/ipmi_variable.py
new file mode 100644
index 0000000..64aae68
--- /dev/null
+++ b/data/ipmi_variable.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+
+r"""
+Contains channel-related constants.
+"""
+
+medium_type_ipmi_conf_map = {
+ "reserved": "reserved",
+ "IPMB (I2C)": "ipmb",
+ "ICMB v1.0": "icmb-v1.0",
+ "ICMB v0.9": "icmb-v0.9",
+ "802.3 LAN": "lan-802.3",
+ "Serial/Modem": "serial",
+ "Other LAN": "other-lan",
+ "PCI SMBus": "pci-smbus",
+ "SMBus v1.0/v1.1": "smbus-v1.0",
+ "SMBus v2.0": "smbus-v2.0",
+ "USB 1.x": "usb-1x",
+ "USB 2.x": "usb-2x",
+ "System Interface": "system-interface"
+}
+
+
+protocol_type_ipmi_conf_map = {
+ "reserved": "na",
+ "IPMB-1.0": "ipmb-1.0",
+ "ICMB-1.0": "icmb-2.0",
+ "reserved": "reserved",
+ "IPMI-SMBus": "ipmi-smbus",
+ "KCS": "kcs",
+ "SMIC": "smic",
+ "BT-10": "bt-10",
+ "BT-15": "bt-15",
+ "TMode": "tmode",
+ "OEM 1": "oem",
+}
+
+
+disabled_ipmi_conf_map = {
+ "disabled": "True",
+ "enabled": "False",
+}
+
+
+access_mode_ipmi_conf_map = {
+ "disabled": "disabled",
+ "pre-boot only": "pre-boot",
+ "always available": "always_available",
+ "shared": "shared",
+}
diff --git a/ipmi/test_ipmi_general.robot b/ipmi/test_ipmi_general.robot
index 59033a3..0c28039 100644
--- a/ipmi/test_ipmi_general.robot
+++ b/ipmi/test_ipmi_general.robot
@@ -4,6 +4,9 @@
Resource ../lib/ipmi_client.robot
Resource ../lib/openbmc_ffdc.robot
Variables ../data/ipmi_raw_cmd_table.py
+Variables ../data/ipmi_variable.py
+Library ../lib/bmc_network_utils.py
+Library ../lib/ipmi_utils.py
Test Teardown FFDC On Test Case Fail
@@ -68,3 +71,56 @@
Rprint Vars guids uuid
Valid Value uuid ['${guids}']
+
+
+Verify Get Channel Info via IPMI
+ [Documentation] Verify get channel info via IPMI.
+ [Tags] Verify_Get_Channel_Info_via_IPMI
+
+ # Get channel info via ipmi command "ipmitool channel info [channel number]".
+ # Verify channel info with files "channel_access.json" and "channel_config.json" in BMC.
+
+ # Example output from 'Get Channel Info':
+ # channel_info:
+ # [channel_0x2_info]:
+ # [channel_medium_type]: 802.3 LAN
+ # [channel_protocol_type]: IPMB-1.0
+ # [session_support]: multi-session
+ # [active_session_count]: 0
+ # [protocol_vendor_id]: 7154
+ # [volatile(active)_settings]:
+ # [alerting]: enabled
+ # [per-message_auth]: enabled
+ # [user_level_auth]: enabled
+ # [access_mode]: always available
+
+ ${channel_info_ipmi}= Get Channel Info ${CHANNEL_NUMBER}
+ ${active_channel_config}= Get Active Channel Config
+ ${channel_access_config}= Get Channel Access Config
+ Rprint Vars channel_info_ipmi active_channel_config channel_access_config
+
+ Valid Value medium_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_medium_type']}']
+ ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['medium_type']}']
+
+ Valid Value protocol_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_protocol_type']}']
+ ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['protocol_type']}']
+
+ Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['session_support']
+ ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['session_supported']}']
+
+ Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['active_session_count']
+ ... ['${active_channel_config['${CHANNEL_NUMBER}']['active_sessions']}']
+ # IPMI Spec: The IPMI Enterprise Number is: 7154 (decimal)
+ Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['protocol_vendor_id'] ['7154']
+
+ Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['alerting']}']
+ ... ['${channel_access_config['${CHANNEL_NUMBER}']['alerting_disabled']}']
+
+ Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['per-message_auth']}']
+ ... ['${channel_access_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}']
+
+ Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['user_level_auth']}']
+ ... ['${channel_access_config['${CHANNEL_NUMBER}']['user_auth_disabled']}']
+
+ Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['access_mode']}']
+ ... ['${channel_access_config['${CHANNEL_NUMBER}']['access_mode']}']
diff --git a/lib/bmc_network_utils.py b/lib/bmc_network_utils.py
index 93f932b..7e91604 100644
--- a/lib/bmc_network_utils.py
+++ b/lib/bmc_network_utils.py
@@ -176,3 +176,31 @@
"""
return vf.filter_struct(get_channel_config(), "[('medium_type', 'other-lan|lan-802.3')]", regex=1)
+
+
+def get_channel_access_config():
+ r"""
+ Get the channel access config data and return as a dictionary.
+
+ Example:
+
+ channel_access_config = get_channel_access_config()
+ print_vars(channel_access_config)
+
+ channel_access_config:
+ [1]:
+ [priv_limit]: priv-admin
+ [per_msg_auth_disabled]: False
+ [access_mode]: always_available
+ [alerting_disabled]: False
+ [user_auth_disabled]: False
+ [2]:
+ [priv_limit]: priv-admin
+ [per_msg_auth_disabled]: False
+ [access_mode]: always_available
+ [alerting_disabled]: False
+ [user_auth_disabled]: False
+ """
+ stdout, stderr, rc = bsu.bmc_execute_command("cat /usr/share/ipmi-providers/channel_access.json")
+
+ return json.loads(stdout)
diff --git a/lib/ipmi_utils.py b/lib/ipmi_utils.py
index 4bdf6ad..d8c9be7 100644
--- a/lib/ipmi_utils.py
+++ b/lib/ipmi_utils.py
@@ -622,3 +622,34 @@
result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
return result
+
+
+def get_channel_info(channel_number=1):
+ r"""
+ Get the channel info and return as a dictionary.
+ Example:
+
+ channel_info:
+ [channel_0x2_info]:
+ [channel_medium_type]: 802.3 LAN
+ [channel_protocol_type]: IPMB-1.0
+ [session_support]: multi-session
+ [active_session_count]: 0
+ [protocol_vendor_id]: 7154
+ [volatile(active)_settings]:
+ [alerting]: enabled
+ [per-message_auth]: enabled
+ [user_level_auth]: enabled
+ [access_mode]: always available
+ [non-volatile_settings]:
+ [alerting]: enabled
+ [per-message_auth]: enabled
+ [user_level_auth]: enabled
+ [access_mode]: always available
+ """
+
+ status, ret_values = \
+ grk.run_key_u("Run IPMI Standard Command channel info " + str(channel_number))
+ result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
+
+ return result