/**************************************************************** **************************************************************** ** ** ** (C)Copyright 2005-2006, American Megatrends Inc. ** ** ** ** All Rights Reserved. ** ** ** ** 6145-F, Northbelt Parkway, Norcross, ** ** ** ** Georgia - 30071, USA. Phone-(770)-246-8600. ** ** ** **************************************************************** ****************************************************************/ /***************************************************************** * * Firewall.c * Firewall Commands Handler * * Author: Basavaraj Astekar * : Bakka Ravinder Reddy * *****************************************************************/ #include "Firewall.h" #include "MsgHndlrTask.h" #include "Support.h" #include "com_IPMIDefs.h" #include "com_IPMI_Firewall.h" /* Reserved bit macro definitions */ #define RESERVED_BITS_GETNETFNSUP 0xF0 //(BIT7 | BIT6 | BIT5 |BIT4) #define RESERVED_BITS_GETCMDSUP_CH 0xF0 //(BIT7 | BIT6 | BIT5 |BIT4) #define RESERVED_BITS_GETCMDSUP_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_GETCMDSUP_NETFUN 0x80 //BIT7 \BIT6 (11 and 10 are reserved as per IPMI spec) #define RESERVED_BITS_GETSUBFNSUP_CH 0xF0 //(BIT7 | BIT6 | BIT5 | BIT4) #define RESERVED_BITS_GETSUBFNSUP_NETFN 0xC0 //(BIT7 | BIT6) #define RESERVED_BITS_GETSUBFNSUP_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_GETCFGCMDS_CH 0xF0 //(BIT7 | BIT6 | BIT5 |BIT4) #define RESERVED_BITS_GETCFGCMDS_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_GETCFGCMDS_NETFUN 0x80 //BIT7 \BIT6 (11 and 10 are reserved as per IPMI spec) #define RESERVED_BITS_GETCFGSUBFNS_CH 0xF0 //(BIT7 | BIT6 | BIT5 |BIT4) #define RESERVED_BITS_GETCFGSUBFNS_NETFN 0xC0 //(BIT7 | BIT6) #define RESERVED_BITS_GETCFGSUBFNS_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_SETCMDEN_CH 0xF0 //(BIT7 | BIT6 | BIT5 |BIT4) #define RESERVED_BITS_SETCMDEN_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_SETCMDEN_NETFUN 0x80 //BIT7 \BIT6 (11 and 10 are reserved as per IPMI spec) #define RESERVED_BITS_GETCMDEN_CH 0xF0 //(BIT7 | BIT6 | BIT5 |BIT4) #define RESERVED_BITS_GETCMDEN_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_GETCMDEN_NETFUN 0x80 //BIT7 \BIT6 (11 and 10 are reserved as per IPMI spec) #define RESERVED_BITS_SETSUBFNEN_CH 0xF0 //(BIT7 | BIT6 | BIT5 | BIT4) #define RESERVED_BITS_SETSUBFNEN_NETFN 0xC0 //(BIT7 | BIT6) #define RESERVED_BITS_SETSUBFNEN_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_GETSUBFNEN_CH 0xF0 //(BIT7 | BIT6 | BIT5 | BIT4) #define RESERVED_BITS_GETSUBFNEN_NETFN 0xC0 //(BIT7 | BIT6) #define RESERVED_BITS_GETSUBFNEN_LUN 0xFC //(BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2) #define RESERVED_BITS_GETOEMNETFNIANASUPPORT_CH 0xF0 //(BIT7 | BIT6 | BIT5 | BIT4) #define RESERVED_BITS_GETOEMNETFNIANASUPPORT_NETFN 0xC0 //(BIT7 | BIT6) #define RESERVED_BITS_GETOEMNETFNIANASUPPORT_LISTINDEX 0xC0 //(BIT7 | BIT6) #if IPM_DEVICE == 1 //static int GetRequiredLength (uint8_t NetFn, uint8_t CmdReqSize); //static int ValidateFFNetFnData (uint8_t NetFn, NetFnParams_T* pNetFnParams ,BMCInfo_t *pBMCInfo); /*** Local Macro definitions ***/ #define LUN_NO_CMD_SUPPORT 0x00 #define LUN_NO_RESTRICTION_SUPPORT 0x01 #define LUN_RESTRICTION_SUPPORT 0x02 #define LUN_00 LUN_RESTRICTION_SUPPORT #define LUN_01 LUN_NO_CMD_SUPPORT << 2 #define LUN_10 LUN_NO_CMD_SUPPORT << 4 #define LUN_11 LUN_NO_CMD_SUPPORT << 6 #define DMTF_DEFINING_BODY 0x01 //Group Extension codes #define GROUPEXTNCODE_PICMG 0x00 #define GROUPEXTNCODE_DMTF 0x01 #define GROUPEXTNCODE_SSI 0x02 #define GROUPEXTNCODE_VSO 0x03 #define GROUPEXTNCODE_DCMI 0xDC #define Max_GROUPEXTNCODE 5 /* Add IANA No's to the Array */ IANA_T m_IANAList[] = { /* LS byte first */ {{0xFF,0xFF,0xFF}}, /* Reserved Oem IANA */ #ifdef IANA_OEM_LIST IANA_OEM_LIST #endif }; uint8_t GroupExtnCode[Max_GROUPEXTNCODE]={ GROUPEXTNCODE_PICMG, GROUPEXTNCODE_DMTF, GROUPEXTNCODE_SSI, GROUPEXTNCODE_VSO, GROUPEXTNCODE_DCMI, }; #if GET_NETFN_SUP != UNIMPLEMENTED /*--------------------------------------- * GetNetFnSup *---------------------------------------*/ int GetNetFnSup ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetNetFnSup not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_NETFN_SUP != UNIMPLEMENTED */ #if GET_CMD_SUP != UNIMPLEMENTED /*--------------------------------------- * GetCmdSup *---------------------------------------*/ int GetCmdSup ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetCmdSup not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_CMD_SUP != UNIMPLEMENTED */ #if GET_SUBFN_SUP != UNIMPLEMENTED /*--------------------------------------- * GetSubFnSup *---------------------------------------*/ int GetSubFnSup ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetSubFnSup not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_SUBFN_SUP != UNIMPLEMENTED */ #if GET_CONFIG_CMDS != UNIMPLEMENTED /*--------------------------------------- * GetConfigCmds *---------------------------------------*/ int GetConfigCmds ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetConfigCmds not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_CONFIG_CMDS != UNIMPLEMENTED */ #if GET_CONFIG_SUB_FNS != UNIMPLEMENTED /*--------------------------------------- * GetConfigSubFns *---------------------------------------*/ int GetConfigSubFns ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetConfigSubFns not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_CONFIG_SUB_FNS != UNIMPLEMENTED */ #if SET_CMD_ENABLES != UNIMPLEMENTED /*--------------------------------------- * SetCmdEnables *---------------------------------------*/ int SetCmdEnables ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("SetCmdEnables not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* SET_CMD_ENABLES != UNIMPLEMENTED */ #if GET_CMD_ENABLES != UNIMPLEMENTED /*--------------------------------------- * GetCmdEnables *---------------------------------------*/ int GetCmdEnables ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetCmdEnables not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_CMD_ENABLES != UNIMPLEMENTED */ #if SET_SUBFN_ENABLES != UNIMPLEMENTED /*--------------------------------------- * SetSubFnEnables *---------------------------------------*/ int SetSubFnEnables ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("SetSubFnEnables not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* SET_SUBFN_ENABLES != UNIMPLEMENTED */ #if GET_SUBFN_ENABLES != UNIMPLEMENTED /*--------------------------------------- * GetSubFnEnables *---------------------------------------*/ int GetSubFnEnables ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetSubFnEnables not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif /* GET_SUBFN_ENABLES != UNIMPLEMENTED */ #if GET_OEM_NETFN_IANA_SUPPORT != UNIMPLEMENTED /*--------------------------------------- * GetOEMNetFnIANASupport *---------------------------------------*/ int GetOEMNetFnIANASupport ( uint8_t* pReq, uint8_t ReqLen, uint8_t* pRes) { printf("GetOEMNetFnIANASupport not implement\r\n"); *pRes = CC_INV_CMD; return sizeof(*pRes); } #endif //GET_OEM_NETFN_IANA_SUPPORT != UNIMPLEMENTED //static int GetRequiredLength(uint8_t NetFn, uint8_t CmdReqSize) //{ // uint8_t RequiredLength; // switch (NetFn) // { // case NETFN_OEM: // RequiredLength = CmdReqSize; // break; // case NETFN_AMI: // RequiredLength = CmdReqSize - sizeof(NetFnParams_T) + 1; // break; // case NETFN_PICMG: // RequiredLength = CmdReqSize - sizeof(NetFnParams_T) + 1; // break; // default: // RequiredLength = CmdReqSize - sizeof(NetFnParams_T); // break; // } // return RequiredLength; //} //static int ValidateFFNetFnData (uint8_t NetFn, NetFnParams_T* pNetFnParams , BMCInfo_t *pBMCInfo) //{ // uint8_t i; // // // If NetFn is 0x2C, check for Defining Body code // if (NETFN_PICMG == NetFn ) // { // for (i = 0; i < sizeof (pBMCInfo->GroupExtnMsgHndlrTbl) / sizeof (pBMCInfo->GroupExtnMsgHndlrTbl [0]); i++) // { // if (pBMCInfo->GroupExtnMsgHndlrTbl [i].NetFn == NetFn) // return (pBMCInfo->GroupExtnMsgHndlrTbl [i].GroupExtnCode != pNetFnParams->DefBodyCode); // } // } // else if (NETFN_OEM == NetFn) // If NetFn is 0x2E, check for OEM IANA // { // for (i=0; i <(sizeof(m_IANAList)/ sizeof(m_IANAList[0])); i++) // { // if (0 == _fmemcmp( pNetFnParams->IANA, m_IANAList[i].IANA, sizeof(IANA_T))) // { // break; // } // } // if (i >= (sizeof(m_IANAList)/ sizeof(m_IANAList[0]))) // { // // Given IANA in Req is not matching any of the IANA in the IANA list // return 1; // } // } // return 0; //} #endif /* IPM_DEVICE */