diff --git a/config/RdkWanManager.xml b/config/RdkWanManager.xml index 2a068709..285801c1 100644 --- a/config/RdkWanManager.xml +++ b/config/RdkWanManager.xml @@ -514,6 +514,12 @@ int true + + DSCPMark + string(64) + string + true + diff --git a/source/TR-181/include/dmsb_tr181_psm_definitions.h b/source/TR-181/include/dmsb_tr181_psm_definitions.h index 226fc11b..552114b6 100644 --- a/source/TR-181/include/dmsb_tr181_psm_definitions.h +++ b/source/TR-181/include/dmsb_tr181_psm_definitions.h @@ -119,5 +119,6 @@ #define PSM_MARKING_SKBPORT "dmsb.wanmanager.if.%d.Marking.%s.SKBPort" #define PSM_MARKING_SKBMARK "dmsb.wanmanager.if.%d.Marking.%s.SKBMark" #define PSM_MARKING_ETH_PRIORITY_MASK "dmsb.wanmanager.if.%d.Marking.%s.EthernetPriorityMark" +#define PSM_MARKING_DSCPMARK "dmsb.wanmanager.if.%d.Marking.%d.DSCPMark" #endif diff --git a/source/TR-181/include/wanmgr_dml.h b/source/TR-181/include/wanmgr_dml.h index 720364cb..2f4b7f9b 100644 --- a/source/TR-181/include/wanmgr_dml.h +++ b/source/TR-181/include/wanmgr_dml.h @@ -266,6 +266,7 @@ typedef struct _DML_MARKING UINT SKBPort; UINT SKBMark; INT EthernetPriorityMark; + CHAR DSCPMark[BUFLEN_64]; } DML_MARKING; typedef struct _DATAMODEL_MARKING diff --git a/source/TR-181/middle_layer_src/wanmgr_dml_iface_apis.c b/source/TR-181/middle_layer_src/wanmgr_dml_iface_apis.c index cc859d7e..acbf9a74 100644 --- a/source/TR-181/middle_layer_src/wanmgr_dml_iface_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_dml_iface_apis.c @@ -2833,6 +2833,20 @@ ULONG Marking_GetParamStringValue(ANSC_HANDLE hInsContext, char* ParamName, char } } + if (strcmp(ParamName, "DSCPMark") == 0) + { + if ( AnscSizeOfString(p_Marking->DSCPMark) < *pUlSize) + { + AnscCopyString(pValue, p_Marking->DSCPMark); + return 0; + } + else + { + *pUlSize = AnscSizeOfString(p_Marking->DSCPMark)+1; + return 1; + } + } + /* CcspTraceWarning(("Unsupported parameter '%s'\n", ParamName)); */ return -1; } @@ -2994,6 +3008,12 @@ BOOL Marking_SetParamStringValue(ANSC_HANDLE hInsContext, char* ParamName, char* ret = TRUE; } + if (strcmp(ParamName, "DSCPMark") == 0) + { + AnscCopyString(p_Marking->DSCPMark, pString); + ret = TRUE; + } + /* CcspTraceWarning(("Unsupported parameter '%s'\n", ParamName)); */ return ret; } @@ -3072,6 +3092,7 @@ ULONG Marking_Commit(ANSC_HANDLE hInsContext) p_Marking->SKBPort = 0; p_Marking->SKBMark = 0; p_Marking->EthernetPriorityMark = -1; + memset( p_Marking->DSCPMark, 0, sizeof( p_Marking->DSCPMark ) ); } } else diff --git a/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c b/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c index eed107ac..7307e358 100644 --- a/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c @@ -1035,6 +1035,25 @@ ANSC_STATUS WanMgr_WanIfaceMarkingInit () token = strtok( NULL, "-" ); continue; } + + //Get DSCPMark from PSM + memset( acPSMQuery, 0, sizeof( acPSMQuery ) ); + memset( acPSMValue, 0, sizeof( acPSMValue ) ); + + snprintf( acPSMQuery, sizeof( acPSMQuery ), PSM_MARKING_DSCPMARK, ulIfInstanceNumber, acTmpMarkingData ); + if ( ( CCSP_SUCCESS == DmlWanGetPSMRecordValue( acPSMQuery, acPSMValue ) ) && \ + ( strlen( acPSMValue ) > 0 ) ) + { + snprintf( p_Marking->DSCPMark, sizeof( p_Marking->DSCPMark ), "%s", acPSMValue ); + } + else + { + WanMgr_RemoveMarkingEntryFromPSMList(acOldMarkingList, acTmpMarkingData, ulIfInstanceNumber); + CcspTraceInfo(("%s %d - PSM entry for DSCPMark Failed. Don't add Marking table Entry for token: (%s)\n", __FUNCTION__, __LINE__, token)); + token = strtok( NULL, "-" ); + continue; + } + /* Insert into marking table */ snprintf(aTableName, sizeof(aTableName), MARKING_TABLE, ulIfInstanceNumber); if (CCSP_SUCCESS == CcspBaseIf_AddTblRow(bus_handle,WAN_COMPONENT_NAME,WAN_DBUS_PATH, 0, aTableName,&ulInstanceNumber))