1
linux/net/ipv4
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
..
ipvs [SK_BUFF]: Introduce skb_copy_to_linear_data{_offset} 2007-04-25 22:28:29 -07:00
netfilter [SK_BUFF]: Introduce skb_copy_to_linear_data{_offset} 2007-04-25 22:28:29 -07:00
af_inet.c [NET]: inet_ehash_secret should be __read_mostly and set only once 2007-04-25 22:28:17 -07:00
ah4.c [SK_BUFF]: unions of just one member don't get anything done, kill them 2007-04-25 22:26:20 -07:00
arp.c [SK_BUFF]: Introduce arp_hdr(), remove skb->nh.arph 2007-04-25 22:25:12 -07:00
cipso_ipv4.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
datagram.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
devinet.c [IPv4]: Use rtnl registration interface 2007-04-25 22:27:08 -07:00
esp4.c [XFRM]: beet: fix worst case header_len calculation 2007-04-25 22:28:39 -07:00
fib_frontend.c [IPv4]: Use rtnl registration interface 2007-04-25 22:27:08 -07:00
fib_hash.c [NET]: make seq_operations const 2007-04-25 22:25:03 -07:00
fib_lookup.h [IPV4]: net/ipv4/fib annotations 2006-09-28 18:02:23 -07:00
fib_rules.c [NET] fib_rules: delay route cache flush by ip_rt_min_delay 2007-04-25 22:28:24 -07:00
fib_semantics.c [IPv4] fib: Fix out of bound access of fib_props[] 2007-03-25 18:48:03 -07:00
fib_trie.c [IPV4]: fib_trie root node settings 2007-04-25 22:26:32 -07:00
icmp.c [SK_BUFF]: Convert skb->tail to sk_buff_data_t 2007-04-25 22:26:28 -07:00
igmp.c [SK_BUFF]: Convert skb->tail to sk_buff_data_t 2007-04-25 22:26:28 -07:00
inet_connection_sock.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
inet_diag.c [NETLINK]: Directly return -EINTR from netlink_dump_start() 2007-04-25 22:27:33 -07:00
inet_hashtables.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
inet_timewait_sock.c [NET]: change layout of ehash table 2007-02-08 14:16:46 -08:00
inetpeer.c [IPV4]: Optimize inet_getpeer() 2007-04-25 22:23:49 -07:00
ip_forward.c [NET]: Allow forwarding of ip_summed except CHECKSUM_COMPLETE 2007-04-25 22:28:16 -07:00
ip_fragment.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
ip_gre.c [SK_BUFF]: unions of just one member don't get anything done, kill them 2007-04-25 22:26:20 -07:00
ip_input.c [SK_BUFF]: Introduce skb_reset_transport_header(skb) 2007-04-25 22:25:15 -07:00
ip_options.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
ip_output.c [SK_BUFF]: Introduce skb_copy_from_linear_data{_offset} 2007-04-25 22:28:23 -07:00
ip_sockglue.c [SK_BUFF]: Convert skb->tail to sk_buff_data_t 2007-04-25 22:26:28 -07:00
ipcomp.c [SK_BUFF]: Introduce skb_copy_to_linear_data{_offset} 2007-04-25 22:28:29 -07:00
ipconfig.c [SK_BUFF]: Introduce skb_transport_header(skb) 2007-04-25 22:25:31 -07:00
ipip.c [SK_BUFF]: unions of just one member don't get anything done, kill them 2007-04-25 22:26:20 -07:00
ipmr.c [SK_BUFF]: Introduce skb_copy_to_linear_data{_offset} 2007-04-25 22:28:29 -07:00
Kconfig [TCP] YeAH-TCP: algorithm implementation 2007-04-25 22:23:18 -07:00
Makefile [TCP] YeAH-TCP: algorithm implementation 2007-04-25 22:23:18 -07:00
multipath_drr.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
multipath_random.c [IPV4]: Use random32() in net/ipv4/multipath 2007-02-26 11:43:00 -08:00
multipath_rr.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
multipath_wrandom.c [IPV4]: Use random32() in net/ipv4/multipath 2007-02-26 11:43:00 -08:00
multipath.c
netfilter.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
proc.c [PATCH] mark struct file_operations const 7 2007-02-12 09:48:46 -08:00
protocol.c [IPV4]: align inet_protos[] on SMP 2007-04-25 22:28:20 -07:00
raw.c [SK_BUFF]: unions of just one member don't get anything done, kill them 2007-04-25 22:26:20 -07:00
route.c [IPV4] LVS: Allow to send ICMP unreachable responses when real-servers are removed 2007-04-25 22:28:15 -07:00
syncookies.c [SK_BUFF]: Introduce tcp_hdr(), remove skb->h.th 2007-04-25 22:25:26 -07:00
sysctl_net_ipv4.c [TCP]: Add two new spurious RTO responses to FRTO 2007-04-25 22:23:23 -07:00
tcp_bic.c [TCP] tcp_bic: use BUILD_BUG_ON 2006-09-22 15:18:04 -07:00
tcp_cong.c [TCP]: Add RFC3742 Limited Slow-Start, controlled by variable sysctl_tcp_max_ssthresh. 2007-04-25 22:23:19 -07:00
tcp_cubic.c [TCP]: cubic update for net-2.6.22 2007-04-25 22:28:09 -07:00
tcp_diag.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tcp_highspeed.c [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
tcp_htcp.c [TCP]: cleanup of htcp (resend) 2007-02-12 13:34:03 -08:00
tcp_hybla.c [TCP]: whitespace cleanup 2007-04-25 22:24:13 -07:00
tcp_input.c [SK_BUFF]: Introduce skb_transport_header(skb) 2007-04-25 22:25:31 -07:00
tcp_ipv4.c [NET]: Use csum_start offset instead of skb_transport_header 2007-04-25 22:28:40 -07:00
tcp_lp.c [TCP] tcp-lp: prevent chance for oops 2006-09-28 18:03:07 -07:00
tcp_minisocks.c [SK_BUFF]: Introduce tcp_hdr(), remove skb->h.th 2007-04-25 22:25:26 -07:00
tcp_output.c [SK_BUFF]: Some more conversions to skb_copy_from_linear_data 2007-04-25 22:28:30 -07:00
tcp_probe.c [TCP] tcp_probe: improvements for net-2.6.22 2007-04-25 22:28:10 -07:00
tcp_scalable.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tcp_timer.c [TCP]: Abstract out all write queue operations. 2007-04-25 22:24:02 -07:00
tcp_vegas.c [TCP] vegas: Use type safe netlink interface 2007-04-25 22:27:26 -07:00
tcp_veno.c [TCP] Congestion control (modulo lp, bic): use BUILD_BUG_ON 2006-09-22 15:18:13 -07:00
tcp_westwood.c [TCP] westwood: Use type safe netlink interface 2007-04-25 22:27:26 -07:00
tcp_yeah.c [TCP] TCP Yeah: cleanup 2007-04-25 22:23:48 -07:00
tcp_yeah.h [NET]: div64_64 consolidate (rev3) 2007-04-25 22:23:33 -07:00
tcp.c [TCP]: tcp_memory_pressure and tcp_socket are__read_mostly candidates 2007-04-25 22:28:19 -07:00
tunnel4.c [IPSEC]: Changing API of xfrm4_tunnel_register. 2007-02-13 12:54:47 -08:00
udp_impl.h [NET] IPV4: Fix whitespace errors. 2007-02-10 23:19:39 -08:00
udp.c [NET]: Use csum_start offset instead of skb_transport_header 2007-04-25 22:28:40 -07:00
udplite.c [UDP]: Clean up UDP-Lite receive checksum 2007-04-25 22:23:51 -07:00
xfrm4_input.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
xfrm4_mode_beet.c [XFRM]: beet: fix worst case header_len calculation 2007-04-25 22:28:39 -07:00
xfrm4_mode_transport.c [SK_BUFF]: unions of just one member don't get anything done, kill them 2007-04-25 22:26:20 -07:00
xfrm4_mode_tunnel.c [SK_BUFF]: unions of just one member don't get anything done, kill them 2007-04-25 22:26:20 -07:00
xfrm4_output.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
xfrm4_policy.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00
xfrm4_state.c [IPSEC]: exporting xfrm_state_afinfo 2007-02-08 12:39:00 -08:00
xfrm4_tunnel.c [SK_BUFF]: Introduce ip_hdr(), remove skb->nh.iph 2007-04-25 22:25:10 -07:00