diff options
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_forward.c | 13 | ||||
-rw-r--r-- | net/bridge/br_input.c | 16 | ||||
-rw-r--r-- | net/bridge/br_multicast.c | 3 | ||||
-rw-r--r-- | net/bridge/br_netfilter.c | 56 | ||||
-rw-r--r-- | net/bridge/br_private.h | 6 | ||||
-rw-r--r-- | net/bridge/br_stp_bpdu.c | 5 |
6 files changed, 56 insertions, 43 deletions
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 3304a5442331..e97572b5d2cc 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c | |||
@@ -35,7 +35,7 @@ static inline int should_deliver(const struct net_bridge_port *p, | |||
35 | p->state == BR_STATE_FORWARDING; | 35 | p->state == BR_STATE_FORWARDING; |
36 | } | 36 | } |
37 | 37 | ||
38 | int br_dev_queue_push_xmit(struct sk_buff *skb) | 38 | int br_dev_queue_push_xmit(struct sock *sk, struct sk_buff *skb) |
39 | { | 39 | { |
40 | if (!is_skb_forwardable(skb->dev, skb)) { | 40 | if (!is_skb_forwardable(skb->dev, skb)) { |
41 | kfree_skb(skb); | 41 | kfree_skb(skb); |
@@ -49,9 +49,10 @@ int br_dev_queue_push_xmit(struct sk_buff *skb) | |||
49 | } | 49 | } |
50 | EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit); | 50 | EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit); |
51 | 51 | ||
52 | int br_forward_finish(struct sk_buff *skb) | 52 | int br_forward_finish(struct sock *sk, struct sk_buff *skb) |
53 | { | 53 | { |
54 | return NF_HOOK(NFPROTO_BRIDGE, NF_BR_POST_ROUTING, skb, NULL, skb->dev, | 54 | return NF_HOOK(NFPROTO_BRIDGE, NF_BR_POST_ROUTING, sk, skb, |
55 | NULL, skb->dev, | ||
55 | br_dev_queue_push_xmit); | 56 | br_dev_queue_push_xmit); |
56 | 57 | ||
57 | } | 58 | } |
@@ -75,7 +76,8 @@ static void __br_deliver(const struct net_bridge_port *to, struct sk_buff *skb) | |||
75 | return; | 76 | return; |
76 | } | 77 | } |
77 | 78 | ||
78 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev, | 79 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, NULL, skb, |
80 | NULL, skb->dev, | ||
79 | br_forward_finish); | 81 | br_forward_finish); |
80 | } | 82 | } |
81 | 83 | ||
@@ -96,7 +98,8 @@ static void __br_forward(const struct net_bridge_port *to, struct sk_buff *skb) | |||
96 | skb->dev = to->dev; | 98 | skb->dev = to->dev; |
97 | skb_forward_csum(skb); | 99 | skb_forward_csum(skb); |
98 | 100 | ||
99 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_FORWARD, skb, indev, skb->dev, | 101 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_FORWARD, NULL, skb, |
102 | indev, skb->dev, | ||
100 | br_forward_finish); | 103 | br_forward_finish); |
101 | } | 104 | } |
102 | 105 | ||
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 052c5ebbc947..f921a5dce22d 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
@@ -55,8 +55,9 @@ static int br_pass_frame_up(struct sk_buff *skb) | |||
55 | if (!skb) | 55 | if (!skb) |
56 | return NET_RX_DROP; | 56 | return NET_RX_DROP; |
57 | 57 | ||
58 | return NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL, | 58 | return NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, NULL, skb, |
59 | netif_receive_skb); | 59 | indev, NULL, |
60 | netif_receive_skb_sk); | ||
60 | } | 61 | } |
61 | 62 | ||
62 | static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br, | 63 | static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br, |
@@ -119,7 +120,7 @@ static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br, | |||
119 | } | 120 | } |
120 | 121 | ||
121 | /* note: already called with rcu_read_lock */ | 122 | /* note: already called with rcu_read_lock */ |
122 | int br_handle_frame_finish(struct sk_buff *skb) | 123 | int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb) |
123 | { | 124 | { |
124 | const unsigned char *dest = eth_hdr(skb)->h_dest; | 125 | const unsigned char *dest = eth_hdr(skb)->h_dest; |
125 | struct net_bridge_port *p = br_port_get_rcu(skb->dev); | 126 | struct net_bridge_port *p = br_port_get_rcu(skb->dev); |
@@ -207,7 +208,7 @@ drop: | |||
207 | EXPORT_SYMBOL_GPL(br_handle_frame_finish); | 208 | EXPORT_SYMBOL_GPL(br_handle_frame_finish); |
208 | 209 | ||
209 | /* note: already called with rcu_read_lock */ | 210 | /* note: already called with rcu_read_lock */ |
210 | static int br_handle_local_finish(struct sk_buff *skb) | 211 | static int br_handle_local_finish(struct sock *sk, struct sk_buff *skb) |
211 | { | 212 | { |
212 | struct net_bridge_port *p = br_port_get_rcu(skb->dev); | 213 | struct net_bridge_port *p = br_port_get_rcu(skb->dev); |
213 | u16 vid = 0; | 214 | u16 vid = 0; |
@@ -277,8 +278,8 @@ rx_handler_result_t br_handle_frame(struct sk_buff **pskb) | |||
277 | } | 278 | } |
278 | 279 | ||
279 | /* Deliver packet to local host only */ | 280 | /* Deliver packet to local host only */ |
280 | if (NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev, | 281 | if (NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN, NULL, skb, |
281 | NULL, br_handle_local_finish)) { | 282 | skb->dev, NULL, br_handle_local_finish)) { |
282 | return RX_HANDLER_CONSUMED; /* consumed by filter */ | 283 | return RX_HANDLER_CONSUMED; /* consumed by filter */ |
283 | } else { | 284 | } else { |
284 | *pskb = skb; | 285 | *pskb = skb; |
@@ -302,7 +303,8 @@ forward: | |||
302 | if (ether_addr_equal(p->br->dev->dev_addr, dest)) | 303 | if (ether_addr_equal(p->br->dev->dev_addr, dest)) |
303 | skb->pkt_type = PACKET_HOST; | 304 | skb->pkt_type = PACKET_HOST; |
304 | 305 | ||
305 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL, | 306 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, NULL, skb, |
307 | skb->dev, NULL, | ||
306 | br_handle_frame_finish); | 308 | br_handle_frame_finish); |
307 | break; | 309 | break; |
308 | default: | 310 | default: |
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index c465876c7861..4b6722f8f179 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -814,7 +814,8 @@ static void __br_multicast_send_query(struct net_bridge *br, | |||
814 | 814 | ||
815 | if (port) { | 815 | if (port) { |
816 | skb->dev = port->dev; | 816 | skb->dev = port->dev; |
817 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev, | 817 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, NULL, skb, |
818 | NULL, skb->dev, | ||
818 | br_dev_queue_push_xmit); | 819 | br_dev_queue_push_xmit); |
819 | } else { | 820 | } else { |
820 | br_multicast_select_own_querier(br, ip, skb); | 821 | br_multicast_select_own_querier(br, ip, skb); |
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index 7527e94dd5dc..acd31c9f2116 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c | |||
@@ -261,7 +261,7 @@ static void nf_bridge_update_protocol(struct sk_buff *skb) | |||
261 | /* PF_BRIDGE/PRE_ROUTING *********************************************/ | 261 | /* PF_BRIDGE/PRE_ROUTING *********************************************/ |
262 | /* Undo the changes made for ip6tables PREROUTING and continue the | 262 | /* Undo the changes made for ip6tables PREROUTING and continue the |
263 | * bridge PRE_ROUTING hook. */ | 263 | * bridge PRE_ROUTING hook. */ |
264 | static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb) | 264 | static int br_nf_pre_routing_finish_ipv6(struct sock *sk, struct sk_buff *skb) |
265 | { | 265 | { |
266 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; | 266 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; |
267 | struct rtable *rt; | 267 | struct rtable *rt; |
@@ -282,7 +282,8 @@ static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb) | |||
282 | skb->dev = nf_bridge->physindev; | 282 | skb->dev = nf_bridge->physindev; |
283 | nf_bridge_update_protocol(skb); | 283 | nf_bridge_update_protocol(skb); |
284 | nf_bridge_push_encap_header(skb); | 284 | nf_bridge_push_encap_header(skb); |
285 | NF_HOOK_THRESH(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL, | 285 | NF_HOOK_THRESH(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, sk, skb, |
286 | skb->dev, NULL, | ||
286 | br_handle_frame_finish, 1); | 287 | br_handle_frame_finish, 1); |
287 | 288 | ||
288 | return 0; | 289 | return 0; |
@@ -293,7 +294,7 @@ static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb) | |||
293 | * don't, we use the neighbour framework to find out. In both cases, we make | 294 | * don't, we use the neighbour framework to find out. In both cases, we make |
294 | * sure that br_handle_frame_finish() is called afterwards. | 295 | * sure that br_handle_frame_finish() is called afterwards. |
295 | */ | 296 | */ |
296 | static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb) | 297 | static int br_nf_pre_routing_finish_bridge(struct sock *sk, struct sk_buff *skb) |
297 | { | 298 | { |
298 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; | 299 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; |
299 | struct neighbour *neigh; | 300 | struct neighbour *neigh; |
@@ -310,7 +311,7 @@ static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb) | |||
310 | if (neigh->hh.hh_len) { | 311 | if (neigh->hh.hh_len) { |
311 | neigh_hh_bridge(&neigh->hh, skb); | 312 | neigh_hh_bridge(&neigh->hh, skb); |
312 | skb->dev = nf_bridge->physindev; | 313 | skb->dev = nf_bridge->physindev; |
313 | ret = br_handle_frame_finish(skb); | 314 | ret = br_handle_frame_finish(sk, skb); |
314 | } else { | 315 | } else { |
315 | /* the neighbour function below overwrites the complete | 316 | /* the neighbour function below overwrites the complete |
316 | * MAC header, so we save the Ethernet source address and | 317 | * MAC header, so we save the Ethernet source address and |
@@ -387,7 +388,7 @@ static bool dnat_took_place(const struct sk_buff *skb) | |||
387 | * device, we proceed as if ip_route_input() succeeded. If it differs from the | 388 | * device, we proceed as if ip_route_input() succeeded. If it differs from the |
388 | * logical bridge port or if ip_route_output_key() fails we drop the packet. | 389 | * logical bridge port or if ip_route_output_key() fails we drop the packet. |
389 | */ | 390 | */ |
390 | static int br_nf_pre_routing_finish(struct sk_buff *skb) | 391 | static int br_nf_pre_routing_finish(struct sock *sk, struct sk_buff *skb) |
391 | { | 392 | { |
392 | struct net_device *dev = skb->dev; | 393 | struct net_device *dev = skb->dev; |
393 | struct iphdr *iph = ip_hdr(skb); | 394 | struct iphdr *iph = ip_hdr(skb); |
@@ -440,7 +441,7 @@ bridged_dnat: | |||
440 | nf_bridge_push_encap_header(skb); | 441 | nf_bridge_push_encap_header(skb); |
441 | NF_HOOK_THRESH(NFPROTO_BRIDGE, | 442 | NF_HOOK_THRESH(NFPROTO_BRIDGE, |
442 | NF_BR_PRE_ROUTING, | 443 | NF_BR_PRE_ROUTING, |
443 | skb, skb->dev, NULL, | 444 | sk, skb, skb->dev, NULL, |
444 | br_nf_pre_routing_finish_bridge, | 445 | br_nf_pre_routing_finish_bridge, |
445 | 1); | 446 | 1); |
446 | return 0; | 447 | return 0; |
@@ -460,7 +461,8 @@ bridged_dnat: | |||
460 | skb->dev = nf_bridge->physindev; | 461 | skb->dev = nf_bridge->physindev; |
461 | nf_bridge_update_protocol(skb); | 462 | nf_bridge_update_protocol(skb); |
462 | nf_bridge_push_encap_header(skb); | 463 | nf_bridge_push_encap_header(skb); |
463 | NF_HOOK_THRESH(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL, | 464 | NF_HOOK_THRESH(NFPROTO_BRIDGE, NF_BR_PRE_ROUTING, sk, skb, |
465 | skb->dev, NULL, | ||
464 | br_handle_frame_finish, 1); | 466 | br_handle_frame_finish, 1); |
465 | 467 | ||
466 | return 0; | 468 | return 0; |
@@ -596,7 +598,8 @@ static unsigned int br_nf_pre_routing_ipv6(const struct nf_hook_ops *ops, | |||
596 | return NF_DROP; | 598 | return NF_DROP; |
597 | 599 | ||
598 | skb->protocol = htons(ETH_P_IPV6); | 600 | skb->protocol = htons(ETH_P_IPV6); |
599 | NF_HOOK(NFPROTO_IPV6, NF_INET_PRE_ROUTING, skb, skb->dev, NULL, | 601 | NF_HOOK(NFPROTO_IPV6, NF_INET_PRE_ROUTING, state->sk, skb, |
602 | skb->dev, NULL, | ||
600 | br_nf_pre_routing_finish_ipv6); | 603 | br_nf_pre_routing_finish_ipv6); |
601 | 604 | ||
602 | return NF_STOLEN; | 605 | return NF_STOLEN; |
@@ -651,7 +654,8 @@ static unsigned int br_nf_pre_routing(const struct nf_hook_ops *ops, | |||
651 | 654 | ||
652 | skb->protocol = htons(ETH_P_IP); | 655 | skb->protocol = htons(ETH_P_IP); |
653 | 656 | ||
654 | NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, skb->dev, NULL, | 657 | NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, state->sk, skb, |
658 | skb->dev, NULL, | ||
655 | br_nf_pre_routing_finish); | 659 | br_nf_pre_routing_finish); |
656 | 660 | ||
657 | return NF_STOLEN; | 661 | return NF_STOLEN; |
@@ -674,7 +678,7 @@ static unsigned int br_nf_local_in(const struct nf_hook_ops *ops, | |||
674 | } | 678 | } |
675 | 679 | ||
676 | /* PF_BRIDGE/FORWARD *************************************************/ | 680 | /* PF_BRIDGE/FORWARD *************************************************/ |
677 | static int br_nf_forward_finish(struct sk_buff *skb) | 681 | static int br_nf_forward_finish(struct sock *sk, struct sk_buff *skb) |
678 | { | 682 | { |
679 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; | 683 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; |
680 | struct net_device *in; | 684 | struct net_device *in; |
@@ -691,8 +695,8 @@ static int br_nf_forward_finish(struct sk_buff *skb) | |||
691 | } | 695 | } |
692 | nf_bridge_push_encap_header(skb); | 696 | nf_bridge_push_encap_header(skb); |
693 | 697 | ||
694 | NF_HOOK_THRESH(NFPROTO_BRIDGE, NF_BR_FORWARD, skb, in, | 698 | NF_HOOK_THRESH(NFPROTO_BRIDGE, NF_BR_FORWARD, sk, skb, |
695 | skb->dev, br_forward_finish, 1); | 699 | in, skb->dev, br_forward_finish, 1); |
696 | return 0; | 700 | return 0; |
697 | } | 701 | } |
698 | 702 | ||
@@ -746,7 +750,8 @@ static unsigned int br_nf_forward_ip(const struct nf_hook_ops *ops, | |||
746 | else | 750 | else |
747 | skb->protocol = htons(ETH_P_IPV6); | 751 | skb->protocol = htons(ETH_P_IPV6); |
748 | 752 | ||
749 | NF_HOOK(pf, NF_INET_FORWARD, skb, brnf_get_logical_dev(skb, state->in), | 753 | NF_HOOK(pf, NF_INET_FORWARD, NULL, skb, |
754 | brnf_get_logical_dev(skb, state->in), | ||
750 | parent, br_nf_forward_finish); | 755 | parent, br_nf_forward_finish); |
751 | 756 | ||
752 | return NF_STOLEN; | 757 | return NF_STOLEN; |
@@ -780,8 +785,8 @@ static unsigned int br_nf_forward_arp(const struct nf_hook_ops *ops, | |||
780 | return NF_ACCEPT; | 785 | return NF_ACCEPT; |
781 | } | 786 | } |
782 | *d = state->in; | 787 | *d = state->in; |
783 | NF_HOOK(NFPROTO_ARP, NF_ARP_FORWARD, skb, state->in, | 788 | NF_HOOK(NFPROTO_ARP, NF_ARP_FORWARD, state->sk, skb, |
784 | state->out, br_nf_forward_finish); | 789 | state->in, state->out, br_nf_forward_finish); |
785 | 790 | ||
786 | return NF_STOLEN; | 791 | return NF_STOLEN; |
787 | } | 792 | } |
@@ -804,24 +809,24 @@ static bool nf_bridge_copy_header(struct sk_buff *skb) | |||
804 | return true; | 809 | return true; |
805 | } | 810 | } |
806 | 811 | ||
807 | static int br_nf_push_frag_xmit(struct sk_buff *skb) | 812 | static int br_nf_push_frag_xmit(struct sock *sk, struct sk_buff *skb) |
808 | { | 813 | { |
809 | if (!nf_bridge_copy_header(skb)) { | 814 | if (!nf_bridge_copy_header(skb)) { |
810 | kfree_skb(skb); | 815 | kfree_skb(skb); |
811 | return 0; | 816 | return 0; |
812 | } | 817 | } |
813 | 818 | ||
814 | return br_dev_queue_push_xmit(skb); | 819 | return br_dev_queue_push_xmit(sk, skb); |
815 | } | 820 | } |
816 | 821 | ||
817 | static int br_nf_dev_queue_xmit(struct sk_buff *skb) | 822 | static int br_nf_dev_queue_xmit(struct sock *sk, struct sk_buff *skb) |
818 | { | 823 | { |
819 | int ret; | 824 | int ret; |
820 | int frag_max_size; | 825 | int frag_max_size; |
821 | unsigned int mtu_reserved; | 826 | unsigned int mtu_reserved; |
822 | 827 | ||
823 | if (skb_is_gso(skb) || skb->protocol != htons(ETH_P_IP)) | 828 | if (skb_is_gso(skb) || skb->protocol != htons(ETH_P_IP)) |
824 | return br_dev_queue_push_xmit(skb); | 829 | return br_dev_queue_push_xmit(sk, skb); |
825 | 830 | ||
826 | mtu_reserved = nf_bridge_mtu_reduction(skb); | 831 | mtu_reserved = nf_bridge_mtu_reduction(skb); |
827 | /* This is wrong! We should preserve the original fragment | 832 | /* This is wrong! We should preserve the original fragment |
@@ -833,16 +838,16 @@ static int br_nf_dev_queue_xmit(struct sk_buff *skb) | |||
833 | /* Drop invalid packet */ | 838 | /* Drop invalid packet */ |
834 | return NF_DROP; | 839 | return NF_DROP; |
835 | IPCB(skb)->frag_max_size = frag_max_size; | 840 | IPCB(skb)->frag_max_size = frag_max_size; |
836 | ret = ip_fragment(skb, br_nf_push_frag_xmit); | 841 | ret = ip_fragment(sk, skb, br_nf_push_frag_xmit); |
837 | } else | 842 | } else |
838 | ret = br_dev_queue_push_xmit(skb); | 843 | ret = br_dev_queue_push_xmit(sk, skb); |
839 | 844 | ||
840 | return ret; | 845 | return ret; |
841 | } | 846 | } |
842 | #else | 847 | #else |
843 | static int br_nf_dev_queue_xmit(struct sk_buff *skb) | 848 | static int br_nf_dev_queue_xmit(struct sock *sk, struct sk_buff *skb) |
844 | { | 849 | { |
845 | return br_dev_queue_push_xmit(skb); | 850 | return br_dev_queue_push_xmit(sk, skb); |
846 | } | 851 | } |
847 | #endif | 852 | #endif |
848 | 853 | ||
@@ -887,7 +892,8 @@ static unsigned int br_nf_post_routing(const struct nf_hook_ops *ops, | |||
887 | else | 892 | else |
888 | skb->protocol = htons(ETH_P_IPV6); | 893 | skb->protocol = htons(ETH_P_IPV6); |
889 | 894 | ||
890 | NF_HOOK(pf, NF_INET_POST_ROUTING, skb, NULL, realoutdev, | 895 | NF_HOOK(pf, NF_INET_POST_ROUTING, state->sk, skb, |
896 | NULL, realoutdev, | ||
891 | br_nf_dev_queue_xmit); | 897 | br_nf_dev_queue_xmit); |
892 | 898 | ||
893 | return NF_STOLEN; | 899 | return NF_STOLEN; |
@@ -927,7 +933,7 @@ static void br_nf_pre_routing_finish_bridge_slow(struct sk_buff *skb) | |||
927 | skb_copy_to_linear_data_offset(skb, -(ETH_HLEN-ETH_ALEN), | 933 | skb_copy_to_linear_data_offset(skb, -(ETH_HLEN-ETH_ALEN), |
928 | skb->nf_bridge->data, ETH_HLEN-ETH_ALEN); | 934 | skb->nf_bridge->data, ETH_HLEN-ETH_ALEN); |
929 | skb->dev = nf_bridge->physindev; | 935 | skb->dev = nf_bridge->physindev; |
930 | br_handle_frame_finish(skb); | 936 | br_handle_frame_finish(NULL, skb); |
931 | } | 937 | } |
932 | 938 | ||
933 | static int br_nf_dev_xmit(struct sk_buff *skb) | 939 | static int br_nf_dev_xmit(struct sk_buff *skb) |
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index b46fa0c5b8ec..6ca0251cb478 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h | |||
@@ -410,10 +410,10 @@ int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p, | |||
410 | 410 | ||
411 | /* br_forward.c */ | 411 | /* br_forward.c */ |
412 | void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb); | 412 | void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb); |
413 | int br_dev_queue_push_xmit(struct sk_buff *skb); | 413 | int br_dev_queue_push_xmit(struct sock *sk, struct sk_buff *skb); |
414 | void br_forward(const struct net_bridge_port *to, | 414 | void br_forward(const struct net_bridge_port *to, |
415 | struct sk_buff *skb, struct sk_buff *skb0); | 415 | struct sk_buff *skb, struct sk_buff *skb0); |
416 | int br_forward_finish(struct sk_buff *skb); | 416 | int br_forward_finish(struct sock *sk, struct sk_buff *skb); |
417 | void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb, bool unicast); | 417 | void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb, bool unicast); |
418 | void br_flood_forward(struct net_bridge *br, struct sk_buff *skb, | 418 | void br_flood_forward(struct net_bridge *br, struct sk_buff *skb, |
419 | struct sk_buff *skb2, bool unicast); | 419 | struct sk_buff *skb2, bool unicast); |
@@ -431,7 +431,7 @@ void br_port_flags_change(struct net_bridge_port *port, unsigned long mask); | |||
431 | void br_manage_promisc(struct net_bridge *br); | 431 | void br_manage_promisc(struct net_bridge *br); |
432 | 432 | ||
433 | /* br_input.c */ | 433 | /* br_input.c */ |
434 | int br_handle_frame_finish(struct sk_buff *skb); | 434 | int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb); |
435 | rx_handler_result_t br_handle_frame(struct sk_buff **pskb); | 435 | rx_handler_result_t br_handle_frame(struct sk_buff **pskb); |
436 | 436 | ||
437 | static inline bool br_rx_handler_check_rcu(const struct net_device *dev) | 437 | static inline bool br_rx_handler_check_rcu(const struct net_device *dev) |
diff --git a/net/bridge/br_stp_bpdu.c b/net/bridge/br_stp_bpdu.c index bdb459d21ad8..534fc4cd263e 100644 --- a/net/bridge/br_stp_bpdu.c +++ b/net/bridge/br_stp_bpdu.c | |||
@@ -54,8 +54,9 @@ static void br_send_bpdu(struct net_bridge_port *p, | |||
54 | 54 | ||
55 | skb_reset_mac_header(skb); | 55 | skb_reset_mac_header(skb); |
56 | 56 | ||
57 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev, | 57 | NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, NULL, skb, |
58 | dev_queue_xmit); | 58 | NULL, skb->dev, |
59 | dev_queue_xmit_sk); | ||
59 | } | 60 | } |
60 | 61 | ||
61 | static inline void br_set_ticks(unsigned char *dest, int j) | 62 | static inline void br_set_ticks(unsigned char *dest, int j) |