ip6_tunnel: fix traffic class routing for tunnels
authorLiam McBirnie <mcbirnie.l@gmail.com>
Thu, 1 Jun 2017 05:36:01 +0000 (15:36 +1000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 4 Jun 2017 23:49:33 +0000 (19:49 -0400)
ip6_route_output() requires that the flowlabel contains the traffic
class for policy routing.

Commit 0e9a709560db ("ip6_tunnel, ip6_gre: fix setting of DSCP on
encapsulated packets") removed the code which previously added the
traffic class to the flowlabel.

The traffic class is added here because only route lookup needs the
flowlabel to contain the traffic class.

Fixes: 0e9a709560db ("ip6_tunnel, ip6_gre: fix setting of DSCP on encapsulated packets")
Signed-off-by: Liam McBirnie <liam.mcbirnie@boeing.com>
Acked-by: Peter Dawson <peter.a.dawson@boeing.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_tunnel.c

index 7ae6c503f1ca2b089388598bfceb43e4aa2d2fea..9b37f9747fc6a6fbabb0740188bc98b5c95c41c4 100644 (file)
@@ -1095,6 +1095,9 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,
 
        if (!dst) {
 route_lookup:
+               /* add dsfield to flowlabel for route lookup */
+               fl6->flowlabel = ip6_make_flowinfo(dsfield, fl6->flowlabel);
+
                dst = ip6_route_output(net, NULL, fl6);
 
                if (dst->error)