#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)