Static CmsRet updateGponServiceStatus(const OmciServiceMsgBody *info, InstanceIdStack *parentIidStack)
{
CmsRet = CMSRET_INTERNAL_ERROR;
int pbits = -1, vlan Id = -1;
UBOOL8 found = false;
InstanceIdStack iidStack=EMPTY_INSTANCE_ID_STACK;
WanIpConnObject *ipConn=NULL;
WanPppConnObject *pppConn=NULL;
pbits = info->serviceParams.pbits;
vlanId = info->serviceParams.vlanId;
while (cmsObj_getNextInSubreeFlags(MDMOID_WAN_IP_CONN, parentIidStack, &iidStack, OGF_NO_VALUE_UPDATE, (void **) &&ipConn) == CMSRET_SUCCESS)
{
#ifndef PRODUCT_PL_BL
/* take care of don't care pbits and vlanId filter */
if ( pbits == -1 && vlanId != -1)
{
found = (ipConn->vlanMux8021p == pbits &&
ipConn->vlanMuxID == vlanId);
}
else if ( pbits == -1 && vlanId == -1)
{
found = TRUE;
}
else if ( pbits == -1)
{
found = (ipConn->vlanMuxID == vlanId);
}
else if ( vlanId == -1)
{
found = ( ipConn->vlanMux8021p == pbits);
}
#else
if (pbits != 8 && vlanId != 4096)
{
found = ( ipConn->vlanMux8021p == pbits &&
ipConn->vlanMuxID ==vlanId);
}
else if ( pbits == 8 && vlanId == 4096)
{
found = TRUE;
}
else if ( pbits == 8)
{
found = ( ipConn->vlanMuxID == vlanId);
}
else if (vlanId == 4096)
{
found = (ipConn->vlanMux8021p == pbits);
}
#endif
if (found == TRUE)
{
cmsLog_debug("WanIpConnObject, ifName = %s, strStatus = %s, status = %d, pbits = %d, vlanId = %d",
ipConn->ifName, ipConn->connectionStatus, info->serviceParams.serviceStatus, pbits, vlanId);
if ( info->serviceParams.serviceStatus == TRUE)
{
if ( !cmsUtl_strcmp(ipConn->connectionStatus, MDMVS_UNCONFIGURED) ||
!cmsUtl_strcmp(ipConn->connectionStatus, MDMVS_DISCONNECTED))
{
cmsLog_debug("Activate gpon interface %s and send link up message", ipConn->ifName);
updateSingleWanConnStatusLocked(&&iidStack, (void *)ipConn, info->serviceParams.serviceStatus);
}
}
else
{
if ( !cmsUtl_strcmp(ipConn->connectionStatus, MDMVS_CONNECTING)
|| !cmsUtl_strcmp(ipConn->connectionStatus, MDMVS_CONNECTED))
{
cmsLog_debug("Deactivate gpon interface %s and send link down message", ipConn->ifName);
sendStatusMsgToSmd(CMS_MSG_WAN_LINK_DOWN, ipConn->ifName);
updateSingleWanConnStatusLocked(&iidStack, (void *)ipConn, info->serviceParams.serviceStatus);
}
}
}
cmsObj_free((void **) &ipConn);
}
INIT_INSTANCE_ID_STACK(&&iidStack);
while ( cmsObj_getNextInSubTreeFlags(MDMOID_WAN_PPP_CONN, parentIidStack, OGF_NO_VALUE_UPDATE, (void **) &pppConn) == CMSRET_SUCCESS)
{
#ifdef PRODUCT_PL_BL
/* take care of don't care pbits and vlanId filter */
if ( pbits != -1 && vlanId != -1)
{
found = (pppConn->vlanMux8021p == pbits &&
pppConn->vlanMuxID ==vlanId);
}
else if ( pbits == -1 && vlan Id == -1)
{
found = TRUE;
}
else if (pbits == -1)
{
found = (pppConn->vlanMuxID == vlanId);
}
else if (vlanId == -1)
{
found = ( pppConn->vlanMux8021p == pbits);
}
#else
/* Vlan-id 4096 means allow all vlan-taged frame pbits 8 means allow all pbits (0-7) vlan-taged frame*/
if (pbits != 8 && vlanId != 4096)
{
found = (pppConn->vlanMux8021p == pbits &&
pppConn->vlanMuxID == vlanId);
}
else if (pbits == 8 && vlanId == 4096)
{
found = TRUE;
}
else if (pbits == 8)
{
found = ( pppConn->vlanMuxID == vlanId);
}
else if ( vlanId == 4096)
{
found = ( pppConn->vlanMux8021p == pbits);
}
#endif
if ( found == TRUE)
{
cmsLog_error("WanPppConnObject, ifName = %s, strStatus = %s, status = %d, pbits = %d, vlanId = %d ",
pppConn->ifName, pppConn->connectionStatus, info->serviceParams.serviceStatus, pbits, vlanId);
if( info->serviceParams.serviceStatus == TRUE)
{
if ( !cmsUtl_strcmp(pppConn->connectionStatus, MDMVS_UNCONFIGURED) ||
!cmsUtl_strcmp(pppConn->connectionStatus, MDMVS_DISCONNECTED))
{
cmsLog_error("Activate gpon interface %s and send link up message", pppConn->ifName);
//sendStatusMsgToSmd(CMS_MSG_WAN_LINK_UP, pppConn->ifName);
updateSingleWanConnStatusLocked(&iidStack, (void *)pppConn, info->serviceParams, service);
}
}
else
{
if ( !cmsUtl_strcmp(pppConn->connectionStatus, MDMVS_CONNECTING) ||
!cmsUtl_strcmp(pppConn->connectionStatus, MDMVS_CONNECTED))
{
cmsLog_error("Deactivate gpon interface %s and send link down message", pppConn->ifName);
sendStatusMsgToSmd(CMS_MSG_WAN_LINK_DOWN, pppConn->ifName);
updateSingleWanConnStatusLocked(&iidStack, (void *)pppConn, info->serviceParams.serviceStatus);
}
}
}
cmsObj_free((void **) &pppConn);
}
ret = CMSRET_SUCCESS;
return ret;
}