bearer.c (2a7ee696f7b000a970dcce0cb06fdcd0a9e6ee76) | bearer.c (fc1b6d6de2208774efd2a20bf0daddb02d18b1e0) |
---|---|
1/* 2 * net/tipc/bearer.c: TIPC bearer code 3 * 4 * Copyright (c) 1996-2006, 2013-2016, Ericsson AB 5 * Copyright (c) 2004-2006, 2010-2013, Wind River Systems 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 30 unchanged lines hidden (view full) --- 39#include "bearer.h" 40#include "link.h" 41#include "discover.h" 42#include "monitor.h" 43#include "bcast.h" 44#include "netlink.h" 45#include "udp_media.h" 46#include "trace.h" | 1/* 2 * net/tipc/bearer.c: TIPC bearer code 3 * 4 * Copyright (c) 1996-2006, 2013-2016, Ericsson AB 5 * Copyright (c) 2004-2006, 2010-2013, Wind River Systems 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 30 unchanged lines hidden (view full) --- 39#include "bearer.h" 40#include "link.h" 41#include "discover.h" 42#include "monitor.h" 43#include "bcast.h" 44#include "netlink.h" 45#include "udp_media.h" 46#include "trace.h" |
47#include "crypto.h" |
|
47 48#define MAX_ADDR_STR 60 49 50static struct tipc_media * const media_info_array[] = { 51 ð_media_info, 52#ifdef CONFIG_TIPC_MEDIA_IB 53 &ib_media_info, 54#endif --- 456 unchanged lines hidden (view full) --- 511 struct sk_buff *skb, 512 struct tipc_media_addr *dest) 513{ 514 struct tipc_msg *hdr = buf_msg(skb); 515 struct tipc_bearer *b; 516 517 rcu_read_lock(); 518 b = bearer_get(net, bearer_id); | 48 49#define MAX_ADDR_STR 60 50 51static struct tipc_media * const media_info_array[] = { 52 ð_media_info, 53#ifdef CONFIG_TIPC_MEDIA_IB 54 &ib_media_info, 55#endif --- 456 unchanged lines hidden (view full) --- 512 struct sk_buff *skb, 513 struct tipc_media_addr *dest) 514{ 515 struct tipc_msg *hdr = buf_msg(skb); 516 struct tipc_bearer *b; 517 518 rcu_read_lock(); 519 b = bearer_get(net, bearer_id); |
519 if (likely(b && (test_bit(0, &b->up) || msg_is_reset(hdr)))) 520 b->media->send_msg(net, skb, b, dest); 521 else | 520 if (likely(b && (test_bit(0, &b->up) || msg_is_reset(hdr)))) { 521#ifdef CONFIG_TIPC_CRYPTO 522 tipc_crypto_xmit(net, &skb, b, dest, NULL); 523 if (skb) 524#endif 525 b->media->send_msg(net, skb, b, dest); 526 } else { |
522 kfree_skb(skb); | 527 kfree_skb(skb); |
528 } |
|
523 rcu_read_unlock(); 524} 525 526/* tipc_bearer_xmit() -send buffer to destination over bearer 527 */ 528void tipc_bearer_xmit(struct net *net, u32 bearer_id, 529 struct sk_buff_head *xmitq, | 529 rcu_read_unlock(); 530} 531 532/* tipc_bearer_xmit() -send buffer to destination over bearer 533 */ 534void tipc_bearer_xmit(struct net *net, u32 bearer_id, 535 struct sk_buff_head *xmitq, |
530 struct tipc_media_addr *dst) | 536 struct tipc_media_addr *dst, 537 struct tipc_node *__dnode) |
531{ 532 struct tipc_bearer *b; 533 struct sk_buff *skb, *tmp; 534 535 if (skb_queue_empty(xmitq)) 536 return; 537 538 rcu_read_lock(); 539 b = bearer_get(net, bearer_id); 540 if (unlikely(!b)) 541 __skb_queue_purge(xmitq); 542 skb_queue_walk_safe(xmitq, skb, tmp) { 543 __skb_dequeue(xmitq); | 538{ 539 struct tipc_bearer *b; 540 struct sk_buff *skb, *tmp; 541 542 if (skb_queue_empty(xmitq)) 543 return; 544 545 rcu_read_lock(); 546 b = bearer_get(net, bearer_id); 547 if (unlikely(!b)) 548 __skb_queue_purge(xmitq); 549 skb_queue_walk_safe(xmitq, skb, tmp) { 550 __skb_dequeue(xmitq); |
544 if (likely(test_bit(0, &b->up) || msg_is_reset(buf_msg(skb)))) 545 b->media->send_msg(net, skb, b, dst); 546 else | 551 if (likely(test_bit(0, &b->up) || msg_is_reset(buf_msg(skb)))) { 552#ifdef CONFIG_TIPC_CRYPTO 553 tipc_crypto_xmit(net, &skb, b, dst, __dnode); 554 if (skb) 555#endif 556 b->media->send_msg(net, skb, b, dst); 557 } else { |
547 kfree_skb(skb); | 558 kfree_skb(skb); |
559 } |
|
548 } 549 rcu_read_unlock(); 550} 551 552/* tipc_bearer_bc_xmit() - broadcast buffers to all destinations 553 */ 554void tipc_bearer_bc_xmit(struct net *net, u32 bearer_id, 555 struct sk_buff_head *xmitq) 556{ 557 struct tipc_net *tn = tipc_net(net); | 560 } 561 rcu_read_unlock(); 562} 563 564/* tipc_bearer_bc_xmit() - broadcast buffers to all destinations 565 */ 566void tipc_bearer_bc_xmit(struct net *net, u32 bearer_id, 567 struct sk_buff_head *xmitq) 568{ 569 struct tipc_net *tn = tipc_net(net); |
570 struct tipc_media_addr *dst; |
|
558 int net_id = tn->net_id; 559 struct tipc_bearer *b; 560 struct sk_buff *skb, *tmp; 561 struct tipc_msg *hdr; 562 563 rcu_read_lock(); 564 b = bearer_get(net, bearer_id); 565 if (unlikely(!b || !test_bit(0, &b->up))) 566 __skb_queue_purge(xmitq); 567 skb_queue_walk_safe(xmitq, skb, tmp) { 568 hdr = buf_msg(skb); 569 msg_set_non_seq(hdr, 1); 570 msg_set_mc_netid(hdr, net_id); 571 __skb_dequeue(xmitq); | 571 int net_id = tn->net_id; 572 struct tipc_bearer *b; 573 struct sk_buff *skb, *tmp; 574 struct tipc_msg *hdr; 575 576 rcu_read_lock(); 577 b = bearer_get(net, bearer_id); 578 if (unlikely(!b || !test_bit(0, &b->up))) 579 __skb_queue_purge(xmitq); 580 skb_queue_walk_safe(xmitq, skb, tmp) { 581 hdr = buf_msg(skb); 582 msg_set_non_seq(hdr, 1); 583 msg_set_mc_netid(hdr, net_id); 584 __skb_dequeue(xmitq); |
572 b->media->send_msg(net, skb, b, &b->bcast_addr); | 585 dst = &b->bcast_addr; 586#ifdef CONFIG_TIPC_CRYPTO 587 tipc_crypto_xmit(net, &skb, b, dst, NULL); 588 if (skb) 589#endif 590 b->media->send_msg(net, skb, b, dst); |
573 } 574 rcu_read_unlock(); 575} 576 577/** 578 * tipc_l2_rcv_msg - handle incoming TIPC message from an interface 579 * @buf: the received packet 580 * @dev: the net device that the packet was received on --- 10 unchanged lines hidden (view full) --- 591 struct tipc_bearer *b; 592 593 rcu_read_lock(); 594 b = rcu_dereference(dev->tipc_ptr) ?: 595 rcu_dereference(orig_dev->tipc_ptr); 596 if (likely(b && test_bit(0, &b->up) && 597 (skb->pkt_type <= PACKET_MULTICAST))) { 598 skb_mark_not_on_list(skb); | 591 } 592 rcu_read_unlock(); 593} 594 595/** 596 * tipc_l2_rcv_msg - handle incoming TIPC message from an interface 597 * @buf: the received packet 598 * @dev: the net device that the packet was received on --- 10 unchanged lines hidden (view full) --- 609 struct tipc_bearer *b; 610 611 rcu_read_lock(); 612 b = rcu_dereference(dev->tipc_ptr) ?: 613 rcu_dereference(orig_dev->tipc_ptr); 614 if (likely(b && test_bit(0, &b->up) && 615 (skb->pkt_type <= PACKET_MULTICAST))) { 616 skb_mark_not_on_list(skb); |
617 TIPC_SKB_CB(skb)->flags = 0; |
|
599 tipc_rcv(dev_net(b->pt.dev), skb, b); 600 rcu_read_unlock(); 601 return NET_RX_SUCCESS; 602 } 603 rcu_read_unlock(); 604 kfree_skb(skb); 605 return NET_RX_DROP; 606} --- 678 unchanged lines hidden --- | 618 tipc_rcv(dev_net(b->pt.dev), skb, b); 619 rcu_read_unlock(); 620 return NET_RX_SUCCESS; 621 } 622 rcu_read_unlock(); 623 kfree_skb(skb); 624 return NET_RX_DROP; 625} --- 678 unchanged lines hidden --- |