diff options
Diffstat (limited to 'drivers/net/veth.c')
| -rw-r--r-- | drivers/net/veth.c | 47 | 
1 files changed, 6 insertions, 41 deletions
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 3b99f64104f..3b0151a2a31 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -36,7 +36,6 @@ struct veth_net_stats {  struct veth_priv {  	struct net_device *peer;  	struct veth_net_stats __percpu *stats; -	unsigned ip_summed;  };  /* @@ -53,7 +52,7 @@ static int veth_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)  {  	cmd->supported		= 0;  	cmd->advertising	= 0; -	cmd->speed		= SPEED_10000; +	ethtool_cmd_speed_set(cmd, SPEED_10000);  	cmd->duplex		= DUPLEX_FULL;  	cmd->port		= PORT_TP;  	cmd->phy_address	= 0; @@ -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;  }  /*  |