Merge branch 'mtu-related-changes'
Stephen Hemminger says: ==================== mtu related changes While looking at other MTU issues, noticed a couple oppurtunties for improving user experience. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
720516b17b
@ -220,14 +220,14 @@ static int net_failover_change_mtu(struct net_device *dev, int new_mtu)
|
||||
struct net_device *primary_dev, *standby_dev;
|
||||
int ret = 0;
|
||||
|
||||
primary_dev = rcu_dereference(nfo_info->primary_dev);
|
||||
primary_dev = rtnl_dereference(nfo_info->primary_dev);
|
||||
if (primary_dev) {
|
||||
ret = dev_set_mtu(primary_dev, new_mtu);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
standby_dev = rcu_dereference(nfo_info->standby_dev);
|
||||
standby_dev = rtnl_dereference(nfo_info->standby_dev);
|
||||
if (standby_dev) {
|
||||
ret = dev_set_mtu(standby_dev, new_mtu);
|
||||
if (ret) {
|
||||
|
@ -3546,6 +3546,8 @@ int dev_set_alias(struct net_device *, const char *, size_t);
|
||||
int dev_get_alias(const struct net_device *, char *, size_t);
|
||||
int dev_change_net_namespace(struct net_device *, struct net *, const char *);
|
||||
int __dev_set_mtu(struct net_device *, int);
|
||||
int dev_set_mtu_ext(struct net_device *dev, int mtu,
|
||||
struct netlink_ext_ack *extack);
|
||||
int dev_set_mtu(struct net_device *, int);
|
||||
int dev_change_tx_queue_len(struct net_device *, unsigned long);
|
||||
void dev_set_group(struct net_device *, int);
|
||||
|
@ -164,6 +164,8 @@ enum {
|
||||
IFLA_CARRIER_UP_COUNT,
|
||||
IFLA_CARRIER_DOWN_COUNT,
|
||||
IFLA_NEW_IFINDEX,
|
||||
IFLA_MIN_MTU,
|
||||
IFLA_MAX_MTU,
|
||||
__IFLA_MAX
|
||||
};
|
||||
|
||||
|
@ -7523,13 +7523,15 @@ int __dev_set_mtu(struct net_device *dev, int new_mtu)
|
||||
EXPORT_SYMBOL(__dev_set_mtu);
|
||||
|
||||
/**
|
||||
* dev_set_mtu - Change maximum transfer unit
|
||||
* dev_set_mtu_ext - Change maximum transfer unit
|
||||
* @dev: device
|
||||
* @new_mtu: new transfer unit
|
||||
* @extack: netlink extended ack
|
||||
*
|
||||
* Change the maximum transfer size of the network device.
|
||||
*/
|
||||
int dev_set_mtu(struct net_device *dev, int new_mtu)
|
||||
int dev_set_mtu_ext(struct net_device *dev, int new_mtu,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
int err, orig_mtu;
|
||||
|
||||
@ -7538,14 +7540,12 @@ int dev_set_mtu(struct net_device *dev, int new_mtu)
|
||||
|
||||
/* MTU must be positive, and in range */
|
||||
if (new_mtu < 0 || new_mtu < dev->min_mtu) {
|
||||
net_err_ratelimited("%s: Invalid MTU %d requested, hw min %d\n",
|
||||
dev->name, new_mtu, dev->min_mtu);
|
||||
NL_SET_ERR_MSG(extack, "mtu less than device minimum");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) {
|
||||
net_err_ratelimited("%s: Invalid MTU %d requested, hw max %d\n",
|
||||
dev->name, new_mtu, dev->max_mtu);
|
||||
NL_SET_ERR_MSG(extack, "mtu greater than device maximum");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -7573,6 +7573,17 @@ int dev_set_mtu(struct net_device *dev, int new_mtu)
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
int dev_set_mtu(struct net_device *dev, int new_mtu)
|
||||
{
|
||||
struct netlink_ext_ack extack;
|
||||
int err;
|
||||
|
||||
err = dev_set_mtu_ext(dev, new_mtu, &extack);
|
||||
if (err)
|
||||
net_err_ratelimited("%s: %s\n", dev->name, extack._msg);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(dev_set_mtu);
|
||||
|
||||
/**
|
||||
|
@ -1015,6 +1015,8 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
|
||||
+ nla_total_size(4) /* IFLA_IF_NETNSID */
|
||||
+ nla_total_size(4) /* IFLA_CARRIER_UP_COUNT */
|
||||
+ nla_total_size(4) /* IFLA_CARRIER_DOWN_COUNT */
|
||||
+ nla_total_size(4) /* IFLA_MIN_MTU */
|
||||
+ nla_total_size(4) /* IFLA_MAX_MTU */
|
||||
+ 0;
|
||||
}
|
||||
|
||||
@ -1601,6 +1603,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
|
||||
netif_running(dev) ? dev->operstate : IF_OPER_DOWN) ||
|
||||
nla_put_u8(skb, IFLA_LINKMODE, dev->link_mode) ||
|
||||
nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
|
||||
nla_put_u32(skb, IFLA_MIN_MTU, dev->min_mtu) ||
|
||||
nla_put_u32(skb, IFLA_MAX_MTU, dev->max_mtu) ||
|
||||
nla_put_u32(skb, IFLA_GROUP, dev->group) ||
|
||||
nla_put_u32(skb, IFLA_PROMISCUITY, dev->promiscuity) ||
|
||||
nla_put_u32(skb, IFLA_NUM_TX_QUEUES, dev->num_tx_queues) ||
|
||||
@ -1732,6 +1736,8 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
|
||||
[IFLA_IF_NETNSID] = { .type = NLA_S32 },
|
||||
[IFLA_CARRIER_UP_COUNT] = { .type = NLA_U32 },
|
||||
[IFLA_CARRIER_DOWN_COUNT] = { .type = NLA_U32 },
|
||||
[IFLA_MIN_MTU] = { .type = NLA_U32 },
|
||||
[IFLA_MAX_MTU] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
|
||||
@ -2376,7 +2382,7 @@ static int do_setlink(const struct sk_buff *skb,
|
||||
}
|
||||
|
||||
if (tb[IFLA_MTU]) {
|
||||
err = dev_set_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
|
||||
err = dev_set_mtu_ext(dev, nla_get_u32(tb[IFLA_MTU]), extack);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
status |= DO_SETLINK_MODIFIED;
|
||||
|
Loading…
Reference in New Issue
Block a user