PR: 2755
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Reduce MTU after failed transmissions. [0.9.8 version of patch]
This commit is contained in:
parent
73eb0972cf
commit
725713f74a
@ -145,6 +145,7 @@ extern "C" {
|
|||||||
/* #endif */
|
/* #endif */
|
||||||
|
|
||||||
#define BIO_CTRL_DGRAM_QUERY_MTU 40 /* as kernel for current MTU */
|
#define BIO_CTRL_DGRAM_QUERY_MTU 40 /* as kernel for current MTU */
|
||||||
|
#define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47
|
||||||
#define BIO_CTRL_DGRAM_GET_MTU 41 /* get cached value for MTU */
|
#define BIO_CTRL_DGRAM_GET_MTU 41 /* get cached value for MTU */
|
||||||
#define BIO_CTRL_DGRAM_SET_MTU 42 /* set cached value for
|
#define BIO_CTRL_DGRAM_SET_MTU 42 /* set cached value for
|
||||||
* MTU. want to use this
|
* MTU. want to use this
|
||||||
|
@ -494,6 +494,9 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
case BIO_CTRL_DGRAM_GET_FALLBACK_MTU:
|
||||||
|
ret = 576 - 20 - 8;
|
||||||
|
break;
|
||||||
case BIO_CTRL_DGRAM_GET_MTU:
|
case BIO_CTRL_DGRAM_GET_MTU:
|
||||||
return data->mtu;
|
return data->mtu;
|
||||||
break;
|
break;
|
||||||
|
@ -227,14 +227,14 @@ int dtls1_do_write(SSL *s, int type)
|
|||||||
unsigned int len, frag_off, mac_size, blocksize;
|
unsigned int len, frag_off, mac_size, blocksize;
|
||||||
|
|
||||||
/* AHA! Figure out the MTU, and stick to the right size */
|
/* AHA! Figure out the MTU, and stick to the right size */
|
||||||
if ( ! (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU))
|
if (s->d1->mtu < dtls1_min_mtu() && !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU))
|
||||||
{
|
{
|
||||||
s->d1->mtu =
|
s->d1->mtu =
|
||||||
BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
|
BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
|
||||||
|
|
||||||
/* I've seen the kernel return bogus numbers when it doesn't know
|
/* I've seen the kernel return bogus numbers when it doesn't know
|
||||||
* (initial write), so just make sure we have a reasonable number */
|
* (initial write), so just make sure we have a reasonable number */
|
||||||
if ( s->d1->mtu < dtls1_min_mtu())
|
if (s->d1->mtu < dtls1_min_mtu())
|
||||||
{
|
{
|
||||||
s->d1->mtu = 0;
|
s->d1->mtu = 0;
|
||||||
s->d1->mtu = dtls1_guess_mtu(s->d1->mtu);
|
s->d1->mtu = dtls1_guess_mtu(s->d1->mtu);
|
||||||
|
@ -454,6 +454,11 @@ int dtls1_handle_timeout(SSL *s)
|
|||||||
state->timeout.read_timeouts = 1;
|
state->timeout.read_timeouts = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state->timeout_duration > 2)
|
||||||
|
{
|
||||||
|
s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
dtls1_start_timer(s);
|
dtls1_start_timer(s);
|
||||||
return dtls1_retransmit_buffered_messages(s);
|
return dtls1_retransmit_buffered_messages(s);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user