linux/net/sctp
Marcelo Ricardo Leitner 90017accff sctp: Add GSO support
SCTP has this pecualiarity that its packets cannot be just segmented to
(P)MTU. Its chunks must be contained in IP segments, padding respected.
So we can't just generate a big skb, set gso_size to the fragmentation
point and deliver it to IP layer.

This patch takes a different approach. SCTP will now build a skb as it
would be if it was received using GRO. That is, there will be a cover
skb with protocol headers and children ones containing the actual
segments, already segmented to a way that respects SCTP RFCs.

With that, we can tell skb_segment() to just split based on frag_list,
trusting its sizes are already in accordance.

This way SCTP can benefit from GSO and instead of passing several
packets through the stack, it can pass a single large packet.

v2:
- Added support for receiving GSO frames, as requested by Dave Miller.
- Clear skb->cb if packet is GSO (otherwise it's not used by SCTP)
- Added heuristics similar to what we have in TCP for not generating
  single GSO packets that fills cwnd.
v3:
- consider sctphdr size in skb_gso_transport_seglen()
- rebased due to 5c7cdf339a ("gso: Remove arbitrary checks for
  unsupported GSO")

Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Tested-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-06-03 19:37:21 -04:00
..
associola.c sctp: align MTU to a word 2016-03-20 16:31:12 -04:00
auth.c sctp: Use shash 2016-01-27 20:36:15 +08:00
bind_addr.c sctp: fix copying more bytes than expected in sctp_add_bind_addr 2016-03-08 15:04:08 -05:00
chunk.c net: snmp: kill various STATS_USER() helpers 2016-04-27 22:48:22 -04:00
debug.c
endpointola.c sctp: Use shash 2016-01-27 20:36:15 +08:00
input.c sctp: Add GSO support 2016-06-03 19:37:21 -04:00
inqueue.c sctp: Add GSO support 2016-06-03 19:37:21 -04:00
ipv6.c net: rename ICMP6_INC_STATS_BH() 2016-04-27 22:48:24 -04:00
Kconfig sctp: add the sctp_diag.c file 2016-04-15 17:29:36 -04:00
Makefile sctp: Add GSO support 2016-06-03 19:37:21 -04:00
objcnt.c
offload.c sctp: Add GSO support 2016-06-03 19:37:21 -04:00
output.c sctp: Add GSO support 2016-06-03 19:37:21 -04:00
outqueue.c sctp: avoid refreshing heartbeat timer too often 2016-04-10 22:22:34 -04:00
primitive.c
probe.c net: sctp: Convert log timestamps to be y2038 safe 2016-03-01 17:18:44 -05:00
proc.c sctp: fix some rhashtable functions using in sctp proc/diag 2016-04-15 17:29:37 -04:00
protocol.c sctp: Add GSO support 2016-06-03 19:37:21 -04:00
sctp_diag.c sctp: fix double EPs display in sctp_diag 2016-05-25 22:14:31 -07:00
sm_make_chunk.c sctp: avoid refreshing heartbeat timer too often 2016-04-10 22:22:34 -04:00
sm_sideeffect.c sctp: signal sk_data_ready earlier on data chunks reception 2016-05-01 21:06:10 -04:00
sm_statefuns.c sctp: fix use-after-free in pr_debug statement 2016-01-11 17:13:01 -05:00
sm_statetable.c
socket.c sctp: Add GSO support 2016-06-03 19:37:21 -04:00
ssnmap.c
sysctl.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-01-11 23:55:43 -05:00
transport.c sctp: avoid refreshing heartbeat timer too often 2016-04-10 22:22:34 -04:00
tsnmap.c
ulpevent.c
ulpqueue.c sctp: signal sk_data_ready earlier on data chunks reception 2016-05-01 21:06:10 -04:00