* SSU: More cleanups; don't send a packet that exceeds the MTU

This commit is contained in:
zzz
2012-08-08 17:05:42 +00:00
parent d8dd76c6e0
commit 0451ee7f08
2 changed files with 15 additions and 12 deletions

View File

@@ -254,9 +254,9 @@ class UDPReceiver {
try { try {
//if (_log.shouldLog(Log.INFO)) //if (_log.shouldLog(Log.INFO))
// _log.info("Before blocking socket.receive on " + System.identityHashCode(packet)); // _log.info("Before blocking socket.receive on " + System.identityHashCode(packet));
synchronized (Runner.this) { //synchronized (Runner.this) {
_socket.receive(packet.getPacket()); _socket.receive(packet.getPacket());
} //}
int size = packet.getPacket().getLength(); int size = packet.getPacket().getLength();
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info("After blocking socket.receive: packet is " + size + " bytes on " + System.identityHashCode(packet)); _log.info("After blocking socket.receive: packet is " + size + " bytes on " + System.identityHashCode(packet));

View File

@@ -39,7 +39,7 @@ class UDPSender {
_context.statManager().createRateStat("udp.sendQueueFailed", "How often it was unable to add a new packet to the queue", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendQueueFailed", "How often it was unable to add a new packet to the queue", "udp", UDPTransport.RATES);
_context.statManager().createRateStat("udp.sendQueueTrimmed", "How many packets were removed from the queue for being too old (duration == remaining)", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendQueueTrimmed", "How many packets were removed from the queue for being too old (duration == remaining)", "udp", UDPTransport.RATES);
_context.statManager().createRequiredRateStat("udp.sendPacketSize", "Size of sent packets (bytes)", "udp", UDPTransport.RATES); _context.statManager().createRequiredRateStat("udp.sendPacketSize", "Size of sent packets (bytes)", "udp", UDPTransport.RATES);
_context.statManager().createRateStat("udp.socketSendTime", "How long the actual socket.send took", "udp", UDPTransport.RATES); //_context.statManager().createRateStat("udp.socketSendTime", "How long the actual socket.send took", "udp", UDPTransport.RATES);
_context.statManager().createRateStat("udp.sendBWThrottleTime", "How long the send is blocked by the bandwidth throttle", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendBWThrottleTime", "How long the send is blocked by the bandwidth throttle", "udp", UDPTransport.RATES);
_context.statManager().createRateStat("udp.sendACKTime", "How long an ACK packet is blocked for (duration == lifetime)", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendACKTime", "How long an ACK packet is blocked for (duration == lifetime)", "udp", UDPTransport.RATES);
// used in RouterWatchdog // used in RouterWatchdog
@@ -161,8 +161,10 @@ class UDPSender {
if (packet == null || !_keepRunning) return 0; if (packet == null || !_keepRunning) return 0;
int size = 0; int size = 0;
int psz = packet.getPacket().getLength(); int psz = packet.getPacket().getLength();
if (psz > PeerState.LARGE_MTU) if (psz > PeerState.LARGE_MTU) {
_log.error("Sending large UDP packet " + psz + " bytes: " + packet); _log.error("Dropping large UDP packet " + psz + " bytes: " + packet);
return 0;
}
_outboundQueue.offer(packet); _outboundQueue.offer(packet);
//size = _outboundQueue.size(); //size = _outboundQueue.size();
//_context.statManager().addRateData("udp.sendQueueSize", size, lifetime); //_context.statManager().addRateData("udp.sendQueueSize", size, lifetime);
@@ -214,8 +216,8 @@ class UDPSender {
//packet.getPacket().setLength(size); //packet.getPacket().setLength(size);
try { try {
long before = _context.clock().now(); //long before = _context.clock().now();
synchronized (Runner.this) { //synchronized (Runner.this) {
// synchronization lets us update safely // synchronization lets us update safely
//_log.debug("Break out datagram for " + packet); //_log.debug("Break out datagram for " + packet);
DatagramPacket dp = packet.getPacket(); DatagramPacket dp = packet.getPacket();
@@ -224,11 +226,12 @@ class UDPSender {
_socket.send(dp); _socket.send(dp);
//if (_log.shouldLog(Log.DEBUG)) //if (_log.shouldLog(Log.DEBUG))
// _log.debug("Just after socket.send of " + packet); // _log.debug("Just after socket.send of " + packet);
} //}
long sendTime = _context.clock().now() - before; //long sendTime = _context.clock().now() - before;
_context.statManager().addRateData("udp.socketSendTime", sendTime, packet.getLifetime()); // less than 50 microsec
if (_log.shouldLog(Log.INFO)) //_context.statManager().addRateData("udp.socketSendTime", sendTime, packet.getLifetime());
_log.info("Sent the packet " + packet); if (_log.shouldLog(Log.DEBUG))
_log.debug("Sent the packet " + packet);
long throttleTime = afterBW - acquireTime; long throttleTime = afterBW - acquireTime;
if (throttleTime > 10) if (throttleTime > 10)
_context.statManager().addRateData("udp.sendBWThrottleTime", throttleTime, acquireTime - packet.getBegin()); _context.statManager().addRateData("udp.sendBWThrottleTime", throttleTime, acquireTime - packet.getBegin());