mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 15:10:38 +00:00
90017accff
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 5c7cdf339af5 ("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>
24 lines
636 B
Makefile
24 lines
636 B
Makefile
#
|
|
# Makefile for SCTP support code.
|
|
#
|
|
|
|
obj-$(CONFIG_IP_SCTP) += sctp.o
|
|
obj-$(CONFIG_NET_SCTPPROBE) += sctp_probe.o
|
|
obj-$(CONFIG_INET_SCTP_DIAG) += sctp_diag.o
|
|
|
|
sctp-y := sm_statetable.o sm_statefuns.o sm_sideeffect.o \
|
|
protocol.o endpointola.o associola.o \
|
|
transport.o chunk.o sm_make_chunk.o ulpevent.o \
|
|
inqueue.o outqueue.o ulpqueue.o \
|
|
tsnmap.o bind_addr.o socket.o primitive.o \
|
|
output.o input.o debug.o ssnmap.o auth.o \
|
|
offload.o
|
|
|
|
sctp_probe-y := probe.o
|
|
|
|
sctp-$(CONFIG_SCTP_DBG_OBJCNT) += objcnt.o
|
|
sctp-$(CONFIG_PROC_FS) += proc.o
|
|
sctp-$(CONFIG_SYSCTL) += sysctl.o
|
|
|
|
sctp-$(subst m,y,$(CONFIG_IPV6)) += ipv6.o
|