|
@@ -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;
|
|
|
}
|