Re: [1/2] [NET]: Add NETIF_F_GEN_CSUM and NETIF_F_ALL_CSUM

2006-06-17 Thread David Miller
From: Herbert Xu [EMAIL PROTECTED]
Date: Tue, 13 Jun 2006 21:25:11 +1000

 [NET]: Add NETIF_F_GEN_CSUM and NETIF_F_ALL_CSUM
 
 The current stack treats NETIF_F_HW_CSUM and NETIF_F_NO_CSUM identically
 so we test for them in quite a few places.  For the sake of brevity, I'm
 adding the macro NETIF_F_GEN_CSUM for these two.  We also test the disjunct
 of NETIF_F_IP_CSUM and the other two in various places, for that purpose
 I've added NETIF_F_ALL_CSUM.
 
 Signed-off-by: Herbert Xu [EMAIL PROTECTED]

Applied, thanks Herbert.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[1/2] [NET]: Add NETIF_F_GEN_CSUM and NETIF_F_ALL_CSUM

2006-06-13 Thread Herbert Xu
Hi:

These patches are based on your net-2.6.18 tree.  They add support for
NETIF_F_HW_CSUM on bridges.

[NET]: Add NETIF_F_GEN_CSUM and NETIF_F_ALL_CSUM

The current stack treats NETIF_F_HW_CSUM and NETIF_F_NO_CSUM identically
so we test for them in quite a few places.  For the sake of brevity, I'm
adding the macro NETIF_F_GEN_CSUM for these two.  We also test the disjunct
of NETIF_F_IP_CSUM and the other two in various places, for that purpose
I've added NETIF_F_ALL_CSUM.

Signed-off-by: Herbert Xu [EMAIL PROTECTED]

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmVHI~} [EMAIL PROTECTED]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1199,8 +1199,7 @@ int bond_sethwaddr(struct net_device *bo
 }
 
 #define BOND_INTERSECT_FEATURES \
-   (NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM|\
-   NETIF_F_TSO|NETIF_F_UFO)
+   (NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_TSO | NETIF_F_UFO)
 
 /* 
  * Compute the common dev-feature set available to all slaves.  Some
@@ -1218,9 +1217,7 @@ static int bond_compute_features(struct 
features = (slave-dev-features  BOND_INTERSECT_FEATURES);
 
if ((features  NETIF_F_SG)  
-   !(features  (NETIF_F_IP_CSUM |
- NETIF_F_NO_CSUM |
- NETIF_F_HW_CSUM)))
+   !(features  NETIF_F_ALL_CSUM))
features = ~NETIF_F_SG;
 
/* 
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -312,6 +312,9 @@ struct net_device
 #define NETIF_F_LLTX   4096/* LockLess TX */
 #define NETIF_F_UFO 8192/* Can offload UDP Large Send*/
 
+#define NETIF_F_GEN_CSUM   (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
+#define NETIF_F_ALL_CSUM   (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM)
+
struct net_device   *next_sched;
 
/* Interface index. Unique device identifier*/
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -381,8 +381,7 @@ void br_features_recompute(struct net_br
checksum = br-feature_mask  NETIF_F_IP_CSUM;
 
list_for_each_entry(p, br-port_list, list) {
-   if (!(p-dev-features 
-  (NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM)))
+   if (!(p-dev-features  NETIF_F_ALL_CSUM))
checksum = 0;
features = p-dev-features;
}
diff --git a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1284,7 +1284,7 @@ int dev_queue_xmit(struct sk_buff *skb)
 * checksumming for this protocol, complete checksumming here.
 */
if (skb-ip_summed == CHECKSUM_HW 
-   (!(dev-features  (NETIF_F_HW_CSUM | NETIF_F_NO_CSUM)) 
+   (!(dev-features  NETIF_F_GEN_CSUM) 
 (!(dev-features  NETIF_F_IP_CSUM) ||
  skb-protocol != htons(ETH_P_IP
if (skb_checksum_help(skb, 0))
@@ -2789,9 +2789,7 @@ int register_netdevice(struct net_device
 
/* Fix illegal SG+CSUM combinations. */
if ((dev-features  NETIF_F_SG) 
-   !(dev-features  (NETIF_F_IP_CSUM |
-  NETIF_F_NO_CSUM |
-  NETIF_F_HW_CSUM))) {
+   !(dev-features  NETIF_F_ALL_CSUM)) {
printk(%s: Dropping NETIF_F_SG since no checksum feature.\n,
   dev-name);
dev-features = ~NETIF_F_SG;
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -30,7 +30,7 @@ u32 ethtool_op_get_link(struct net_devic
 
 u32 ethtool_op_get_tx_csum(struct net_device *dev)
 {
-   return (dev-features  (NETIF_F_IP_CSUM | NETIF_F_HW_CSUM)) != 0;
+   return (dev-features  NETIF_F_ALL_CSUM) != 0;
 }
 
 int ethtool_op_set_tx_csum(struct net_device *dev, u32 data)
@@ -551,9 +551,7 @@ static int ethtool_set_sg(struct net_dev
return -EFAULT;
 
if (edata.data  
-   !(dev-features  (NETIF_F_IP_CSUM |
-  NETIF_F_NO_CSUM |
-  NETIF_F_HW_CSUM)))
+   !(dev-features  NETIF_F_ALL_CSUM))
return -EINVAL;
 
return __ethtool_set_sg(dev, edata.data);
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -839,7 +839,7 @@ int ip_append_data(struct sock *sk,
 */
if (transhdrlen 
length + fragheaderlen = mtu 
-   
rt-u.dst.dev-features(NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM) 
+   rt-u.dst.dev-features  NETIF_F_ALL_CSUM 
!exthdrlen)