linux/net/core
Herbert Xu 663ead3bb8 [NET]: Use csum_start offset instead of skb_transport_header
The skb transport pointer is currently used to specify the start
of the checksum region for transmit checksum offload.  Unfortunately,
the same pointer is also used during receive side processing.

This creates a problem when we want to retransmit a received
packet with partial checksums since the skb transport pointer
would be overwritten.

This patch solves this problem by creating a new 16-bit csum_start
offset value to replace the skb transport header for the purpose
of checksums.  This offset is calculated from skb->head so that
it does not have to change when skb->data changes.

No extra space is required since csum_offset itself fits within
a 16-bit word so we can use the other 16 bits for csum_start.

For backwards compatibility, just before we push a packet with
partial checksums off into the device driver, we set the skb
transport header to what it would have been under the old scheme.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2007-04-25 22:28:40 -07:00
..
datagram.c [UDP]: Clean up UDP-Lite receive checksum 2007-04-25 22:23:51 -07:00
dev.c [NET]: Use csum_start offset instead of skb_transport_header 2007-04-25 22:28:40 -07:00
dev_mcast.c [NET]: make seq_operations const 2007-04-25 22:25:03 -07:00
dst.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
ethtool.c [NET] core: whitespace cleanup 2007-04-25 22:24:09 -07:00
fib_rules.c [NET] fib_rules: Flush route cache after rule modifications 2007-04-25 22:28:18 -07:00
filter.c [SK_BUFF]: Convert skb->tail to sk_buff_data_t 2007-04-25 22:26:28 -07:00
flow.c [IPSEC] flow: Fix potential memory leak 2007-01-23 20:25:39 -08:00
gen_estimator.c [NET] CORE: Fix whitespace errors. 2007-02-10 23:19:25 -08:00
gen_stats.c [SK_BUFF]: Convert skb->tail to sk_buff_data_t 2007-04-25 22:26:28 -07:00
iovec.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
kmap_skb.h [PATCH] severing skbuff.h -> highmem.h 2006-12-04 02:00:29 -05:00
link_watch.c [NET] CORE: Fix whitespace errors. 2007-02-10 23:19:25 -08:00
Makefile [NET]: The scheduled removal of the frame diverter. 2006-12-02 21:22:23 -08:00
neighbour.c [NEIGH]: Use rtnl registration interface 2007-04-25 22:27:06 -07:00
net-sysfs.c [NET] core: whitespace cleanup 2007-04-25 22:24:09 -07:00
netevent.c [NET]: Network Event Notifier Mechanism. 2006-08-02 13:38:20 -07:00
netpoll.c [SK_BUFF]: Introduce skb_copy_to_linear_data{_offset} 2007-04-25 22:28:29 -07:00
pktgen.c [SK_BUFF]: Convert skb->tail to sk_buff_data_t 2007-04-25 22:26:28 -07:00
request_sock.c [NET]: Size listen hash tables using backlog hint 2006-12-02 21:21:44 -08:00
rtnetlink.c [RTNL]: Improve error codes for unsupported operations 2007-04-25 22:28:34 -07:00
scm.c [NET] CORE: Fix whitespace errors. 2007-02-10 23:19:25 -08:00
skbuff.c [NET]: Use csum_start offset instead of skb_transport_header 2007-04-25 22:28:40 -07:00
sock.c [NET]: make seq_operations const 2007-04-25 22:25:03 -07:00
stream.c [NET] CORE: Fix whitespace errors. 2007-02-10 23:19:25 -08:00
sysctl_net_core.c [NET]: Replace CONFIG_NET_DEBUG with sysctl. 2007-04-25 22:24:05 -07:00
user_dma.c [NET] CORE: Fix whitespace errors. 2007-02-10 23:19:25 -08:00
utils.c [NET]: New sysctls should use __read_mostly tags 2007-04-25 22:24:19 -07:00
wireless.c [NETLINK]: Use nlmsg_trim() where appropriate 2007-04-25 22:26:37 -07:00