Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2c725fa authored by Michał Mirosław's avatar Michał Mirosław Committed by David S. Miller
Browse files

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: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d7b57654
Loading
Loading
Loading
Loading
+5 −40
Original line number Original line Diff line number Diff line
@@ -36,7 +36,6 @@ struct veth_net_stats {
struct veth_priv {
struct veth_priv {
	struct net_device *peer;
	struct net_device *peer;
	struct veth_net_stats __percpu *stats;
	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;
	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 = {
static const struct ethtool_ops veth_ethtool_ops = {
	.get_settings		= veth_get_settings,
	.get_settings		= veth_get_settings,
	.get_drvinfo		= veth_get_drvinfo,
	.get_drvinfo		= veth_get_drvinfo,
	.get_link		= ethtool_op_get_link,
	.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_strings		= veth_get_strings,
	.get_sset_count		= veth_get_sset_count,
	.get_sset_count		= veth_get_sset_count,
	.get_ethtool_stats	= veth_get_ethtool_stats,
	.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
	/* don't change ip_summed == CHECKSUM_PARTIAL, as that
	   will cause bad checksum on forwarded packets */
	   will cause bad checksum on forwarded packets */
	if (skb->ip_summed == CHECKSUM_NONE)
	if (skb->ip_summed == CHECKSUM_NONE &&
		skb->ip_summed = rcv_priv->ip_summed;
	    rcv->features & NETIF_F_RXCSUM)
		skb->ip_summed = CHECKSUM_UNNECESSARY;


	length = skb->len;
	length = skb->len;
	if (dev_forward_skb(rcv, skb) != NET_RX_SUCCESS)
	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->ethtool_ops = &veth_ethtool_ops;
	dev->features |= NETIF_F_LLTX;
	dev->features |= NETIF_F_LLTX;
	dev->destructor = veth_dev_free;
	dev->destructor = veth_dev_free;

	dev->hw_features = NETIF_F_NO_CSUM | NETIF_F_SG | NETIF_F_RXCSUM;
}
}


/*
/*