ruvnet/RuView · info
Usage: %s -i <ifindex> [-k <key_hex>] [-p <passes>] BUILD-
Error message
Usage: %s -i <ifindex> [-k <key_hex>] [-p <passes>] BUILD-ONLY / UNTESTED-ON-HARDWARE. See README.md.
What it means
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.
Source
Thrown at wifi-veil/firmware/openwrt/veil_shieldd.c:234
/* TODO(hw): parse NL80211_ATTR_FRAME; classify VHT/HE compressed
* beamforming action (category 21/30) or NDPA to measure solicitation
* cadence. Requires the driver to forward these frames (registered via
* NL80211_CMD_REGISTER_FRAME / monitor). Not guaranteed upstream. */
(void)veil_randomize_sounding_cadence(c);
break;
case NL80211_CMD_NEW_STATION:
case NL80211_CMD_DEL_STATION:
/* Membership churn changes MU grouping surface. */
(void)veil_shuffle_mumimo_groups(c);
break;
default:
break;
}
return NL_SKIP;
}
static void usage(const char *p) {
fprintf(stderr,
"Usage: %s -i <ifindex> [-k <key_hex>] [-p <passes>]\n"
" BUILD-ONLY / UNTESTED-ON-HARDWARE. See README.md.\n", p);
}
int main(int argc, char **argv) {
memset(&g_ctx, 0, sizeof(g_ctx));
g_ctx.key = 0xA5A5A5A5A5A5A5A5ULL; /* placeholder; real key from keystore */
g_ctx.passes = VEIL_DEFAULT_PASSES;
g_ctx.ifindex = -1;
g_ctx.running = 1;
int opt;
while ((opt = getopt(argc, argv, "i:k:p:h")) != -1) {
switch (opt) {
case 'i': g_ctx.ifindex = atoi(optarg); break;
case 'k': g_ctx.key = strtoull(optarg, NULL, 16); break;
case 'p': g_ctx.passes = (size_t)strtoul(optarg, NULL, 10); break;
case 'h': default: usage(argv[0]); return (opt == 'h') ? 0 : 2;View on GitHub (pinned to 4685618388)
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.
Example fix
# before ./veil_shieldd -i wlan0 # after ./veil_shieldd -i $(cat /sys/class/net/wlan0/ifindex) -k deadbeefdeadbeef -p 4
Defensive patterns
Strategy: validation
Validate before calling
#!/bin/sh
[ $# -ge 2 ] || { veil_shieldd; exit 2; }
case "$2" in (*[!0-9]*|'') echo "ifindex must be numeric, not a name"; exit 2;; esac
exec veil_shieldd "$@" Prevention
- 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.
When it happens
Trigger: No arguments; `-i wlan0` (name instead of number); unknown flags; `-h`.
Common situations: First launch from the wifi-veil workspace; wrapper scripts passing the device name; users unaware the key (`-k`) and passes (`-p`) are optional.
Related errors
- Usage: %s -i <ifindex> [-k <key_hex>] [-p <passes>] BUILD-
- ENOMEM
- ENOMEM
- ${path}: ${res.status} ${res.statusText}
- brain corpus exceeds 1 MiB
AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16).
Data as JSON: /api/errors/44fa3712b6722fd7.
Report an issue: GitHub.