1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-29 16:44:03 +00:00

Fix a bug in the way ECN-Echo chunk

sends were being accounted for. The
counting was such that we counted only
when we queued a chunk, not when we sent it.
Now keep an additional counter for queuing and
one for sending.

MFC after:	1 week
This commit is contained in:
Randall Stewart 2011-01-28 20:49:15 +00:00
parent 596ba1bd95
commit d77e2e42b3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=218037
2 changed files with 19 additions and 3 deletions

View File

@ -7809,6 +7809,20 @@ sctp_med_chunk_output(struct sctp_inpcb *inp,
if (chk->rec.chunk_id.id == SCTP_COOKIE_ECHO) {
cookie = 1;
no_out_cnt = 1;
} else if (chk->rec.chunk_id.id == SCTP_ECN_ECHO) {
/*
* Increment ecne send count
* here this means we may be
* over-zealous in our
* counting if the send
* fails, but its the best
* place to do it (we used
* to do it in the queue of
* the chunk, but that did
* not tell how many times
* it was sent.
*/
SCTP_STAT_INCR(sctps_sendecne);
}
chk->sent = SCTP_DATAGRAM_SENT;
chk->snd_count++;
@ -10751,6 +10765,7 @@ sctp_send_ecn_echo(struct sctp_tcb *stcb, struct sctp_nets *net,
/* found a previous ECN_ECHO update it if needed */
ecne = mtod(chk->data, struct sctp_ecne_chunk *);
ecne->tsn = htonl(high_tsn);
SCTP_STAT_INCR(sctps_queue_upd_ecne);
return;
}
}
@ -10760,7 +10775,7 @@ sctp_send_ecn_echo(struct sctp_tcb *stcb, struct sctp_nets *net,
return;
}
chk->copy_by_ref = 0;
SCTP_STAT_INCR(sctps_sendecne);
SCTP_STAT_INCR(sctps_queue_upd_ecne);
chk->rec.chunk_id.id = SCTP_ECN_ECHO;
chk->rec.chunk_id.can_take_data = 0;
chk->asoc = &stcb->asoc;

View File

@ -946,8 +946,9 @@ struct sctpstat {
* max burst inflight to net */
uint32_t sctps_fwdtsn_map_over; /* number of map array over-runs via
* fwd-tsn's */
uint32_t sctps_reserved[32]; /* Future ABI compat - remove int's
uint32_t sctps_queue_upd_ecne; /* Number of times we queued or
* updated an ECN chunk on send queue */
uint32_t sctps_reserved[31]; /* Future ABI compat - remove int's
* from here when adding new */
};