X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fipv4%2Fxfrm4_input.c;h=2d3849c38a0f8224da7f35a0ecb22b46353aa68d;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=b045c87197f13c73def04b50457b84435db08374;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c index b045c8719..2d3849c38 100644 --- a/net/ipv4/xfrm4_input.c +++ b/net/ipv4/xfrm4_input.c @@ -9,6 +9,7 @@ * */ +#include #include #include #include @@ -19,13 +20,14 @@ int xfrm4_rcv(struct sk_buff *skb) return xfrm4_rcv_encap(skb, 0); } +EXPORT_SYMBOL(xfrm4_rcv); + static inline void ipip_ecn_decapsulate(struct sk_buff *skb) { struct iphdr *outer_iph = skb->nh.iph; struct iphdr *inner_iph = skb->h.ipiph; - if (INET_ECN_is_ce(outer_iph->tos) && - INET_ECN_is_not_ce(inner_iph->tos)) + if (INET_ECN_is_ce(outer_iph->tos)) IP_ECN_set_ce(inner_iph); } @@ -102,6 +104,8 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) goto drop; + if (x->props.flags & XFRM_STATE_DECAP_DSCP) + ipv4_copy_dscp(iph, skb->h.ipiph); if (!(x->props.flags & XFRM_STATE_NOECN)) ipip_ecn_decapsulate(skb); skb->mac.raw = memmove(skb->data - skb->mac_len,