forked from luck/tmp_suning_uos_patched
veth: convert to hw_features
This should probably get TSO available as it's basically a loopback device. Offloads are left disabled by default - as before. Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d7b5765456
commit
a2c725fa39
@ -36,7 +36,6 @@ struct veth_net_stats {
|
||||
struct veth_priv {
|
||||
struct net_device *peer;
|
||||
struct veth_net_stats __percpu *stats;
|
||||
unsigned ip_summed;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -99,47 +98,10 @@ static void veth_get_ethtool_stats(struct net_device *dev,
|
||||
data[0] = priv->peer->ifindex;
|
||||
}
|
||||
|
||||
static u32 veth_get_rx_csum(struct net_device *dev)
|
||||
{
|
||||
struct veth_priv *priv;
|
||||
|
||||
priv = netdev_priv(dev);
|
||||
return priv->ip_summed == CHECKSUM_UNNECESSARY;
|
||||
}
|
||||
|
||||
static int veth_set_rx_csum(struct net_device *dev, u32 data)
|
||||
{
|
||||
struct veth_priv *priv;
|
||||
|
||||
priv = netdev_priv(dev);
|
||||
priv->ip_summed = data ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 veth_get_tx_csum(struct net_device *dev)
|
||||
{
|
||||
return (dev->features & NETIF_F_NO_CSUM) != 0;
|
||||
}
|
||||
|
||||
static int veth_set_tx_csum(struct net_device *dev, u32 data)
|
||||
{
|
||||
if (data)
|
||||
dev->features |= NETIF_F_NO_CSUM;
|
||||
else
|
||||
dev->features &= ~NETIF_F_NO_CSUM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct ethtool_ops veth_ethtool_ops = {
|
||||
.get_settings = veth_get_settings,
|
||||
.get_drvinfo = veth_get_drvinfo,
|
||||
.get_link = ethtool_op_get_link,
|
||||
.get_rx_csum = veth_get_rx_csum,
|
||||
.set_rx_csum = veth_set_rx_csum,
|
||||
.get_tx_csum = veth_get_tx_csum,
|
||||
.set_tx_csum = veth_set_tx_csum,
|
||||
.get_sg = ethtool_op_get_sg,
|
||||
.set_sg = ethtool_op_set_sg,
|
||||
.get_strings = veth_get_strings,
|
||||
.get_sset_count = veth_get_sset_count,
|
||||
.get_ethtool_stats = veth_get_ethtool_stats,
|
||||
@ -168,8 +130,9 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
/* don't change ip_summed == CHECKSUM_PARTIAL, as that
|
||||
will cause bad checksum on forwarded packets */
|
||||
if (skb->ip_summed == CHECKSUM_NONE)
|
||||
skb->ip_summed = rcv_priv->ip_summed;
|
||||
if (skb->ip_summed == CHECKSUM_NONE &&
|
||||
rcv->features & NETIF_F_RXCSUM)
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
length = skb->len;
|
||||
if (dev_forward_skb(rcv, skb) != NET_RX_SUCCESS)
|
||||
@ -304,6 +267,8 @@ static void veth_setup(struct net_device *dev)
|
||||
dev->ethtool_ops = &veth_ethtool_ops;
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
dev->destructor = veth_dev_free;
|
||||
|
||||
dev->hw_features = NETIF_F_NO_CSUM | NETIF_F_SG | NETIF_F_RXCSUM;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user