diff options
author | rrs <rrs@FreeBSD.org> | 2007-07-17 20:58:26 +0000 |
---|---|---|
committer | rrs <rrs@FreeBSD.org> | 2007-07-17 20:58:26 +0000 |
commit | baae800484b92bf7eee24218fdc96dca410b1846 (patch) | |
tree | 6c79e4122192f2fc2cd2730d66ed9af4e467112a /sys/netinet/sctp_timer.c | |
parent | eeef9fbdacbbff0d2c008a8f385bddf21f2b0f04 (diff) | |
download | FreeBSD-src-baae800484b92bf7eee24218fdc96dca410b1846.zip FreeBSD-src-baae800484b92bf7eee24218fdc96dca410b1846.tar.gz |
- added pre-checks to the bindx call.
- use proper tick gathering macro instead of ticks directly.
- Placed reasonable boundaries on sets that a user can do
that are converted to ticks from ms.
- Fix CMT_PF to always check to be sure CMT is on.
- Fix ticks use of CMT_PF.
- put back code to allow asconfs to be queued while INITs are in flight
and before the assoc is established.
- During window probes, an ack'd packet might be left with the window
probe mark on it causing it to be retransmitted. Change so that
the flight decrease macro clears the window_probe mark.
- Additional logging flight size/reading and ASOC LOG. This
is only enabled if you manually insert things into opt_sctp.h
since its a set of debug code only.
- Found an interesting SMP race in the way data was appended which
could cause a reader to lose a part of a message, had to
reorder when we marked the message was complete to after
the data was appended.
- bug in ADD-IP for the subset bound socket case when the peer has only
one address
- fix ASCONF implicit success/error handling case
- proper support of jails in Freebsd 6>
- copy out the timeval for the 64 bit sparc world on cookie-echo
alignment error crashes without this).
Approved by: re(Ken Smith)
Diffstat (limited to 'sys/netinet/sctp_timer.c')
-rw-r--r-- | sys/netinet/sctp_timer.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/sys/netinet/sctp_timer.c b/sys/netinet/sctp_timer.c index f25e102..4149afc 100644 --- a/sys/netinet/sctp_timer.c +++ b/sys/netinet/sctp_timer.c @@ -211,7 +211,7 @@ sctp_threshold_management(struct sctp_inpcb *inp, struct sctp_tcb *stcb, * not in PF state. */ /* Stop any running T3 timers here? */ - if (sctp_cmt_pf) { + if (sctp_cmt_on_off && sctp_cmt_pf) { net->dest_state &= ~SCTP_ADDR_PF; SCTPDBG(SCTP_DEBUG_TIMER4, "Destination %p moved from PF to unreachable.\n", net); @@ -741,7 +741,6 @@ sctp_mark_all_for_resend(struct sctp_tcb *stcb, SCTP_STAT_INCR(sctps_markedretrans); /* reset the TSN for striking and other FR stuff */ - chk->window_probe = 0; chk->rec.data.doing_fast_retransmit = 0; /* Clear any time so NO RTT is being done */ chk->do_rtt = 0; @@ -801,8 +800,8 @@ sctp_mark_all_for_resend(struct sctp_tcb *stcb, } if (stcb->asoc.sent_queue_retran_cnt != cnt_mk) { #ifdef INVARIANTS - SCTP_PRINTF("Local Audit says there are %d for retran asoc cnt:%d\n", - cnt_mk, stcb->asoc.sent_queue_retran_cnt); + SCTP_PRINTF("Local Audit says there are %d for retran asoc cnt:%d we marked:%d this time\n", + cnt_mk, stcb->asoc.sent_queue_retran_cnt, num_mk); #endif #ifndef SCTP_AUDITING_ENABLED stcb->asoc.sent_queue_retran_cnt = cnt_mk; @@ -944,10 +943,10 @@ sctp_t3rxt_timer(struct sctp_inpcb *inp, * addition, find an alternate destination with PF-based * find_alt_net(). */ - if (sctp_cmt_pf) { + if (sctp_cmt_on_off && sctp_cmt_pf) { if ((net->dest_state & SCTP_ADDR_PF) != SCTP_ADDR_PF) { net->dest_state |= SCTP_ADDR_PF; - net->last_active = ticks; + net->last_active = sctp_get_tick_count(); SCTPDBG(SCTP_DEBUG_TIMER4, "Destination %p moved from active to PF.\n", net); } @@ -1063,7 +1062,7 @@ sctp_t3rxt_timer(struct sctp_inpcb *inp, net->dest_state |= SCTP_ADDR_WAS_PRIMARY; } } - } else if (sctp_cmt_pf && (net->dest_state & SCTP_ADDR_PF) == SCTP_ADDR_PF) { + } else if (sctp_cmt_on_off && sctp_cmt_pf && (net->dest_state & SCTP_ADDR_PF) == SCTP_ADDR_PF) { /* * JRS 5/14/07 - If the destination hasn't failed completely * but is in PF state, a PF-heartbeat needs to be sent |