diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/bcast.c | 13 |
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); |