--- doc/ip-cref.tex +++ doc/ip-cref.tex 2007/07/12 09:13:47 @@ -1322,7 +1322,11 @@ If it is not given, Linux uses the value selected with \verb|sysctl| variable \verb|net/ipv4/tcp_reordering|. +\item \verb|fragtimeout NUMBER| +--- \threeonly How many seconds to wait before expiring IP fragments + from the destination of this route. If not specified Linux uses + the \verb|sysctl| variable \verb|net/ipv4/ip_frag_timeout|. \item \verb|nexthop NEXTHOP| --- man/man8/ip.8 +++ man/man8/ip.8 2007/07/12 09:26:54 @@ -1095,6 +1095,14 @@ .BR "net/ipv4/tcp_reordering" . .TP +.BI fragtimeout " NUMBER " "(SuSE extension currently)" +Fragment timeout in seconds for IP fragments arriving from this distination. +If it is not given, Linux uses the value selected with +.B sysctl +variable +.BR "net/ipv4/ipfrag_timeout" . + +.TP .BI nexthop " NEXTHOP" the nexthop of a multipath route. .I NEXTHOP --- ip/iproute.c 2007-10-16 23:27:42.000000000 +0200 +++ ip/iproute.c 2007-10-25 11:14:18.000000000 +0200 @@ -37,6 +37,14 @@ #define RTAX_RTTVAR RTAX_HOPS #endif +#ifndef RTAX_FRAG_TIMEOUT +#define RTAX_FRAG_TIMEOUT (RTAX_FEATURES+1) +#endif + +#if RTAX_MAX < RTAX_FRAG_TIMEOUT +#undef RTAX_MAX +#define RTAX_MAX RTAX_FRAG_TIMEOUT +#endif static const char *mx_names[RTAX_MAX+1] = { [RTAX_MTU] = "mtu", @@ -51,6 +59,7 @@ [RTAX_INITCWND] = "initcwnd", [RTAX_FEATURES] = "features", [RTAX_RTO_MIN] = "rto_min", + [RTAX_FRAG_TIMEOUT]="fragtimeout" }; static void usage(void) __attribute__((noreturn)); @@ -70,9 +79,9 @@ fprintf(stderr, "INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...\n"); fprintf(stderr, "NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS\n"); fprintf(stderr, "OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]\n"); - fprintf(stderr, " [ rtt TIME ] [ rttvar TIME ]\n"); + fprintf(stderr, " [ rtt TIME ] [ rttvar TIME ] [ fragtimeout seconds ]\n"); fprintf(stderr, " [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]\n"); - fprintf(stderr, " [ ssthresh NUMBER ] [ realms REALM ]\n"); + fprintf(stderr, " [ ssthresh NUMBER ] [ reordering NUMBER ] [ realms REALM ]\n"); fprintf(stderr, " [ rto_min TIME ]\n"); fprintf(stderr, "TYPE := [ unicast | local | broadcast | multicast | throw |\n"); fprintf(stderr, " unreachable | prohibit | blackhole | nat ]\n"); @@ -780,6 +789,14 @@ invarg("\"reordering\" value is invalid\n", *argv); rta_addattr32(mxrta, sizeof(mxbuf), RTAX_REORDERING, reord); #endif +#ifdef RTAX_FRAG_TIMEOUT + } else if (strcmp(*argv, "fragtimeout") == 0) { + unsigned timeout; + NEXT_ARG(); + if (get_unsigned(&timeout, *argv, 0)) + invarg("\"timeout\" value is invalid\n", *argv); + rta_addattr32(mxrta, sizeof(mxbuf), RTAX_FRAG_TIMEOUT, timeout); +#endif } else if (strcmp(*argv, "rtt") == 0) { unsigned rtt; NEXT_ARG();