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就会执行用户自己的处理函数。