lintian override for static binary
[rrq/rrqnet.git] / rrqnet.c
index 6b57d08b304af3e989df44e8d07cdbb7148c3553..efd7066b457cb2438d96f1246cc553ad152cc3ed 100644 (file)
--- 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;
@@ -570,6 +574,7 @@ static int parse_bits(char *bits,int max,struct Allowed *into) {
 // Formats: <ipv4-address>[/<bits>][:<port>][=keyfile]
 // Formats: <ipv6-address>[/<bits>][=keyfile]
 // Formats: \[<ipv6-address>[/<bits>]\][:<port>][=keyfile]
+// Formats: hostname:port[=keyfile]
 static int parse_allowed(char *arg,struct Allowed *into) {
     static char buffer[10000];
     int n = strlen( arg );
@@ -877,11 +882,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
@@ -1300,10 +1310,10 @@ static void heartbeat(int fd) {
 // Tell how to use this program and exit with failure.
 static void usage(void) {
     fprintf( stderr, "Packet tunneling over UDP, multiple channels, " );
-    fprintf( stderr, "version 0.2.5\n" );
+    fprintf( stderr, "version 1.5.3\n" );
     fprintf( stderr, "Usage: " );
     fprintf( stderr,
- "%s [-v] [-4] [-B n] [-T n] [-m mcast] [-t tap] port [remote]+ \n",
+ "%s [-v] [-tpg] [-4] [-B n] [-T n] [-m mcast] [-t tap] port [remote]+ \n",
             progname );
     exit( 1 );
 }
@@ -1417,6 +1427,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;
@@ -1459,7 +1474,7 @@ int main(int argc, char *argv[]) {
     }
     // then: required port
     if ( sscanf( argv[i++], "%d", &port ) != 1 ) {
-       fprintf( stderr, "Bad local port" );
+       fprintf( stderr, "Bad local port: %s\n", argv[i-1] );
        usage();
     }
     // then: any number of allowed remotes