|
@@ -1284,49 +1284,21 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
|
|
|
ntohs(t->ipaddr.v4.sin_port));
|
|
|
}
|
|
|
|
|
|
-/* Choose the transport for sending a INIT packet. */
|
|
|
-struct sctp_transport *sctp_assoc_choose_init_transport(
|
|
|
- struct sctp_association *asoc)
|
|
|
+/* Choose the transport for sending retransmit packet. */
|
|
|
+struct sctp_transport *sctp_assoc_choose_alter_transport(
|
|
|
+ struct sctp_association *asoc, struct sctp_transport *last_sent_to)
|
|
|
{
|
|
|
- struct sctp_transport *t;
|
|
|
-
|
|
|
- /* Use the retran path. If the last INIT was sent over the
|
|
|
+ /* If this is the first time packet is sent, use the active path,
|
|
|
+ * else use the retran path. If the last packet was sent over the
|
|
|
* retran path, update the retran path and use it.
|
|
|
*/
|
|
|
- if (!asoc->init_last_sent_to) {
|
|
|
- t = asoc->peer.active_path;
|
|
|
- } else {
|
|
|
- if (asoc->init_last_sent_to == asoc->peer.retran_path)
|
|
|
- sctp_assoc_update_retran_path(asoc);
|
|
|
- t = asoc->peer.retran_path;
|
|
|
- }
|
|
|
-
|
|
|
- SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_update_retran_path:association"
|
|
|
- " %p addr: ",
|
|
|
- " port: %d\n",
|
|
|
- asoc,
|
|
|
- (&t->ipaddr),
|
|
|
- ntohs(t->ipaddr.v4.sin_port));
|
|
|
-
|
|
|
- return t;
|
|
|
-}
|
|
|
-
|
|
|
-/* Choose the transport for sending a SHUTDOWN packet. */
|
|
|
-struct sctp_transport *sctp_assoc_choose_shutdown_transport(
|
|
|
- struct sctp_association *asoc)
|
|
|
-{
|
|
|
- /* If this is the first time SHUTDOWN is sent, use the active path,
|
|
|
- * else use the retran path. If the last SHUTDOWN was sent over the
|
|
|
- * retran path, update the retran path and use it.
|
|
|
- */
|
|
|
- if (!asoc->shutdown_last_sent_to)
|
|
|
+ if (!last_sent_to)
|
|
|
return asoc->peer.active_path;
|
|
|
else {
|
|
|
- if (asoc->shutdown_last_sent_to == asoc->peer.retran_path)
|
|
|
+ if (last_sent_to == asoc->peer.retran_path)
|
|
|
sctp_assoc_update_retran_path(asoc);
|
|
|
return asoc->peer.retran_path;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/* Update the association's pmtu and frag_point by going through all the
|