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))