Important
This project is under development. All source code and features on the main branch are for the purpose of testing or evaluation and not production ready.
Module for Ethtool, module implements mfd-base-tool
from mfd_connect import SSHConnection
from mfd_ethtool import Ethtool
conn = SSHConnection(username="your_username", password="your_password", ip="x.x.x.x")
ethtool_obj = Ethtool(connection=conn)
print(ethtool_obj.get_version())
print(ethtool_obj.execute_ethtool_command(device_name="intf1"))
print(ethtool_obj.execute_ethtool_command(device_name="intf1", namespace="NS1"))
dev_info = ethtool_obj.get_standard_device_info(device_name="intf1")
print(dev_info.supported_ports)
print(dev_info.supports_auto_negotiation)
pause_options = ethtool_obj.get_pause_options(device_name="intf1", namespace="NS1")
print(pause_options.autonegotiate)
print(ethtool_obj.set_pause_options(device_name="intf1", param_name="autoneg", param_value="off"))
coalesce_options = ethtool_obj.get_coalesce_options(device_name="intf1")
print(coalesce_options.adaptive_tx)
print(ethtool_obj.set_coalesce_options(device_name="intf1", param_name="rx-usecs", param_value="1", namespace="NS1"))
ring_params = ethtool_obj.get_ring_parameters(device_name="intf1")
print(ring_params.preset_max_rx)
print(ring_params.current_hw_rx)
print(ethtool_obj.set_ring_parameters(device_name="intf1", param_name="rx", param_value="512"))
drv_info = ethtool_obj.get_driver_information(device_name="intf1")
print(drv_info.firmware_version)
features = ethtool_obj.get_protocol_offload_and_feature_state(device_name="intf1")
print(features.rx_checksumming, features.tx_checksumming)
print(ethtool_obj.set_protocol_offload_and_feature_state(device_name="intf1", param_name="tso", param_value="on"))
channel_params = ethtool_obj.get_channel_parameters(device_name="intf1")
print(channel_params.preset_max_rx)
print(channel_params.current_hw_rx)
print(ethtool_obj.set_channel_parameters(device_name="intf1", param_name="combined", param_value="2"))
print(ethtool_obj.set_channel_parameters_ice_idpf_aligned(device_name="intf1", param_name="combined rx tx", param_value="5 10 0"))
print(ethtool_obj.get_receive_network_flow_classification(device_name="intf1", param_name="rx-flow-hash",
param_value="tcp4"))
print(ethtool_obj.set_receive_network_flow_classification(device_name="intf1",
params="flow-type ip4 proto 1 action -1"))
print(ethtool_obj.show_visible_port_identification(device_name="intf1", duration=5))
print(ethtool_obj.change_eeprom_settings(device_name="intf1", params="offset 0x12 value 0x41", namespace="NS1"))
print(ethtool_obj.do_eeprom_dump(device_name="intf1"))
print(ethtool_obj.restart_negotiation(device_name="intf1"))
stats = ethtool_obj.get_adapter_statistics(device_name="inf1")
print(stats.rx_packets)
print(ethtool_obj.get_statistics_xonn_xoff(device_name="eth1"))
print(ethtool_obj.execute_self_test(device_name="intf1", test_mode="offline"))
print(ethtool_obj.change_generic_options(device_name="intf1", param_name="autoneg", param_value="on"))
priv_flags_output = ethtool_obj.get_private_flags(device_name="intf1")
print(priv_flags_output.priv_flags["flag_name"])
print(ethtool_obj.set_private_flags(device_name="intf1", flag_name="legacy-rx", flag_value="on"))
print(ethtool_obj.get_rss_indirection_table(device_name="intf1"))
print(ethtool_obj.set_rss_indirection_table(device_name="intf1", param_name="equal", param_value="20"))
print(ethtool_obj.flash_firmware_image(device_name="intf1", file="gtp.pkgo", region=100))
print(ethtool_obj.unload_ddp_profile(device_name="intf1", region=100))
fec_settings = ethtool_obj.get_fec_settings(device_name="intf1")
print(fec_settings.active_fec_encodings)
print(ethtool_obj.set_fec_settings(device_name="intf1", setting_name="encoding", setting_value="on"))
print(ethtool_obj.do_register_dump(device_name="intf1"))
print(ethtool_obj.get_time_stamping_capabilities(device_name="intf1"))
print(ethtool_obj.get_perm_hw_address(device_name="intf1"))
print(ethtool_obj.dump_module_eeprom(device_name="intf1"))
eee_settings = ethtool_obj.get_eee_settings(device_name="intf1")
print(eee_settings.eee_status)
print(ethtool_obj.set_eee_settings(device_name="intf1", param_name="eee", param_value="on"))
print(ethtool_obj.set_phy_tunable(device_name="intf1", params="downshift on count 2"))
print(ethtool_obj.reset_components(device_name="intf1", param_name="phy", namespace="NS1"))
print(ethtool_obj.get_dump(device_name="intf1", params="data file.bin"))
print(ethtool_obj.set_dump(device_name="intf1", params="3"))class GetReceiveNetworkFlowClassification(Enum):
"""Structure for get receive network flow classification options."""
N = "-n"
U = "-u"
ShowNFC = "--show-nfc"
ShowNtuple = "--show-ntuple"
class SetReceiveNetworkFlowClassification(Enum):
""" Structure for set receive network flow classification options."""
N = "-N"
U = "-U"
ConfigNFC = "--config-nfc"
ConfigNtuple = "--config-ntuple"check_if_available() -> None - checks if Ethtool is available in system, raises EthtoolNotAvailable if not
get_version() -> str - returns Ethtool version
execute_ethtool_command(device_name: str, option: str = "", params: str = "", namespace: str | None = None, succeed_codes: frozenset ) -> str: - Executes ethtool command for given device with specified options and parameters
get_standard_device_info(device_name: str, namespace: str | None = None ) -> type[dataclass] - Get standard information about device, return parsed output
get_pause_options(device_name: str, namespace: str | None = None) -> type[dataclass] - Get pause options
set_pause_options(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: frozenset ) -> str - Set pause options
get_coalesce_options(device_name: str, namespace: str | None = None ) -> type[dataclass] - Get coalesce options, return parsed output
set_coalesce_options(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: frozenset ) -> str: - Set coalesce options
get_ring_parameters(device_name: str, namespace: str | None = None) -> type[dataclass]: - Query RX/TX ring parameters, return parsed output
set_ring_parameters(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: frozenset ) -> str: - Set RX/TX ring parameters
get_driver_information(device_name: str, namespace: str | None = None) -> type[dataclass]: - Display driver information, return parsed output
get_protocol_offload_and_feature_state(device_name: str, namespace: str | None = None ) -> type[dataclass]: - Get state of protocol offload and other features, return parsed output
set_protocol_offload_and_feature_state(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: frozenset ) -> str: - Set protocol offload and other features
get_channel_parameters(device_name: str, namespace: str | None = None) -> type[dataclass]: - Get channels, return parsed output
set_channel_parameters(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: frozenset ) -> str: - Set channels
set_channel_parameters_ice_idpf_aligned(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: Iterable ) -> str: - Set channels (aligned with ice/idpf implementation according to DCR-5402)
get_receive_network_flow_classification(device_name: str, option: GetReceiveNetworkFlowClassification = GetReceiveNetworkFlowClassification.U,, param_name: str = "", param_value: str = "", namespace: str | None = None, expected_codes: frozenset) -> str: - Get Rx network flow classification options or rules
set_receive_network_flow_classification(device_name: str, params: str, option: SetReceiveNetworkFlowClassification = SetReceiveNetworkFlowClassification.U, namespace: str | None = None, expected_codes: frozenset ) -> str: - Configure Rx network flow classification options or rules
show_visible_port_identification(device_name: str, duration: str, namespace: str | None = None ) -> str: - Show visible port identification (e.g. blinking)
change_eeprom_settings(device_name: str, params: str, namespace: str | None = None) -> str: - Change bytes in device EEPROM
do_eeprom_dump(device_name: str, params: str = "", namespace: str | None = None) -> str: - Do EEPROM dump
restart_negotiation(device_name: str, namespace: str | None = None) -> str: - Restart N-WAY negotiation
get_adapter_statistics(device_name: str, namespace: str | None = None) -> type[dataclass] - Get adapter statistics, return parsed output
get_statistics_xonn_xoff(self, device_name: str, namespace: str | None = None) -> type[dataclass] - Show interface statistics - ethtool -S|--statistics DEVNAME with filtered out xon/xoff only.
execute_self_test(device_name: str, test_mode: str, namespace: str | None = None) -> str - Execute adapter self test
change_generic_options(device_name: str, param_name: str, param_value: str, namespace: str | None = None) -> str - Change generic options
set_private_flags(device_name: str, flag_name: str, flag_value: str, namespace: str | None = None, expected_codes: frozenset ) -> str: - Set private flags
get_private_flags(device_name: str, namespace: str | None = None) -> type[dataclass] - Get private flags, return parsed output
get_rss_indirection_table(device_name: str, namespace: str | None = None) -> str - Get Rx flow hash indirection table and/or RSS hash key
set_rss_indirection_table(device_name: str, param_name: str, param_value: str = "", namespace: str | None = None ) -> str - Set Rx flow hash indirection table and/or RSS hash key
flash_firmware_image(device_name: str, file: str, region: int, namespace: str | None = None ) -> str - Flash firmware image from the specified file to a region on the device
unload_ddp_profile(device_name, region: int, namespace: str | None = None) -> str - Rollback to a previously loaded profile
get_fec_settings(device_name: str, namespace: str | None = None) -> type[dataclass] - Get FEC settings, return parsed output
set_fec_settings(device_name: str, setting_name: str, setting_value: str, namespace: str | None = None) -> str - Set specified FEC setting
do_register_dump(device_name: str, params: str = "", namespace: str | None = None) -> str - Do register dump
get_time_stamping_capabilities(device_name: str, namespace: str | None = None) -> str - Get time stamping capabilities
get_perm_hw_address(device_name: str, namespace: str | None = None) -> str - Get permanent hardware address
dump_module_eeprom(device_name: str, params: str = "", namespace: str | None = None ) -> str - Query/Decode Module EEPROM information and optical diagnostics if available
get_eee_settings(device_name: str, namespace: str | None = None) -> type[dataclass] - Get EEE settings, return parsed output
set_eee_settings(device_name: str, param_name: str, param_value: str, namespace: str | None = None, expected_codes: frozenset) -> str - Set EEE settings
set_phy_tunable(device_name: str, params: str, namespace: str | None = None, expected_codes: frozenset) -> str - Set PHY tunable
reset_components(device_name: str, param_name: str, param_value: str = "", namespace: str | None = None) -> str - Reset components
get_dump(device_name: str, params: str = "", namespace: str | None = None) -> str - Get dump flag, data
set_dump(device_name: str, params: str, namespace: str | None = None, expected_codes: frozenset) -> str - Set dump flag of the device
Here is a place to write what OSes support your MFD module:
- LINUX
If you encounter any bugs or have suggestions for improvements, you're welcome to contribute directly or open an issue here.