osaf/services/saf/amf/amfd/comp.cc | 105 ++++++++++++++--------------- osaf/services/saf/amf/amfd/include/comp.h | 67 +++++++++--------- osaf/services/saf/amf/amfd/ndfsm.cc | 2 +- osaf/services/saf/amf/amfd/ndproc.cc | 8 +- osaf/services/saf/amf/amfd/su.cc | 20 ++-- 5 files changed, 101 insertions(+), 101 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/comp.cc b/osaf/services/saf/amf/amfd/comp.cc --- a/osaf/services/saf/amf/amfd/comp.cc +++ b/osaf/services/saf/amf/amfd/comp.cc @@ -113,101 +113,101 @@ AVD_COMP *avd_comp_new(const SaNameT *dn * @param comp * @param pres_state */ -void avd_comp_pres_state_set(AVD_COMP *comp, SaAmfPresenceStateT pres_state) +void AVD_COMP::avd_comp_pres_state_set(SaAmfPresenceStateT pres_state) { - AVD_AVND *node = comp->su->su_on_node; - SaAmfPresenceStateT old_state = comp->saAmfCompPresenceState; + AVD_AVND *node = su->su_on_node; + SaAmfPresenceStateT old_state = saAmfCompPresenceState; osafassert(pres_state <= SA_AMF_PRESENCE_TERMINATION_FAILED); - TRACE_ENTER2("'%s' %s => %s", comp->comp_info.name.value, - avd_pres_state_name[comp->saAmfCompPresenceState], + TRACE_ENTER2("'%s' %s => %s", comp_info.name.value, + avd_pres_state_name[saAmfCompPresenceState], avd_pres_state_name[pres_state]); - if ((comp->saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) && + if ((saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) && (pres_state == SA_AMF_PRESENCE_UNINSTANTIATED)){ - avd_alarm_clear(&comp->comp_info.name, + avd_alarm_clear(&comp_info.name, SA_AMF_NTFID_COMP_CLEANUP_FAILED, SA_NTF_SOFTWARE_ERROR); } - if ((comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED) && + if ((saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED) && (pres_state == SA_AMF_PRESENCE_UNINSTANTIATED)){ - avd_alarm_clear(&comp->comp_info.name, + avd_alarm_clear(&comp_info.name, SA_AMF_NTFID_COMP_INSTANTIATION_FAILED, SA_NTF_SOFTWARE_ERROR); } - comp->saAmfCompPresenceState = pres_state; - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompPresenceState", - SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompPresenceState); - m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, AVSV_CKPT_COMP_PRES_STATE); + saAmfCompPresenceState = pres_state; + avd_saImmOiRtObjectUpdate(&comp_info.name, "saAmfCompPresenceState", + SA_IMM_ATTR_SAUINT32T, &saAmfCompPresenceState); + m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this, AVSV_CKPT_COMP_PRES_STATE); - if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED) - avd_send_comp_inst_failed_alarm(&comp->comp_info.name, &node->name); - else if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) - avd_send_comp_clean_failed_alarm(&comp->comp_info.name, &node->name); + if (saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED) + avd_send_comp_inst_failed_alarm(&comp_info.name, &node->name); + else if (saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) + avd_send_comp_clean_failed_alarm(&comp_info.name, &node->name); - if ((comp->su->sg_of_su->saAmfSGAutoRepair == true) && + if ((su->sg_of_su->saAmfSGAutoRepair == true) && (node->saAmfNodeAutoRepair == true) && (((node->saAmfNodeFailfastOnTerminationFailure == true) && - (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED)) || + (saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED)) || ((node->saAmfNodeFailfastOnInstantiationFailure == true) && - (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED)))) { + (saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED)))) { saflog(LOG_NOTICE, amfSvcUsrName, "%s PresenceState %s => %s", - comp->comp_info.name.value, avd_pres_state_name[old_state], + comp_info.name.value, avd_pres_state_name[old_state], avd_pres_state_name[pres_state]); saflog(LOG_NOTICE, amfSvcUsrName, "Ordering reboot of '%s' as repair action", node->name.value); LOG_NO("Node Failfast for '%s' as '%s' enters Term/Inst Failed state", - node->name.value,comp->comp_info.name.value); + node->name.value,comp_info.name.value); avd_d2n_reboot_snd(node); } TRACE_LEAVE(); } -void avd_comp_oper_state_set(AVD_COMP *comp, SaAmfOperationalStateT oper_state) +void AVD_COMP::avd_comp_oper_state_set(SaAmfOperationalStateT oper_state) { osafassert(oper_state <= SA_AMF_OPERATIONAL_DISABLED); TRACE_ENTER2("'%s' %s => %s", - comp->comp_info.name.value, avd_oper_state_name[comp->saAmfCompOperState], avd_oper_state_name[oper_state]); + comp_info.name.value, avd_oper_state_name[saAmfCompOperState], avd_oper_state_name[oper_state]); - comp->saAmfCompOperState = oper_state; - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompOperState", - SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompOperState); - m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, AVSV_CKPT_COMP_OPER_STATE); + saAmfCompOperState = oper_state; + avd_saImmOiRtObjectUpdate(&comp_info.name, "saAmfCompOperState", + SA_IMM_ATTR_SAUINT32T, &saAmfCompOperState); + m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this, AVSV_CKPT_COMP_OPER_STATE); TRACE_LEAVE(); } -void avd_comp_readiness_state_set(AVD_COMP *comp, SaAmfReadinessStateT readiness_state) +void AVD_COMP::avd_comp_readiness_state_set(SaAmfReadinessStateT readiness_state) { - if (comp->saAmfCompReadinessState == readiness_state) + if (saAmfCompReadinessState == readiness_state) return; osafassert(readiness_state <= SA_AMF_READINESS_STOPPING); TRACE_ENTER2("'%s' %s => %s", - comp->comp_info.name.value, - avd_readiness_state_name[comp->saAmfCompReadinessState], avd_readiness_state_name[readiness_state]); - comp->saAmfCompReadinessState = readiness_state; - if (comp->su->get_surestart() == false) - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompReadinessState", - SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompReadinessState); - m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, AVSV_CKPT_COMP_READINESS_STATE); + comp_info.name.value, + avd_readiness_state_name[saAmfCompReadinessState], avd_readiness_state_name[readiness_state]); + saAmfCompReadinessState = readiness_state; + if (su->get_surestart() == false) + avd_saImmOiRtObjectUpdate(&comp_info.name, "saAmfCompReadinessState", + SA_IMM_ATTR_SAUINT32T, &saAmfCompReadinessState); + m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this, AVSV_CKPT_COMP_READINESS_STATE); TRACE_LEAVE(); } -void avd_comp_proxy_status_change(AVD_COMP *comp, SaAmfProxyStatusT proxy_status) +void AVD_COMP::avd_comp_proxy_status_change(SaAmfProxyStatusT proxy_status) { osafassert(proxy_status <= SA_AMF_PROXY_STATUS_PROXIED); - TRACE_ENTER2("'%s' ProxyStatus is now %s", comp->comp_info.name.value, avd_proxy_status_name[proxy_status]); + TRACE_ENTER2("'%s' ProxyStatus is now %s", comp_info.name.value, avd_proxy_status_name[proxy_status]); saflog(LOG_NOTICE, amfSvcUsrName, "%s ProxyStatus is now %s", - comp->comp_info.name.value, avd_proxy_status_name[proxy_status]); + comp_info.name.value, avd_proxy_status_name[proxy_status]); /* alarm & notifications */ if(proxy_status == SA_AMF_PROXY_STATUS_UNPROXIED) - avd_send_comp_proxy_status_unproxied_alarm(&comp->comp_info.name); + avd_send_comp_proxy_status_unproxied_alarm(&comp_info.name); else if(proxy_status == SA_AMF_PROXY_STATUS_PROXIED) - avd_send_comp_proxy_status_proxied_ntf(&comp->comp_info.name, + avd_send_comp_proxy_status_proxied_ntf(&comp_info.name, SA_AMF_PROXY_STATUS_UNPROXIED, SA_AMF_PROXY_STATUS_PROXIED); @@ -299,7 +299,7 @@ static void comp_add_to_model(AVD_COMP * if ((comp->su->su_on_node->node_state == AVD_AVND_STATE_PRESENT) || (comp->su->su_on_node->node_state == AVD_AVND_STATE_NO_CONFIG) || (comp->su->su_on_node->node_state == AVD_AVND_STATE_NCS_INIT)) - avd_comp_oper_state_set(comp, SA_AMF_OPERATIONAL_ENABLED); + comp->avd_comp_oper_state_set(SA_AMF_OPERATIONAL_ENABLED); /* Set runtime cached attributes. */ avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompReadinessState", @@ -812,7 +812,7 @@ static void comp_admin_op_cb(SaImmOiHand comp->admin_pend_cbk.invocation = invocation; if ((comp->comp_info.comp_restart == true) && - (is_comp_assigned_any_csi(comp) == true)) { + (comp->is_comp_assigned_any_csi() == true)) { /* Atleast one non-restartable (saAmfCompDisableRestart or saAmfCtDefDisableRestart is true) comp is assigned. First gracefully switch-over its assignments to comp in @@ -1726,8 +1726,8 @@ void avd_comp_constructor(void) * @param comp * @return */ -bool comp_is_preinstantiable(const AVD_COMP *comp) { - AVSV_COMP_TYPE_VAL category = comp->comp_info.category; +bool AVD_COMP::comp_is_preinstantiable() const { + AVSV_COMP_TYPE_VAL category = comp_info.category; return ((category == AVSV_COMP_TYPE_SA_AWARE) || (category == AVSV_COMP_TYPE_PROXIED_LOCAL_PRE_INSTANTIABLE) || (category == AVSV_COMP_TYPE_EXTERNAL_PRE_INSTANTIABLE)); @@ -1742,12 +1742,11 @@ bool comp_is_preinstantiable(const AVD_C * @return true/false. */ -bool is_comp_assigned_any_csi(AVD_COMP *comp) -{ - for (const auto& si : comp->su->sg_of_su->list_of_si) { +bool AVD_COMP::is_comp_assigned_any_csi() const { + for (const auto& si : su->sg_of_su->list_of_si) { for (AVD_CSI *csi = si->list_of_csi; csi; csi = csi->si_list_of_csi_next) { for (AVD_COMP_CSI_REL *compcsi = csi->list_compcsi; compcsi; compcsi = compcsi->csi_csicomp_next) { - if (compcsi->comp == comp) + if (compcsi->comp == this) return true; } } @@ -1761,10 +1760,10 @@ bool is_comp_assigned_any_csi(AVD_COMP * * @param ptr to component(AVD_COMP). * @Return SA_AIS_OK/SA_AIS_ERR_TRY_AGAIN. */ -SaAisErrorT check_comp_stability(const AVD_COMP *comp) +SaAisErrorT AVD_COMP::check_comp_stability() const { - if (comp->admin_pend_cbk.invocation != 0) { - LOG_NO("Component undergoing admin operation '%s'", comp->comp_info.name.value); + if (admin_pend_cbk.invocation != 0) { + LOG_NO("Component undergoing admin operation '%s'", comp_info.name.value); return SA_AIS_ERR_TRY_AGAIN; } return SA_AIS_OK; diff --git a/osaf/services/saf/amf/amfd/include/comp.h b/osaf/services/saf/amf/amfd/include/comp.h --- a/osaf/services/saf/amf/amfd/include/comp.h +++ b/osaf/services/saf/amf/amfd/include/comp.h @@ -59,7 +59,40 @@ class AVD_COMP { public: AVD_COMP(); explicit AVD_COMP(const SaNameT* dn ); - + +/** + * Set the presence state of the specified component, log, update IMM & check point to peer + * @param comp + * @param pres_state + */ +void avd_comp_pres_state_set(SaAmfPresenceStateT pres_state); + +/** + * Set the operational state of the specified component, log, update IMM & check point to peer + * @param comp + * @param oper_state + */ +void avd_comp_oper_state_set(SaAmfOperationalStateT oper_state); + +/** + * Set the readindess state of the specified component, log, update IMM & check point to peer + * @param comp + * @param readiness_state + */ +void avd_comp_readiness_state_set(SaAmfReadinessStateT readiness_state); + +/** + * Information regarding change of proxy status of the specified component, + * log, update IMM & check point to peer + * @param comp + * @param proxy_status + */ +void avd_comp_proxy_status_change(SaAmfProxyStatusT proxy_status); + +bool comp_is_preinstantiable() const; +bool is_comp_assigned_any_csi() const; +SaAisErrorT check_comp_stability() const; + SaNameT saAmfCompType; /* Detailed as in data structure definition */ @@ -212,35 +245,6 @@ extern AmfDb<std::string, AVD_CTCS_TYPE> extern AVD_COMP_GLOBALATTR avd_comp_global_attrs; -/** - * Set the presence state of the specified component, log, update IMM & check point to peer - * @param comp - * @param pres_state - */ -extern void avd_comp_pres_state_set(AVD_COMP *comp, SaAmfPresenceStateT pres_state); - -/** - * Set the operational state of the specified component, log, update IMM & check point to peer - * @param comp - * @param oper_state - */ -extern void avd_comp_oper_state_set(AVD_COMP *comp, SaAmfOperationalStateT oper_state); - -/** - * Set the readindess state of the specified component, log, update IMM & check point to peer - * @param comp - * @param readiness_state - */ -extern void avd_comp_readiness_state_set(AVD_COMP *comp, SaAmfReadinessStateT readiness_state); - -/** - * Information regarding change of proxy status of the specified component, - * log, update IMM & check point to peer - * @param comp - * @param proxy_status - */ -extern void avd_comp_proxy_status_change(AVD_COMP *comp, SaAmfProxyStatusT proxy_status); - extern void avd_comp_db_add(AVD_COMP *comp); extern AVD_COMP *avd_comp_new(const SaNameT *dn); @@ -271,8 +275,5 @@ extern AVD_COMPCS_TYPE *avd_compcstype_g extern AVD_COMPCS_TYPE * avd_compcstype_find_match(const SaNameT *csi, const AVD_COMP *comp); extern void avd_compcstype_constructor(void); extern AVD_COMP *avd_comp_get_or_create(const SaNameT *dn); -bool comp_is_preinstantiable(const AVD_COMP *comp); -extern bool is_comp_assigned_any_csi(AVD_COMP *comp); -extern SaAisErrorT check_comp_stability(const AVD_COMP*); extern AVD_CTCS_TYPE *get_ctcstype(const SaNameT *comptype_name, const SaNameT *cstype_name); #endif diff --git a/osaf/services/saf/amf/amfd/ndfsm.cc b/osaf/services/saf/amf/amfd/ndfsm.cc --- a/osaf/services/saf/amf/amfd/ndfsm.cc +++ b/osaf/services/saf/amf/amfd/ndfsm.cc @@ -207,7 +207,7 @@ void avd_nd_ncs_su_assigned(AVD_CL_CB *c for (const auto& su : avnd->list_of_su) { su->set_oper_state(SA_AMF_OPERATIONAL_ENABLED); std::for_each (su->list_of_comp.begin(), su->list_of_comp.end(), - [] (AVD_COMP *comp) {avd_comp_oper_state_set(comp, SA_AMF_OPERATIONAL_ENABLED);}); + [] (AVD_COMP *comp) {comp->avd_comp_oper_state_set(SA_AMF_OPERATIONAL_ENABLED);}); } /* We can now set the LEDS */ avd_snd_set_leds_msg(cb, avnd); diff --git a/osaf/services/saf/amf/amfd/ndproc.cc b/osaf/services/saf/amf/amfd/ndproc.cc --- a/osaf/services/saf/amf/amfd/ndproc.cc +++ b/osaf/services/saf/amf/amfd/ndproc.cc @@ -765,7 +765,7 @@ void avd_data_update_req_evh(AVD_CL_CB * SaAmfReadinessStateT saAmfCompReadinessState; l_val = *((uint32_t *)&n2d_msg->msg_info.n2d_data_req.param_info.value[0]); - avd_comp_oper_state_set(comp, static_cast<SaAmfOperationalStateT>(ntohl(l_val))); + comp->avd_comp_oper_state_set(static_cast<SaAmfOperationalStateT>(ntohl(l_val))); /* We need to update saAmfCompReadinessState */ if ((comp->su->saAmfSuReadinessState == SA_AMF_READINESS_IN_SERVICE) && @@ -777,7 +777,7 @@ void avd_data_update_req_evh(AVD_CL_CB * } else saAmfCompReadinessState = SA_AMF_READINESS_OUT_OF_SERVICE; - avd_comp_readiness_state_set(comp, saAmfCompReadinessState); + comp->avd_comp_readiness_state_set(saAmfCompReadinessState); } else { /* log error that a the value len is invalid */ LOG_ER("%s:%u: %u", __FILE__, __LINE__, n2d_msg->msg_info.n2d_data_req.param_info. @@ -792,7 +792,7 @@ void avd_data_update_req_evh(AVD_CL_CB * adminstrative operation invocation on the component */ if (comp->admin_pend_cbk.invocation != 0) comp_admin_op_report_to_imm(comp, static_cast<SaAmfPresenceStateT>(l_val)); - avd_comp_pres_state_set(comp, static_cast<SaAmfPresenceStateT>(l_val)); + comp->avd_comp_pres_state_set(static_cast<SaAmfPresenceStateT>(l_val)); if ((comp->su->get_admin_op_id() == SA_AMF_ADMIN_RESTART) && (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATED) && @@ -838,7 +838,7 @@ void avd_data_update_req_evh(AVD_CL_CB * TRACE("comp proxy status"); if (n2d_msg->msg_info.n2d_data_req.param_info.value_len == sizeof(uint32_t)) { l_val = ntohl(*((uint32_t *)&n2d_msg->msg_info.n2d_data_req.param_info.value[0])); - avd_comp_proxy_status_change(comp, static_cast<SaAmfProxyStatusT>(l_val)); + comp->avd_comp_proxy_status_change(static_cast<SaAmfProxyStatusT>(l_val)); } else { /* log error that a the value len is invalid */ LOG_ER("%s:%u: %u", __FILE__, __LINE__, n2d_msg->msg_info.n2d_data_req.param_info. diff --git a/osaf/services/saf/amf/amfd/su.cc b/osaf/services/saf/amf/amfd/su.cc --- a/osaf/services/saf/amf/amfd/su.cc +++ b/osaf/services/saf/amf/amfd/su.cc @@ -134,10 +134,10 @@ void AVD_SU::remove_comp(AVD_COMP *comp) bool curr_preinst_value = saAmfSUPreInstantiable; // check if preinst possibly is still true - if (comp_is_preinstantiable(comp) == true) { + if (comp->comp_is_preinstantiable() == true) { curr_preinst_value = false; for (const auto& i_comp : list_of_comp) { - if ((comp_is_preinstantiable(i_comp) == true) && (i_comp != comp)) { + if ((i_comp->comp_is_preinstantiable() == true) && (i_comp != comp)) { curr_preinst_value = true; break; } @@ -168,7 +168,7 @@ void AVD_SU::add_comp(AVD_COMP *comp) { }); /* Verify if the SUs preinstan value need to be changed */ - if (comp_is_preinstantiable(comp) == true) { + if (comp->comp_is_preinstantiable() == true) { set_saAmfSUPreInstantiable(true); } } @@ -805,7 +805,7 @@ void AVD_SU::set_readiness_state(SaAmfRe } else saAmfCompReadinessState = SA_AMF_READINESS_OUT_OF_SERVICE; - avd_comp_readiness_state_set(comp, saAmfCompReadinessState); + comp->avd_comp_readiness_state_set(saAmfCompReadinessState); } TRACE_LEAVE(); @@ -2127,7 +2127,7 @@ AVD_COMP *AVD_SU::find_unassigned_comp_t bool npi_is_assigned = false; AVD_COMP_TYPE *comptype = comptype_db->find(Amf::to_string(&l_comp->saAmfCompType)); osafassert(comptype); - if ((comptype->saAmfCtCompCategory == SA_AMF_COMP_LOCAL) && is_comp_assigned_any_csi(l_comp)) + if ((comptype->saAmfCtCompCategory == SA_AMF_COMP_LOCAL) && l_comp->is_comp_assigned_any_csi()) npi_is_assigned = true; if ((l_comp->assigned() == false) && (npi_is_assigned == false)) { @@ -2154,9 +2154,9 @@ void AVD_SU::disable_comps(SaAisErrorT r for (const auto& comp : list_of_comp) { comp->curr_num_csi_actv = 0; comp->curr_num_csi_stdby = 0; - avd_comp_oper_state_set(comp, SA_AMF_OPERATIONAL_DISABLED); + comp->avd_comp_oper_state_set(SA_AMF_OPERATIONAL_DISABLED); if (comp->saAmfCompPresenceState != SA_AMF_PRESENCE_TERMINATION_FAILED) - avd_comp_pres_state_set(comp, SA_AMF_PRESENCE_UNINSTANTIATED); + comp->avd_comp_pres_state_set(SA_AMF_PRESENCE_UNINSTANTIATED); /* Mark a term_failed component uninstantiated when node is rebooted. @@ -2166,7 +2166,7 @@ void AVD_SU::disable_comps(SaAisErrorT r */ if ((comp->saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) && (su_on_node->node_state == AVD_AVND_STATE_ABSENT)) { - avd_comp_pres_state_set(comp, SA_AMF_PRESENCE_UNINSTANTIATED); + comp->avd_comp_pres_state_set(SA_AMF_PRESENCE_UNINSTANTIATED); } comp->saAmfCompRestartCount = 0; comp_complete_admin_op(comp, result); @@ -2278,7 +2278,7 @@ SaAisErrorT AVD_SU::check_su_stability() goto done; } for (const auto& comp : list_of_comp) { - rc = check_comp_stability(comp); + rc = comp->check_comp_stability(); if (rc != SA_AIS_OK) goto done; } @@ -2334,7 +2334,7 @@ bool AVD_SU::is_any_non_restartable_comp { for (const auto& comp : list_of_comp) { if ((comp->comp_info.comp_restart == true) && - (is_comp_assigned_any_csi(comp) == true)) + (comp->is_comp_assigned_any_csi() == true)) return true; } return false; ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel