Allow ethtool to change tun link settings
Subsystems (3)
PATCH 1/1 Allow ethtool to change tun link settings
Let user space set whatever it would like to advertise for the tun interface. Preserve the existing defaults.
Signed-off-by Chas Williams <[email protected]>
--- drivers/net/tun.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-)
drivers/net/tun.c +25 -2
@@ -81,6 +81,9 @@#include <linux/uaccess.h> #include <linux/proc_fs.h> +static void tun_default_link_ksettings (struct net_device *dev, +struct ethtool_link_ksettings *cmd); +/* Uncomment to enable debugging */ /* #define TUN_DEBUG 1 */
@@ -242,6 +245,7 @@ struct tun_struct {struct bpf_prog __rcu *xdp_prog;struct tun_prog __rcu *steering_prog;struct tun_prog __rcu *filter_prog; +struct ethtool_link_ksettings link_ksettings; };struct veth {
@@ -2292,6 +2296,7 @@ static void tun_setup(struct net_device *dev) tun->owner =INVALID_UID ; tun->group =INVALID_GID ; +tun_default_link_ksettings (dev, &tun->link_ksettings); dev->ethtool_ops = &tun_ethtool_ops; dev->needs_free_netdev = true;
@@ -3323,8 +3328,8 @@ static struct miscdevice tun_miscdev = {/* ethtool interface */ -static int tun_get_link_ksettings (struct net_device *dev, -struct ethtool_link_ksettings *cmd) +static void tun_default_link_ksettings (struct net_device *dev, +struct ethtool_link_ksettings *cmd) {ethtool_link_ksettings_zero_link_mode (cmd, supported);ethtool_link_ksettings_zero_link_mode (cmd, advertising);
@@ -3333,6 +3338,23 @@ static int tun_get_link_ksettings(struct net_device *dev, cmd->base.port =PORT_TP ; cmd->base.phy_address =0 ; cmd->base.autoneg =AUTONEG_DISABLE ; +} + +static int tun_get_link_ksettings (struct net_device *dev, +struct ethtool_link_ksettings *cmd) +{ +struct tun_struct *tun =netdev_priv (dev); + +memcpy (cmd, &tun->link_ksettings,sizeof (*cmd)); +return 0 ; +} + +static int tun_set_link_ksettings (struct net_device *dev, +const struct ethtool_link_ksettings *cmd) +{ +struct tun_struct *tun =netdev_priv (dev); + +memcpy (&tun->link_ksettings, cmd,sizeof (*cmd));return 0 ; }
@@ -3403,6 +3425,7 @@ static const struct ethtool_ops tun_ethtool_ops = { .get_coalesce = tun_get_coalesce, .set_coalesce = tun_set_coalesce, .get_link_ksettings = tun_get_link_ksettings, + .set_link_ksettings = tun_set_link_ksettings, };static int tun_queue_resize (struct tun_struct *tun)
Signature · 1 line
2.14.3
David Miller
maintainerFrom: Chas Williams <[email protected]>
Date: Sat, 2 Jun 2018 17:49:53 -0400
Quoted 4 lines
Let user space set whatever it would like to advertise for the tun interface. Preserve the existing defaults.
Signed-off-by Chas Williams <[email protected]>
This looks fine, applied.