Browse Source

derive SSU2 socket buffer size from bandwidth limit

pull/2033/head
Vort 9 months ago
parent
commit
89f9bec49a
  1. 33
      libi2pd/SSU2.cpp
  2. 4
      libi2pd/SSU2.h

33
libi2pd/SSU2.cpp

@ -256,27 +256,32 @@ namespace transport
socket.open (localEndpoint.protocol ()); socket.open (localEndpoint.protocol ());
if (localEndpoint.address ().is_v6 ()) if (localEndpoint.address ().is_v6 ())
socket.set_option (boost::asio::ip::v6_only (true)); socket.set_option (boost::asio::ip::v6_only (true));
boost::asio::socket_base::receive_buffer_size receive_buffer_size_set (SSU2_SOCKET_RECEIVE_BUFFER_SIZE);
boost::asio::socket_base::send_buffer_size send_buffer_size_set (SSU2_SOCKET_SEND_BUFFER_SIZE); uint64_t bufferSize = i2p::context.GetBandwidthLimit() * 1024 / 5; // max lag = 200ms
socket.set_option (receive_buffer_size_set); bufferSize = std::max(SSU2_SOCKET_MIN_BUFFER_SIZE, std::min(bufferSize, SSU2_SOCKET_MAX_BUFFER_SIZE));
socket.set_option (send_buffer_size_set);
boost::asio::socket_base::receive_buffer_size receive_buffer_size_get; boost::asio::socket_base::receive_buffer_size receiveBufferSizeSet (bufferSize);
boost::asio::socket_base::send_buffer_size send_buffer_size_get; boost::asio::socket_base::send_buffer_size sendBufferSizeSet (bufferSize);
socket.get_option (receive_buffer_size_get); socket.set_option (receiveBufferSizeSet);
socket.get_option (send_buffer_size_get); socket.set_option (sendBufferSizeSet);
if (receive_buffer_size_get.value () != receive_buffer_size_set.value () || boost::asio::socket_base::receive_buffer_size receiveBufferSizeGet;
send_buffer_size_get.value () != send_buffer_size_set.value ()) boost::asio::socket_base::send_buffer_size sendBufferSizeGet;
socket.get_option (receiveBufferSizeGet);
socket.get_option (sendBufferSizeGet);
if (receiveBufferSizeGet.value () != receiveBufferSizeSet.value () ||
sendBufferSizeGet.value () != sendBufferSizeSet.value ())
{ {
LogPrint (eLogWarning, "SSU2: Socket receive buffer size: requested = ", LogPrint (eLogWarning, "SSU2: Socket receive buffer size: requested = ",
receive_buffer_size_set.value (), ", got = ", receive_buffer_size_get.value ()); receiveBufferSizeSet.value (), ", got = ", receiveBufferSizeGet.value ());
LogPrint (eLogWarning, "SSU2: Socket send buffer size: requested = ", LogPrint (eLogWarning, "SSU2: Socket send buffer size: requested = ",
send_buffer_size_set.value (), ", got = ", send_buffer_size_get.value ()); sendBufferSizeSet.value (), ", got = ", sendBufferSizeGet.value ());
} }
else else
{ {
LogPrint (eLogInfo, "SSU2: Socket receive buffer size: ", receive_buffer_size_get.value ()); LogPrint (eLogInfo, "SSU2: Socket receive buffer size: ", receiveBufferSizeGet.value ());
LogPrint (eLogInfo, "SSU2: Socket send buffer size: ", send_buffer_size_get.value ()); LogPrint (eLogInfo, "SSU2: Socket send buffer size: ", sendBufferSizeGet.value ());
} }
socket.non_blocking (true); socket.non_blocking (true);
} }
catch (std::exception& ex ) catch (std::exception& ex )

4
libi2pd/SSU2.h

@ -25,8 +25,8 @@ namespace transport
const int SSU2_RESEND_CHECK_TIMEOUT_VARIANCE = 100; // in milliseconds const int SSU2_RESEND_CHECK_TIMEOUT_VARIANCE = 100; // in milliseconds
const int SSU2_RESEND_CHECK_MORE_TIMEOUT = 10; // in milliseconds const int SSU2_RESEND_CHECK_MORE_TIMEOUT = 10; // in milliseconds
const size_t SSU2_MAX_RESEND_PACKETS = 128; // packets to resend at the time const size_t SSU2_MAX_RESEND_PACKETS = 128; // packets to resend at the time
const size_t SSU2_SOCKET_RECEIVE_BUFFER_SIZE = 0x1FFFF; // 128K const uint64_t SSU2_SOCKET_MIN_BUFFER_SIZE = 128 * 1024;
const size_t SSU2_SOCKET_SEND_BUFFER_SIZE = 0x1FFFF; // 128K const uint64_t SSU2_SOCKET_MAX_BUFFER_SIZE = 4 * 1024 * 1024;
const size_t SSU2_MAX_NUM_INTRODUCERS = 3; const size_t SSU2_MAX_NUM_INTRODUCERS = 3;
const size_t SSU2_MIN_RECEIVED_PACKET_SIZE = 40; // 16 byte short header + 8 byte minimum payload + 16 byte MAC const size_t SSU2_MIN_RECEIVED_PACKET_SIZE = 40; // 16 byte short header + 8 byte minimum payload + 16 byte MAC
const int SSU2_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour const int SSU2_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour

Loading…
Cancel
Save