nl80211: rework internal_flags usage
authorJohannes Berg <johannes.berg@intel.com>
Thu, 14 Apr 2022 12:04:03 +0000 (14:04 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 4 May 2022 10:31:57 +0000 (12:31 +0200)
Since internal_flags is only 8 bits, we can only have one
more internal flag. However, we can obviously never use all
of possible the combinations, in fact, we only use 14 of
them (including no flags).

Since we want more flags for MLO (multi-link operation) in
the future, refactor the code to use a flags selector, so
wrap all of the .internal_flags assignments in a IFLAGS()
macro which selects the combination according to the pre-
defined list of combinations.

When we need a new combination, we'll have to add it, but
again we will never use all possible combinations.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Link: https://lore.kernel.org/r/20220414140402.70ddf8af3eb0.I2cc38cb6a10bb4c3863ec9ee97edbcc70a07aa4b@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/nl80211.c

index 6239d2757f0b739fb58c171bfae8629967347fae..174f254ee947492979c0b4792735cf9e105920eb 100644 (file)
@@ -15287,23 +15287,79 @@ static int nl80211_set_fils_aad(struct sk_buff *skb,
 #define NL80211_FLAG_CLEAR_SKB         0x20
 #define NL80211_FLAG_NO_WIPHY_MTX      0x40
 
+#define INTERNAL_FLAG_SELECTORS(__sel)                 \
+       SELECTOR(__sel, NONE, 0) /* must be first */    \
+       SELECTOR(__sel, WIPHY,                          \
+                NL80211_FLAG_NEED_WIPHY)               \
+       SELECTOR(__sel, WDEV,                           \
+                NL80211_FLAG_NEED_WDEV)                \
+       SELECTOR(__sel, NETDEV,                         \
+                NL80211_FLAG_NEED_NETDEV)              \
+       SELECTOR(__sel, WIPHY_RTNL,                     \
+                NL80211_FLAG_NEED_WIPHY |              \
+                NL80211_FLAG_NEED_RTNL)                \
+       SELECTOR(__sel, WIPHY_RTNL_NOMTX,               \
+                NL80211_FLAG_NEED_WIPHY |              \
+                NL80211_FLAG_NEED_RTNL |               \
+                NL80211_FLAG_NO_WIPHY_MTX)             \
+       SELECTOR(__sel, WDEV_RTNL,                      \
+                NL80211_FLAG_NEED_WDEV |               \
+                NL80211_FLAG_NEED_RTNL)                \
+       SELECTOR(__sel, NETDEV_RTNL,                    \
+                NL80211_FLAG_NEED_NETDEV |             \
+                NL80211_FLAG_NEED_RTNL)                \
+       SELECTOR(__sel, NETDEV_UP,                      \
+                NL80211_FLAG_NEED_NETDEV_UP)           \
+       SELECTOR(__sel, NETDEV_UP_NOTMX,                \
+                NL80211_FLAG_NEED_NETDEV_UP |          \
+                NL80211_FLAG_NO_WIPHY_MTX)             \
+       SELECTOR(__sel, NETDEV_UP_CLEAR,                \
+                NL80211_FLAG_NEED_NETDEV_UP |          \
+                NL80211_FLAG_CLEAR_SKB)                \
+       SELECTOR(__sel, WDEV_UP,                        \
+                NL80211_FLAG_NEED_WDEV_UP)             \
+       SELECTOR(__sel, WDEV_UP_RTNL,                   \
+                NL80211_FLAG_NEED_WDEV_UP |            \
+                NL80211_FLAG_NEED_RTNL)                \
+       SELECTOR(__sel, WIPHY_CLEAR,                    \
+                NL80211_FLAG_NEED_WIPHY |              \
+                NL80211_FLAG_CLEAR_SKB)
+
+enum nl80211_internal_flags_selector {
+#define SELECTOR(_, name, value)       NL80211_IFL_SEL_##name,
+       INTERNAL_FLAG_SELECTORS(_)
+#undef SELECTOR
+};
+
+static u32 nl80211_internal_flags[] = {
+#define SELECTOR(_, name, value)       [NL80211_IFL_SEL_##name] = value,
+       INTERNAL_FLAG_SELECTORS(_)
+#undef SELECTOR
+};
+
 static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
                            struct genl_info *info)
 {
        struct cfg80211_registered_device *rdev = NULL;
        struct wireless_dev *wdev;
        struct net_device *dev;
+       u32 internal_flags;
+
+       if (WARN_ON(ops->internal_flags >= ARRAY_SIZE(nl80211_internal_flags)))
+               return -EINVAL;
+
+       internal_flags = nl80211_internal_flags[ops->internal_flags];
 
        rtnl_lock();
-       if (ops->internal_flags & NL80211_FLAG_NEED_WIPHY) {
+       if (internal_flags & NL80211_FLAG_NEED_WIPHY) {
                rdev = cfg80211_get_dev_from_info(genl_info_net(info), info);
                if (IS_ERR(rdev)) {
                        rtnl_unlock();
                        return PTR_ERR(rdev);
                }
                info->user_ptr[0] = rdev;
-       } else if (ops->internal_flags & NL80211_FLAG_NEED_NETDEV ||
-                  ops->internal_flags & NL80211_FLAG_NEED_WDEV) {
+       } else if (internal_flags & NL80211_FLAG_NEED_NETDEV ||
+                  internal_flags & NL80211_FLAG_NEED_WDEV) {
                wdev = __cfg80211_wdev_from_attrs(NULL, genl_info_net(info),
                                                  info->attrs);
                if (IS_ERR(wdev)) {
@@ -15314,7 +15370,7 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
                dev = wdev->netdev;
                rdev = wiphy_to_rdev(wdev->wiphy);
 
-               if (ops->internal_flags & NL80211_FLAG_NEED_NETDEV) {
+               if (internal_flags & NL80211_FLAG_NEED_NETDEV) {
                        if (!dev) {
                                rtnl_unlock();
                                return -EINVAL;
@@ -15325,7 +15381,7 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
                        info->user_ptr[1] = wdev;
                }
 
-               if (ops->internal_flags & NL80211_FLAG_CHECK_NETDEV_UP &&
+               if (internal_flags & NL80211_FLAG_CHECK_NETDEV_UP &&
                    !wdev_running(wdev)) {
                        rtnl_unlock();
                        return -ENETDOWN;
@@ -15335,12 +15391,12 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
                info->user_ptr[0] = rdev;
        }
 
-       if (rdev && !(ops->internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
+       if (rdev && !(internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
                wiphy_lock(&rdev->wiphy);
                /* we keep the mutex locked until post_doit */
                __release(&rdev->wiphy.mtx);
        }
-       if (!(ops->internal_flags & NL80211_FLAG_NEED_RTNL))
+       if (!(internal_flags & NL80211_FLAG_NEED_RTNL))
                rtnl_unlock();
 
        return 0;
@@ -15349,8 +15405,10 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
 static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
                              struct genl_info *info)
 {
+       u32 internal_flags = nl80211_internal_flags[ops->internal_flags];
+
        if (info->user_ptr[1]) {
-               if (ops->internal_flags & NL80211_FLAG_NEED_WDEV) {
+               if (internal_flags & NL80211_FLAG_NEED_WDEV) {
                        struct wireless_dev *wdev = info->user_ptr[1];
 
                        dev_put(wdev->netdev);
@@ -15360,7 +15418,7 @@ static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
        }
 
        if (info->user_ptr[0] &&
-           !(ops->internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
+           !(internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
                struct cfg80211_registered_device *rdev = info->user_ptr[0];
 
                /* we kept the mutex locked since pre_doit */
@@ -15368,7 +15426,7 @@ static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
                wiphy_unlock(&rdev->wiphy);
        }
 
-       if (ops->internal_flags & NL80211_FLAG_NEED_RTNL)
+       if (internal_flags & NL80211_FLAG_NEED_RTNL)
                rtnl_unlock();
 
        /* If needed, clear the netlink message payload from the SKB
@@ -15376,7 +15434,7 @@ static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
         * the heap after the SKB is freed. The netlink message header
         * is still needed for further processing, so leave it intact.
         */
-       if (ops->internal_flags & NL80211_FLAG_CLEAR_SKB) {
+       if (internal_flags & NL80211_FLAG_CLEAR_SKB) {
                struct nlmsghdr *nlh = nlmsg_hdr(skb);
 
                memset(nlmsg_data(nlh), 0, nlmsg_len(nlh));
@@ -15486,6 +15544,11 @@ error:
        return err;
 }
 
+#define SELECTOR(__sel, name, value) \
+       ((__sel) == (value)) ? NL80211_IFL_SEL_##name :
+int __missing_selector(void);
+#define IFLAGS(__val) INTERNAL_FLAG_SELECTORS(__val) __missing_selector()
+
 static const struct genl_ops nl80211_ops[] = {
        {
                .cmd = NL80211_CMD_GET_WIPHY,
@@ -15494,7 +15557,7 @@ static const struct genl_ops nl80211_ops[] = {
                .dumpit = nl80211_dump_wiphy,
                .done = nl80211_dump_wiphy_done,
                /* can be retrieved by unprivileged users */
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
 };
 
@@ -15511,112 +15574,113 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .doit = nl80211_get_interface,
                .dumpit = nl80211_dump_interface,
                /* can be retrieved by unprivileged users */
-               .internal_flags = NL80211_FLAG_NEED_WDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV),
        },
        {
                .cmd = NL80211_CMD_SET_INTERFACE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_interface,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_NEW_INTERFACE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_new_interface,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY |
-                                 NL80211_FLAG_NEED_RTNL |
-                                 /* we take the wiphy mutex later ourselves */
-                                 NL80211_FLAG_NO_WIPHY_MTX,
+               .internal_flags =
+                       IFLAGS(NL80211_FLAG_NEED_WIPHY |
+                              NL80211_FLAG_NEED_RTNL |
+                              /* we take the wiphy mutex later ourselves */
+                              NL80211_FLAG_NO_WIPHY_MTX),
        },
        {
                .cmd = NL80211_CMD_DEL_INTERFACE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_del_interface,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_GET_KEY,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_key,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_KEY,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_key,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_NEW_KEY,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_new_key,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_DEL_KEY,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_del_key,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_BEACON,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .flags = GENL_UNS_ADMIN_PERM,
                .doit = nl80211_set_beacon,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_START_AP,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .flags = GENL_UNS_ADMIN_PERM,
                .doit = nl80211_start_ap,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_STOP_AP,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .flags = GENL_UNS_ADMIN_PERM,
                .doit = nl80211_stop_ap,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_STATION,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_station,
                .dumpit = nl80211_dump_station,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_SET_STATION,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_station,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_NEW_STATION,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_new_station,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_DEL_STATION,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_del_station,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_MPATH,
@@ -15624,7 +15688,7 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .doit = nl80211_get_mpath,
                .dumpit = nl80211_dump_mpath,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_MPP,
@@ -15632,42 +15696,41 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .doit = nl80211_get_mpp,
                .dumpit = nl80211_dump_mpp,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_MPATH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_mpath,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_NEW_MPATH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_new_mpath,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_DEL_MPATH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_del_mpath,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_BSS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_bss,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_REG,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_reg_do,
                .dumpit = nl80211_get_reg_dump,
-               .internal_flags = 0,
                /* can be retrieved by unprivileged users */
        },
 #ifdef CONFIG_CFG80211_CRDA_SUPPORT
@@ -15676,7 +15739,6 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_reg,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = 0,
        },
 #endif
        {
@@ -15696,28 +15758,28 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_mesh_config,
                /* can be retrieved by unprivileged users */
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_MESH_CONFIG,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_update_mesh_config,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_TRIGGER_SCAN,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_trigger_scan,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_ABORT_SCAN,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_abort_scan,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_SCAN,
@@ -15729,60 +15791,58 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_start_sched_scan,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_STOP_SCHED_SCAN,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_stop_sched_scan,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_AUTHENTICATE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_authenticate,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_ASSOCIATE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_associate,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_DEAUTHENTICATE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_deauthenticate,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_DISASSOCIATE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_disassociate,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_JOIN_IBSS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_join_ibss,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_LEAVE_IBSS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_leave_ibss,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
 #ifdef CONFIG_NL80211_TESTMODE
        {
@@ -15791,7 +15851,7 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .doit = nl80211_testmode_do,
                .dumpit = nl80211_testmode_dump,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
 #endif
        {
@@ -15799,34 +15859,32 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_connect,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_update_connect_params,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_DISCONNECT,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_disconnect,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_WIPHY_NETNS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_wiphy_netns,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY |
-                                 NL80211_FLAG_NEED_RTNL |
-                                 NL80211_FLAG_NO_WIPHY_MTX,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY |
+                                        NL80211_FLAG_NEED_RTNL |
+                                        NL80211_FLAG_NO_WIPHY_MTX),
        },
        {
                .cmd = NL80211_CMD_GET_SURVEY,
@@ -15838,121 +15896,120 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_setdel_pmksa,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_DEL_PMKSA,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_setdel_pmksa,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_FLUSH_PMKSA,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_flush_pmksa,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_REMAIN_ON_CHANNEL,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_remain_on_channel,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_cancel_remain_on_channel,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_TX_BITRATE_MASK,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_tx_bitrate_mask,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_REGISTER_FRAME,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_register_mgmt,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV),
        },
        {
                .cmd = NL80211_CMD_FRAME,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tx_mgmt,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_FRAME_WAIT_CANCEL,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tx_mgmt_cancel_wait,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_POWER_SAVE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_power_save,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_GET_POWER_SAVE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_power_save,
                /* can be retrieved by unprivileged users */
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_SET_CQM,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_cqm,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_SET_CHANNEL,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_channel,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_JOIN_MESH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_join_mesh,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_LEAVE_MESH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_leave_mesh,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_JOIN_OCB,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_join_ocb,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_LEAVE_OCB,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_leave_ocb,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
 #ifdef CONFIG_PM
        {
@@ -15960,14 +16017,14 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_wowlan,
                /* can be retrieved by unprivileged users */
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
        {
                .cmd = NL80211_CMD_SET_WOWLAN,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_wowlan,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
 #endif
        {
@@ -15975,126 +16032,125 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_rekey_data,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_TDLS_MGMT,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tdls_mgmt,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_TDLS_OPER,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tdls_oper,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_UNEXPECTED_FRAME,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_register_unexpected_frame,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_PROBE_CLIENT,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_probe_client,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_REGISTER_BEACONS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_register_beacons,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
        {
                .cmd = NL80211_CMD_SET_NOACK_MAP,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_noack_map,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_START_P2P_DEVICE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_start_p2p_device,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_STOP_P2P_DEVICE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_stop_p2p_device,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_START_NAN,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_start_nan,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_STOP_NAN,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_stop_nan,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_ADD_NAN_FUNCTION,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_nan_add_func,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_DEL_NAN_FUNCTION,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_nan_del_func,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_CHANGE_NAN_CONFIG,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_nan_change_config,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_MCAST_RATE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_mcast_rate,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_SET_MAC_ACL,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_mac_acl,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_RADAR_DETECT,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_start_radar_detection,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 NL80211_FLAG_NO_WIPHY_MTX,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_NO_WIPHY_MTX),
        },
        {
                .cmd = NL80211_CMD_GET_PROTOCOL_FEATURES,
@@ -16106,41 +16162,41 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_update_ft_ies,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_CRIT_PROTOCOL_START,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_crit_protocol_start,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_crit_protocol_stop,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_COALESCE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_coalesce,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
        {
                .cmd = NL80211_CMD_SET_COALESCE,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_coalesce,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY),
        },
        {
                .cmd = NL80211_CMD_CHANNEL_SWITCH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_channel_switch,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_VENDOR,
@@ -16148,139 +16204,137 @@ static const struct genl_small_ops nl80211_small_ops[] = {
                .doit = nl80211_vendor_cmd,
                .dumpit = nl80211_vendor_cmd_dump,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_SET_QOS_MAP,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_qos_map,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_ADD_TX_TS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_add_tx_ts,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_DEL_TX_TS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_del_tx_ts,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tdls_channel_switch,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tdls_cancel_channel_switch,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_MULTICAST_TO_UNICAST,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_multicast_to_unicast,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_SET_PMK,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_pmk,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
-                                 0 |
-                                 NL80211_FLAG_CLEAR_SKB,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP |
+                                        NL80211_FLAG_CLEAR_SKB),
        },
        {
                .cmd = NL80211_CMD_DEL_PMK,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_del_pmk,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_EXTERNAL_AUTH,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_external_auth,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_CONTROL_PORT_FRAME,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_tx_control_port,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_GET_FTM_RESPONDER_STATS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_get_ftm_responder_stats,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_PEER_MEASUREMENT_START,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_pmsr_start,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV_UP),
        },
        {
                .cmd = NL80211_CMD_NOTIFY_RADAR,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_notify_radar_detection,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_UPDATE_OWE_INFO,
                .doit = nl80211_update_owe_info,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_PROBE_MESH_LINK,
                .doit = nl80211_probe_mesh_link,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_TID_CONFIG,
                .doit = nl80211_set_tid_config,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV),
        },
        {
                .cmd = NL80211_CMD_SET_SAR_SPECS,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_sar_specs,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_WIPHY |
-                                 NL80211_FLAG_NEED_RTNL,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_WIPHY |
+                                        NL80211_FLAG_NEED_RTNL),
        },
        {
                .cmd = NL80211_CMD_COLOR_CHANGE_REQUEST,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_color_change,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
        {
                .cmd = NL80211_CMD_SET_FILS_AAD,
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = nl80211_set_fils_aad,
                .flags = GENL_UNS_ADMIN_PERM,
-               .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+               .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP),
        },
 };