kernel: make the kernel 3.18 patches apply and boot on arm.
[15.05/openwrt.git] / target / linux / generic / patches-3.18 / 644-bridge_optimize_netfilter_hooks.patch
index 9b223fb..bbfcaa4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/bridge/br_forward.c
 +++ b/net/bridge/br_forward.c
-@@ -57,7 +57,7 @@ int br_dev_queue_push_xmit(struct sk_buf
+@@ -53,7 +53,7 @@ EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit
  
  int br_forward_finish(struct sk_buff *skb)
  {
@@ -9,7 +9,7 @@
                       br_dev_queue_push_xmit);
  
  }
-@@ -80,7 +80,7 @@ static void __br_deliver(const struct ne
+@@ -77,7 +77,7 @@ static void __br_deliver(const struct ne
                return;
        }
  
@@ -18,7 +18,7 @@
                br_forward_finish);
  }
  
-@@ -101,7 +101,7 @@ static void __br_forward(const struct ne
+@@ -98,7 +98,7 @@ static void __br_forward(const struct ne
        skb->dev = to->dev;
        skb_forward_csum(skb);
  
@@ -38,7 +38,7 @@
                       netif_receive_skb);
  }
  
-@@ -214,7 +214,7 @@ rx_handler_result_t br_handle_frame(stru
+@@ -219,7 +219,7 @@ rx_handler_result_t br_handle_frame(stru
                }
  
                /* Deliver packet to local host only */
@@ -47,7 +47,7 @@
                            NULL, br_handle_local_finish)) {
                        return RX_HANDLER_CONSUMED; /* consumed by filter */
                } else {
-@@ -229,7 +229,7 @@ forward:
+@@ -234,7 +234,7 @@ forward:
                if (ether_addr_equal(p->br->dev->dev_addr, dest))
                        skb->pkt_type = PACKET_HOST;
  
@@ -56,7 +56,7 @@
                        br_handle_local_finish))
                        break;
  
-@@ -251,7 +251,7 @@ forward:
+@@ -256,7 +256,7 @@ forward:
                if (ether_addr_equal(p->br->dev->dev_addr, dest))
                        skb->pkt_type = PACKET_HOST;
  
        default:
 --- a/net/bridge/br_multicast.c
 +++ b/net/bridge/br_multicast.c
-@@ -802,7 +802,7 @@ static void __br_multicast_send_query(st
+@@ -815,7 +815,7 @@ static void __br_multicast_send_query(st
        if (port) {
                __skb_push(skb, sizeof(struct ethhdr));
                skb->dev = port->dev;
 -              NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
 +              BR_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
                        dev_queue_xmit);
-       } else
-               netif_rx(skb);
+       } else {
+               br_multicast_select_own_querier(br, ip, skb);
 --- a/net/bridge/br_netfilter.c
 +++ b/net/bridge/br_netfilter.c
 @@ -73,6 +73,15 @@ static int brnf_pass_vlan_indev __read_m
        if (vlan_tx_tag_present(skb))
 --- a/net/bridge/br_private.h
 +++ b/net/bridge/br_private.h
-@@ -724,15 +724,29 @@ static inline u16 br_get_pvid(const stru
+@@ -769,15 +769,29 @@ static inline int br_vlan_enabled(struct
  
  /* br_netfilter.c */
- #ifdef CONFIG_BRIDGE_NETFILTER
+ #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
 +extern int brnf_call_ebtables;
- int br_netfilter_init(void);
- void br_netfilter_fini(void);
+ int br_nf_core_init(void);
+ void br_nf_core_fini(void);
  void br_netfilter_rtable_init(struct net_bridge *);
 +bool br_netfilter_run_hooks(void);
  #else
- #define br_netfilter_init()   (0)
- #define br_netfilter_fini()   do { } while (0)
+ static inline int br_nf_core_init(void) { return 0; }
+ static inline void br_nf_core_fini(void) {}
  #define br_netfilter_rtable_init(x)
 +#define br_netfilter_run_hooks()      false
  #endif
 +
  /* br_stp.c */
  void br_log_state(const struct net_bridge_port *p);
struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
void br_set_state(struct net_bridge_port *p, unsigned int state);
 --- a/net/bridge/br_stp_bpdu.c
 +++ b/net/bridge/br_stp_bpdu.c
 @@ -54,7 +54,7 @@ static void br_send_bpdu(struct net_brid
  
 --- a/net/bridge/netfilter/ebtables.c
 +++ b/net/bridge/netfilter/ebtables.c
-@@ -2405,11 +2405,13 @@ static int __init ebtables_init(void)
+@@ -2414,11 +2414,13 @@ static int __init ebtables_init(void)
        }
  
        printk(KERN_INFO "Ebtables v2.0 registered\n");