On Saturday, 3 October 2026 09:26:25 CEST Linus Lüssing wrote: > #if LINUX_VERSION_IS_GEQ(6, 1, 0) // UGLY_HACK_NEW > - .resv_start_op = BATADV_CMD_SET_VLAN + 1, > + .resv_start_op = BATADV_CMD_GET_DAT_DHT + 1, > #endif // UGLY_HACK_STOP No, this field is never to be changed for new commands. * @resv_start_op: first operation for which reserved fields of the header * can be validated and policies are required (see below); * new families should leave this field at zero [...] * Attribute policies (the combination of @policy and @maxattr fields) * can be attached at the family level or at the operation level. * If both are present the per-operation policy takes precedence. * For operations before @resv_start_op lack of policy means that the core * will perform no attribute parsing or validation. For newer operations * if policy is not provided core will reject all TLV attributes. You should make sure that your new op has an appropriate policy and the client does the right thing. The former is already the case because the family policy is inherited. See * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9c5d03d362519f36cd551aec596388f895c93d2d * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4fa86555d1cd338afc6e6308cc1ff890a014ec8c * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ce48ebdd56513fa5ad9dab683a96399e00dbf464 > @@ -1498,6 +1498,12 @@ static const struct genl_small_ops batadv_netlink_ops[] = { > .flags = GENL_UNS_ADMIN_PERM, > .dumpit = batadv_dat_cache_dump, > }, > + { > + .cmd = BATADV_CMD_GET_DAT_DHT, > + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, > + .flags = GENL_UNS_ADMIN_PERM, > + .dumpit = batadv_dat_dht_dump, > + }, > { > .cmd = BATADV_CMD_GET_MCAST_FLAGS, > .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, > Please keep it in the enum batadv_nl_commands order. Regards, Sven