1
linux/net/ipv6
Ananda Raju e89e9cf539 [IPv4/IPv6]: UFO Scatter-gather approach
Attached is kernel patch for UDP Fragmentation Offload (UFO) feature.

1. This patch incorporate the review comments by Jeff Garzik.
2. Renamed USO as UFO (UDP Fragmentation Offload)
3. udp sendfile support with UFO

This patches uses scatter-gather feature of skb to generate large UDP
datagram. Below is a "how-to" on changes required in network device
driver to use the UFO interface.

UDP Fragmentation Offload (UFO) Interface:
-------------------------------------------
UFO is a feature wherein the Linux kernel network stack will offload the
IP fragmentation functionality of large UDP datagram to hardware. This
will reduce the overhead of stack in fragmenting the large UDP datagram to
MTU sized packets

1) Drivers indicate their capability of UFO using
dev->features |= NETIF_F_UFO | NETIF_F_HW_CSUM | NETIF_F_SG

NETIF_F_HW_CSUM is required for UFO over ipv6.

2) UFO packet will be submitted for transmission using driver xmit routine.
UFO packet will have a non-zero value for

"skb_shinfo(skb)->ufo_size"

skb_shinfo(skb)->ufo_size will indicate the length of data part in each IP
fragment going out of the adapter after IP fragmentation by hardware.

skb->data will contain MAC/IP/UDP header and skb_shinfo(skb)->frags[]
contains the data payload. The skb->ip_summed will be set to CHECKSUM_HW
indicating that hardware has to do checksum calculation. Hardware should
compute the UDP checksum of complete datagram and also ip header checksum of
each fragmented IP packet.

For IPV6 the UFO provides the fragment identification-id in
skb_shinfo(skb)->ip6_frag_id. The adapter should use this ID for generating
IPv6 fragments.

Signed-off-by: Ananda Raju <ananda.raju@neterion.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (forwarded)
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
2005-10-28 16:30:00 -02:00
..
netfilter [NETFILTER]: Fix ip6_table.c build with NETFILTER_DEBUG enabled. 2005-10-15 16:15:38 -07:00
addrconf.c [IPV4]: Replace __in_dev_get with __in_dev_get_rcu/rtnl 2005-10-03 14:35:55 -07:00
af_inet6.c [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
ah6.c [CRYPTO]: crypto_free_tfm() callers no longer need to check for NULL 2005-09-01 17:44:29 -07:00
anycast.c [IPV6]: V6 route events reported with wrong netlink PID and seq number 2005-06-21 13:51:04 -07:00
datagram.c [XFRM]: Always release dst_entry on error in xfrm_lookup 2005-09-08 15:11:55 -07:00
esp6.c [IPSEC] Fix block size/MTU bugs in ESP 2005-10-10 21:11:34 -07:00
exthdrs_core.c [SELINUX]: Fix ipv6_skip_exthdr() invocation causing OOPS. 2005-04-24 20:16:19 -07:00
exthdrs.c [IPV6]: Bring Type 0 routing header in-line with rfc3542. 2005-09-10 00:15:06 -07:00
icmp.c [NET]: Wider use of for_each_*cpu() 2005-10-25 23:54:01 -02:00
inet6_hashtables.c [INET6_HASHTABLES]: Move inet6_lookup functions to net/ipv6/inet6_hashtables.c 2005-08-29 15:57:29 -07:00
ip6_fib.c [PATCH] timer initialization cleanup: DEFINE_TIMER 2005-09-09 14:03:48 -07:00
ip6_flowlabel.c [IPV6]: Fix refcnt of struct ip6_flowlabel 2005-10-25 21:17:52 -02:00
ip6_input.c [IPV4/6]: Check if packet was actually delivered to a raw socket to decide whether to send an ICMP unreachable 2005-08-29 15:37:22 -07:00
ip6_output.c [IPv4/IPv6]: UFO Scatter-gather approach 2005-10-28 16:30:00 -02:00
ip6_tunnel.c [IPV6]: Don't redo xfrm_lookup for cached dst entries 2005-09-08 14:27:47 -07:00
ipcomp6.c [CRYPTO]: crypto_free_tfm() callers no longer need to check for NULL 2005-09-01 17:44:29 -07:00
ipv6_sockglue.c [IPV6]: Support IPV6_{RECV,}TCLASS socket options / ancillary data. 2005-09-08 10:19:03 +09:00
ipv6_syms.c [NETFILTER]: Move ipv4 specific code from net/core/netfilter.c to net/ipv4/netfilter.c 2005-08-29 15:35:01 -07:00
Kconfig [NET]: Make ipip/ip6_tunnel independant of XFRM 2005-07-19 14:03:34 -07:00
Makefile [INET6_HASHTABLES]: Move inet6_lookup functions to net/ipv6/inet6_hashtables.c 2005-08-29 15:57:29 -07:00
mcast.c [MCAST] ipv6: Fix address size in grec_size 2005-10-05 12:08:13 -07:00
ndisc.c [IPV6]: Fix NS handing for proxy/anycast address 2005-10-05 12:11:41 -07:00
netfilter.c [NET]: Make NETDEBUG pure printk wrappers 2005-08-29 15:56:08 -07:00
proc.c [NET]: Wider use of for_each_*cpu() 2005-10-25 23:54:01 -02:00
protocol.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raw.c [PATCH] raw_sendmsg DoS on 2.6 2005-09-19 18:45:42 -07:00
reassembly.c [IPV6]: Need to use pskb_trim_rcsum(). 2005-09-08 12:57:43 -07:00
route.c [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
sit.c [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
sysctl_net_ipv6.c [NET]: Fix sparse warnings 2005-08-29 16:01:32 -07:00
tcp_ipv6.c [INET]: speedup inet (tcp/dccp) lookups 2005-10-03 14:13:38 -07:00
udp.c [IPV6]: Fix infinite loop in udp_v6_get_port(). 2005-10-04 13:00:39 -07:00
xfrm6_input.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xfrm6_output.c [IPV6]: Fix xfrm tunnel oops with large packets 2005-05-23 13:11:07 -07:00
xfrm6_policy.c From: Kazunori Miyazawa <kazunori@miyazawa.org> 2005-05-26 12:58:04 -07:00
xfrm6_state.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xfrm6_tunnel.c [NET]: use __read_mostly on kmem_cache_t , DEFINE_SNMP_STAT pointers 2005-08-29 16:11:18 -07:00