Commit bee31369 authored by Nolan Leake's avatar Nolan Leake Committed by David S. Miller

tun: keep link (carrier) state up to date

Currently, only ethtool can get accurate link state of a tap device.
With this patch, IFF_RUNNING and IF_OPER_UP/DOWN are kept up to date as
well.
Signed-off-by: default avatarNolan Leake <nolan@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ae3568ad
...@@ -149,6 +149,7 @@ static int tun_attach(struct tun_struct *tun, struct file *file) ...@@ -149,6 +149,7 @@ static int tun_attach(struct tun_struct *tun, struct file *file)
tfile->tun = tun; tfile->tun = tun;
tun->tfile = tfile; tun->tfile = tfile;
tun->socket.file = file; tun->socket.file = file;
netif_carrier_on(tun->dev);
dev_hold(tun->dev); dev_hold(tun->dev);
sock_hold(tun->socket.sk); sock_hold(tun->socket.sk);
atomic_inc(&tfile->count); atomic_inc(&tfile->count);
...@@ -162,6 +163,7 @@ static void __tun_detach(struct tun_struct *tun) ...@@ -162,6 +163,7 @@ static void __tun_detach(struct tun_struct *tun)
{ {
/* Detach from net device */ /* Detach from net device */
netif_tx_lock_bh(tun->dev); netif_tx_lock_bh(tun->dev);
netif_carrier_off(tun->dev);
tun->tfile = NULL; tun->tfile = NULL;
tun->socket.file = NULL; tun->socket.file = NULL;
netif_tx_unlock_bh(tun->dev); netif_tx_unlock_bh(tun->dev);
...@@ -1574,12 +1576,6 @@ static void tun_set_msglevel(struct net_device *dev, u32 value) ...@@ -1574,12 +1576,6 @@ static void tun_set_msglevel(struct net_device *dev, u32 value)
#endif #endif
} }
static u32 tun_get_link(struct net_device *dev)
{
struct tun_struct *tun = netdev_priv(dev);
return !!tun->tfile;
}
static u32 tun_get_rx_csum(struct net_device *dev) static u32 tun_get_rx_csum(struct net_device *dev)
{ {
struct tun_struct *tun = netdev_priv(dev); struct tun_struct *tun = netdev_priv(dev);
...@@ -1601,7 +1597,7 @@ static const struct ethtool_ops tun_ethtool_ops = { ...@@ -1601,7 +1597,7 @@ static const struct ethtool_ops tun_ethtool_ops = {
.get_drvinfo = tun_get_drvinfo, .get_drvinfo = tun_get_drvinfo,
.get_msglevel = tun_get_msglevel, .get_msglevel = tun_get_msglevel,
.set_msglevel = tun_set_msglevel, .set_msglevel = tun_set_msglevel,
.get_link = tun_get_link, .get_link = ethtool_op_get_link,
.get_rx_csum = tun_get_rx_csum, .get_rx_csum = tun_get_rx_csum,
.set_rx_csum = tun_set_rx_csum .set_rx_csum = tun_set_rx_csum
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment