aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/bearer.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/bearer.c')
-rw-r--r--net/tipc/bearer.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index 00bc0e620532..eae58a6b121c 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -470,6 +470,32 @@ void tipc_bearer_send(struct net *net, u32 bearer_id, struct sk_buff *buf,
470 rcu_read_unlock(); 470 rcu_read_unlock();
471} 471}
472 472
473/* tipc_bearer_xmit() -send buffer to destination over bearer
474 */
475void tipc_bearer_xmit(struct net *net, u32 bearer_id,
476 struct sk_buff_head *xmitq,
477 struct tipc_media_addr *dst)
478{
479 struct tipc_net *tn = net_generic(net, tipc_net_id);
480 struct tipc_bearer *b;
481 struct sk_buff *skb, *tmp;
482
483 if (skb_queue_empty(xmitq))
484 return;
485
486 rcu_read_lock();
487 b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
488 if (likely(b)) {
489 skb_queue_walk_safe(xmitq, skb, tmp) {
490 __skb_dequeue(xmitq);
491 b->media->send_msg(net, skb, b, dst);
492 /* Until we remove cloning in tipc_l2_send_msg(): */
493 kfree_skb(skb);
494 }
495 }
496 rcu_read_unlock();
497}
498
473/** 499/**
474 * tipc_l2_rcv_msg - handle incoming TIPC message from an interface 500 * tipc_l2_rcv_msg - handle incoming TIPC message from an interface
475 * @buf: the received packet 501 * @buf: the received packet