I saw that it was also semi-hard-coded in /etc/opensaf/fmd.conf, but when looking a bit closer I notice that this configuration is not actually used by FM... :-)
Ok, if we feel adventurous we could give it a try. The only known place where node_id has been hard-coded is SMF, which unfortunately is very much involved in upgrades. But the good thing is that thanks to ticket [#79], SMF will automatically discover the node_id of system controllers in OpenSAF 5.0. Thus, only pre-5.0 versions of SMF are problematic. It /might/ work, so let's try it! regards, Anders Widell On 03/29/2016 05:44 PM, Mathivanan Naickan Palanivelu wrote: > I guess we have deferred this (from moving to a direct mapping of slot_id to > the node_id) for a long time now. > I think SMF's dependency on fixed ids can (and must) be managed once when we > move to multiple standbys. > > Iam thinking where else we could get stuck during upgrade!? > > Mathi. > > > ----- anders.wid...@ericsson.com wrote: > >> It is "almost flat" in the proposed patches: the user only needs to >> configure slot_id on each node, in the range [1, 4095]. subslot_id >> should not be configured by the user. When using TIPC, the TIPC >> address >> of each node will be "1.1.slot_id". So the only non-flat thing is >> node_id, which is not configured by the user. We could have a direct >> mapping from slot_id to node_id (i.e. set node_id to the same value as >> >> slot_id), but I am worried about what will happen during an upgrade. >> Old >> nodes will translate e.g. slot_id 0x1 to node_id 0x2010f. New nodes >> will >> translate slot_id 0x1 to node_id 0x1. To make things worse, there are >> >> some places in OpenSAF that have been hard-coded to expect the two >> system controllers to have node_id 0x2010f and 0x2020f, respectively. >> >> Maybe we can make it work somehow, but I anticipate there could be >> problems during an upgrade. >> >> regards, >> Anders Widell >> >> On 03/29/2016 10:29 AM, Mathivanan Naickan Palanivelu wrote: >>> We should consider removing subslots entirely and go for a truly >> flat addressing scheme, if that is backward compatible. >>> There are other standard ways(PLM HE dependency) of provisioning AMC >> subslots kind of hardware. >>> Mathi. >>> >>>> -----Original Message----- >>>> From: Anders Widell [mailto:anders.wid...@ericsson.com] >>>> Sent: Friday, March 18, 2016 9:38 PM >>>> To: Venkata Mahesh Alla >>>> Cc: opensaf-devel@lists.sourceforge.net >>>> Subject: [devel] [PATCH 1 of 1] mds: Support up to 4095 nodes >> [#1613] >>>> osaf/libs/core/mds/include/mds_dt.h | 26 >> +++++++++++++++++--------- >>>> osaf/libs/core/mds/mds_c_db.c | 26 >> ++++++++++++-------------- >>>> 2 files changed, 29 insertions(+), 23 deletions(-) >>>> >>>> >>>> Support up to 4095 nodes in the flat addressing scheme for TIPC, by >> encoding >>>> the slot ID in the lower eight bits and the ones' complement of the >> subslot ID >>>> in bits 8 to 11 in the node identifier of the TIPC address. The >> reason for taking >>>> the ones' complement of the subslot ID is backwards compatibility >> with >>>> existing installations, so that this enhancement can be upgraded >> in-service. >>>> diff --git a/osaf/libs/core/mds/include/mds_dt.h >>>> b/osaf/libs/core/mds/include/mds_dt.h >>>> --- a/osaf/libs/core/mds/include/mds_dt.h >>>> +++ b/osaf/libs/core/mds/include/mds_dt.h >>>> @@ -237,7 +237,8 @@ bool mdtm_mailbox_mbx_cleanup(NCSCONTEXT >>>> >>>> /* >>>> * In the default flat addressing scheme, TIPC node addresses >> looks like >>>> - * 1.1.1, 1.1.2 etc. >>>> + * 1.1.1, 1.1.2 etc. The ones' complement of the subslot ID is >> shifted >>>> + 8 >>>> + * bits up and the slot ID is added in the 8 LSB. >>>> * In the non flat (old/legacy) addressing scheme TIPC addresses >> looks like >>>> * 1.1.31, 1.1.47. The slot ID is shifted 4 bits up and subslot >> ID is added >>>> * in the 4 LSB. >>>> @@ -248,13 +249,20 @@ bool mdtm_mailbox_mbx_cleanup(NCSCONTEXT >>>> >>>> #if (MDS_USE_SUBSLOT_ID == 0) >>>> #define MDS_TIPC_NODE_ID_MIN 0x01001001 >>>> -#define MDS_TIPC_NODE_ID_MAX 0x010010ff >>>> -#define MDS_NCS_NODE_ID_MIN (MDS_NCS_CHASSIS_ID|0x0000010f) >>>> -#define MDS_NCS_NODE_ID_MAX (MDS_NCS_CHASSIS_ID|0x0000ff0f) >>>> -#define m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(node) \ >>>> - (NODE_ID)( MDS_NCS_CHASSIS_ID | (((node)&0xff)<<8) | >> (0xf)) >>>> -#define m_MDS_GET_TIPC_NODE_ID_FROM_NCS_NODE_ID(node) \ >>>> - (NODE_ID)( MDS_TIPC_COMMON_ID | (((node)&0xff00)>>8) ) >>>> +#define MDS_TIPC_NODE_ID_MAX 0x01001fff >>>> +static inline NODE_ID >>>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(NODE_ID node) { >>>> + return MDS_NCS_CHASSIS_ID | ((node & 0xff) << 8) | (((node >> & >>>> +0xf00) >> 8) ^ 0xf); } static inline NODE_ID >>>> +m_MDS_GET_TIPC_NODE_ID_FROM_NCS_NODE_ID(NODE_ID node) { >>>> + return MDS_TIPC_COMMON_ID | ((node & 0xff00) >> 8) | >> (((node & >>>> +0xf) ^ 0xf) << 8); } static inline uint32_t >>>> +m_MDS_CHECK_TIPC_NODE_ID_RANGE(NODE_ID node) { >>>> + return node < MDS_TIPC_NODE_ID_MIN || node > >>>> MDS_TIPC_NODE_ID_MAX ? >>>> + NCSCC_RC_FAILURE : NCSCC_RC_SUCCESS; >>>> +} >>>> +static inline uint32_t m_MDS_CHECK_NCS_NODE_ID_RANGE(NODE_ID >>>> node) { >>>> + return >>>> +m_MDS_CHECK_TIPC_NODE_ID_RANGE(m_MDS_GET_TIPC_NODE_ID_FR >>>> OM_NCS_NODE_ID( >>>> +node)); >>>> +} >>>> #else >>>> #define MDS_TIPC_NODE_ID_MIN 0x01001001 >>>> #define MDS_TIPC_NODE_ID_MAX 0x0100110f >>>> @@ -264,10 +272,10 @@ bool mdtm_mailbox_mbx_cleanup(NCSCONTEXT >>>> (NODE_ID)( MDS_NCS_CHASSIS_ID | ((node)&0xf) | >>>> (((node)&0xff0)<<4)) #define >>>> m_MDS_GET_TIPC_NODE_ID_FROM_NCS_NODE_ID(node) \ >>>> (NODE_ID)( MDS_TIPC_COMMON_ID | (((node)&0xff00)>>4) | >>>> ((node)&0xf) ) -#endif >>>> >>>> #define m_MDS_CHECK_TIPC_NODE_ID_RANGE(node) >>>> (((((node)<MDS_TIPC_NODE_ID_MIN)||((node)>MDS_TIPC_NODE_ID_MA >>>> X))?NCSCC_RC_FAILURE:NCSCC_RC_SUCCESS)) >>>> #define m_MDS_CHECK_NCS_NODE_ID_RANGE(node) >>>> (((((node)<MDS_NCS_NODE_ID_MIN)||((node)>MDS_NCS_NODE_ID_MA >>>> X))?NCSCC_RC_FAILURE:NCSCC_RC_SUCCESS)) >>>> +#endif >>>> >>>> /* ******************************************** */ >>>> /* ******************************************** */ diff --git >>>> a/osaf/libs/core/mds/mds_c_db.c b/osaf/libs/core/mds/mds_c_db.c >>>> --- a/osaf/libs/core/mds/mds_c_db.c >>>> +++ b/osaf/libs/core/mds/mds_c_db.c >>>> @@ -37,14 +37,13 @@ void get_adest_details(MDS_DEST adest, c >>>> char *token, *saveptr; >>>> struct stat s; >>>> uint32_t process_id = 0; >>>> - NCS_PHY_SLOT_ID phy_slot; >>>> - NCS_SUB_SLOT_ID sub_slot; >>>> + SlotSubslotId slot_subslot_id; >>>> char pid_path[1024]; >>>> char *pid_name = NULL; >>>> char process_name[MDS_MAX_PROCESS_NAME_LEN]; >>>> bool remote = false; >>>> >>>> - >>>> m_NCS_GET_PHYINFO_FROM_NODE_ID(m_NCS_NODE_ID_FROM_ >>>> MDS_DEST(adest), NULL, &phy_slot, &sub_slot); >>>> + slot_subslot_id = >>>> +GetSlotSubslotIdFromNodeId(m_NCS_NODE_ID_FROM_MDS_DEST(adest) >>>> ); >>>> >>>> if (!tipc_mode_enabled) { >>>> process_id = >>>> m_MDS_GET_PROCESS_ID_FROM_ADEST(adest); >>>> @@ -111,11 +110,11 @@ void get_adest_details(MDS_DEST adest, c >>>> } >>>> >>>> if (remote == true) >>>> - snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<rem_nodeid[%d]:%s>", >>>> - phy_slot, process_name); >>>> + snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<rem_nodeid[%u]:%s>", >>>> + slot_subslot_id, process_name); >>>> else >>>> - snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<nodeid[%d]:%s>", >>>> - phy_slot, process_name); >>>> + snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<nodeid[%u]:%s>", >>>> + slot_subslot_id, process_name); >>>> >>>> m_MDS_LOG_DBG("MDS:DB: adest_details: %s ", adest_details); >>>> m_MDS_LEAVE(); >>>> @@ -129,8 +128,7 @@ void get_adest_details(MDS_DEST adest, c void >>>> get_subtn_adest_details(MDS_PWE_HDL pwe_hdl, MDS_SVC_ID svc_id, >>>> MDS_DEST adest, char* adest_details) { >>>> uint32_t process_id = 0; >>>> - NCS_PHY_SLOT_ID phy_slot; >>>> - NCS_SUB_SLOT_ID sub_slot; >>>> + SlotSubslotId slot_subslot_id; >>>> char process_name[MDS_MAX_PROCESS_NAME_LEN]; >>>> bool remote = false; >>>> MDS_SVC_INFO *svc_info = NULL; >>>> @@ -139,7 +137,7 @@ void get_subtn_adest_details(MDS_PWE_HDL >>>> char *pid_name = NULL; >>>> struct stat s; >>>> >>>> - >>>> m_NCS_GET_PHYINFO_FROM_NODE_ID(m_NCS_NODE_ID_FROM_ >>>> MDS_DEST(adest), NULL, &phy_slot, &sub_slot); >>>> + slot_subslot_id = >>>> +GetSlotSubslotIdFromNodeId(m_NCS_NODE_ID_FROM_MDS_DEST(adest) >>>> ); >>>> process_id = m_MDS_GET_PROCESS_ID_FROM_ADEST(adest); >>>> >>>> if (NCSCC_RC_SUCCESS == mds_mcm_check_intranode(adest)) { >>>> @@ -185,11 +183,11 @@ void get_subtn_adest_details(MDS_PWE_HDL >>>> } >>>> >>>> if (remote == true) >>>> - snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<rem_node[%d]:%s>", >>>> - phy_slot, process_name); >>>> + snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<rem_node[%u]:%s>", >>>> + slot_subslot_id, process_name); >>>> else >>>> - snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<node[%d]:%s>", >>>> - phy_slot, process_name); >>>> + snprintf(adest_details, MDS_MAX_PROCESS_NAME_LEN, >>>> "<node[%u]:%s>", >>>> + slot_subslot_id, process_name); >>>> done: >>>> m_MDS_LOG_DBG("MDS:DB: adest_details: %s ", adest_details); >>>> m_MDS_LEAVE(); >>>> >>>> >> ------------------------------------------------------------------------------ >>>> Transform Data into Opportunity. >>>> Accelerate data analysis in your applications with Intel Data >> Analytics >>>> Acceleration Library. >>>> Click to learn more. >>>> http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140 >>>> _______________________________________________ >>>> Opensaf-devel mailing list >>>> Opensaf-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more. http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel