]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip/iptunnel: Extend TOS syntax
authorDavid Ward <david.ward@ll.mit.edu>
Sun, 27 Jan 2013 13:04:59 +0000 (13:04 +0000)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 4 Feb 2013 16:56:45 +0000 (08:56 -0800)
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: David Ward <david.ward@ll.mit.edu>
ip/iptunnel.c
man/man8/ip-tunnel.8

index 0cf6cf8e17f8d600855f090d2b9b1b8a3c0001bc..f8b91ba0805a1f10b59dd773740d5631566cd5d1 100644 (file)
@@ -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();
index 37ba542cee0d55ad2e356c618f3745def170629c..b408517c040eb1bfcce148f91f9a7490c1793cca 100644 (file)
@@ -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 " )