#include "net.h"
 #include "socket.h"
 #include "bcast.h"
+#include "node.h"
 
 #include <linux/module.h>
 
        tn->node_addr = 0;
        tn->trial_addr = 0;
        tn->addr_trial_end = 0;
+       tn->capabilities = TIPC_NODE_CAPABILITIES;
        memset(tn->node_id, 0, sizeof(tn->node_id));
        memset(tn->node_id_string, 0, sizeof(tn->node_id_string));
        tn->mon_threshold = TIPC_DEF_MON_THRESHOLD;
 
        /* Topology subscription server */
        struct tipc_topsrv *topsrv;
        atomic_t subscription_count;
+
+       /* Cluster capabilities */
+       u16 capabilities;
 };
 
 static inline struct tipc_net *tipc_net(struct net *net)
 
                                tipc_link_update_caps(l, capabilities);
                }
                write_unlock_bh(&n->lock);
+               /* Calculate cluster capabilities */
+               tn->capabilities = TIPC_NODE_CAPABILITIES;
+               list_for_each_entry_rcu(temp_node, &tn->node_list, list) {
+                       tn->capabilities &= temp_node->capabilities;
+               }
                goto exit;
        }
        n = kzalloc(sizeof(*n), GFP_ATOMIC);
                        break;
        }
        list_add_tail_rcu(&n->list, &temp_node->list);
+       /* Calculate cluster capabilities */
+       tn->capabilities = TIPC_NODE_CAPABILITIES;
+       list_for_each_entry_rcu(temp_node, &tn->node_list, list) {
+               tn->capabilities &= temp_node->capabilities;
+       }
        trace_tipc_node_create(n, true, " ");
 exit:
        spin_unlock_bh(&tn->node_list_lock);
  */
 static bool tipc_node_cleanup(struct tipc_node *peer)
 {
+       struct tipc_node *temp_node;
        struct tipc_net *tn = tipc_net(peer->net);
        bool deleted = false;
 
                deleted = true;
        }
        tipc_node_write_unlock(peer);
+
+       /* Calculate cluster capabilities */
+       tn->capabilities = TIPC_NODE_CAPABILITIES;
+       list_for_each_entry_rcu(temp_node, &tn->node_list, list) {
+               tn->capabilities &= temp_node->capabilities;
+       }
+
        spin_unlock_bh(&tn->node_list_lock);
        return deleted;
 }
 
        TIPC_BLOCK_FLOWCTL    = (1 << 3),
        TIPC_BCAST_RCAST      = (1 << 4),
        TIPC_NODE_ID128       = (1 << 5),
-       TIPC_LINK_PROTO_SEQNO = (1 << 6)
+       TIPC_LINK_PROTO_SEQNO = (1 << 6),
+       TIPC_MCAST_RBCTL      = (1 << 7)
 };
 
 #define TIPC_NODE_CAPABILITIES (TIPC_SYN_BIT           |  \
                                TIPC_BCAST_RCAST       |   \
                                TIPC_BLOCK_FLOWCTL     |   \
                                TIPC_NODE_ID128        |   \
-                               TIPC_LINK_PROTO_SEQNO)
+                               TIPC_LINK_PROTO_SEQNO  |   \
+                               TIPC_MCAST_RBCTL)
 #define INVALID_BEARER_ID -1
 
 void tipc_node_stop(struct net *net);