diff options
author | Xin Long <lucien.xin@gmail.com> | 2017-11-25 21:18:35 +0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-01 15:06:24 -0500 |
commit | e5f612969c6f965e3bd1158598e0a3b1c4f389b9 (patch) | |
tree | 4957b2abccb9a0b95294651446e1e124f4d3cab5 /include | |
parent | d30fc5126efb0c33b7adf5966d3051db2c3d7721 (diff) | |
download | linux-e5f612969c6f965e3bd1158598e0a3b1c4f389b9.tar.gz linux-e5f612969c6f965e3bd1158598e0a3b1c4f389b9.tar.bz2 linux-e5f612969c6f965e3bd1158598e0a3b1c4f389b9.zip |
sctp: abandon the whole msg if one part of a fragmented message is abandoned
As rfc3758#section-3.1 demands:
A3) When a TSN is "abandoned", if it is part of a fragmented message,
all other TSN's within that fragmented message MUST be abandoned
at the same time.
Besides, if it couldn't handle this, the rest frags would never get
assembled in peer side.
This patch supports it by adding abandoned flag in sctp_datamsg, when
one chunk is being abandoned, set chunk->msg->abandoned as well. Next
time when checking for abandoned, go checking chunk->msg->abandoned
first.
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/sctp/structs.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 16f949eef52f..2f8f93da5dc2 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -503,7 +503,8 @@ struct sctp_datamsg { /* Did the messenge fail to send? */ int send_error; u8 send_failed:1, - can_delay; /* should this message be Nagle delayed */ + can_delay:1, /* should this message be Nagle delayed */ + abandoned:1; /* should this message be abandoned */ }; struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *, |