aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/bcast.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c
index 8d298526a5c1..bead28b5efff 100644
--- a/net/tipc/bcast.c
+++ b/net/tipc/bcast.c
@@ -39,6 +39,7 @@
39#include "link.h" 39#include "link.h"
40#include "port.h" 40#include "port.h"
41#include "bcast.h" 41#include "bcast.h"
42#include "name_distr.h"
42 43
43#define MAX_PKT_DEFAULT_MCAST 1500 /* bcast link max packet size (fixed) */ 44#define MAX_PKT_DEFAULT_MCAST 1500 /* bcast link max packet size (fixed) */
44 45
@@ -445,6 +446,8 @@ void tipc_bclink_recv_pkt(struct sk_buff *buf)
445 goto unlock; 446 goto unlock;
446 447
447 if (unlikely(msg_user(msg) == BCAST_PROTOCOL)) { 448 if (unlikely(msg_user(msg) == BCAST_PROTOCOL)) {
449 if (msg_type(msg) != STATE_MSG)
450 goto unlock;
448 if (msg_destnode(msg) == tipc_own_addr) { 451 if (msg_destnode(msg) == tipc_own_addr) {
449 tipc_bclink_acknowledge(node, msg_bcast_ack(msg)); 452 tipc_bclink_acknowledge(node, msg_bcast_ack(msg));
450 tipc_node_unlock(node); 453 tipc_node_unlock(node);
@@ -480,7 +483,10 @@ receive:
480 } 483 }
481 if (likely(msg_isdata(msg))) { 484 if (likely(msg_isdata(msg))) {
482 tipc_node_unlock(node); 485 tipc_node_unlock(node);
483 tipc_port_recv_mcast(buf, NULL); 486 if (likely(msg_mcast(msg)))
487 tipc_port_recv_mcast(buf, NULL);
488 else
489 buf_discard(buf);
484 } else if (msg_user(msg) == MSG_BUNDLER) { 490 } else if (msg_user(msg) == MSG_BUNDLER) {
485 bcl->stats.recv_bundles++; 491 bcl->stats.recv_bundles++;
486 bcl->stats.recv_bundled += msg_msgcnt(msg); 492 bcl->stats.recv_bundled += msg_msgcnt(msg);
@@ -493,9 +499,12 @@ receive:
493 bcl->stats.recv_fragmented++; 499 bcl->stats.recv_fragmented++;
494 tipc_node_unlock(node); 500 tipc_node_unlock(node);
495 tipc_net_route_msg(buf); 501 tipc_net_route_msg(buf);
502 } else if (msg_user(msg) == NAME_DISTRIBUTOR) {
503 tipc_node_unlock(node);
504 tipc_named_recv(buf);
496 } else { 505 } else {
497 tipc_node_unlock(node); 506 tipc_node_unlock(node);
498 tipc_net_route_msg(buf); 507 buf_discard(buf);
499 } 508 }
500 buf = NULL; 509 buf = NULL;
501 tipc_node_lock(node); 510 tipc_node_lock(node);