Loading include/net/sctp/structs.h +1 −0 Original line number Diff line number Diff line Loading @@ -1085,6 +1085,7 @@ void sctp_transport_burst_reset(struct sctp_transport *); unsigned long sctp_transport_timeout(struct sctp_transport *); void sctp_transport_reset(struct sctp_transport *); void sctp_transport_update_pmtu(struct sctp_transport *, u32); void sctp_transport_immediate_rtx(struct sctp_transport *); /* This is the structure we use to queue packets as they come into Loading net/sctp/sm_make_chunk.c +3 −1 Original line number Diff line number Diff line Loading @@ -3400,8 +3400,10 @@ int sctp_process_asconf_ack(struct sctp_association *asoc, asconf_len -= length; } if (no_err && asoc->src_out_of_asoc_ok) if (no_err && asoc->src_out_of_asoc_ok) { asoc->src_out_of_asoc_ok = 0; sctp_transport_immediate_rtx(asoc->peer.primary_path); } /* Free the cached last sent asconf chunk. */ list_del_init(&asconf->transmitted_list); Loading net/sctp/transport.c +16 −0 Original line number Diff line number Diff line Loading @@ -641,3 +641,19 @@ void sctp_transport_reset(struct sctp_transport *t) t->cacc.next_tsn_at_change = 0; t->cacc.cacc_saw_newack = 0; } /* Schedule retransmission on the given transport */ void sctp_transport_immediate_rtx(struct sctp_transport *t) { /* Stop pending T3_rtx_timer */ if (timer_pending(&t->T3_rtx_timer)) { (void)del_timer(&t->T3_rtx_timer); sctp_transport_put(t); } sctp_retransmit(&t->asoc->outqueue, t, SCTP_RTXR_T3_RTX); if (!timer_pending(&t->T3_rtx_timer)) { if (!mod_timer(&t->T3_rtx_timer, jiffies + t->rto)) sctp_transport_hold(t); } return; } Loading
include/net/sctp/structs.h +1 −0 Original line number Diff line number Diff line Loading @@ -1085,6 +1085,7 @@ void sctp_transport_burst_reset(struct sctp_transport *); unsigned long sctp_transport_timeout(struct sctp_transport *); void sctp_transport_reset(struct sctp_transport *); void sctp_transport_update_pmtu(struct sctp_transport *, u32); void sctp_transport_immediate_rtx(struct sctp_transport *); /* This is the structure we use to queue packets as they come into Loading
net/sctp/sm_make_chunk.c +3 −1 Original line number Diff line number Diff line Loading @@ -3400,8 +3400,10 @@ int sctp_process_asconf_ack(struct sctp_association *asoc, asconf_len -= length; } if (no_err && asoc->src_out_of_asoc_ok) if (no_err && asoc->src_out_of_asoc_ok) { asoc->src_out_of_asoc_ok = 0; sctp_transport_immediate_rtx(asoc->peer.primary_path); } /* Free the cached last sent asconf chunk. */ list_del_init(&asconf->transmitted_list); Loading
net/sctp/transport.c +16 −0 Original line number Diff line number Diff line Loading @@ -641,3 +641,19 @@ void sctp_transport_reset(struct sctp_transport *t) t->cacc.next_tsn_at_change = 0; t->cacc.cacc_saw_newack = 0; } /* Schedule retransmission on the given transport */ void sctp_transport_immediate_rtx(struct sctp_transport *t) { /* Stop pending T3_rtx_timer */ if (timer_pending(&t->T3_rtx_timer)) { (void)del_timer(&t->T3_rtx_timer); sctp_transport_put(t); } sctp_retransmit(&t->asoc->outqueue, t, SCTP_RTXR_T3_RTX); if (!timer_pending(&t->T3_rtx_timer)) { if (!mod_timer(&t->T3_rtx_timer, jiffies + t->rto)) sctp_transport_hold(t); } return; }