X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=rrqnet.c;h=fa8d3f660963624871d97736458ecb5a1e3140e4;hb=a6238294b80a2d98d3768131a457d00f4b2b9578;hp=6b57d08b304af3e989df44e8d07cdbb7148c3553;hpb=e8cbd15f0a2d8492b5b0eaa16fb0602483b4d91a;p=rrq%2Frrqnet.git diff --git a/rrqnet.c b/rrqnet.c index 6b57d08..fa8d3f6 100644 --- a/rrqnet.c +++ b/rrqnet.c @@ -188,6 +188,10 @@ static struct { // Flag to signal the UDP socket as being ipv6 or not (forced ipv4) static int udp6 = 1; +// Flag to indicate tpg transport patch = avoid UDP payload of 1470 +// bytes by adding 2 tag-along bytes +static int tpg_quirk = 0; + // Flag whether to make some stderr outputs or not. // 1 = normal verbosity, 2 = more output, 3 = source debug level stuff static int verbose; @@ -877,11 +881,16 @@ static void write_remote(unsigned char *buf, int n,struct Remote *r) { if ( n < 12 ) { VERBOSE2OUT( "SEND %d bytes to %s\n", n, inet_stoa( &r->uaddr ) ); } else { - VERBOSE2OUT( "SEND %s -> %s to %s\n", + VERBOSE2OUT( "SEND %d bytes %s -> %s to %s\n", n, inet_mtoa( buf+6 ), inet_mtoa( buf ), inet_stoa( &r->uaddr ) ); } memcpy( output, buf, n ); // Use the private buffer for delivery + // Apply the TPG quirk + if ( tpg_quirk && ( n > 1460 ) && ( n < 1478 ) ) { + VERBOSE2OUT( "tpg quirk applied\n" ); + n = 1478; // Add some "random" tag-along bytes + } if ( r->spec == 0 ) { if ( r->uaddr.in.sa_family == 0 ) { // Output to tap/stdio @@ -1417,6 +1426,11 @@ int main(int argc, char *argv[]) { i++; ENSUREARGS( 1 ); } + if ( strncmp( "-tpg", argv[i], 4 ) == 0 ) { + tpg_quirk = 1; + i++; + ENSUREARGS( 1 ); + } // then: optional -4 if ( strncmp( "-4", argv[i], 2 ) == 0 ) { udp6 = 0;