diff options
Diffstat (limited to 'net/tipc/bearer.c')
-rw-r--r-- | net/tipc/bearer.c | 26 |
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 | */ | ||
475 | void 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 |