* [PATCH] sctp: send SHUTDOWN-ACK chunk back to where the SHUTDOWN
@ 2010-01-12 8:19 Wei Yongjun
2010-02-24 22:07 ` Vlad Yasevich
2010-02-25 1:19 ` Wei Yongjun
0 siblings, 2 replies; 3+ messages in thread
From: Wei Yongjun @ 2010-01-12 8:19 UTC (permalink / raw)
To: linux-sctp
SHUTDOWN-ACK is alaways sent to the primary path at the first time,
but should better transmit SHUTDOWN-ACK chunk to the same destination
transport address from which it received the SHUTDOWN chunk.
Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
---
include/net/sctp/structs.h | 3 ++-
net/sctp/associola.c | 12 ++++++++----
net/sctp/sm_sideeffect.c | 7 ++++---
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index ff30177..565a291 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1948,7 +1948,8 @@ void sctp_association_put(struct sctp_association *);
void sctp_association_hold(struct sctp_association *);
struct sctp_transport *sctp_assoc_choose_alter_transport(
- struct sctp_association *, struct sctp_transport *);
+ struct sctp_association *, struct sctp_transport *,
+ struct sctp_chunk *);
void sctp_assoc_update_retran_path(struct sctp_association *);
struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *,
const union sctp_addr *);
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index df5abbf..45bb311 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -1335,15 +1335,19 @@ void sctp_assoc_update_retran_path(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_association *asoc, struct sctp_transport *last_sent_to,
+ struct sctp_chunk *chunk)
{
/* 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 (!last_sent_to)
- return asoc->peer.active_path;
- else {
+ if (!last_sent_to) {
+ if (chunk && chunk->transport)
+ return chunk->transport;
+ else
+ return asoc->peer.active_path;
+ } else {
if (last_sent_to = asoc->peer.retran_path)
sctp_assoc_update_retran_path(asoc);
return asoc->peer.retran_path;
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
index 4e4ca65..e61d5bf 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
@@ -697,7 +697,8 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
struct sctp_transport *t;
t = sctp_assoc_choose_alter_transport(asoc,
- asoc->shutdown_last_sent_to);
+ asoc->shutdown_last_sent_to,
+ chunk);
asoc->shutdown_last_sent_to = t;
asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = t->rto;
chunk->transport = t;
@@ -788,7 +789,7 @@ static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds,
{
struct sctp_transport *t;
- t = sctp_assoc_choose_alter_transport(asoc, chunk->transport);
+ t = sctp_assoc_choose_alter_transport(asoc, chunk->transport, NULL);
asoc->timeouts[SCTP_EVENT_TIMEOUT_T4_RTO] = t->rto;
chunk->transport = t;
}
@@ -1412,7 +1413,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
case SCTP_CMD_INIT_CHOOSE_TRANSPORT:
chunk = cmd->obj.ptr;
t = sctp_assoc_choose_alter_transport(asoc,
- asoc->init_last_sent_to);
+ asoc->init_last_sent_to, NULL);
asoc->init_last_sent_to = t;
chunk->transport = t;
t->init_sent_count++;
--
1.6.2.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] sctp: send SHUTDOWN-ACK chunk back to where the SHUTDOWN
2010-01-12 8:19 [PATCH] sctp: send SHUTDOWN-ACK chunk back to where the SHUTDOWN Wei Yongjun
@ 2010-02-24 22:07 ` Vlad Yasevich
2010-02-25 1:19 ` Wei Yongjun
1 sibling, 0 replies; 3+ messages in thread
From: Vlad Yasevich @ 2010-02-24 22:07 UTC (permalink / raw)
To: linux-sctp
I was just doing review of the patches again and testing them out.
I think the following is a more elegant solution.
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
index 4e4ca65..bbd238d 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
@@ -696,11 +696,15 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
{
struct sctp_transport *t;
- t = sctp_assoc_choose_alter_transport(asoc,
+ if (chunk->transport)
+ t = chunk->transport;
+ else {
+ t = sctp_assoc_choose_alter_transport(asoc,
asoc->shutdown_last_sent_to);
+ chunk->transport = t;
+ }
asoc->shutdown_last_sent_to = t;
asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = t->rto;
- chunk->transport = t;
}
/* Helper function to change the state of an association. */
-vlad
Wei Yongjun wrote:
> SHUTDOWN-ACK is alaways sent to the primary path at the first time,
> but should better transmit SHUTDOWN-ACK chunk to the same destination
> transport address from which it received the SHUTDOWN chunk.
>
> Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
> ---
> include/net/sctp/structs.h | 3 ++-
> net/sctp/associola.c | 12 ++++++++----
> net/sctp/sm_sideeffect.c | 7 ++++---
> 3 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
> index ff30177..565a291 100644
> --- a/include/net/sctp/structs.h
> +++ b/include/net/sctp/structs.h
> @@ -1948,7 +1948,8 @@ void sctp_association_put(struct sctp_association *);
> void sctp_association_hold(struct sctp_association *);
>
> struct sctp_transport *sctp_assoc_choose_alter_transport(
> - struct sctp_association *, struct sctp_transport *);
> + struct sctp_association *, struct sctp_transport *,
> + struct sctp_chunk *);
> void sctp_assoc_update_retran_path(struct sctp_association *);
> struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *,
> const union sctp_addr *);
> diff --git a/net/sctp/associola.c b/net/sctp/associola.c
> index df5abbf..45bb311 100644
> --- a/net/sctp/associola.c
> +++ b/net/sctp/associola.c
> @@ -1335,15 +1335,19 @@ void sctp_assoc_update_retran_path(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_association *asoc, struct sctp_transport *last_sent_to,
> + struct sctp_chunk *chunk)
> {
> /* 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 (!last_sent_to)
> - return asoc->peer.active_path;
> - else {
> + if (!last_sent_to) {
> + if (chunk && chunk->transport)
> + return chunk->transport;
> + else
> + return asoc->peer.active_path;
> + } else {
> if (last_sent_to = asoc->peer.retran_path)
> sctp_assoc_update_retran_path(asoc);
> return asoc->peer.retran_path;
> diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
> index 4e4ca65..e61d5bf 100644
> --- a/net/sctp/sm_sideeffect.c
> +++ b/net/sctp/sm_sideeffect.c
> @@ -697,7 +697,8 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
> struct sctp_transport *t;
>
> t = sctp_assoc_choose_alter_transport(asoc,
> - asoc->shutdown_last_sent_to);
> + asoc->shutdown_last_sent_to,
> + chunk);
> asoc->shutdown_last_sent_to = t;
> asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = t->rto;
> chunk->transport = t;
> @@ -788,7 +789,7 @@ static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds,
> {
> struct sctp_transport *t;
>
> - t = sctp_assoc_choose_alter_transport(asoc, chunk->transport);
> + t = sctp_assoc_choose_alter_transport(asoc, chunk->transport, NULL);
> asoc->timeouts[SCTP_EVENT_TIMEOUT_T4_RTO] = t->rto;
> chunk->transport = t;
> }
> @@ -1412,7 +1413,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
> case SCTP_CMD_INIT_CHOOSE_TRANSPORT:
> chunk = cmd->obj.ptr;
> t = sctp_assoc_choose_alter_transport(asoc,
> - asoc->init_last_sent_to);
> + asoc->init_last_sent_to, NULL);
> asoc->init_last_sent_to = t;
> chunk->transport = t;
> t->init_sent_count++;
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] sctp: send SHUTDOWN-ACK chunk back to where the SHUTDOWN
2010-01-12 8:19 [PATCH] sctp: send SHUTDOWN-ACK chunk back to where the SHUTDOWN Wei Yongjun
2010-02-24 22:07 ` Vlad Yasevich
@ 2010-02-25 1:19 ` Wei Yongjun
1 sibling, 0 replies; 3+ messages in thread
From: Wei Yongjun @ 2010-02-25 1:19 UTC (permalink / raw)
To: linux-sctp
Vlad Yasevich wrote:
> I was just doing review of the patches again and testing them out.
>
> I think the following is a more elegant solution.
>
> diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
> index 4e4ca65..bbd238d 100644
> --- a/net/sctp/sm_sideeffect.c
> +++ b/net/sctp/sm_sideeffect.c
> @@ -696,11 +696,15 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
> {
> struct sctp_transport *t;
>
> - t = sctp_assoc_choose_alter_transport(asoc,
> + if (chunk->transport)
> + t = chunk->transport;
> + else {
> + t = sctp_assoc_choose_alter_transport(asoc,
> asoc->shutdown_last_sent_to);
> + chunk->transport = t;
> + }
> asoc->shutdown_last_sent_to = t;
> asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = t->rto;
> - chunk->transport = t;
> }
>
> /* Helper function to change the state of an association. */
>
It is OK to me, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-02-25 1:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-12 8:19 [PATCH] sctp: send SHUTDOWN-ACK chunk back to where the SHUTDOWN Wei Yongjun
2010-02-24 22:07 ` Vlad Yasevich
2010-02-25 1:19 ` Wei Yongjun
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.