ethtool: trim policy tables
authorJakub Kicinski <kuba@kernel.org>
Mon, 5 Oct 2020 22:07:35 +0000 (15:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Oct 2020 13:25:55 +0000 (06:25 -0700)
Since ethtool uses strict attribute validation there's no need
to initialize all attributes in policy tables. 0 is NLA_UNSPEC
which is going to be rejected. Remove the NLA_REJECTs.

Similarly attributes above maxattrs are rejected, so there's
no need to always size the policy tables to ETHTOOL_A_..._MAX.

v2: - new patch

Suggested-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
19 files changed:
net/ethtool/bitset.c
net/ethtool/cabletest.c
net/ethtool/channels.c
net/ethtool/coalesce.c
net/ethtool/debug.c
net/ethtool/eee.c
net/ethtool/features.c
net/ethtool/linkinfo.c
net/ethtool/linkmodes.c
net/ethtool/linkstate.c
net/ethtool/netlink.c
net/ethtool/netlink.h
net/ethtool/pause.c
net/ethtool/privflags.c
net/ethtool/rings.c
net/ethtool/strset.c
net/ethtool/tsinfo.c
net/ethtool/tunnels.c
net/ethtool/wol.c

index dae7402eaca39343b41948d891985ea9484383e2..1fb3603d92ad30a3f0f8d097f52694097edd1bb7 100644 (file)
@@ -302,8 +302,7 @@ nla_put_failure:
        return -EMSGSIZE;
 }
 
