MAX_H_SIZE, dest_domain);
        msg_set_non_seq(msg, 1);
        msg_set_node_sig(msg, tn->random);
+       msg_set_node_capabilities(msg, 0);
        msg_set_dest_domain(msg, dest_domain);
        msg_set_bc_netid(msg, tn->net_id);
        b_ptr->media->addr2msg(msg_media_addr(msg), &b_ptr->addr);
        u32 net_id = msg_bc_netid(msg);
        u32 mtyp = msg_type(msg);
        u32 signature = msg_node_sig(msg);
+       u16 caps = msg_node_capabilities(msg);
        bool addr_match = false;
        bool sign_match = false;
        bool link_up = false;
        if (!node)
                return;
        tipc_node_lock(node);
+       node->capabilities = caps;
        link = node->links[bearer->identity];
 
        /* Prepare to validate requesting node's signature and media address */
 
 #define DSC_REQ_MSG            0
 #define DSC_RESP_MSG           1
 
-
 /*
  * Word 1
  */
        msg_set_bits(m, 1, 0, 0xffff, n);
 }
 
+static inline u32 msg_node_capabilities(struct tipc_msg *m)
+{
+       return msg_bits(m, 1, 15, 0x1fff);
+}
+
+static inline void msg_set_node_capabilities(struct tipc_msg *m, u32 n)
+{
+       msg_set_bits(m, 1, 15, 0x1fff, n);
+}
+
 
 /*
  * Word 2
 
  * @list: links to adjacent nodes in sorted list of cluster's nodes
  * @working_links: number of working links to node (both active and standby)
  * @link_cnt: number of links to node
+ * @capabilities: bitmap, indicating peer node's functional capabilities
  * @signature: node instance identifier
  * @link_id: local and remote bearer ids of changing link, if any
  * @publ_list: list of publications
        struct tipc_node_bclink bclink;
        struct list_head list;
        int link_cnt;
-       int working_links;
+       u16 working_links;
+       u16 capabilities;
        u32 signature;
        u32 link_id;
        struct list_head publ_list;