--- ./source/private_module/devm/src/ssp/debug/eam_debug.c	2018-04-26 09:57:48.000000000 +0000
+++ ./source/private_module/devm/src/ssp/debug/eam_debug.c.hotpatch	2018-09-21 14:27:33.000000000 +0000
@@ -7474,8 +7474,8 @@
  
     return;   
 }
-
-/*****************************************************************/
+void diagrmEamframerec(int32_t argCnt, char* argBuff[]);
+int32_t getEamCliDebugCmdExt(EAM_DIAG_CMD_OPS_S **diagCmd, char *cmdName);
 STATIC EAM_DIAG_CMD_OPS_S s_eamDiagCmdOps[] =
 {
 #ifdef _DEBUG
@@ -7653,12 +7653,12 @@
     {"showintfboardinfo",   diagEamQueryIntfBoard},
     {"alarm",               diagEamShowAlarms},
 };
-
+EAM_DIAG_CMD_OPS_S g_eamCliDebugCmdExt[] =
+{
+	{"rmframerec",           diagrmEamframerec},
+};
 /**************************************************************************
-     :  ģⷵʧ
- :  userparam: עûΪ
-            ret: עʱҪصֵ
- :  
+
  ֵ  :  
      :  úڵԺͶλ
 **************************************************************************/
@@ -8397,12 +8397,9 @@
     uint32_t cmdIdx = 0;
     bool findFlag = B_FALSE;
     EAM_DIAG_CMD_OPS_S *diagCmd = NULL;
-
-
     for (cmdIdx = 0; cmdIdx < s_eamDiagCliCmdOpsNum; cmdIdx++)
     {
         diagCmd = &s_eamDiagCliCmdOps[cmdIdx];
-
         if (0 == EAM_strncmp(argBuff[1], diagCmd->cmdName, MAX_NAME_LEN))
         {
             findFlag = B_TRUE;
@@ -8410,6 +8407,10 @@
         }
     }
 
+	if (B_TRUE != findFlag)
+    {
+        findFlag = getEamCliDebugCmdExt(&diagCmd, argBuff[1]);
+    }
     if (NULL == diagCmd)
     {
         return RETURN_ERROR;
@@ -8420,7 +8421,6 @@
         diagCmd->cmdHandle(argCnt, argBuff);
         return RETURN_OK;
     }
-
     return RETURN_ERROR;
 }
 #else /* else defined(EAM_DT) */
@@ -8465,3 +8465,74 @@
     return;
 }
 #endif  /* End defined(EAM_DT) */
+
+int32_t getEamCliDebugCmdExt(EAM_DIAG_CMD_OPS_S **diagCmd, char *cmdName)
+{
+	uint32_t cmdIdxExt = 0;
+	uint32_t cliDebugCmdExtNum = ARRAY_LEN(g_eamCliDebugCmdExt);
+	EAM_DIAG_CMD_OPS_S *cmdExt = NULL;
+	if (NULL == diagCmd || NULL == cmdName)
+    {
+        return B_FALSE;
+    }
+
+	for (cmdIdxExt = 0; cmdIdxExt < cliDebugCmdExtNum; cmdIdxExt++)
+    {
+		
+        cmdExt = &g_eamCliDebugCmdExt[cmdIdxExt];
+        if (0 == EAM_strncmp(cmdName, cmdExt->cmdName, MAX_NAME_LEN))
+        {
+        	*diagCmd = cmdExt;
+            return B_TRUE;
+        }
+    }
+	return B_FALSE;
+}
+
+void diagrmEamframerec(int32_t argCnt, char* argBuff[])
+{
+    FRAME_RECORD_INFO_S frameInfo = {0};
+	uint64_t frameKey = 0;
+	
+    if (4 != argCnt)
+    {
+        DBG_Print("Please input: eam rmframe [dsw|encl] [wwn|mac]\n");
+        return;
+    }
+	
+	frameKey = (uint64_t)LVOS_StrToU64(argBuff[3]);
+	if (INVALID_VALUE64 == frameKey || 0 == frameKey)
+	{
+		DBG_Print("Please input valid [wwn|mac]\n");
+		DBG_Print("get value use command: eam showframe\n");
+		return;
+	}
+
+	if (0 == EAM_strncmp(argBuff[2], "dsw", EAM_strlen("dsw")+1))
+    {
+        frameInfo.frameType = DMI_ENCLOSURE_TYPE_DSW;
+		frameInfo.wwn = frameKey;
+    }
+	else if (0 == EAM_strncmp(argBuff[2], "encl", EAM_strlen("encl")+1))
+ 	{	
+		frameInfo.frameType = DMI_ENCLOSURE_TYPE_EXP;
+		frameInfo.mac = upendFrameMac(frameKey);
+ 	}
+	else
+    {
+		DBG_Print("Please input valid [dsw|encl]\n");
+		return;
+    }
+
+    if (RETURN_OK != removeEnclosureRecord(&frameInfo))
+    {
+        DBG_Print("Remove frame record failed.\n");
+        return;
+    }
+
+    DBG_Print("Remove frame record successfully.\n");
+    return;
+
+}
+
+