-static const struct nla_policy bitset_policy[ETHTOOL_A_BITSET_MAX + 1] = {
-       [ETHTOOL_A_BITSET_UNSPEC]       = { .type = NLA_REJECT },
+static const struct nla_policy bitset_policy[] = {
        [ETHTOOL_A_BITSET_NOMASK]       = { .type = NLA_FLAG },
        [ETHTOOL_A_BITSET_SIZE]         = NLA_POLICY_MAX(NLA_U32,
                                                         ETHNL_MAX_BITSET_SIZE),
@@ -312,8 +311,7 @@ static const struct nla_policy bitset_policy[ETHTOOL_A_BITSET_MAX + 1] = {
        [ETHTOOL_A_BITSET_MASK]         = { .type = NLA_BINARY },
 };
 
-static const struct nla_policy bit_policy[ETHTOOL_A_BITSET_BIT_MAX + 1] = {
-       [ETHTOOL_A_BITSET_BIT_UNSPEC]   = { .type = NLA_REJECT },
+static const struct nla_policy bit_policy[] = {
        [ETHTOOL_A_BITSET_BIT_INDEX]    = { .type = NLA_U32 },
        [ETHTOOL_A_BITSET_BIT_NAME]     = { .type = NLA_NUL_STRING },
        [ETHTOOL_A_BITSET_BIT_VALUE]    = { .type = NLA_FLAG },
@@ -329,10 +327,10 @@ static const struct nla_policy bit_policy[ETHTOOL_A_BITSET_BIT_MAX + 1] = {
  */
 int ethnl_bitset_is_compact(const struct nlattr *bitset, bool *compact)
 {
-       struct nlattr *tb[ETHTOOL_A_BITSET_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(bitset_policy)];
        int ret;
 
-       ret = nla_parse_nested(tb, ETHTOOL_A_BITSET_MAX, bitset,
+       ret = nla_parse_nested(tb, ARRAY_SIZE(bitset_policy) - 1, bitset,
                               bitset_policy, NULL);
        if (ret < 0)
                return ret;
@@ -381,10 +379,10 @@ static int ethnl_parse_bit(unsigned int *index, bool *val, unsigned int nbits,
                           ethnl_string_array_t names,
                           struct netlink_ext_ack *extack)
 {
-       struct nlattr *tb[ETHTOOL_A_BITSET_BIT_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(bit_policy)];
        int ret, idx;
 
-       ret = nla_parse_nested(tb, ETHTOOL_A_BITSET_BIT_MAX, bit_attr,
+       ret = nla_parse_nested(tb, ARRAY_SIZE(bit_policy) - 1, bit_attr,
                               bit_policy, extack);
        if (ret < 0)
                return ret;
@@ -555,15 +553,15 @@ int ethnl_update_bitset32(u32 *bitmap, unsigned int nbits,
                          const struct nlattr *attr, ethnl_string_array_t names,
                          struct netlink_ext_ack *extack, bool *mod)
 {
-       struct nlattr *tb[ETHTOOL_A_BITSET_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(bitset_policy)];
        unsigned int change_bits;
        bool no_mask;
        int ret;
 
        if (!attr)
                return 0;
-       ret = nla_parse_nested(tb, ETHTOOL_A_BITSET_MAX, attr, bitset_policy,
-                              extack);
+       ret = nla_parse_nested(tb, ARRAY_SIZE(bitset_policy) - 1, attr,
+                              bitset_policy, extack);
        if (ret < 0)
                return ret;
 
@@ -608,7 +606,7 @@ int ethnl_parse_bitset(unsigned long *val, unsigned long *mask,
                       ethnl_string_array_t names,
                       struct netlink_ext_ack *extack)
 {
-       struct nlattr *tb[ETHTOOL_A_BITSET_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(bitset_policy)];
        const struct nlattr *bit_attr;
        bool no_mask;
        int rem;
@@ -616,8 +614,8 @@ int ethnl_parse_bitset(unsigned long *val, unsigned long *mask,
 
        if (!attr)
                return 0;
-       ret = nla_parse_nested(tb, ETHTOOL_A_BITSET_MAX, attr, bitset_policy,
-                              extack);
+       ret = nla_parse_nested(tb, ARRAY_SIZE(bitset_policy) - 1, attr,
+                              bitset_policy, extack);
        if (ret < 0)
                return ret;
        no_mask = tb[ETHTOOL_A_BITSET_NOMASK];
index beb85e0b7fc6c4e4a97ed0be515118b7e08608a1..6f3328be65926709ddfd58460a1906ad019d0098 100644 (file)
@@ -11,9 +11,7 @@
  */
 #define MAX_CABLE_LENGTH_CM (150 * 100)
 
-const struct nla_policy
-ethnl_cable_test_act_policy[ETHTOOL_A_CABLE_TEST_MAX + 1] = {
-       [ETHTOOL_A_CABLE_TEST_UNSPEC]           = { .type = NLA_REJECT },
+const struct nla_policy ethnl_cable_test_act_policy[] = {
        [ETHTOOL_A_CABLE_TEST_HEADER]           = { .type = NLA_NESTED },
 };
 
@@ -212,17 +210,14 @@ struct cable_test_tdr_req_info {
        struct ethnl_req_info           base;
 };
 
-static const struct nla_policy
-cable_test_tdr_act_cfg_policy[ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX + 1] = {
+static const struct nla_policy cable_test_tdr_act_cfg_policy[] = {
        [ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST]    = { .type = NLA_U32 },
        [ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST]     = { .type = NLA_U32 },
        [ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP]     = { .type = NLA_U32 },
        [ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR]     = { .type = NLA_U8 },
 };
 
-const struct nla_policy
-ethnl_cable_test_tdr_act_policy[ETHTOOL_A_CABLE_TEST_TDR_MAX + 1] = {
-       [ETHTOOL_A_CABLE_TEST_TDR_UNSPEC]       = { .type = NLA_REJECT },
+const struct nla_policy ethnl_cable_test_tdr_act_policy[] = {
        [ETHTOOL_A_CABLE_TEST_TDR_HEADER]       = { .type = NLA_NESTED },
        [ETHTOOL_A_CABLE_TEST_TDR_CFG]          = { .type = NLA_NESTED },
 };
@@ -232,7 +227,7 @@ static int ethnl_act_cable_test_tdr_cfg(const struct nlattr *nest,
                                        struct genl_info *info,
                                        struct phy_tdr_config *cfg)
 {
-       struct nlattr *tb[ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(cable_test_tdr_act_cfg_policy)];
        int ret;
 
        cfg->first = 100;
@@ -243,8 +238,10 @@ static int ethnl_act_cable_test_tdr_cfg(const struct nlattr *nest,
        if (!nest)
                return 0;
 
-       ret = nla_parse_nested(tb, ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX, nest,
-                              cable_test_tdr_act_cfg_policy, info->extack);
+       ret = nla_parse_nested(tb,
+                              ARRAY_SIZE(cable_test_tdr_act_cfg_policy) - 1,
+                              nest, cable_test_tdr_act_cfg_policy,
+                              info->extack);
        if (ret < 0)
                return ret;
 
index 52227c6dcb59b4402128935565442d0a548eca4f..2a0cea0ad6488ccad850bb6c681ace5d4d6bb3c5 100644 (file)
@@ -17,18 +17,8 @@ struct channels_reply_data {
 #define CHANNELS_REPDATA(__reply_base) \
        container_of(__reply_base, struct channels_reply_data, base)
 
-const struct nla_policy
-ethnl_channels_get_policy[ETHTOOL_A_CHANNELS_MAX + 1] = {
-       [ETHTOOL_A_CHANNELS_UNSPEC]             = { .type = NLA_REJECT },
+const struct nla_policy ethnl_channels_get_policy[] = {
        [ETHTOOL_A_CHANNELS_HEADER]             = { .type = NLA_NESTED },
-       [ETHTOOL_A_CHANNELS_RX_MAX]             = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_TX_MAX]             = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_OTHER_MAX]          = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_COMBINED_MAX]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_RX_COUNT]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_TX_COUNT]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_OTHER_COUNT]        = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_COMBINED_COUNT]     = { .type = NLA_REJECT },
 };
 
 static int channels_prepare_data(const struct ethnl_req_info *req_base,
@@ -109,14 +99,8 @@ const struct ethnl_request_ops ethnl_channels_request_ops = {
 
 /* CHANNELS_SET */
 
-const struct nla_policy
-ethnl_channels_set_policy[ETHTOOL_A_CHANNELS_MAX + 1] = {
-       [ETHTOOL_A_CHANNELS_UNSPEC]             = { .type = NLA_REJECT },
+const struct nla_policy ethnl_channels_set_policy[] = {
        [ETHTOOL_A_CHANNELS_HEADER]             = { .type = NLA_NESTED },
-       [ETHTOOL_A_CHANNELS_RX_MAX]             = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_TX_MAX]             = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_OTHER_MAX]          = { .type = NLA_REJECT },
-       [ETHTOOL_A_CHANNELS_COMBINED_MAX]       = { .type = NLA_REJECT },
        [ETHTOOL_A_CHANNELS_RX_COUNT]           = { .type = NLA_U32 },
        [ETHTOOL_A_CHANNELS_TX_COUNT]           = { .type = NLA_U32 },
        [ETHTOOL_A_CHANNELS_OTHER_COUNT]        = { .type = NLA_U32 },
index 728cfe5cd5271cb3202826117b22f0aa3e07f8a5..c46d4247403a4d784d411aee3ed49996a95ae885 100644 (file)
@@ -51,32 +51,8 @@ __CHECK_SUPPORTED_OFFSET(COALESCE_TX_USECS_HIGH);
 __CHECK_SUPPORTED_OFFSET(COALESCE_TX_MAX_FRAMES_HIGH);
 __CHECK_SUPPORTED_OFFSET(COALESCE_RATE_SAMPLE_INTERVAL);
 
-const struct nla_policy
-ethnl_coalesce_get_policy[ETHTOOL_A_COALESCE_MAX + 1] = {
-       [ETHTOOL_A_COALESCE_UNSPEC]             = { .type = NLA_REJECT },
+const struct nla_policy ethnl_coalesce_get_policy[] = {
        [ETHTOOL_A_COALESCE_HEADER]             = { .type = NLA_NESTED },
-       [ETHTOOL_A_COALESCE_RX_USECS]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_MAX_FRAMES]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_USECS_IRQ]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_USECS]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_MAX_FRAMES]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_USECS_IRQ]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_STATS_BLOCK_USECS]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX]    = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX]    = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_PKT_RATE_LOW]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_USECS_LOW]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_USECS_LOW]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_PKT_RATE_HIGH]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_USECS_HIGH]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH] = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_USECS_HIGH]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH] = { .type = NLA_REJECT },
-       [ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL] = { .type = NLA_REJECT },
 };
 
 static int coalesce_prepare_data(const struct ethnl_req_info *req_base,
@@ -213,9 +189,7 @@ const struct ethnl_request_ops ethnl_coalesce_request_ops = {
 
 /* COALESCE_SET */
 
-const struct nla_policy
-ethnl_coalesce_set_policy[ETHTOOL_A_COALESCE_MAX + 1] = {
-       [ETHTOOL_A_COALESCE_UNSPEC]             = { .type = NLA_REJECT },
+const struct nla_policy ethnl_coalesce_set_policy[] = {
        [ETHTOOL_A_COALESCE_HEADER]             = { .type = NLA_NESTED },
        [ETHTOOL_A_COALESCE_RX_USECS]           = { .type = NLA_U32 },
        [ETHTOOL_A_COALESCE_RX_MAX_FRAMES]      = { .type = NLA_U32 },
index 0f40fc9215467a781cb7784367e82ec8114153c7..dbd3243ccae5fade731a70ac8c69ca53c1cedc72 100644 (file)
@@ -16,10 +16,8 @@ struct debug_reply_data {
 #define DEBUG_REPDATA(__reply_base) \
        container_of(__reply_base, struct debug_reply_data, base)
 
-const struct nla_policy ethnl_debug_get_policy[ETHTOOL_A_DEBUG_MAX + 1] = {
-       [ETHTOOL_A_DEBUG_UNSPEC]        = { .type = NLA_REJECT },
+const struct nla_policy ethnl_debug_get_policy[] = {
        [ETHTOOL_A_DEBUG_HEADER]        = { .type = NLA_NESTED },
-       [ETHTOOL_A_DEBUG_MSGMASK]       = { .type = NLA_REJECT },
 };
 
 static int debug_prepare_data(const struct ethnl_req_info *req_base,
@@ -78,8 +76,7 @@ const struct ethnl_request_ops ethnl_debug_request_ops = {
 
 /* DEBUG_SET */
 
-const struct nla_policy ethnl_debug_set_policy[ETHTOOL_A_DEBUG_MAX + 1] = {
-       [ETHTOOL_A_DEBUG_UNSPEC]        = { .type = NLA_REJECT },
+const struct nla_policy ethnl_debug_set_policy[] = {
        [ETHTOOL_A_DEBUG_HEADER]        = { .type = NLA_NESTED },
        [ETHTOOL_A_DEBUG_MSGMASK]       = { .type = NLA_NESTED },
 };
index 6e35a041869b01c7c1008bbea4f95c8293ccfd3b..d40a573d1ebaec56c5c6c18cdd3f9a23cd3672ab 100644 (file)
@@ -19,15 +19,8 @@ struct eee_reply_data {
 #define EEE_REPDATA(__reply_base) \
        container_of(__reply_base, struct eee_reply_data, base)
 
-const struct nla_policy ethnl_eee_get_policy[ETHTOOL_A_EEE_MAX + 1] = {
-       [ETHTOOL_A_EEE_UNSPEC]          = { .type = NLA_REJECT },
+const struct nla_policy ethnl_eee_get_policy[] = {
        [ETHTOOL_A_EEE_HEADER]          = { .type = NLA_NESTED },
-       [ETHTOOL_A_EEE_MODES_OURS]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_EEE_MODES_PEER]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_EEE_ACTIVE]          = { .type = NLA_REJECT },
-       [ETHTOOL_A_EEE_ENABLED]         = { .type = NLA_REJECT },
-       [ETHTOOL_A_EEE_TX_LPI_ENABLED]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_EEE_TX_LPI_TIMER]    = { .type = NLA_REJECT },
 };
 
 static int eee_prepare_data(const struct ethnl_req_info *req_base,
@@ -128,12 +121,9 @@ const struct ethnl_request_ops ethnl_eee_request_ops = {
 
 /* EEE_SET */
 
-const struct nla_policy ethnl_eee_set_policy[ETHTOOL_A_EEE_MAX + 1] = {
-       [ETHTOOL_A_EEE_UNSPEC]          = { .type = NLA_REJECT },
+const struct nla_policy ethnl_eee_set_policy[] = {
        [ETHTOOL_A_EEE_HEADER]          = { .type = NLA_NESTED },
        [ETHTOOL_A_EEE_MODES_OURS]      = { .type = NLA_NESTED },
-       [ETHTOOL_A_EEE_MODES_PEER]      = { .type = NLA_REJECT },
-       [ETHTOOL_A_EEE_ACTIVE]          = { .type = NLA_REJECT },
        [ETHTOOL_A_EEE_ENABLED]         = { .type = NLA_U8 },
        [ETHTOOL_A_EEE_TX_LPI_ENABLED]  = { .type = NLA_U8 },
        [ETHTOOL_A_EEE_TX_LPI_TIMER]    = { .type = NLA_U32 },
index e4a91d86824dfe0f6d74b89eb6dcdf48c133e57d..920386cf7d0aad638d235425794203a9041747ac 100644 (file)
@@ -20,14 +20,8 @@ struct features_reply_data {
 #define FEATURES_REPDATA(__reply_base) \
        container_of(__reply_base, struct features_reply_data, base)
 
-const struct nla_policy
-ethnl_features_get_policy[ETHTOOL_A_FEATURES_MAX + 1] = {
-       [ETHTOOL_A_FEATURES_UNSPEC]     = { .type = NLA_REJECT },
+const struct nla_policy ethnl_features_get_policy[] = {
        [ETHTOOL_A_FEATURES_HEADER]     = { .type = NLA_NESTED },
-       [ETHTOOL_A_FEATURES_HW]         = { .type = NLA_REJECT },
-       [ETHTOOL_A_FEATURES_WANTED]     = { .type = NLA_REJECT },
-       [ETHTOOL_A_FEATURES_ACTIVE]     = { .type = NLA_REJECT },
-       [ETHTOOL_A_FEATURES_NOCHANGE]   = { .type = NLA_REJECT },
 };
 
 static void ethnl_features_to_bitmap32(u32 *dest, netdev_features_t src)
@@ -130,14 +124,9 @@ const struct ethnl_request_ops ethnl_features_request_ops = {
 
 /* FEATURES_SET */
 
-const struct nla_policy
-ethnl_features_set_policy[ETHTOOL_A_FEATURES_MAX + 1] = {
-       [ETHTOOL_A_FEATURES_UNSPEC]     = { .type = NLA_REJECT },
+const struct nla_policy ethnl_features_set_policy[] = {
        [ETHTOOL_A_FEATURES_HEADER]     = { .type = NLA_NESTED },
-       [ETHTOOL_A_FEATURES_HW]         = { .type = NLA_REJECT },
        [ETHTOOL_A_FEATURES_WANTED]     = { .type = NLA_NESTED },
-       [ETHTOOL_A_FEATURES_ACTIVE]     = { .type = NLA_REJECT },
-       [ETHTOOL_A_FEATURES_NOCHANGE]   = { .type = NLA_REJECT },
 };
 
 static void ethnl_features_to_bitmap(unsigned long *dest, netdev_features_t val)
index ba66ca54b9c230048aee01711448399f20a55c25..0c9161801bc781a1278f0a933d4c92cc5b2dd192 100644 (file)
@@ -16,15 +16,8 @@ struct linkinfo_reply_data {
 #define LINKINFO_REPDATA(__reply_base) \
        container_of(__reply_base, struct linkinfo_reply_data, base)
 
-const struct nla_policy
-ethnl_linkinfo_get_policy[ETHTOOL_A_LINKINFO_MAX + 1] = {
-       [ETHTOOL_A_LINKINFO_UNSPEC]             = { .type = NLA_REJECT },
+const struct nla_policy ethnl_linkinfo_get_policy[] = {
        [ETHTOOL_A_LINKINFO_HEADER]             = { .type = NLA_NESTED },
-       [ETHTOOL_A_LINKINFO_PORT]               = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKINFO_PHYADDR]            = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKINFO_TP_MDIX]            = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKINFO_TP_MDIX_CTRL]       = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKINFO_TRANSCEIVER]        = { .type = NLA_REJECT },
 };
 
 static int linkinfo_prepare_data(const struct ethnl_req_info *req_base,
@@ -93,15 +86,11 @@ const struct ethnl_request_ops ethnl_linkinfo_request_ops = {
 
 /* LINKINFO_SET */
 
-const struct nla_policy
-ethnl_linkinfo_set_policy[ETHTOOL_A_LINKINFO_MAX + 1] = {
-       [ETHTOOL_A_LINKINFO_UNSPEC]             = { .type = NLA_REJECT },
+const struct nla_policy ethnl_linkinfo_set_policy[] = {
        [ETHTOOL_A_LINKINFO_HEADER]             = { .type = NLA_NESTED },
        [ETHTOOL_A_LINKINFO_PORT]               = { .type = NLA_U8 },
        [ETHTOOL_A_LINKINFO_PHYADDR]            = { .type = NLA_U8 },
-       [ETHTOOL_A_LINKINFO_TP_MDIX]            = { .type = NLA_REJECT },
        [ETHTOOL_A_LINKINFO_TP_MDIX_CTRL]       = { .type = NLA_U8 },
-       [ETHTOOL_A_LINKINFO_TRANSCEIVER]        = { .type = NLA_REJECT },
 };
 
 int ethnl_set_linkinfo(struct sk_buff *skb, struct genl_info *info)
index 77f0096bda2cae570515c759c6f7ddb8a87b8be2..dcef79b6a2d2c29d94209074d4bf7ba9131a0032 100644 (file)
@@ -18,17 +18,8 @@ struct linkmodes_reply_data {
 #define LINKMODES_REPDATA(__reply_base) \
        container_of(__reply_base, struct linkmodes_reply_data, base)
 
-const struct nla_policy
-ethnl_linkmodes_get_policy[ETHTOOL_A_LINKMODES_MAX + 1] = {
-       [ETHTOOL_A_LINKMODES_UNSPEC]            = { .type = NLA_REJECT },
+const struct nla_policy ethnl_linkmodes_get_policy[] = {
        [ETHTOOL_A_LINKMODES_HEADER]            = { .type = NLA_NESTED },
-       [ETHTOOL_A_LINKMODES_AUTONEG]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKMODES_OURS]              = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKMODES_PEER]              = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKMODES_SPEED]             = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKMODES_DUPLEX]            = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG]  = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE]        = { .type = NLA_REJECT },
 };
 
 static int linkmodes_prepare_data(const struct ethnl_req_info *req_base,
@@ -274,17 +265,13 @@ static const struct link_mode_info link_mode_params[] = {
        __DEFINE_LINK_MODE_PARAMS(100, FX, Full),
 };
 
-const struct nla_policy
-ethnl_linkmodes_set_policy[ETHTOOL_A_LINKMODES_MAX + 1] = {
-       [ETHTOOL_A_LINKMODES_UNSPEC]            = { .type = NLA_REJECT },
+const struct nla_policy ethnl_linkmodes_set_policy[] = {
        [ETHTOOL_A_LINKMODES_HEADER]            = { .type = NLA_NESTED },
        [ETHTOOL_A_LINKMODES_AUTONEG]           = { .type = NLA_U8 },
        [ETHTOOL_A_LINKMODES_OURS]              = { .type = NLA_NESTED },
-       [ETHTOOL_A_LINKMODES_PEER]              = { .type = NLA_REJECT },
        [ETHTOOL_A_LINKMODES_SPEED]             = { .type = NLA_U32 },
        [ETHTOOL_A_LINKMODES_DUPLEX]            = { .type = NLA_U8 },
        [ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG]  = { .type = NLA_U8 },
-       [ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE]        = { .type = NLA_REJECT },
 };
 
 /* Set advertised link modes to all supported modes matching requested speed
index ebd6dcff1dadbd8210fa845cc7e4587289098f11..fc36e73d8b7f0297e5cd6ba1d068fb32638f111a 100644 (file)
@@ -20,15 +20,8 @@ struct linkstate_reply_data {
 #define LINKSTATE_REPDATA(__reply_base) \
        container_of(__reply_base, struct linkstate_reply_data, base)
 
-const struct nla_policy
-ethnl_linkstate_get_policy[ETHTOOL_A_LINKSTATE_MAX + 1] = {
-       [ETHTOOL_A_LINKSTATE_UNSPEC]            = { .type = NLA_REJECT },
+const struct nla_policy ethnl_linkstate_get_policy[] = {
        [ETHTOOL_A_LINKSTATE_HEADER]            = { .type = NLA_NESTED },
-       [ETHTOOL_A_LINKSTATE_LINK]              = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKSTATE_SQI]               = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKSTATE_SQI_MAX]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKSTATE_EXT_STATE]         = { .type = NLA_REJECT },
-       [ETHTOOL_A_LINKSTATE_EXT_SUBSTATE]      = { .type = NLA_REJECT },
 };
 
 static int linkstate_get_sqi(struct net_device *dev)
index 5b547507245f5e798b69e7ac5bebb047230c3959..b8369ea54af1edc7de3353261345128c042027b6 100644 (file)
@@ -9,8 +9,7 @@ static struct genl_family ethtool_genl_family;
 static bool ethnl_ok __read_mostly;
 static u32 ethnl_bcast_seq;
 
-static const struct nla_policy ethnl_header_policy[ETHTOOL_A_HEADER_MAX + 1] = {
-       [ETHTOOL_A_HEADER_UNSPEC]       = { .type = NLA_REJECT },
+static const struct nla_policy ethnl_header_policy[] = {
        [ETHTOOL_A_HEADER_DEV_INDEX]    = { .type = NLA_U32 },
        [ETHTOOL_A_HEADER_DEV_NAME]     = { .type = NLA_NUL_STRING,
                                            .len = ALTIFNAMSIZ - 1 },
@@ -37,7 +36,7 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info,
                               const struct nlattr *header, struct net *net,
                               struct netlink_ext_ack *extack, bool require_dev)
 {
-       struct nlattr *tb[ETHTOOL_A_HEADER_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(ethnl_header_policy)];
        const struct nlattr *devname_attr;
        struct net_device *dev = NULL;
        u32 flags = 0;
@@ -47,7 +46,7 @@ int ethnl_parse_header_dev_get(struct ethnl_req_info *req_info,
                NL_SET_ERR_MSG(extack, "request header missing");
                return -EINVAL;
        }
-       ret = nla_parse_nested(tb, ETHTOOL_A_HEADER_MAX, header,
+       ret = nla_parse_nested(tb, ARRAY_SIZE(ethnl_header_policy) - 1, header,
                               ethnl_header_policy, extack);
        if (ret < 0)
                return ret;
index 7fee8ba81ef5bf1a4a533470f452ed158275ca00..2cfbc016393c3bf47dc8168ccf292f9682f18382 100644 (file)
@@ -345,34 +345,34 @@ extern const struct ethnl_request_ops ethnl_pause_request_ops;
 extern const struct ethnl_request_ops ethnl_eee_request_ops;
 extern const struct ethnl_request_ops ethnl_tsinfo_request_ops;
 
-extern const struct nla_policy ethnl_strset_get_policy[ETHTOOL_A_STRSET_MAX + 1];
-extern const struct nla_policy ethnl_linkinfo_get_policy[ETHTOOL_A_LINKINFO_MAX + 1];
-extern const struct nla_policy ethnl_linkinfo_set_policy[ETHTOOL_A_LINKINFO_MAX + 1];
-extern const struct nla_policy ethnl_linkmodes_get_policy[ETHTOOL_A_LINKMODES_MAX + 1];
-extern const struct nla_policy ethnl_linkmodes_set_policy[ETHTOOL_A_LINKMODES_MAX + 1];
-extern const struct nla_policy ethnl_linkstate_get_policy[ETHTOOL_A_LINKSTATE_MAX + 1];
-extern const struct nla_policy ethnl_debug_get_policy[ETHTOOL_A_DEBUG_MAX + 1];
-extern const struct nla_policy ethnl_debug_set_policy[ETHTOOL_A_DEBUG_MAX + 1];
-extern const struct nla_policy ethnl_wol_get_policy[ETHTOOL_A_WOL_MAX + 1];
-extern const struct nla_policy ethnl_wol_set_policy[ETHTOOL_A_WOL_MAX + 1];
-extern const struct nla_policy ethnl_features_get_policy[ETHTOOL_A_FEATURES_MAX + 1];
-extern const struct nla_policy ethnl_features_set_policy[ETHTOOL_A_FEATURES_MAX + 1];
-extern const struct nla_policy ethnl_privflags_get_policy[ETHTOOL_A_PRIVFLAGS_MAX + 1];
-extern const struct nla_policy ethnl_privflags_set_policy[ETHTOOL_A_PRIVFLAGS_MAX + 1];
-extern const struct nla_policy ethnl_rings_get_policy[ETHTOOL_A_RINGS_MAX + 1];
-extern const struct nla_policy ethnl_rings_set_policy[ETHTOOL_A_RINGS_MAX + 1];
-extern const struct nla_policy ethnl_channels_get_policy[ETHTOOL_A_CHANNELS_MAX + 1];
-extern const struct nla_policy ethnl_channels_set_policy[ETHTOOL_A_CHANNELS_MAX + 1];
-extern const struct nla_policy ethnl_coalesce_get_policy[ETHTOOL_A_COALESCE_MAX + 1];
-extern const struct nla_policy ethnl_coalesce_set_policy[ETHTOOL_A_COALESCE_MAX + 1];
-extern const struct nla_policy ethnl_pause_get_policy[ETHTOOL_A_PAUSE_MAX + 1];
-extern const struct nla_policy ethnl_pause_set_policy[ETHTOOL_A_PAUSE_MAX + 1];
-extern const struct nla_policy ethnl_eee_get_policy[ETHTOOL_A_EEE_MAX + 1];
-extern const struct nla_policy ethnl_eee_set_policy[ETHTOOL_A_EEE_MAX + 1];
-extern const struct nla_policy ethnl_tsinfo_get_policy[ETHTOOL_A_TSINFO_MAX + 1];
-extern const struct nla_policy ethnl_cable_test_act_policy[ETHTOOL_A_CABLE_TEST_MAX + 1];
-extern const struct nla_policy ethnl_cable_test_tdr_act_policy[ETHTOOL_A_CABLE_TEST_TDR_MAX + 1];
-extern const struct nla_policy ethnl_tunnel_info_get_policy[ETHTOOL_A_TUNNEL_INFO_MAX + 1];
+extern const struct nla_policy ethnl_strset_get_policy[ETHTOOL_A_STRSET_STRINGSETS + 1];
+extern const struct nla_policy ethnl_linkinfo_get_policy[ETHTOOL_A_LINKINFO_HEADER + 1];
+extern const struct nla_policy ethnl_linkinfo_set_policy[ETHTOOL_A_LINKINFO_TP_MDIX_CTRL + 1];
+extern const struct nla_policy ethnl_linkmodes_get_policy[ETHTOOL_A_LINKMODES_HEADER + 1];
+extern const struct nla_policy ethnl_linkmodes_set_policy[ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG + 1];
+extern const struct nla_policy ethnl_linkstate_get_policy[ETHTOOL_A_LINKSTATE_HEADER + 1];
+extern const struct nla_policy ethnl_debug_get_policy[ETHTOOL_A_DEBUG_HEADER + 1];
+extern const struct nla_policy ethnl_debug_set_policy[ETHTOOL_A_DEBUG_MSGMASK + 1];
+extern const struct nla_policy ethnl_wol_get_policy[ETHTOOL_A_WOL_HEADER + 1];
+extern const struct nla_policy ethnl_wol_set_policy[ETHTOOL_A_WOL_SOPASS + 1];
+extern const struct nla_policy ethnl_features_get_policy[ETHTOOL_A_FEATURES_HEADER + 1];
+extern const struct nla_policy ethnl_features_set_policy[ETHTOOL_A_FEATURES_WANTED + 1];
+extern const struct nla_policy ethnl_privflags_get_policy[ETHTOOL_A_PRIVFLAGS_HEADER + 1];
+extern const struct nla_policy ethnl_privflags_set_policy[ETHTOOL_A_PRIVFLAGS_FLAGS + 1];
+extern const struct nla_policy ethnl_rings_get_policy[ETHTOOL_A_RINGS_HEADER + 1];
+extern const struct nla_policy ethnl_rings_set_policy[ETHTOOL_A_RINGS_TX + 1];
+extern const struct nla_policy ethnl_channels_get_policy[ETHTOOL_A_CHANNELS_HEADER + 1];
+extern const struct nla_policy ethnl_channels_set_policy[ETHTOOL_A_CHANNELS_COMBINED_COUNT + 1];
+extern const struct nla_policy ethnl_coalesce_get_policy[ETHTOOL_A_COALESCE_HEADER + 1];
+extern const struct nla_policy ethnl_coalesce_set_policy[ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL + 1];
+extern const struct nla_policy ethnl_pause_get_policy[ETHTOOL_A_PAUSE_HEADER + 1];
+extern const struct nla_policy ethnl_pause_set_policy[ETHTOOL_A_PAUSE_TX + 1];
+extern const struct nla_policy ethnl_eee_get_policy[ETHTOOL_A_EEE_HEADER + 1];
+extern const struct nla_policy ethnl_eee_set_policy[ETHTOOL_A_EEE_TX_LPI_TIMER + 1];
+extern const struct nla_policy ethnl_tsinfo_get_policy[ETHTOOL_A_TSINFO_HEADER + 1];
+extern const struct nla_policy ethnl_cable_test_act_policy[ETHTOOL_A_CABLE_TEST_HEADER + 1];
+extern const struct nla_policy ethnl_cable_test_tdr_act_policy[ETHTOOL_A_CABLE_TEST_TDR_CFG + 1];
+extern const struct nla_policy ethnl_tunnel_info_get_policy[ETHTOOL_A_TUNNEL_INFO_HEADER + 1];
 
 int ethnl_set_linkinfo(struct sk_buff *skb, struct genl_info *info);
 int ethnl_set_linkmodes(struct sk_buff *skb, struct genl_info *info);
index ff54e3ca030d849df42afab15da8c11fc623ccf2..084798d629a8bbef34164dc5b07ddd091cdde988 100644 (file)
@@ -16,13 +16,8 @@ struct pause_reply_data {
 #define PAUSE_REPDATA(__reply_base) \
        container_of(__reply_base, struct pause_reply_data, base)
 
-const struct nla_policy ethnl_pause_get_policy[ETHTOOL_A_PAUSE_MAX + 1] = {
-       [ETHTOOL_A_PAUSE_UNSPEC]                = { .type = NLA_REJECT },
+const struct nla_policy ethnl_pause_get_policy[] = {
        [ETHTOOL_A_PAUSE_HEADER]                = { .type = NLA_NESTED },
-       [ETHTOOL_A_PAUSE_AUTONEG]               = { .type = NLA_REJECT },
-       [ETHTOOL_A_PAUSE_RX]                    = { .type = NLA_REJECT },
-       [ETHTOOL_A_PAUSE_TX]                    = { .type = NLA_REJECT },
-       [ETHTOOL_A_PAUSE_STATS]                 = { .type = NLA_REJECT },
 };
 
 static void ethtool_stats_init(u64 *stats, unsigned int n)
@@ -139,13 +134,11 @@ const struct ethnl_request_ops ethnl_pause_request_ops = {
 
 /* PAUSE_SET */
 
-const struct nla_policy ethnl_pause_set_policy[ETHTOOL_A_PAUSE_MAX + 1] = {
-       [ETHTOOL_A_PAUSE_UNSPEC]                = { .type = NLA_REJECT },
+const struct nla_policy ethnl_pause_set_policy[] = {
        [ETHTOOL_A_PAUSE_HEADER]                = { .type = NLA_NESTED },
        [ETHTOOL_A_PAUSE_AUTONEG]               = { .type = NLA_U8 },
        [ETHTOOL_A_PAUSE_RX]                    = { .type = NLA_U8 },
        [ETHTOOL_A_PAUSE_TX]                    = { .type = NLA_U8 },
-       [ETHTOOL_A_PAUSE_STATS]                 = { .type = NLA_REJECT },
 };
 
 int ethnl_set_pause(struct sk_buff *skb, struct genl_info *info)
index fd3754ca83e1d40acec45fd23ad9e7985fab07ab..050d3d428a5992154f5a01a538d2fcab0a092adf 100644 (file)
@@ -18,11 +18,8 @@ struct privflags_reply_data {
 #define PRIVFLAGS_REPDATA(__reply_base) \
        container_of(__reply_base, struct privflags_reply_data, base)
 
-const struct nla_policy
-ethnl_privflags_get_policy[ETHTOOL_A_PRIVFLAGS_MAX + 1] = {
-       [ETHTOOL_A_PRIVFLAGS_UNSPEC]            = { .type = NLA_REJECT },
+const struct nla_policy ethnl_privflags_get_policy[] = {
        [ETHTOOL_A_PRIVFLAGS_HEADER]            = { .type = NLA_NESTED },
-       [ETHTOOL_A_PRIVFLAGS_FLAGS]             = { .type = NLA_REJECT },
 };
 
 static int ethnl_get_priv_flags_info(struct net_device *dev,
@@ -135,9 +132,7 @@ const struct ethnl_request_ops ethnl_privflags_request_ops = {
 
 /* PRIVFLAGS_SET */
 
-const struct nla_policy
-ethnl_privflags_set_policy[ETHTOOL_A_PRIVFLAGS_MAX + 1] = {
-       [ETHTOOL_A_PRIVFLAGS_UNSPEC]            = { .type = NLA_REJECT },
+const struct nla_policy ethnl_privflags_set_policy[] = {
        [ETHTOOL_A_PRIVFLAGS_HEADER]            = { .type = NLA_NESTED },
        [ETHTOOL_A_PRIVFLAGS_FLAGS]             = { .type = NLA_NESTED },
 };
index 7e25127a727cff35d187456413445f41a3f648ba..da5d9041b2b12d1c3c1883b865a7511a9d2a563b 100644 (file)
@@ -15,17 +15,8 @@ struct rings_reply_data {
 #define RINGS_REPDATA(__reply_base) \
        container_of(__reply_base, struct rings_reply_data, base)
 
-const struct nla_policy ethnl_rings_get_policy[ETHTOOL_A_RINGS_MAX + 1] = {
-       [ETHTOOL_A_RINGS_UNSPEC]                = { .type = NLA_REJECT },
+const struct nla_policy ethnl_rings_get_policy[] = {
        [ETHTOOL_A_RINGS_HEADER]                = { .type = NLA_NESTED },
-       [ETHTOOL_A_RINGS_RX_MAX]                = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX_MINI_MAX]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX_JUMBO_MAX]          = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_TX_MAX]                = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX]                    = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX_MINI]               = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX_JUMBO]              = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_TX]                    = { .type = NLA_REJECT },
 };
 
 static int rings_prepare_data(const struct ethnl_req_info *req_base,
@@ -106,13 +97,8 @@ const struct ethnl_request_ops ethnl_rings_request_ops = {
 
 /* RINGS_SET */
 
-const struct nla_policy ethnl_rings_set_policy[ETHTOOL_A_RINGS_MAX + 1] = {
-       [ETHTOOL_A_RINGS_UNSPEC]                = { .type = NLA_REJECT },
+const struct nla_policy ethnl_rings_set_policy[] = {
        [ETHTOOL_A_RINGS_HEADER]                = { .type = NLA_NESTED },
-       [ETHTOOL_A_RINGS_RX_MAX]                = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX_MINI_MAX]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_RX_JUMBO_MAX]          = { .type = NLA_REJECT },
-       [ETHTOOL_A_RINGS_TX_MAX]                = { .type = NLA_REJECT },
        [ETHTOOL_A_RINGS_RX]                    = { .type = NLA_U32 },
        [ETHTOOL_A_RINGS_RX_MINI]               = { .type = NLA_U32 },
        [ETHTOOL_A_RINGS_RX_JUMBO]              = { .type = NLA_U32 },
index 9adff4668004fd3146d96cde78bf168d5b152768..02199570c3fce19fc127093e62c8eff61cadfafc 100644 (file)
@@ -99,18 +99,13 @@ struct strset_reply_data {
 #define STRSET_REPDATA(__reply_base) \
        container_of(__reply_base, struct strset_reply_data, base)
 
-const struct nla_policy ethnl_strset_get_policy[ETHTOOL_A_STRSET_MAX + 1] = {
-       [ETHTOOL_A_STRSET_UNSPEC]       = { .type = NLA_REJECT },
+const struct nla_policy ethnl_strset_get_policy[] = {
        [ETHTOOL_A_STRSET_HEADER]       = { .type = NLA_NESTED },
        [ETHTOOL_A_STRSET_STRINGSETS]   = { .type = NLA_NESTED },
 };
 
-static const struct nla_policy
-get_stringset_policy[ETHTOOL_A_STRINGSET_MAX + 1] = {
-       [ETHTOOL_A_STRINGSET_UNSPEC]    = { .type = NLA_REJECT },
+static const struct nla_policy get_stringset_policy[] = {
        [ETHTOOL_A_STRINGSET_ID]        = { .type = NLA_U32 },
-       [ETHTOOL_A_STRINGSET_COUNT]     = { .type = NLA_REJECT },
-       [ETHTOOL_A_STRINGSET_STRINGS]   = { .type = NLA_REJECT },
 };
 
 /**
@@ -138,10 +133,10 @@ static bool strset_include(const struct strset_req_info *info,
 static int strset_get_id(const struct nlattr *nest, u32 *val,
                         struct netlink_ext_ack *extack)
 {
-       struct nlattr *tb[ETHTOOL_A_STRINGSET_MAX + 1];
+       struct nlattr *tb[ARRAY_SIZE(get_stringset_policy)];
        int ret;
 
-       ret = nla_parse_nested(tb, ETHTOOL_A_STRINGSET_MAX, nest,
+       ret = nla_parse_nested(tb, ARRAY_SIZE(get_stringset_policy) - 1, nest,
                               get_stringset_policy, extack);
        if (ret < 0)
                return ret;
@@ -152,9 +147,7 @@ static int strset_get_id(const struct nlattr *nest, u32 *val,
        return 0;
 }
 
-static const struct nla_policy
-strset_stringsets_policy[ETHTOOL_A_STRINGSETS_MAX + 1] = {
-       [ETHTOOL_A_STRINGSETS_UNSPEC]           = { .type = NLA_REJECT },
+static const struct nla_policy strset_stringsets_policy[] = {
        [ETHTOOL_A_STRINGSETS_STRINGSET]        = { .type = NLA_NESTED },
 };
 
@@ -169,7 +162,8 @@ static int strset_parse_request(struct ethnl_req_info *req_base,
 
        if (!nest)
                return 0;
-       ret = nla_validate_nested(nest, ETHTOOL_A_STRINGSETS_MAX,
+       ret = nla_validate_nested(nest,
+                                 ARRAY_SIZE(strset_stringsets_policy) - 1,
                                  strset_stringsets_policy, extack);
        if (ret < 0)
                return ret;
index 21f0dc08cead982c6865dfaa438e0cfef49917b6..6f050b81b77cb60c5830c0c1270b06f754b78d03 100644 (file)
@@ -18,13 +18,8 @@ struct tsinfo_reply_data {
 #define TSINFO_REPDATA(__reply_base) \
        container_of(__reply_base, struct tsinfo_reply_data, base)
 
-const struct nla_policy ethnl_tsinfo_get_policy[ETHTOOL_A_TSINFO_MAX + 1] = {
-       [ETHTOOL_A_TSINFO_UNSPEC]               = { .type = NLA_REJECT },
+const struct nla_policy ethnl_tsinfo_get_policy[] = {
        [ETHTOOL_A_TSINFO_HEADER]               = { .type = NLA_NESTED },
-       [ETHTOOL_A_TSINFO_TIMESTAMPING]         = { .type = NLA_REJECT },
-       [ETHTOOL_A_TSINFO_TX_TYPES]             = { .type = NLA_REJECT },
-       [ETHTOOL_A_TSINFO_RX_FILTERS]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_TSINFO_PHC_INDEX]            = { .type = NLA_REJECT },
 };
 
 static int tsinfo_prepare_data(const struct ethnl_req_info *req_base,
index 330817adcf62fb872888d369160cfa74446b0cae..48a52951917e1bcfa6829c30d4dbcadc668d3c23 100644 (file)
@@ -8,9 +8,7 @@
 #include "common.h"
 #include "netlink.h"
 
-const struct nla_policy
-ethnl_tunnel_info_get_policy[ETHTOOL_A_TUNNEL_INFO_MAX + 1] = {
-       [ETHTOOL_A_TUNNEL_INFO_UNSPEC]          = { .type = NLA_REJECT },
+const struct nla_policy ethnl_tunnel_info_get_policy[] = {
        [ETHTOOL_A_TUNNEL_INFO_HEADER]          = { .type = NLA_NESTED },
 };
 
index 5a306ffadffeab546e14c6e072e8fc5be65dfc0b..7671089c119d3d254eb32abf8dc6ef756a646c5b 100644 (file)
@@ -17,11 +17,8 @@ struct wol_reply_data {
 #define WOL_REPDATA(__reply_base) \
        container_of(__reply_base, struct wol_reply_data, base)
 
-const struct nla_policy ethnl_wol_get_policy[ETHTOOL_A_WOL_MAX + 1] = {
-       [ETHTOOL_A_WOL_UNSPEC]          = { .type = NLA_REJECT },
+const struct nla_policy ethnl_wol_get_policy[] = {
        [ETHTOOL_A_WOL_HEADER]          = { .type = NLA_NESTED },
-       [ETHTOOL_A_WOL_MODES]           = { .type = NLA_REJECT },
-       [ETHTOOL_A_WOL_SOPASS]          = { .type = NLA_REJECT },
 };
 
 static int wol_prepare_data(const struct ethnl_req_info *req_base,
@@ -98,8 +95,7 @@ const struct ethnl_request_ops ethnl_wol_request_ops = {
 
 /* WOL_SET */
 
-const struct nla_policy ethnl_wol_set_policy[ETHTOOL_A_WOL_MAX + 1] = {
-       [ETHTOOL_A_WOL_UNSPEC]          = { .type = NLA_REJECT },
+const struct nla_policy ethnl_wol_set_policy[] = {
        [ETHTOOL_A_WOL_HEADER]          = { .type = NLA_NESTED },
        [ETHTOOL_A_WOL_MODES]           = { .type = NLA_NESTED },
        [ETHTOOL_A_WOL_SOPASS]          = { .type = NLA_BINARY,