1 #ifndef _INET_ECN_WRAPPER_H_
2 #define _INET_ECN_WRAPPER_H_
4 #include_next <net/inet_ecn.h>
6 #define INET_ECN_decapsulate rpl_INET_ECN_decapsulate
7 static inline int INET_ECN_decapsulate(struct sk_buff *skb,
8 __u8 outer, __u8 inner)
10 if (INET_ECN_is_not_ect(inner)) {
11 switch (outer & INET_ECN_MASK) {
12 case INET_ECN_NOT_ECT:
22 if (INET_ECN_is_ce(outer))
28 #define IP_ECN_decapsulate rpl_IP_ECN_decapsulate
29 static inline int IP_ECN_decapsulate(const struct iphdr *oiph,
34 if (skb->protocol == htons(ETH_P_IP))
35 inner = ip_hdr(skb)->tos;
36 else if (skb->protocol == htons(ETH_P_IPV6))
37 inner = ipv6_get_dsfield(ipv6_hdr(skb));
41 return INET_ECN_decapsulate(skb, oiph->tos, inner);
44 #define IP6_ECN_decapsulate rpl_IP6_ECN_decapsulate
45 static inline int IP6_ECN_decapsulate(const struct ipv6hdr *oipv6h,
50 if (skb->protocol == htons(ETH_P_IP))
51 inner = ip_hdr(skb)->tos;
52 else if (skb->protocol == htons(ETH_P_IPV6))
53 inner = ipv6_get_dsfield(ipv6_hdr(skb));
57 return INET_ECN_decapsulate(skb, ipv6_get_dsfield(oipv6h), inner);