[SCTP]: Fix SCTP_SHUTDOWN notifications.
Fix to allow SCTP_SHUTDOWN notifications to be received on 1-1 style SCTP SOCK_STREAM sockets. Add SCTP_SHUTDOWN notification to the receive queue before updating the state of the association. Signed-off-by: Sridhar Samudrala <sri@us.ibm.com> Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1dfbab5949
commit
eb0e007687
|
@ -2414,6 +2414,17 @@ sctp_disposition_t sctp_sf_do_9_2_shutdown(const struct sctp_endpoint *ep,
|
|||
skb_pull(chunk->skb, sizeof(sctp_shutdownhdr_t));
|
||||
chunk->subh.shutdown_hdr = sdh;
|
||||
|
||||
/* API 5.3.1.5 SCTP_SHUTDOWN_EVENT
|
||||
* When a peer sends a SHUTDOWN, SCTP delivers this notification to
|
||||
* inform the application that it should cease sending data.
|
||||
*/
|
||||
ev = sctp_ulpevent_make_shutdown_event(asoc, 0, GFP_ATOMIC);
|
||||
if (!ev) {
|
||||
disposition = SCTP_DISPOSITION_NOMEM;
|
||||
goto out;
|
||||
}
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev));
|
||||
|
||||
/* Upon the reception of the SHUTDOWN, the peer endpoint shall
|
||||
* - enter the SHUTDOWN-RECEIVED state,
|
||||
* - stop accepting new data from its SCTP user
|
||||
|
@ -2439,17 +2450,6 @@ sctp_disposition_t sctp_sf_do_9_2_shutdown(const struct sctp_endpoint *ep,
|
|||
sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_CTSN,
|
||||
SCTP_U32(chunk->subh.shutdown_hdr->cum_tsn_ack));
|
||||
|
||||
/* API 5.3.1.5 SCTP_SHUTDOWN_EVENT
|
||||
* When a peer sends a SHUTDOWN, SCTP delivers this notification to
|
||||
* inform the application that it should cease sending data.
|
||||
*/
|
||||
ev = sctp_ulpevent_make_shutdown_event(asoc, 0, GFP_ATOMIC);
|
||||
if (!ev) {
|
||||
disposition = SCTP_DISPOSITION_NOMEM;
|
||||
goto out;
|
||||
}
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev));
|
||||
|
||||
out:
|
||||
return disposition;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user