]> Pileus Git - ~andy/linux/blobdiff - net/ipv6/xfrm6_mode_tunnel.c
xfrm: allow to avoid copying DSCP during encapsulation
[~andy/linux] / net / ipv6 / xfrm6_mode_tunnel.c
index 9bf6a74a71d261061201e3863fd32713c91720d7..4770d515c2c856684e93416d4696067cae7e3114 100644 (file)
@@ -49,8 +49,11 @@ static int xfrm6_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
               sizeof(top_iph->flow_lbl));
        top_iph->nexthdr = xfrm_af2proto(skb_dst(skb)->ops->family);
 
-       dsfield = XFRM_MODE_SKB_CB(skb)->tos;
-       dsfield = INET_ECN_encapsulate(dsfield, dsfield);
+       if (x->props.extra_flags & XFRM_SA_XFLAG_DONT_ENCAP_DSCP)
+               dsfield = 0;
+       else
+               dsfield = XFRM_MODE_SKB_CB(skb)->tos;
+       dsfield = INET_ECN_encapsulate(dsfield, XFRM_MODE_SKB_CB(skb)->tos);
        if (x->props.flags & XFRM_STATE_NOECN)
                dsfield &= ~INET_ECN_MASK;
        ipv6_change_dsfield(top_iph, 0, dsfield);