{"record":{"id":"919fbebfdb8c2d04","repo":"commaai/openpilot","slug":"error-socketcan-is-only-supported-on-linux","errorCode":null,"errorMessage":"error: --socketcan is only supported on Linux\n","messagePattern":"error: --socketcan is only supported on Linux\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"openpilot/tools/cabana/cabana.cc","lineNumber":101,"sourceCode":"      args.auto_source = true;\n    } else if (std::strcmp(a, \"--qcam\") == 0) {\n      args.qcam = true;\n    } else if (std::strcmp(a, \"--wide-road\") == 0 || std::strcmp(a, \"--ecam\") == 0) {\n      args.wide_road = true;\n    } else if (std::strcmp(a, \"--cabin\") == 0 || std::strcmp(a, \"--dcam\") == 0) {\n      args.cabin = true;\n    } else if (std::strcmp(a, \"--msgq\") == 0) {\n      args.msgq = true;\n    } else if (std::strcmp(a, \"--panda\") == 0) {\n      args.panda = true;\n    } else if (std::strcmp(a, \"--panda-serial\") == 0) {\n      if (!takeValue(argc, argv, i, args.panda_serial)) return 1;\n      args.panda = true;\n    } else if (std::strcmp(a, \"--socketcan\") == 0) {\n      if (!takeValue(argc, argv, i, args.socketcan)) return 1;\n#ifdef __linux__\n#else\n      fprintf(stderr, \"error: --socketcan is only supported on Linux\\n\");\n      return 1;\n#endif\n    } else if (std::strcmp(a, \"--zmq\") == 0) {\n      if (!takeValue(argc, argv, i, args.zmq)) return 1;\n    } else if (std::strcmp(a, \"--data_dir\") == 0) {\n      if (!takeValue(argc, argv, i, args.data_dir)) return 1;\n    } else if (std::strcmp(a, \"--no-vipc\") == 0) {\n      args.no_vipc = true;\n    } else if (std::strcmp(a, \"--dbc\") == 0) {\n      if (!takeValue(argc, argv, i, args.dbc)) return 1;\n    } else if (a[0] == '-') {\n      fprintf(stderr, \"error: unknown option %s\\n\", a);\n      printUsage(argv[0]);\n      return 1;\n    } else if (args.route.empty()) {\n      args.route = a;\n    } else {\n      fprintf(stderr, \"error: unexpected argument %s\\n\", a);","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/commaai/openpilot/blob/516ec1e68203439a73f340f1d0b3b91eabc626ee/openpilot/tools/cabana/cabana.cc#L83-L119","documentation":"Printed by cabana's parseArgs when --socketcan is passed on a non-Linux build (the handler body is empty unless __linux__ is defined, so the #else branch prints and returns 1). SocketCAN is a Linux kernel feature, so macOS/Windows builds of cabana cannot read from a CAN interface this way and exit with this error.","triggerScenarios":"Running `cabana --socketcan can0` on macOS or any non-Linux OS. The value is consumed by takeValue first, then the platform check kills the process with exit code 1.","commonSituations":"Developers on macOS replaying from hardware, or Windows users wanting live panda/CAN data; also WSL1 (no SocketCAN kernel support) even though it reports Linux.","solutions":["On the unsupported OS, use a Linux machine/container (WSL2 with usbip, Docker with --net=host) for live SocketCAN capture.","Use alternatives that work cross-platform: --panda / --panda-serial for direct panda USB, --zmq to a remote agent, or replay a route.","Verify with `ip link show can0` on the box that SocketCAN actually exists before blaming cabana."],"exampleFix":"# before (macOS)\ncabana --socketcan can0    # error: --socketcan is only supported on Linux\n\n# after (macOS, live data via USB panda)\ncabana --panda","handlingStrategy":"type-guard","validationCode":"import sys, subprocess\nif sys.platform == 'linux':\n    subprocess.run(['cabana', '--socketcan', 'can0'])\nelse:\n    subprocess.run(['cabana', '--panda'])  # cross-platform live capture","typeGuard":"def socketcan_supported() -> bool:\n    import platform\n    return platform.system() == 'Linux'","tryCatchPattern":null,"preventionTips":["Gate --socketcan invocations on platform.system() == 'Linux'.","Note WSL1 lacks SocketCAN; use WSL2 or a Linux box for can0 access."],"tags":["cabana","platform-support","socketcan","cli","openpilot"],"backgroundTag":null,"analyzedSha":"516ec1e68203439a73f340f1d0b3b91eabc626ee","analyzedAt":"2026-08-15T00:17:37.461Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}