aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge')
-rw-r--r--net/bridge/br_forward.c13
-rw-r--r--net/bridge/br_input.c16
-rw-r--r--net/bridge/br_multicast.c3
-rw-r--r--net/bridge/br_netfilter.c56
-rw-r--r--net/bridge/br_private.h6
-rw-r--r--net/bridge/br_stp_bpdu.c5
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
38int br_dev_queue_push_xmit(struct sk_buff *skb) 38int 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}
50EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit); 50EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit);
51 51
52int br_forward_finish(struct sk_buff *skb) 52int 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
62static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br, 63static 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 */
122int br_handle_frame_finish(struct sk_buff *skb) 123int 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:
207EXPORT_SYMBOL_GPL(br_handle_frame_finish); 208EXPORT_SYMBOL_GPL(br_handle_frame_finish);
208 209
209/* note: already called with rcu_read_lock */ 210/* note: already called with rcu_read_lock */
210static int br_handle_local_finish(struct sk_buff *skb) 211static 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. */
264static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb) 264static 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 */
296static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb) 297static 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 */
390static int br_nf_pre_routing_finish(struct sk_buff *skb) 391static 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 *************************************************/
677static int br_nf_forward_finish(struct sk_buff *skb) 681static 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
807static int br_nf_push_frag_xmit(struct sk_buff *skb) 812static 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
817static int br_nf_dev_queue_xmit(struct sk_buff *skb) 822static 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
843static int br_nf_dev_queue_xmit(struct sk_buff *skb) 848static 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
933static int br_nf_dev_xmit(struct sk_buff *skb) 939static 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 */
412void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb); 412void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb);
413int br_dev_queue_push_xmit(struct sk_buff *skb); 413int br_dev_queue_push_xmit(struct sock *sk, struct sk_buff *skb);
414void br_forward(const struct net_bridge_port *to, 414void 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);
416int br_forward_finish(struct sk_buff *skb); 416int br_forward_finish(struct sock *sk, struct sk_buff *skb);
417void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb, bool unicast); 417void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb, bool unicast);
418void br_flood_forward(struct net_bridge *br, struct sk_buff *skb, 418void 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);
431void br_manage_promisc(struct net_bridge *br); 431void br_manage_promisc(struct net_bridge *br);
432 432
433/* br_input.c */ 433/* br_input.c */
434int br_handle_frame_finish(struct sk_buff *skb); 434int br_handle_frame_finish(struct sock *sk, struct sk_buff *skb);
435rx_handler_result_t br_handle_frame(struct sk_buff **pskb); 435rx_handler_result_t br_handle_frame(struct sk_buff **pskb);
436 436
437static inline bool br_rx_handler_check_rcu(const struct net_device *dev) 437static 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
61static inline void br_set_ticks(unsigned char *dest, int j) 62static inline void br_set_ticks(unsigned char *dest, int j)