// 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 );
}
memcpy( output, buf, n ); // Use the private buffer for delivery
// Apply the TPG quirk
- if ( tpg_quirk && ( n == 1470 ) ) {
+ if ( tpg_quirk && ( n > 1460 ) && ( n < 1478 ) ) {
VERBOSE2OUT( "tpg quirk applied\n" );
- n += 8; // Add 8 "random" tag-along bytes
+ n = 1478; // Add some "random" tag-along bytes
}
if ( r->spec == 0 ) {
if ( r->uaddr.in.sa_family == 0 ) {
// 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 );
}
///// Parse command line arguments
i = 1;
#define ENSUREARGS(n) if ( argc < i + n ) usage()
- ENSUREARGS( 1 );
- if ( strncmp( "-tpg", argv[i], 4 ) == 0 ) {
- tpg_quirk = 1;
- i++;
- }
ENSUREARGS( 1 );
// First: optional -v, -vv or -vvv
if ( strncmp( "-v", argv[i], 2 ) == 0 ) {
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;
}
// 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