AST2500用户添加自定义IPMI交互命令

用户可以在MsgHndlr.c中添加自定义IPMI交互命令

在MsgHndlr.c中

1、添加自定义netfun

#define NETFN_SAMPLE 0x10

2、添加用户自定义执行程序宏定义

#define SET_THREADOLD SetThreshold

#define GET_THREADOLD GetThreshold

3、添加自定义执行程序函数

 

int SetThreshold(_NEAR_ INT8U* pReq, INT32U ReqLen, _NEAR_ INT8U* pRes,int BMCInst)
{
	unsigned int temp_upper_level=0;
	unsigned int temp_down_level=0;
	
	unsigned int volt_upper_level=0;
	unsigned int volt_down_level=0;
	if(pReq[0]==0x1)//setting temperature threshold
	{
		temp_upper_level=pReq[3];
		temp_down_level=pReq[6];
		printf("[IPMI CMD]Setting Temperature Upper_LEVEL %d Low_Level %d\n",temp_upper_level,temp_down_level);
	}
	else if(pReq[0]==0x2) //setting voltage threshold
	{
		volt_upper_level=pReq[3];
		volt_down_level=pReq[6];
		printf("[IPMI CMD]Setting Voltage Upper_LEVEL %d Low_Level %d\n",volt_upper_level,volt_down_level);
	}
	else
	{
		  *pRes = CC_INV_DATA_FIELD;
		   return sizeof(*pRes);
	}
	*pRes =CC_SUCCESS;
	return  sizeof(*pRes);
}

int GetThreshold(_NEAR_ INT8U* pReq, INT32U ReqLen, _NEAR_ INT8U* pRes,int BMCInst)
{
	if(pReq[0]==0x1)//getting temperature threshold
	{
		//……..
	}
	else if(pReq[0]==0x2) //getting voltage threshold
	{
		//……..
	}
	else
	{
		*pRes = CC_INV_DATA_FIELD;
		return sizeof(*pRes);
	}
	return  1;
}

4、添加自定义命令解析函数结构体

const ExCmdHndlrMap_T g_Sample_CmdHndlr [] =

{

         {0x26, PRIV_USER, SET_THREADOLD, 0xff, 0xAAAA,0xFFFF},

         {0x27, PRIV_USER, GET_THREADOLD, 0xff, 0xAAAA,0xFFFF},

};

字段含义如下:

5、在主处理函数中添加自定义命令解析

MsgHndlrTbl_T m_MsgHndlrTbl [15] =
{
    { NETFN_APP,                    g_App_CmdHndlr                  },
    { NETFN_CHASSIS,                g_Chassis_CmdHndlr              },
    { NETFN_BRIDGE,                 g_Bridge_CmdHndlr               },
    { NETFN_SENSOR,                 g_SensorEvent_CmdHndlr          },
    { NETFN_STORAGE,                g_Storage_CmdHndlr              },
    { NETFN_TRANSPORT,              g_Config_CmdHndlr               },
    { NETFN_AMI,                    (CmdHndlrMap_T*)g_AMI_CmdHndlr  },
    { NETFN_30,                     (CmdHndlrMap_T*)g_NetFn30_CmdHndlr},
    { NETFN_SAMPLE,                 (CmdHndlrMap_T*)g_Sample_CmdHndlr},
};

 这样修改以后收到自定义的netfun和cmd就会执行用户自己的处理函数。