I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit a3f290e4 authored by zzz's avatar zzz
Browse files

* Tunnel:

      - Adjust the random drop probability for the message size
parent e0dd1f13
No related branches found
No related tags found
No related merge requests found
......@@ -545,7 +545,13 @@ public class TunnelDispatcher implements Service {
* At this stage, participants and IBGWs see a standard 1024 byte message.
* OBEPs however may see a wide variety of sizes.
*
* @param type unused except for logging
* Network-wise, it's most efficient to drop OBEP messages, because they
* are unfragmented and we know their size. Therefore we drop the big ones
* and we drop a single wrapped I2CP message, not a fragment of one or more messages.
* Also, the OBEP is the earliest identifiable hop in the message's path
* (a plain participant could be earlier or later, but on average is later)
*
* @param type message hop location and type
* @param length the length of the message
*/
public boolean shouldDropParticipatingMessage(String type, int length) {
......@@ -583,11 +589,18 @@ public class TunnelDispatcher implements Service {
float pctDrop = (used - maxBps) / used;
if (pctDrop <= 0)
return false;
// increase the drop probability for OBEP,
// and lower it for IBGW, for network efficiency
double len = length;
if (type.startsWith("OBEP"))
len *= 1.5;
else if (type.startsWith("IBGW"))
len /= 1.5;
// drop in proportion to size w.r.t. a standard 1024-byte message
// this is a little expensive but we want to adjust the curve between 0 and 1
// Most messages are 1024, only at the OBEP do we see other sizes
if (length != 1024)
pctDrop = (float) Math.pow(pctDrop, 1024d / length);
if (len != 1024d)
pctDrop = (float) Math.pow(pctDrop, 1024d / len);
float rand = _context.random().nextFloat();
boolean reject = rand <= pctDrop;
if (reject) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment