Commit e59fd3db authored by David Ward's avatar David Ward Committed by Stephen Hemminger

ip/iptunnel: Extend TOS syntax

The 'inherit/STRING' or 'inherit/00..ff' syntax indicates that the
TOS field of tunneled packets should be copied from the original IP
header, but for non-IP packets the value STRING or 00..ff should be
used instead. (This syntax is already used by 'ip tunnel show'.)

Also clarify the man page and the command usage text (particularly
that the TOS is not specified as a decimal number).
Signed-off-by: default avatarDavid Ward <david.ward@ll.mit.edu>
parent 53403c53
......@@ -41,7 +41,7 @@ static void usage(void)
fprintf(stderr, "\n");
fprintf(stderr, "Where: NAME := STRING\n");
fprintf(stderr, " ADDR := { IP_ADDRESS | any }\n");
fprintf(stderr, " TOS := { NUMBER | inherit }\n");
fprintf(stderr, " TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }\n");
fprintf(stderr, " TTL := { 1..255 | inherit }\n");
fprintf(stderr, " KEY := { DOTTED_QUAD | NUMBER }\n");
exit(-1);
......@@ -188,14 +188,21 @@ static int parse_args(int argc, char **argv, int cmd, struct ip_tunnel_parm *p)
} else if (strcmp(*argv, "tos") == 0 ||
strcmp(*argv, "tclass") == 0 ||
matches(*argv, "dsfield") == 0) {
char *dsfield;
__u32 uval;
NEXT_ARG();
dsfield = *argv;
strsep(&dsfield, "/");
if (strcmp(*argv, "inherit") != 0) {
if (rtnl_dsfield_a2n(&uval, *argv))
invarg("bad TOS value", *argv);
p->iph.tos = uval;
dsfield = *argv;
p->iph.tos = 0;
} else
p->iph.tos = 1;
if (dsfield) {
if (rtnl_dsfield_a2n(&uval, dsfield))
invarg("bad TOS value", *argv);
p->iph.tos |= uval;
}
} else {
if (strcmp(*argv, "name") == 0) {
NEXT_ARG();
......
......@@ -47,7 +47,6 @@ ip-tunnel - tunnel configuration
.RB "[ [" no "]" pmtudisc " ]"
.RB "[ " dev
.IR PHYS_DEV " ]"
.RB "[ " "dscp inherit" " ]"
.ti -8
.IR MODE " := "
......@@ -58,8 +57,12 @@ ip-tunnel - tunnel configuration
.BR any " }"
.ti -8
.IR TOS " := { " NUMBER " |"
.BR inherit " }"
.IR TOS " := { " STRING " | " 00 ".." ff " |"
.BR inherit " |"
.BI "inherit/" STRING
.R " |"
.BI "inherit/" 00 ".." ff
.R " }"
.ti -8
.IR ELIM " := {"
......@@ -132,11 +135,21 @@ The default value for IPv6 tunnels is:
.BI dsfield " T"
.TP
.BI tclass " T"
set a fixed TOS (or traffic class in IPv6)
.I T
on tunneled packets.
The default value is:
.BR "inherit" .
set the type of service (IPv4) or traffic class (IPv6) field on
tunneled packets, which can be specified as either a two-digit
hex value (e.g. c0) or a predefined string (e.g. internet).
The value
.B inherit
causes the field to be copied from the original IP header. The
values
.BI "inherit/" STRING
or
.BI "inherit/" 00 ".." ff
will set the field to
.I STRING
or
.IR 00 ".." ff
when tunneling non-IP packets. The default value is 00.
.TP
.BI dev " NAME"
......@@ -201,11 +214,6 @@ flag is equivalent to the combination
.BR "iseq oseq" .
.B It isn't work. Don't use it.
.TP
.BR "dscp inherit"
.RB ( " only IPv6 tunnels " )
Inherit DS field between inner and outer header.
.TP
.BI encaplim " ELIM"
.RB ( " only IPv6 tunnels " )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment