Commit 464ce920 authored by Matt Caswell's avatar Matt Caswell
Browse files

Updates to s_client and s_server to remove the constant 28 (for IPv4 header


and UDP header) when setting an mtu. This constant is not always correct (e.g.
if using IPv6). Use the new DTLS_CTRL functions instead.

Reviewed-by: default avatarTim Hudson <tjh@openssl.org>
parent d3d9eef3
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -1529,10 +1529,22 @@ re_start:
			BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
			}

		if (socket_mtu > 28)
		if (socket_mtu)
			{
			if(socket_mtu < DTLS_get_link_min_mtu(con))
				{
				BIO_printf(bio_err,"MTU too small. Must be at least %ld\n",
					DTLS_get_link_min_mtu(con));
				BIO_free(sbio);
				goto shut;
				}
			SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
			SSL_set_mtu(con, socket_mtu - 28);
			if(!DTLS_set_link_mtu(con, socket_mtu))
				{
				BIO_printf(bio_err, "Failed to set MTU\n");
				BIO_free(sbio);
				goto shut;
				}
			}
		else
			/* want to do MTU discovery */
+16 −2
Original line number Diff line number Diff line
@@ -2302,10 +2302,24 @@ static int sv_body(char *hostname, int s, int stype, unsigned char *context)
			BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
			}

		if (socket_mtu > 28)
		if (socket_mtu)
			{
			if(socket_mtu < DTLS_get_link_min_mtu(con))
				{
				BIO_printf(bio_err,"MTU too small. Must be at least %ld\n",
					DTLS_get_link_min_mtu(con));
				ret = -1;
				BIO_free(sbio);
				goto err;
				}
			SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
			SSL_set_mtu(con, socket_mtu - 28);
			if(!DTLS_set_link_mtu(con, socket_mtu))
				{
				BIO_printf(bio_err, "Failed to set MTU\n");
				ret = -1;
				BIO_free(sbio);
				goto err;
				}
			}
		else
			/* want to do MTU discovery */