On 3/7/17 5:46 PM, Robert Shearman wrote:
> @@ -244,24 +245,33 @@ static bool mpls_egress(struct mpls_route *rt, struct 
> sk_buff *skb,
>               payload_type = ip_hdr(skb)->version;
>  
>       switch (payload_type) {
> -     case MPT_IPV4: {
> -             struct iphdr *hdr4 = ip_hdr(skb);
> +     case MPT_IPV4:
> +             if (rt->rt_ttl_propagate == MPLS_TTL_PROP_ENABLED ||
> +                 (rt->rt_ttl_propagate == MPLS_TTL_PROP_DEFAULT &&
> +                  net->mpls.ip_ttl_propagate)) {
> +                     struct iphdr *hdr4 = ip_hdr(skb);
> +
> +                     csum_replace2(&hdr4->check,
> +                                   htons(hdr4->ttl << 8),
> +                                   htons(dec.ttl << 8));
> +                     hdr4->ttl = dec.ttl;
> +             }
>               skb->protocol = htons(ETH_P_IP);
> -             csum_replace2(&hdr4->check,
> -                           htons(hdr4->ttl << 8),
> -                           htons(dec.ttl << 8));
> -             hdr4->ttl = dec.ttl;
>               success = true;
>               break;
> -     }
> -     case MPT_IPV6: {
> -             struct ipv6hdr *hdr6 = ipv6_hdr(skb);
> +     case MPT_IPV6:
> +             if (rt->rt_ttl_propagate == MPLS_TTL_PROP_ENABLED ||
> +                 (rt->rt_ttl_propagate == MPLS_TTL_PROP_DEFAULT &&
> +                  net->mpls.ip_ttl_propagate)) {
> +                     struct ipv6hdr *hdr6 = ipv6_hdr(skb);
> +
> +                     hdr6->hop_limit = dec.ttl;
> +             }
>               skb->protocol = htons(ETH_P_IPV6);
> -             hdr6->hop_limit = dec.ttl;
>               success = true;
>               break;
> -     }

What decrements the TTL if it is not propagated from MPLS to IP?

Reply via email to