aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/input.c
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2007-06-07 14:21:05 -0400
committerVladislav Yasevich <vxy@hera.kernel.org>2007-06-13 16:44:42 -0400
commit8a4794914f9cf2681235ec2311e189fe307c28c7 (patch)
tree029530de3f65445050e7f4c3ad4cd0195b127fa4 /net/sctp/input.c
parentc910b47e1811b3f8b184108c48de3d7af3e2999b (diff)
[SCTP] Flag a pmtu change request
Currently, if the socket is owned by the user, we drop the ICMP message. As a result SCTP forgets that path MTU changed and never adjusting it's estimate. This causes all subsequent packets to be fragmented. With this patch, we'll flag the association that it needs to udpate it's estimate based on the already updated routing information. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Acked-by: Sridhar Samudrala <sri@us.ibm.com>
Diffstat (limited to 'net/sctp/input.c')
-rw-r--r--net/sctp/input.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/sctp/input.c b/net/sctp/input.c
index 45d6a644cf06..d57ff7f3c576 100644
--- a/net/sctp/input.c
+++ b/net/sctp/input.c
@@ -367,9 +367,15 @@ static void sctp_add_backlog(struct sock *sk, struct sk_buff *skb)
367void sctp_icmp_frag_needed(struct sock *sk, struct sctp_association *asoc, 367void sctp_icmp_frag_needed(struct sock *sk, struct sctp_association *asoc,
368 struct sctp_transport *t, __u32 pmtu) 368 struct sctp_transport *t, __u32 pmtu)
369{ 369{
370 if (sock_owned_by_user(sk) || !t || (t->pathmtu == pmtu)) 370 if (!t || (t->pathmtu == pmtu))
371 return; 371 return;
372 372
373 if (sock_owned_by_user(sk)) {
374 asoc->pmtu_pending = 1;
375 t->pmtu_pending = 1;
376 return;
377 }
378
373 if (t->param_flags & SPP_PMTUD_ENABLE) { 379 if (t->param_flags & SPP_PMTUD_ENABLE) {
374 /* Update transports view of the MTU */ 380 /* Update transports view of the MTU */
375 sctp_transport_update_pmtu(t, pmtu); 381 sctp_transport_update_pmtu(t, pmtu);