#include <linux/kernel.h>
#include <linux/netdevice.h>
+ #include <linux/netpoll.h>
#include <linux/etherdevice.h>
#include <linux/ethtool.h>
+ #include <linux/list.h>
+#include <linux/netfilter_bridge.h>
+
#include <asm/uaccess.h>
#include "br_private.h"
static void __br_deliver(const struct net_bridge_port *to, struct sk_buff *skb)
{
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ struct net_bridge *br = to->br;
+ if (unlikely(br->dev->priv_flags & IFF_IN_NETPOLL)) {
+ struct netpoll *np;
+ to->dev->npinfo = skb->dev->npinfo;
+ np = skb->dev->npinfo->netpoll;
+ np->real_dev = np->dev = to->dev;
+ to->dev->priv_flags |= IFF_IN_NETPOLL;
+ }
+ #endif
skb->dev = to->dev;
- NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
- br_forward_finish);
+ NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
+ br_forward_finish);
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ if (skb->dev->npinfo)
+ skb->dev->npinfo->netpoll->dev = br->dev;
+ #endif
}
static void __br_forward(const struct net_bridge_port *to, struct sk_buff *skb)