Fix a bug reported by Daniel Mentz:
When authenticating DATA chunks some DATA chunks might get stuck when the MTU gets decreased via an ICMP message. Approved by: rrs (mentor) MFC after: immediately
This commit is contained in:
parent
22c125a1b6
commit
d830c305ea
@ -106,6 +106,7 @@ sctp_pathmtu_adjustment(struct sctp_inpcb *inp,
|
|||||||
uint16_t nxtsz)
|
uint16_t nxtsz)
|
||||||
{
|
{
|
||||||
struct sctp_tmit_chunk *chk;
|
struct sctp_tmit_chunk *chk;
|
||||||
|
uint16_t overhead;
|
||||||
|
|
||||||
/* Adjust that too */
|
/* Adjust that too */
|
||||||
stcb->asoc.smallest_mtu = nxtsz;
|
stcb->asoc.smallest_mtu = nxtsz;
|
||||||
@ -114,13 +115,17 @@ sctp_pathmtu_adjustment(struct sctp_inpcb *inp,
|
|||||||
SCTP_PRINTF("sctp_pathmtu_adjust called inp:%p stcb:%p net:%p nxtsz:%d\n",
|
SCTP_PRINTF("sctp_pathmtu_adjust called inp:%p stcb:%p net:%p nxtsz:%d\n",
|
||||||
inp, stcb, net, nxtsz);
|
inp, stcb, net, nxtsz);
|
||||||
#endif
|
#endif
|
||||||
|
overhead = IP_HDR_SIZE;
|
||||||
|
if (sctp_auth_is_required_chunk(SCTP_DATA, stcb->asoc.peer_auth_chunks)) {
|
||||||
|
overhead += sctp_get_auth_chunk_len(stcb->asoc.peer_hmac_id);
|
||||||
|
}
|
||||||
TAILQ_FOREACH(chk, &stcb->asoc.send_queue, sctp_next) {
|
TAILQ_FOREACH(chk, &stcb->asoc.send_queue, sctp_next) {
|
||||||
if ((chk->send_size + IP_HDR_SIZE) > nxtsz) {
|
if ((chk->send_size + overhead) > nxtsz) {
|
||||||
chk->flags |= CHUNK_FLAGS_FRAGMENT_OK;
|
chk->flags |= CHUNK_FLAGS_FRAGMENT_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TAILQ_FOREACH(chk, &stcb->asoc.sent_queue, sctp_next) {
|
TAILQ_FOREACH(chk, &stcb->asoc.sent_queue, sctp_next) {
|
||||||
if ((chk->send_size + IP_HDR_SIZE) > nxtsz) {
|
if ((chk->send_size + overhead) > nxtsz) {
|
||||||
/*
|
/*
|
||||||
* For this guy we also mark for immediate resend
|
* For this guy we also mark for immediate resend
|
||||||
* since we sent to big of chunk
|
* since we sent to big of chunk
|
||||||
|
Loading…
x
Reference in New Issue
Block a user