Session.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /****************************************************************
  2. ****************************************************************
  3. ** **
  4. ** (C)Copyright 2005-2006, American Megatrends Inc. **
  5. ** **
  6. ** All Rights Reserved. **
  7. ** **
  8. ** 6145-F, Northbelt Parkway, Norcross, **
  9. ** **
  10. ** Georgia - 30071, USA. Phone-(770)-246-8600. **
  11. ** **
  12. ****************************************************************
  13. ****************************************************************/
  14. /*****************************************************************
  15. *
  16. * Session.h
  17. *
  18. *
  19. * Author: Govind Kothandapani <govindk@ami.com>
  20. * : Rama Bisa <ramab@ami.com>
  21. * : Basavaraj Astekar <basavaraja@ami.com>
  22. * : Bakka Ravinder Reddy <bakkar@ami.com>
  23. *
  24. *****************************************************************/
  25. #ifndef SESSION_H
  26. #define SESSION_H
  27. #include "Types.h"
  28. #include "IPMI_LANIfc.h"
  29. #include "IPMI_RMCP+.h"
  30. #include "PMConfig.h"
  31. #include "IPMI_AppDevice.h"
  32. #include "IPMIDefs.h"
  33. #include "Message.h"
  34. #include "bmc_conf.h"
  35. //#pragma pack( 1 )
  36. /* Macros */
  37. #define SESSION_ID_INFO 1
  38. #define SESSION_HANDLE_INFO 2
  39. #define SESSION_INDEX_INFO 3
  40. #define SESSION_CHANNEL_INFO 4
  41. #define MGD_SYS_SESSION_ID_INFO 5
  42. #define SESSION_PAYLOAD_INFO 6
  43. #define SESSION_REMOTE_INFO 7
  44. #define MAX_INST_SUPPORTED 2
  45. #define SESSIONLESS_CHANNEL 0x00
  46. #define SINGLE_SESSION_CHANNEL 0x01
  47. #define MULTI_SESSION_CHANNEL 0x02
  48. #define SESSION_BASED_CHANNEL 0x03
  49. #define HASH_DATA_LENGTH 16
  50. #define NULL_USER_ID 1
  51. #define UDS_SESSION_COUNT_INFO 0x00
  52. #define UDS_SESSION_ID_INFO 0x01
  53. #define UDS_SESSION_HANDLE_INFO 0x02
  54. #define UDS_SESSION_INDEX_INFO 0x03
  55. #define UDS_SOCKET_ID_INFO 0x04
  56. #define UDS_SESSION_PID_INFO 0x05
  57. #define UDS_ACTIVE_SESSION_INDEX_LIST 0x06
  58. /* UDS Session Table Info */
  59. typedef struct
  60. {
  61. INT32U SessionID;
  62. INT32U LoggedInTime;
  63. INT32U SessionTimeoutValue;
  64. SOCKET UDSSocket;
  65. INT8U LoggedInUsername[MAX_USER_NAME_LEN];
  66. INT8U LoggedInPassword[MAX_PASSWORD_LEN];
  67. INT8U LoggedInUserID;
  68. INT8U Activated;
  69. INT8U LoggedInSessionHandle;
  70. INT8U UDSChannelNum;
  71. INT8U LoggedInChannel;
  72. INT8U LoggedInPrivilege;
  73. INT8U AuthenticationMechanism;
  74. INT32U ProcessID;
  75. INT32U ThreadID;
  76. INT8U IPAddr [IP6_ADDR_LEN];
  77. }PACKED UDSSessionTbl_T;
  78. typedef struct
  79. {
  80. INT16U SessionCount;
  81. UDSSessionTbl_T *UDSSessionTbl;
  82. }PACKED UDSSessionTblInfo_T;
  83. /* SessPayloadInfo_T */
  84. typedef struct
  85. {
  86. INT8U Type;
  87. INT8U OemPldIANA [3];
  88. INT8U OemPldID [2];
  89. INT8U Version;
  90. INT16U PortNum;
  91. INT16U ActivatedInst;
  92. INT8U AuxConfig [4];
  93. } PACKED SessPayloadInfo_T;
  94. /* structure to keep track the information about a session. */
  95. /* SessionInfo_T */
  96. /*
  97. typedef struct
  98. {
  99. INT8U Used; // Flag to indicate the slot used or not
  100. INT32U SessionID;
  101. INT8U Activated;
  102. INT8U Channel;
  103. INT8U AuthType;
  104. INT8U Privilege;
  105. INT8U MaxPrivilege;
  106. INT32U InboundSeq;
  107. INT32U OutboundSeq;
  108. INT32U TimeOutValue;
  109. INT8U Password[MAX_PASSWORD_LEN];
  110. INT8U UserId;
  111. INT8U SessionHandle;
  112. INT8U ChallengeString[CHALLENGE_STR_LEN];
  113. LANRMCPPkt_T LANRMCPPkt;
  114. SOCKET hSocket;
  115. BOOL SerialModemMode;
  116. INT32U Time;
  117. #if (IPMI20_SUPPORT == 1)
  118. INT8U Lookup;
  119. INT32U RemConSessionID;
  120. INT8U RemConRandomNo [16];
  121. INT8U MgdSysRandomNo [16];
  122. INT8U AuthAlgorithm;
  123. INT8U IntegrityAlgorithm;
  124. INT8U ConfidentialityAlgorithm;
  125. INT8U Key1 [MAX_HASH_KEY_SIZE];
  126. INT8U Key2 [MAX_HASH_KEY_SIZE];
  127. SessPayloadInfo_T SessPyldInfo [MAX_PYLDS_SUPPORT];
  128. #endif
  129. INT32U InitialInboundSeq;
  130. INT32U InboundTrac[SIXTEEN_COUNT_WINDOW_LEN];
  131. INT16U InboundRecv;
  132. INT8U IsLoopBack;
  133. INT8U Linkstat;
  134. INT8U EventFlag;
  135. INT8U UserName[MAX_USER_NAME_LEN];
  136. } SessionInfo_T;
  137. */
  138. /* SessionTblInfo_T */
  139. /*
  140. typedef struct
  141. {
  142. INT16U Count;
  143. SessionInfo_T *SessionTbl;
  144. } PACKED SessionTblInfo_T;
  145. */
  146. typedef struct
  147. {
  148. INT32U Time;
  149. INT8U Index;
  150. }PACKED OldSessionInfo_T;
  151. typedef enum
  152. {
  153. KCS_IFC = 0x00,
  154. IPMB_IFC,
  155. LAN_IFC,
  156. SERIAL_IFC,
  157. }IfcType_T;
  158. //#pragma pack( )
  159. /*--------------------------
  160. * Extern Declarations
  161. *--------------------------*/
  162. extern void SessionTimerTask (int BMCInst);
  163. extern ChannelInfo_T* getChannelInfo (INT8U ch,int BMCInst);
  164. extern _FAR_ ChannelUserInfo_T* getChUserIdInfo (INT8U userId, _NEAR_ INT8U *index, _FAR_ ChannelUserInfo_T* pChUserInfo, int BMCInst);
  165. extern _FAR_ SessionInfo_T* getSessionInfo (INT8U Arg, _FAR_ void *Session, int BMCInst);
  166. extern _FAR_ ChannelUserInfo_T* getChUserPrivInfo (_NEAR_ char *userName, _NEAR_ INT8U Role, _NEAR_ INT8U* chIndex, _FAR_ ChannelUserInfo_T *pChUserInfo, int BMCInst);
  167. extern _FAR_ ChannelUserInfo_T* getChUserInfo (_NEAR_ char *userName, _NEAR_ INT8U* chIndex, _FAR_ ChannelUserInfo_T *pChUserInfo, int BMCInst);
  168. extern _FAR_ UserInfo_T* getUserIdInfo (INT8U userId, int BMCInst);
  169. extern INT8U CheckForDuplicateUsers (_NEAR_ INT8U* UserName, int BMCInst);
  170. extern _FAR_ ChannelUserInfo_T* AddChUser (_FAR_ ChannelUserInfo_T* pChUserInfo, _NEAR_ INT8U* Index,int BMCInst);
  171. extern _FAR_ ChannelInfo_T* GetNVRChConfigs(ChannelInfo_T *pChannelInfo, int BMCInst);
  172. extern _FAR_ ChannelUserInfo_T* GetNVRChUserConfigs(ChannelInfo_T *pChannelInfo,int BMCInst);
  173. extern INT8U disableUser (INT8U UserId, int BMCInst);
  174. extern INT8U GetNumOfActiveSessions (int BMCInst);
  175. extern INT8U GetNumOfUsedSessions (int BMCInst);
  176. extern void DeleteSession (_FAR_ SessionInfo_T* pSessionInfo,int BMCInst);
  177. extern void AddSession (_NEAR_ SessionInfo_T* pSessionInfo,int BMCInst);
  178. extern INT8U CleanSession(int BMCInst);
  179. extern _FAR_ INT16U getPayloadActiveInst (INT8U PayloadType, int BMCInst);
  180. extern _FAR_ INT32U getPayloadInstInfo (INT8U PayloadType, INT16U PayloadInst,int BMCInst);
  181. extern void PasswordViolation (int BMCInst);
  182. extern void UDSSessionTimerTask (int BMCInst);
  183. extern int AddUDSSession (_NEAR_ UDSSessionTbl_T* pUDSSessionInfo, int BMCInst);
  184. extern int DeleteUDSSession(_FAR_ UDSSessionTbl_T* pUDSSessionInfo,int BMCInst);
  185. extern _FAR_ UDSSessionTbl_T* GetUDSSessionInfo (INT8U Type,void *Data,int BMCInst);
  186. /*---------------------------------------------------
  187. * @fn UpdateGetMsgTime
  188. * @brief Updates the Current Uptime and timeout value
  189. * for an IPMI Message
  190. *
  191. * @param pReq : IPMI Message Packet
  192. * @param ResTimeOut : Timeout Macro string
  193. * @param BMCInst : BMC Instance
  194. *
  195. * @return none
  196. *----------------------------------------------------*/
  197. extern void UpdateGetMsgTime (MsgPkt_T* pReq,IfcType_T IfcType, int BMCInst);
  198. /*---------------------------------------------------
  199. * @fn IsMsgTimedOut
  200. * @brief Checks if the time taken to process
  201. * the IPMI Command expires
  202. *
  203. * @param pReq : IPMI Message Packet
  204. *
  205. * @return 1 if timed out
  206. * 0 if error or timeout not set
  207. *----------------------------------------------------*/
  208. extern BOOL IsMsgTimedOut (MsgPkt_T* pReq);
  209. /*-----------------------------------------------------
  210. * @fn IsResponseMatch
  211. * @brief Checks if the Response Message corresponds to
  212. * the Request Message
  213. *
  214. * @param pReq : IPMI Request Message Packet
  215. * @param pRes : IPMI Response Message Packet
  216. *
  217. * @return 1 if match
  218. * 0 if mismatch
  219. *----------------------------------------------------*/
  220. extern BOOL IsResponseMatch (MsgPkt_T* pReq, MsgPkt_T* pRes);
  221. /*-------------------------------------------------------
  222. * @fn FillIPMIResFailure
  223. * @brief Frames the Response packet when the time taken
  224. * to process an IPMI Command expires
  225. *
  226. * @param pReq : Request Message Packet
  227. * pRes : Response Message Packet
  228. * BMCInst : BMC Instance Number
  229. *
  230. * @return none
  231. *------------------------------------------------------*/
  232. extern void FillIPMIResFailure (_NEAR_ MsgPkt_T* pReq, _NEAR_ MsgPkt_T* pRes, int BMCInst);
  233. #endif /* SESSION_H */