|
@@ -714,8 +714,16 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
|
|
/* Record the transition on the transport. */
|
|
/* Record the transition on the transport. */
|
|
switch (command) {
|
|
switch (command) {
|
|
case SCTP_TRANSPORT_UP:
|
|
case SCTP_TRANSPORT_UP:
|
|
|
|
+ /* If we are moving from UNCONFIRMED state due
|
|
|
|
+ * to heartbeat success, report the SCTP_ADDR_CONFIRMED
|
|
|
|
+ * state to the user, otherwise report SCTP_ADDR_AVAILABLE.
|
|
|
|
+ */
|
|
|
|
+ if (SCTP_UNCONFIRMED == transport->state &&
|
|
|
|
+ SCTP_HEARTBEAT_SUCCESS == error)
|
|
|
|
+ spc_state = SCTP_ADDR_CONFIRMED;
|
|
|
|
+ else
|
|
|
|
+ spc_state = SCTP_ADDR_AVAILABLE;
|
|
transport->state = SCTP_ACTIVE;
|
|
transport->state = SCTP_ACTIVE;
|
|
- spc_state = SCTP_ADDR_AVAILABLE;
|
|
|
|
break;
|
|
break;
|
|
|
|
|
|
case SCTP_TRANSPORT_DOWN:
|
|
case SCTP_TRANSPORT_DOWN:
|