|
@@ -156,7 +156,7 @@ void br_netfilter_rtable_init(struct net_bridge *br)
|
|
rt->dst.dev = br->dev;
|
|
rt->dst.dev = br->dev;
|
|
rt->dst.path = &rt->dst;
|
|
rt->dst.path = &rt->dst;
|
|
dst_init_metrics(&rt->dst, br_dst_default_metrics, true);
|
|
dst_init_metrics(&rt->dst, br_dst_default_metrics, true);
|
|
- rt->dst.flags = DST_NOXFRM | DST_NOPEER;
|
|
|
|
|
|
+ rt->dst.flags = DST_NOXFRM | DST_NOPEER | DST_FAKE_RTABLE;
|
|
rt->dst.ops = &fake_dst_ops;
|
|
rt->dst.ops = &fake_dst_ops;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -694,11 +694,7 @@ static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff *skb,
|
|
const struct net_device *out,
|
|
const struct net_device *out,
|
|
int (*okfn)(struct sk_buff *))
|
|
int (*okfn)(struct sk_buff *))
|
|
{
|
|
{
|
|
- struct rtable *rt = skb_rtable(skb);
|
|
|
|
-
|
|
|
|
- if (rt && rt == bridge_parent_rtable(in))
|
|
|
|
- skb_dst_drop(skb);
|
|
|
|
-
|
|
|
|
|
|
+ br_drop_fake_rtable(skb);
|
|
return NF_ACCEPT;
|
|
return NF_ACCEPT;
|
|
}
|
|
}
|
|
|
|
|