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

  1. Get the index (`cat /sys/class/net/wlan0/ifindex`) and pass it: `veil_shieldd -i <N> [-k <hex>] [-p <n>]`.
  2. Check for stray or unsupported options in the launch script.
  3. 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

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


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