Message ID | 1423719323-4667-2-git-send-email-Yanjun.Zhu@windriver.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Thu, 12 Feb 2015 13:35:23 +0800 Zhu Yanjun <Yanjun.Zhu@windriver.com> wrote: > From: Zhu Yanjun <yanjun.zhu@windriver.com> > > The default speed of normal nic is 1000M while the default speed > of tun is 10M. Now the default speed of tun is changed to 1000M. > And there are 3 options: 10M, 100M and 1000M to the speed of tun. > The command "ethtool -s tun0 speed 10/100/1000" can configure the > speed of tun dynamically. > > CC: Michael S. Tsirkin <mst@redhat.com> > CC: Jason Wang <jasowang@redhat.com> > CC: Al Viro <viro@zeniv.linux.org.uk> > Signed-off-by: Zhu Yanjun <yanjun.zhu@windriver.com> > Signed-off-by: Zhu Yanjun <Yanjun.Zhu@windriver.com> Why limit to 10/100/1000 speed? Ethtool speed can be any value > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello. On 2/12/2015 8:35 AM, Zhu Yanjun wrote: > From: Zhu Yanjun <yanjun.zhu@windriver.com> > The default speed of normal nic is 1000M while the default speed > of tun is 10M. Now the default speed of tun is changed to 1000M. > And there are 3 options: 10M, 100M and 1000M to the speed of tun. > The command "ethtool -s tun0 speed 10/100/1000" can configure the > speed of tun dynamically. > CC: Michael S. Tsirkin <mst@redhat.com> > CC: Jason Wang <jasowang@redhat.com> > CC: Al Viro <viro@zeniv.linux.org.uk> > Signed-off-by: Zhu Yanjun <yanjun.zhu@windriver.com> > Signed-off-by: Zhu Yanjun <Yanjun.Zhu@windriver.com> > --- > drivers/net/tun.c | 36 +++++++++++++++++++++++++++++++++++- > include/uapi/linux/if_tun.h | 5 +++++ > 2 files changed, 40 insertions(+), 1 deletion(-) > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index 8c8dc16..64f4dcc 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c [...] > @@ -2257,9 +2260,18 @@ static struct miscdevice tun_miscdev = { > > static int tun_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) > { > + struct tun_struct *tun = netdev_priv(dev); > + > + /*Get the speed of tun*/ Please add spaces after /* and before */. [...] > @@ -2287,6 +2299,27 @@ static void tun_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info > } > } > > +static int tun_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) > +{ > + struct tun_struct *tun = netdev_priv(dev); > + u32 speed = ethtool_cmd_speed(cmd); > + > + if (10 == speed) { > + tun->flags &= ~TUN_CTRL_SPD_100; > + tun->flags &= ~TUN_CTRL_SPD_1000; Can't you clear both bits at once? > + tun->flags |= TUN_CTRL_SPD_10; > + } else if (100 == speed) { > + tun->flags &= ~TUN_CTRL_SPD_10; > + tun->flags &= ~TUN_CTRL_SPD_1000; > + tun->flags |= TUN_CTRL_SPD_100; > + } else { > + tun->flags &= ~TUN_CTRL_SPD_10; > + tun->flags &= ~TUN_CTRL_SPD_100; > + tun->flags |= TUN_CTRL_SPD_1000; > + } This is asking to be a *switch* statement. [...] > diff --git a/include/uapi/linux/if_tun.h b/include/uapi/linux/if_tun.h > index 50ae243..78a09a7 100644 > --- a/include/uapi/linux/if_tun.h > +++ b/include/uapi/linux/if_tun.h > @@ -66,6 +66,11 @@ > #define IFF_PERSIST 0x0800 > #define IFF_NOFILTER 0x1000 > > +/*add speed control, default 1000M*/ Same remark about the comment style as above. [...] WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 02/12/2015 08:55 PM, Stephen Hemminger wrote: > On Thu, 12 Feb 2015 13:35:23 +0800 > Zhu Yanjun <Yanjun.Zhu@windriver.com> wrote: > >> From: Zhu Yanjun <yanjun.zhu@windriver.com> >> >> The default speed of normal nic is 1000M while the default speed >> of tun is 10M. Now the default speed of tun is changed to 1000M. >> And there are 3 options: 10M, 100M and 1000M to the speed of tun. >> The command "ethtool -s tun0 speed 10/100/1000" can configure the >> speed of tun dynamically. >> >> CC: Michael S. Tsirkin <mst@redhat.com> >> CC: Jason Wang <jasowang@redhat.com> >> CC: Al Viro <viro@zeniv.linux.org.uk> >> Signed-off-by: Zhu Yanjun <yanjun.zhu@windriver.com> >> Signed-off-by: Zhu Yanjun <Yanjun.Zhu@windriver.com> > Why limit to 10/100/1000 speed? > Ethtool speed can be any value Thanks for your comments. Yes. But the real physical nic speed often 10M, 100M and 1000M. This simulates the physical nic. Zhu Yanjun > >> > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
于 2015年02月13日 10:45, yzhu1 写道: > On 02/12/2015 08:55 PM, Stephen Hemminger wrote: >> On Thu, 12 Feb 2015 13:35:23 +0800 >> Zhu Yanjun <Yanjun.Zhu@windriver.com> wrote: >> >>> From: Zhu Yanjun <yanjun.zhu@windriver.com> >>> >>> The default speed of normal nic is 1000M while the default speed >>> of tun is 10M. Now the default speed of tun is changed to 1000M. >>> And there are 3 options: 10M, 100M and 1000M to the speed of tun. >>> The command "ethtool -s tun0 speed 10/100/1000" can configure the >>> speed of tun dynamically. >>> >>> CC: Michael S. Tsirkin <mst@redhat.com> >>> CC: Jason Wang <jasowang@redhat.com> >>> CC: Al Viro <viro@zeniv.linux.org.uk> >>> Signed-off-by: Zhu Yanjun <yanjun.zhu@windriver.com> >>> Signed-off-by: Zhu Yanjun <Yanjun.Zhu@windriver.com> >> Why limit to 10/100/1000 speed? >> Ethtool speed can be any value > Thanks for your comments. > > Yes. But the real physical nic speed often 10M, 100M and 1000M. > This simulates the physical nic. ^^^^^^^^^^^^^^^ then a speed control logical would be needed to effect the corresponding speed when tun/tap gets/puts packets corresponding to the speed setting. What's the benefit when changing speed from 10Mb/s to 1000Mb/s? Just xia bibi ;) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 02/13/2015 11:25 AM, Fan Du wrote: > 于 2015年02月13日 10:45, yzhu1 写道: >> On 02/12/2015 08:55 PM, Stephen Hemminger wrote: >>> On Thu, 12 Feb 2015 13:35:23 +0800 >>> Zhu Yanjun <Yanjun.Zhu@windriver.com> wrote: >>> >>>> From: Zhu Yanjun <yanjun.zhu@windriver.com> >>>> >>>> The default speed of normal nic is 1000M while the default speed >>>> of tun is 10M. Now the default speed of tun is changed to 1000M. >>>> And there are 3 options: 10M, 100M and 1000M to the speed of tun. >>>> The command "ethtool -s tun0 speed 10/100/1000" can configure the >>>> speed of tun dynamically. >>>> >>>> CC: Michael S. Tsirkin <mst@redhat.com> >>>> CC: Jason Wang <jasowang@redhat.com> >>>> CC: Al Viro <viro@zeniv.linux.org.uk> >>>> Signed-off-by: Zhu Yanjun <yanjun.zhu@windriver.com> >>>> Signed-off-by: Zhu Yanjun <Yanjun.Zhu@windriver.com> >>> Why limit to 10/100/1000 speed? >>> Ethtool speed can be any value >> Thanks for your comments. >> >> Yes. But the real physical nic speed often 10M, 100M and 1000M. >> This simulates the physical nic. > ^^^^^^^^^^^^^^^ > then a speed control logical would be needed to effect the > corresponding speed > when tun/tap gets/puts packets corresponding to the speed setting. > > What's the benefit when changing speed from 10Mb/s to 1000Mb/s? > > Just xia bibi ;) :-P Thanks for your reply. This speed is just for user space application. There is no any speed control logic here.:-( Zhu Yanjun > > > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 8c8dc16..64f4dcc 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -950,6 +950,9 @@ static void tun_net_init(struct net_device *dev) dev->addr_len = 0; dev->mtu = 1500; + /* Set default speed 1000M */ + tun->flags |= TUN_CTRL_SPD_1000; + /* Zero header length */ dev->type = ARPHRD_NONE; dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; @@ -2257,9 +2260,18 @@ static struct miscdevice tun_miscdev = { static int tun_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) { + struct tun_struct *tun = netdev_priv(dev); + + /*Get the speed of tun*/ + if (tun->flags & TUN_CTRL_SPD_1000) { + ethtool_cmd_speed_set(cmd, SPEED_1000); + } else if (tun->flags & TUN_CTRL_SPD_100) { + ethtool_cmd_speed_set(cmd, SPEED_100); + } else + ethtool_cmd_speed_set(cmd, SPEED_10); + cmd->supported = 0; cmd->advertising = 0; - ethtool_cmd_speed_set(cmd, SPEED_10); cmd->duplex = DUPLEX_FULL; cmd->port = PORT_TP; cmd->phy_address = 0; @@ -2287,6 +2299,27 @@ static void tun_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info } } +static int tun_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + struct tun_struct *tun = netdev_priv(dev); + u32 speed = ethtool_cmd_speed(cmd); + + if (10 == speed) { + tun->flags &= ~TUN_CTRL_SPD_100; + tun->flags &= ~TUN_CTRL_SPD_1000; + tun->flags |= TUN_CTRL_SPD_10; + } else if (100 == speed) { + tun->flags &= ~TUN_CTRL_SPD_10; + tun->flags &= ~TUN_CTRL_SPD_1000; + tun->flags |= TUN_CTRL_SPD_100; + } else { + tun->flags &= ~TUN_CTRL_SPD_10; + tun->flags &= ~TUN_CTRL_SPD_100; + tun->flags |= TUN_CTRL_SPD_1000; + } + return 0; +} + static u32 tun_get_msglevel(struct net_device *dev) { #ifdef TUN_DEBUG @@ -2307,6 +2340,7 @@ static void tun_set_msglevel(struct net_device *dev, u32 value) static const struct ethtool_ops tun_ethtool_ops = { .get_settings = tun_get_settings, + .set_settings = tun_set_settings, .get_drvinfo = tun_get_drvinfo, .get_msglevel = tun_get_msglevel, .set_msglevel = tun_set_msglevel, diff --git a/include/uapi/linux/if_tun.h b/include/uapi/linux/if_tun.h index 50ae243..78a09a7 100644 --- a/include/uapi/linux/if_tun.h +++ b/include/uapi/linux/if_tun.h @@ -66,6 +66,11 @@ #define IFF_PERSIST 0x0800 #define IFF_NOFILTER 0x1000 +/*add speed control, default 1000M*/ +#define TUN_CTRL_SPD_10 0x0020 +#define TUN_CTRL_SPD_100 0x0040 +#define TUN_CTRL_SPD_1000 0x0080 + /* Socket options */ #define TUN_TX_TIMESTAMP 1