diff --git a/CHANGELOG b/CHANGELOG index cc00a3d0..509b50d8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ jc changelog 20240907 v1.25.4 +- Enhance `ethtool` parser to support `link_partner_advertised_link_modes` - Enhance `ifconfig` parser to support `utun` interfaces with assigned IPv4 addresses on macOS - Fix `mount` parser for cases where there are spaces in the filesystem name - Fix `ip-address` parser for Python 3.13 changes to IPv4 mapped IPv6 addresses diff --git a/jc/parsers/ethtool.py b/jc/parsers/ethtool.py index 3a353a3f..51657188 100644 --- a/jc/parsers/ethtool.py +++ b/jc/parsers/ethtool.py @@ -172,7 +172,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.0' + version = '1.1' description = '`ethtool` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -248,10 +248,11 @@ def _parse_default(data: str) -> JSONDictType: supported_link_modes: List[str] = [] supported_fec_modes: List[str] = [] advertised_link_modes: List[str] = [] + link_partner_advertised_link_modes: List[str] = [] advertised_fec_modes: List[str] = [] current_message_level: List[str] = [] mode: str = '' # supported_link_modes, supported_fec_modes, advertised_link_modes, - # advertised_fec_modes, current_message_level + # link_partner_advertised_link_modes, advertised_fec_modes, current_message_level for line in filter(None, data.splitlines()): @@ -294,6 +295,14 @@ def _parse_default(data: str) -> JSONDictType: mode = 'advertised_link_modes' continue + if 'Link partner advertised link modes:' in line and 'Not reported' not in line: + _, val = line.split(':', maxsplit=1) + val = val.strip() + val_list = val.split() + link_partner_advertised_link_modes.extend(val_list) + mode = 'link_partner_advertised_link_modes' + continue + if 'Advertised FEC modes:' in line and 'Not reported' not in line: _, val = line.split(':', maxsplit=1) val = val.strip() @@ -326,6 +335,12 @@ def _parse_default(data: str) -> JSONDictType: advertised_link_modes.extend(val_list) continue + if mode == 'link_partner_advertised_link_modes': + val = line.strip() + val_list = val.split() + link_partner_advertised_link_modes.extend(val_list) + continue + if mode == 'advertised_fec_modes': val = line.strip() val_list = val.split() @@ -346,6 +361,7 @@ def _parse_default(data: str) -> JSONDictType: (supported_link_modes, 'supported_link_modes'), (supported_fec_modes, 'supported_fec_modes'), (advertised_link_modes, 'advertised_link_modes'), + (link_partner_advertised_link_modes, 'link_partner_advertised_link_modes'), (advertised_fec_modes, 'advertised_fec_modes'), (current_message_level, 'current_message_level') ] diff --git a/tests/fixtures/generic/ethtool--link-partner-advertised-link-modes.json b/tests/fixtures/generic/ethtool--link-partner-advertised-link-modes.json new file mode 100644 index 00000000..e700141d --- /dev/null +++ b/tests/fixtures/generic/ethtool--link-partner-advertised-link-modes.json @@ -0,0 +1 @@ +{"name":"eth0","supported_pause_frame_use":"Symmetric Receive-only","supports_auto_negotiation":true,"supported_fec_modes":[],"advertised_pause_frame_use":false,"advertised_auto_negotiation":true,"advertised_fec_modes":[],"link_partner_advertised_pause_frame_use":"Symmetric","link_partner_advertised_auto_negotiation":"Yes","link_partner_advertised_fec_modes":"Not reported","speed":"100Mb/s","duplex":"Full","port":"Twisted Pair","phyad":"0","transceiver":"external","auto_negotiation":false,"mdi_x":"Unknown","supports_wake_on":"d","wake_on":"d","link_detected":true,"supported_ports":["TP","MII"],"supported_link_modes":["10baseT/Half","10baseT/Full","100baseT/Half","100baseT/Full","1000baseT/Half","1000baseT/Full"],"advertised_link_modes":["10baseT/Half","10baseT/Full","100baseT/Half","100baseT/Full","1000baseT/Half","1000baseT/Full"],"link_partner_advertised_link_modes":["10baseT/Half","10baseT/Full","100baseT/Half","100baseT/Full"],"current_message_level":["0x00000007 (7)","drv probe link"],"speed_bps":100000000} diff --git a/tests/fixtures/generic/ethtool--link-partner-advertised-link-modes.out b/tests/fixtures/generic/ethtool--link-partner-advertised-link-modes.out new file mode 100644 index 00000000..ff4a06ea --- /dev/null +++ b/tests/fixtures/generic/ethtool--link-partner-advertised-link-modes.out @@ -0,0 +1,31 @@ +Settings for eth0: + Supported ports: [ TP MII ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Half 1000baseT/Full + Supported pause frame use: Symmetric Receive-only + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Half 1000baseT/Full + Advertised pause frame use: Symmetric Receive-only + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 100Mb/s + Duplex: Full + Port: Twisted Pair + PHYAD: 0 + Transceiver: external + Auto-negotiation: on + MDI-X: Unknown + Supports Wake-on: d + Wake-on: d + Current message level: 0x00000007 (7) + drv probe link + Link detected: yes