ruvnet/RuView · error · CSIParseError
Unknown router CSI format
Error message
Unknown router CSI format
What it means
RouterCSIParser recognizes exactly one payload prefix: decoded data must start with 'ATHEROS_CSI:'; everything else raises CSIParseError('Unknown router CSI format'). The router CSI path is Atheros-specific in the archive/v1 pipeline — other vendors' capture tools (OpenWrt nl80211, Intel, Nexmon) are not recognized at all.
Source
Thrown at archive/v1/src/hardware/csi_extractor.py:401
Args:
raw_data: Raw bytes from router
Returns:
Parsed CSI data
Raises:
CSIParseError: If data format is invalid
"""
if not raw_data:
raise CSIParseError("Empty data received")
# Handle different router formats
data_str = raw_data.decode('utf-8')
if data_str.startswith('ATHEROS_CSI:'):
return self._parse_atheros_format(raw_data)
else:
raise CSIParseError("Unknown router CSI format")
def _parse_atheros_format(self, raw_data: bytes) -> CSIData:
"""Parse Atheros CSI format.
Raises:
CSIExtractionError: Always, because Atheros CSI parsing requires
the Atheros CSI Tool binary format parser which has not been
implemented yet. Use the ESP32 parser or contribute an
Atheros implementation.
"""
raise CSIExtractionError(
"Atheros CSI format parsing is not yet implemented. "
"The Atheros CSI Tool outputs a binary format that requires a dedicated parser. "
"To collect real CSI data from Atheros-based routers, you must implement "
"the binary format parser following the Atheros CSI Tool specification. "
"See docs/hardware-setup.md for supported hardware and data formats."
)
View on GitHub (pinned to 4685618388)
Solutions
- If the data source is an ESP32 node, set hardware_type='esp32' (with the right parser_format) so the ESP32 parser is used
- Verify the router actually runs the Atheros CSI tool and emits 'ATHEROS_CSI:' lines before selecting hardware_type='router'
- For other vendors there is no archive/v1 support: convert the data or extend the parser
Defensive patterns
Strategy: validation
Validate before calling
line = raw.strip()
if not line.startswith(b'ATHEROS_CSI:'):
if line.startswith(b'CSI_DATA:'):
return esp32_parser.parse(raw) # misrouted ESP32 data
raise CSIParseError('Unknown router CSI format')
return router_parser.parse(raw) Type guard
def is_atheros_csi(raw: bytes) -> bool:
return bool(raw) and raw.strip().startswith(b'ATHEROS_CSI:') Try / catch
try:
data = router_parser.parse(raw)
except CSIParseError as e:
logger.warning('unsupported router payload prefix: %r', raw[:16]) Prevention
- Set hardware_type='esp32' for ESP32 nodes; reserve 'router' for Atheros CSI tool captures
- Check the emitted prefix before wiring a router source into the pipeline
- This parser has exactly one supported format — validate the prefix at the capture boundary, not after
When it happens
Trigger: Feeding CSI output from a non-Atheros tool; feeding ESP32 'CSI_DATA:' lines to the router parser; whitespace or a preamble before 'ATHEROS_CSI:'; hardware_type configured as 'router' while the actual device is an ESP32 node.
Common situations: hardware_type misconfiguration routing data to the wrong parser; assuming generic router support exists; a vendor tool version that changed its line prefix.
Related errors
- Atheros CSI format parsing is not yet implemented. The Ather
- Insufficient data for header
- Insufficient data for CSI
- MCP repository access requires a trusted root configured at
- Unsupported host: ${name}
AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16).
Data as JSON: /api/errors/102f6c88c5d4ae28.
Report an issue: GitHub.