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

  1. If the data source is an ESP32 node, set hardware_type='esp32' (with the right parser_format) so the ESP32 parser is used
  2. Verify the router actually runs the Atheros CSI tool and emits 'ATHEROS_CSI:' lines before selecting hardware_type='router'
  3. 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

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


AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16). Data as JSON: /api/errors/102f6c88c5d4ae28. Report an issue: GitHub.