*          1 if something is broken and should be logged (!!! above)
  *          2 if packet should be dropped
  */
-static inline int INET_ECN_decapsulate(struct sk_buff *skb,
-                                      __u8 outer, __u8 inner)
+static inline int __INET_ECN_decapsulate(__u8 outer, __u8 inner, bool *set_ce)
 {
        if (INET_ECN_is_not_ect(inner)) {
                switch (outer & INET_ECN_MASK) {
                }
        }
 
-       if (INET_ECN_is_ce(outer))
+       *set_ce = INET_ECN_is_ce(outer);
+       return 0;
+}
+
+static inline int INET_ECN_decapsulate(struct sk_buff *skb,
+                                      __u8 outer, __u8 inner)
+{
+       bool set_ce = false;
+       int rc;
+
+       rc = __INET_ECN_decapsulate(outer, inner, &set_ce);
+       if (!rc && set_ce)
                INET_ECN_set_ce(skb);
 
-       return 0;
+       return rc;
 }
 
 static inline int IP_ECN_decapsulate(const struct iphdr *oiph,