PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/ethtool.py |
""" Configuration of network device .. versionadded:: 2016.11.0 :codeauthor: Krzysztof Pawlowski <msciciel@msciciel.eu> :maturity: new :depends: python-ethtool :platform: linux .. code-block:: yaml eth0: ethtool.coalesce: - name: eth0 - rx_usecs: 24 - tx_usecs: 48 eth0: ethtool.ring: - name: eth0 - rx: 1024 - tx: 1024 eth0: ethtool.offload: - name: eth0 - tcp_segmentation_offload: on """ import logging from salt.exceptions import CommandExecutionError # Set up logging log = logging.getLogger(__name__) def __virtual__(): """ Provide ethtool state """ if "ethtool.show_driver" in __salt__: return "ethtool" return (False, "ethtool module could not be loaded") def coalesce(name, **kwargs): """ Manage coalescing settings of network device name Interface name to apply coalescing settings .. code-block:: yaml eth0: ethtool.coalesce: - name: eth0 - adaptive_rx: on - adaptive_tx: on - rx_usecs: 24 - rx_frame: 0 - rx_usecs_irq: 0 - rx_frames_irq: 0 - tx_usecs: 48 - tx_frames: 0 - tx_usecs_irq: 0 - tx_frames_irq: 0 - stats_block_usecs: 0 - pkt_rate_low: 0 - rx_usecs_low: 0 - rx_frames_low: 0 - tx_usecs_low: 0 - tx_frames_low: 0 - pkt_rate_high: 0 - rx_usecs_high: 0 - rx_frames_high: 0 - tx_usecs_high: 0 - tx_frames_high: 0 - sample_interval: 0 """ ret = { "name": name, "changes": {}, "result": True, "comment": f"Network device {name} coalescing settings are up to date.", } apply_coalescing = False if "test" not in kwargs: kwargs["test"] = __opts__.get("test", False) # Build coalescing settings try: old = __salt__["ethtool.show_coalesce"](name) if not isinstance(old, dict): ret["result"] = False ret["comment"] = "Device {} coalescing settings are not supported".format( name ) return ret new = {} diff = [] # Retreive changes to made for key, value in kwargs.items(): if key in old and value != old[key]: new.update({key: value}) diff.append(f"{key}: {value}") # Dry run if kwargs["test"]: if not new: return ret if new: ret["result"] = None ret["comment"] = ( "Device {} coalescing settings are set to be updated:\n{}".format( name, "\n".join(diff) ) ) return ret # Prepare return output if new: apply_coalescing = True ret["comment"] = f"Device {name} coalescing settings updated." ret["changes"]["ethtool_coalesce"] = "\n".join(diff) except AttributeError as error: ret["result"] = False ret["comment"] = str(error) return ret # Apply coalescing settings if apply_coalescing: try: __salt__["ethtool.set_coalesce"](name, **new) except AttributeError as error: ret["result"] = False ret["comment"] = str(error) return ret return ret def ring(name, **kwargs): """ Manage rx/tx ring parameters of network device Use 'max' word to set with factory maximum name Interface name to apply ring parameters .. code-block:: yaml eth0: ethtool.ring: - name: eth0 - rx: 1024 - rx_mini: 0 - rx_jumbo: 0 - tx: max """ ret = { "name": name, "changes": {}, "result": True, "comment": f"Network device {name} ring parameters are up to date.", } apply_ring = False if "test" not in kwargs: kwargs["test"] = __opts__.get("test", False) # Build ring parameters try: old = __salt__["ethtool.show_ring"](name) if not isinstance(old, dict): ret["result"] = False ret["comment"] = f"Device {name} ring parameters are not supported" return ret new = {} diff = [] # Retreive changes to made for key, value in kwargs.items(): if key in old: if value == "max": value = old[f"{key}_max"] if value != old[key]: new.update({key: value}) diff.append(f"{key}: {value}") # Dry run if kwargs["test"]: if not new: return ret if new: ret["result"] = None ret["comment"] = ( "Device {} ring parameters are set to be updated:\n{}".format( name, "\n".join(diff) ) ) return ret # Prepare return output if new: apply_ring = True ret["comment"] = f"Device {name} ring parameters updated." ret["changes"]["ethtool_ring"] = "\n".join(diff) except AttributeError as error: ret["result"] = False ret["comment"] = str(error) return ret # Apply ring parameters if apply_ring: try: __salt__["ethtool.set_ring"](name, **new) except AttributeError as error: ret["result"] = False ret["comment"] = str(error) return ret return ret def offload(name, **kwargs): """ Manage protocol offload and other features of network device name Interface name to apply coalescing settings .. code-block:: yaml eth0: ethtool.offload: - name: eth0 - tcp_segmentation_offload: on """ ret = { "name": name, "changes": {}, "result": True, "comment": f"Network device {name} offload settings are up to date.", } apply_offload = False if "test" not in kwargs: kwargs["test"] = __opts__.get("test", False) # Build offload settings try: old = __salt__["ethtool.show_offload"](name) if not isinstance(old, dict): ret["result"] = False ret["comment"] = f"Device {name} offload settings are not supported" return ret new = {} diff = [] # Retreive changes to made for key, value in kwargs.items(): value = value and "on" or "off" if key in old and value != old[key]: new.update({key: value}) diff.append(f"{key}: {value}") # Dry run if kwargs["test"]: if not new: return ret if new: ret["result"] = None ret["comment"] = ( "Device {} offload settings are set to be updated:\n{}".format( name, "\n".join(diff) ) ) return ret # Prepare return output if new: apply_offload = True ret["comment"] = f"Device {name} offload settings updated." ret["changes"]["ethtool_offload"] = "\n".join(diff) except AttributeError as error: ret["result"] = False ret["comment"] = str(error) return ret # Apply offload settings if apply_offload: try: __salt__["ethtool.set_offload"](name, **new) except AttributeError as error: ret["result"] = False ret["comment"] = str(error) return ret return ret def pause(name, **kwargs): """ .. versionadded:: 3006.0 Manage pause parameters of network device name Interface name to apply pause parameters .. code-block:: yaml eth0: ethtool.pause: - name: eth0 - autoneg: off - rx: off - tx: off """ ret = { "name": name, "changes": {}, "result": True, "comment": f"Network device {name} pause parameters are up to date.", } apply_pause = False # Get current pause parameters try: old = __salt__["ethtool.show_pause"](name) except CommandExecutionError: ret["result"] = False ret["comment"] = f"Device {name} pause parameters are not supported" return ret # map ethtool command input to output text pause_map = { "autoneg": "Autonegotiate", "rx": "RX", "tx": "RX", } # Process changes new = {} diff = [] for key, value in kwargs.items(): key = key.lower() if key in pause_map: if value != old[pause_map[key]]: new.update({key: value}) if value is True: value = "on" elif value is False: value = "off" diff.append(f"{key}: {value}") if not new: return ret # Dry run if __opts__["test"]: ret["result"] = None ret["comment"] = "Device {} pause parameters are set to be updated:\n{}".format( name, "\n".join(diff) ) return ret # Apply pause parameters try: __salt__["ethtool.set_pause"](name, **new) # Prepare return output ret["comment"] = f"Device {name} pause parameters updated." ret["changes"]["ethtool_pause"] = "\n".join(diff) except CommandExecutionError as exc: ret["result"] = False ret["comment"] = str(exc) return ret return ret