|
@@ -38,7 +38,7 @@ ip6t_mangle_out(struct sk_buff *skb, const struct net_device *out)
|
|
|
struct in6_addr saddr, daddr;
|
|
|
u_int8_t hop_limit;
|
|
|
u_int32_t flowlabel, mark;
|
|
|
-
|
|
|
+ int err;
|
|
|
#if 0
|
|
|
/* root is playing with raw sockets. */
|
|
|
if (skb->len < sizeof(struct iphdr) ||
|
|
@@ -65,8 +65,11 @@ ip6t_mangle_out(struct sk_buff *skb, const struct net_device *out)
|
|
|
!ipv6_addr_equal(&ipv6_hdr(skb)->daddr, &daddr) ||
|
|
|
skb->mark != mark ||
|
|
|
ipv6_hdr(skb)->hop_limit != hop_limit ||
|
|
|
- flowlabel != *((u_int32_t *)ipv6_hdr(skb))))
|
|
|
- return ip6_route_me_harder(skb) == 0 ? ret : NF_DROP;
|
|
|
+ flowlabel != *((u_int32_t *)ipv6_hdr(skb)))) {
|
|
|
+ err = ip6_route_me_harder(skb);
|
|
|
+ if (err < 0)
|
|
|
+ ret = NF_DROP_ERR(err);
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
|
}
|