{"record":{"id":"44fa3712b6722fd7","repo":"ruvnet/RuView","slug":"usage-s-i-ifindex-k-key-hex-p-passes-44fa37","errorCode":null,"errorMessage":"Usage: %s -i <ifindex> [-k <key_hex>] [-p <passes>]\n  BUILD-ONLY / UNTESTED-ON-HARDWARE. See README.md.\n","messagePattern":"Usage: (.+?) -i <ifindex> \\[-k <key_hex>\\] \\[-p <passes>\\]\n  BUILD-ONLY / UNTESTED-ON-HARDWARE\\. See README\\.md\\.\n","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"info","filePath":"wifi-veil/firmware/openwrt/veil_shieldd.c","lineNumber":234,"sourceCode":"        /* TODO(hw): parse NL80211_ATTR_FRAME; classify VHT/HE compressed\n         * beamforming action (category 21/30) or NDPA to measure solicitation\n         * cadence. Requires the driver to forward these frames (registered via\n         * NL80211_CMD_REGISTER_FRAME / monitor). Not guaranteed upstream. */\n        (void)veil_randomize_sounding_cadence(c);\n        break;\n    case NL80211_CMD_NEW_STATION:\n    case NL80211_CMD_DEL_STATION:\n        /* Membership churn changes MU grouping surface. */\n        (void)veil_shuffle_mumimo_groups(c);\n        break;\n    default:\n        break;\n    }\n    return NL_SKIP;\n}\n\nstatic void usage(const char *p) {\n    fprintf(stderr,\n        \"Usage: %s -i <ifindex> [-k <key_hex>] [-p <passes>]\\n\"\n        \"  BUILD-ONLY / UNTESTED-ON-HARDWARE. See README.md.\\n\", p);\n}\n\nint main(int argc, char **argv) {\n    memset(&g_ctx, 0, sizeof(g_ctx));\n    g_ctx.key = 0xA5A5A5A5A5A5A5A5ULL; /* placeholder; real key from keystore */\n    g_ctx.passes = VEIL_DEFAULT_PASSES;\n    g_ctx.ifindex = -1;\n    g_ctx.running = 1;\n\n    int opt;\n    while ((opt = getopt(argc, argv, \"i:k:p:h\")) != -1) {\n        switch (opt) {\n        case 'i': g_ctx.ifindex = atoi(optarg); break;\n        case 'k': g_ctx.key = strtoull(optarg, NULL, 16); break;\n        case 'p': g_ctx.passes = (size_t)strtoul(optarg, NULL, 10); break;\n        case 'h': default: usage(argv[0]); return (opt == 'h') ? 0 : 2;","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/ruvnet/RuView/blob/4685618388a5e49fad5b3005806f3bdd6a7c25c3/wifi-veil/firmware/openwrt/veil_shieldd.c#L216-L252","documentation":"Usage banner of the wifi-veil vendored copy (byte-identical source). Printed to stderr when `-i <ifindex>` is missing, an option is unknown, or help is requested; it also states the binary is BUILD-ONLY / UNTESTED-ON-HARDWARE. ifindex must be the numeric interface index from `ip link`, not the interface name.","triggerScenarios":"No arguments; `-i wlan0` (name instead of number); unknown flags; `-h`.","commonSituations":"First launch from the wifi-veil workspace; wrapper scripts passing the device name; users unaware the key (`-k`) and passes (`-p`) are optional.","solutions":["Get the index (`cat /sys/class/net/wlan0/ifindex`) and pass it: `veil_shieldd -i <N> [-k <hex>] [-p <n>]`.","Check for stray or unsupported options in the launch script.","Heed the BUILD-ONLY warning: do not deploy this build as a production control."],"exampleFix":"# before\n./veil_shieldd -i wlan0\n# after\n./veil_shieldd -i $(cat /sys/class/net/wlan0/ifindex) -k deadbeefdeadbeef -p 4","handlingStrategy":"validation","validationCode":"#!/bin/sh\n[ $# -ge 2 ] || { veil_shieldd; exit 2; }\ncase \"$2\" in (*[!0-9]*|'') echo \"ifindex must be numeric, not a name\"; exit 2;; esac\nexec veil_shieldd \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Convert names to ifindex via /sys/class/net/<name>/ifindex in wrappers.","Only -i is required; -k and -p are optional with defaults.","Respect the banner: this build is explicitly untested on hardware."],"tags":["c","openwrt","cli","usage","daemon-startup"],"backgroundTag":null,"analyzedSha":"4685618388a5e49fad5b3005806f3bdd6a7c25c3","analyzedAt":"2026-08-16T06:09:40.886Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}