svn commit: r214918 - head/sys/netinet
Michael Tuexen
tuexen at FreeBSD.org
Sun Nov 7 14:39:41 UTC 2010
Author: tuexen
Date: Sun Nov 7 14:39:40 2010
New Revision: 214918
URL: http://svn.freebsd.org/changeset/base/214918
Log:
Not only stop all timers when entering the SHUTDOWN_SENT state,
but also when entering the SHUTDOWN_ACK_SEND state.
MFC after: 3 days.
Modified:
head/sys/netinet/sctp_indata.c
head/sys/netinet/sctp_input.c
head/sys/netinet/sctputil.c
Modified: head/sys/netinet/sctp_indata.c
==============================================================================
--- head/sys/netinet/sctp_indata.c Sun Nov 7 14:28:01 2010 (r214917)
+++ head/sys/netinet/sctp_indata.c Sun Nov 7 14:39:40 2010 (r214918)
@@ -4369,7 +4369,7 @@ again:
SCTP_CLEAR_SUBSTATE(asoc, SCTP_STATE_SHUTDOWN_PENDING);
sctp_send_shutdown_ack(stcb,
stcb->asoc.primary_destination);
-
+ sctp_stop_timers_for_shutdown(stcb);
sctp_timer_start(SCTP_TIMER_TYPE_SHUTDOWNACK,
stcb->sctp_ep, stcb, asoc->primary_destination);
}
@@ -5081,7 +5081,7 @@ done_with_it:
SCTP_CLEAR_SUBSTATE(asoc, SCTP_STATE_SHUTDOWN_PENDING);
sctp_send_shutdown_ack(stcb,
stcb->asoc.primary_destination);
-
+ sctp_stop_timers_for_shutdown(stcb);
sctp_timer_start(SCTP_TIMER_TYPE_SHUTDOWNACK,
stcb->sctp_ep, stcb, asoc->primary_destination);
return;
Modified: head/sys/netinet/sctp_input.c
==============================================================================
--- head/sys/netinet/sctp_input.c Sun Nov 7 14:28:01 2010 (r214917)
+++ head/sys/netinet/sctp_input.c Sun Nov 7 14:39:40 2010 (r214918)
@@ -908,9 +908,7 @@ sctp_handle_shutdown(struct sctp_shutdow
}
SCTP_SET_STATE(asoc, SCTP_STATE_SHUTDOWN_ACK_SENT);
SCTP_CLEAR_SUBSTATE(asoc, SCTP_STATE_SHUTDOWN_PENDING);
- sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, net,
- SCTP_FROM_SCTP_INPUT + SCTP_LOC_7);
- /* start SHUTDOWN timer */
+ sctp_stop_timers_for_shutdown(stcb);
sctp_timer_start(SCTP_TIMER_TYPE_SHUTDOWNACK, stcb->sctp_ep,
stcb, net);
}
Modified: head/sys/netinet/sctputil.c
==============================================================================
--- head/sys/netinet/sctputil.c Sun Nov 7 14:28:01 2010 (r214917)
+++ head/sys/netinet/sctputil.c Sun Nov 7 14:39:40 2010 (r214918)
@@ -725,6 +725,31 @@ sctp_audit_log(uint8_t ev, uint8_t fd)
#endif
/*
+ * sctp_stop_timers_for_shutdown() should be called
+ * when entering the SHUTDOWN_SENT or SHUTDOWN_ACK_SENT
+ * state to make sure that all timers are stopped.
+ */
+void
+sctp_stop_timers_for_shutdown(struct sctp_tcb *stcb)
+{
+ struct sctp_association *asoc;
+ struct sctp_nets *net;
+
+ asoc = &stcb->asoc;
+
+ (void)SCTP_OS_TIMER_STOP(&asoc->hb_timer.timer);
+ (void)SCTP_OS_TIMER_STOP(&asoc->dack_timer.timer);
+ (void)SCTP_OS_TIMER_STOP(&asoc->strreset_timer.timer);
+ (void)SCTP_OS_TIMER_STOP(&asoc->asconf_timer.timer);
+ (void)SCTP_OS_TIMER_STOP(&asoc->autoclose_timer.timer);
+ (void)SCTP_OS_TIMER_STOP(&asoc->delayed_event_timer.timer);
+ TAILQ_FOREACH(net, &asoc->nets, sctp_next) {
+ (void)SCTP_OS_TIMER_STOP(&net->fr_timer.timer);
+ (void)SCTP_OS_TIMER_STOP(&net->pmtu_timer.timer);
+ }
+}
+
+/*
* a list of sizes based on typical mtu's, used only if next hop size not
* returned.
*/
@@ -749,26 +774,6 @@ static int sctp_mtu_sizes[] = {
65535
};
-void
-sctp_stop_timers_for_shutdown(struct sctp_tcb *stcb)
-{
- struct sctp_association *asoc;
- struct sctp_nets *net;
-
- asoc = &stcb->asoc;
-
- (void)SCTP_OS_TIMER_STOP(&asoc->hb_timer.timer);
- (void)SCTP_OS_TIMER_STOP(&asoc->dack_timer.timer);
- (void)SCTP_OS_TIMER_STOP(&asoc->strreset_timer.timer);
- (void)SCTP_OS_TIMER_STOP(&asoc->asconf_timer.timer);
- (void)SCTP_OS_TIMER_STOP(&asoc->autoclose_timer.timer);
- (void)SCTP_OS_TIMER_STOP(&asoc->delayed_event_timer.timer);
- TAILQ_FOREACH(net, &asoc->nets, sctp_next) {
- (void)SCTP_OS_TIMER_STOP(&net->fr_timer.timer);
- (void)SCTP_OS_TIMER_STOP(&net->pmtu_timer.timer);
- }
-}
-
int
find_next_best_mtu(int totsz)
{
More information about the svn-src-head
mailing list