PendActionTask.c 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #include "main.h"
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. #include <sys/prctl.h>
  5. #include <semaphore.h>
  6. #include <pthread.h>
  7. #include <errno.h>
  8. #include <fcntl.h>
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. #include <string.h>
  12. #include <pthread.h>
  13. #include "main.h"
  14. #include "ChassisTimerTask.h"
  15. #include "ChassisDevice.h"
  16. #include "com_IPMI_Chassis.h"
  17. #include "com_IPMI_LANConfig.h"
  18. #include "com_IPMI_DeviceConfig.h"
  19. #include "SensorMonitor.h"
  20. #include "time.h"
  21. #include "com_IPMI_Storlead.h"
  22. #include "com_IPMI_App.h"
  23. #include "hal_interface_api.h"
  24. #include "Api.h"
  25. int gPendActionIfc;
  26. void *PendActionTask(void *Param)
  27. {
  28. MsgPkt_T MsgPkt;
  29. char cmdStr[100] = {0};
  30. SetLanConfigReq_T *pSetLanCfg;
  31. prctl(PR_SET_NAME,__FUNCTION__,0,0,0);
  32. printf("PendActionTask Started... \n");
  33. //create
  34. if(-1 != access(PEND_ACTION_HNDLR_Q, F_OK))
  35. {
  36. remove(PEND_ACTION_HNDLR_Q);
  37. }
  38. if(0 != mkfifo (PEND_ACTION_HNDLR_Q, 0777))
  39. {
  40. printf("%s: Create %s fifo failed! %s\n", __FUNCTION__, PEND_ACTION_HNDLR_Q, strerror(errno));
  41. return (void*)-1;
  42. }
  43. gPendActionIfc = open (PEND_ACTION_HNDLR_Q, O_RDWR);
  44. if(-1 == gPendActionIfc)
  45. {
  46. printf("%s: Open %s fifo failed! %s\n", __FUNCTION__, PEND_ACTION_HNDLR_Q, strerror(errno));
  47. return (void*)-1;
  48. }
  49. while(1)
  50. {
  51. if(GetMsg(gPendActionIfc, &MsgPkt, WAIT_INFINITE) == 0)
  52. {
  53. if(MsgPkt.Param == PARAM_CHASSIS)
  54. {
  55. //Chassis power control
  56. if((NET_FN(MsgPkt.NetFnLUN) == NETFN_CHASSIS) && (MsgPkt.Cmd == CMD_CHASSIS_CONTROL))
  57. {
  58. switch(MsgPkt.Data[0])
  59. {
  60. case CHASSIS_POWER_DOWN:
  61. PDK_PowerOffChassis();
  62. break;
  63. case CHASSIS_POWER_UP:
  64. PDK_PowerOnChassis();
  65. break;
  66. case CHASSIS_POWER_CYCLE:
  67. PDK_PowerCycleChassis();
  68. break;
  69. case CHASSIS_HARD_RESET:
  70. PDK_ResetChassis();
  71. break;
  72. case CHASSIS_PULSE_DIAGNOSTIC_INTERRUPT:
  73. PDK_DiagInterruptChassis();
  74. break;
  75. case CHASSIS_SOFT_SHUTDOWN:
  76. PDK_SoftOffChassis();
  77. break;
  78. default:
  79. printf("Invalid power control cmd\r\n");
  80. break;
  81. }
  82. }
  83. }
  84. else if(MsgPkt.Param == PARAM_MC)
  85. {
  86. if(((MsgPkt.NetFnLUN>>2) == NETFN_APP) && (MsgPkt.Cmd == CMD_COLD_RESET))
  87. {
  88. sleep(1); //wait ipmi request response finish.
  89. pthread_mutex_lock(&Flash_Mutex);
  90. stm32_reset_mcu();
  91. pthread_mutex_unlock(&Flash_Mutex);
  92. }
  93. else if(((MsgPkt.NetFnLUN>>2) == NETFN_APP) && (MsgPkt.Cmd == CMD_WARM_RESET))
  94. {
  95. sleep(1); //wait ipmi request response finish.
  96. pthread_mutex_lock(&Flash_Mutex);
  97. sprintf(cmdStr, "reboot");
  98. system(cmdStr);
  99. pthread_mutex_unlock(&Flash_Mutex);
  100. }
  101. }
  102. else if(MsgPkt.Param == PARAM_LAN)
  103. {
  104. int index = MsgPkt.Data[0];
  105. int isSave = MsgPkt.Data[1];
  106. pSetLanCfg = (SetLanConfigReq_T*)&MsgPkt.Data[2];
  107. printf("---> PARAM_LAN, NetFnLUN: %#x, cmd: %#x\n", MsgPkt.NetFnLUN, MsgPkt.Cmd);
  108. printf("---> Data: %#x %#x %#x %#x %#x\n", MsgPkt.Data[0], MsgPkt.Data[1], MsgPkt.Data[2], MsgPkt.Data[3], MsgPkt.Data[4]);
  109. if(((MsgPkt.NetFnLUN>>2) == NETFN_TRANSPORT)
  110. && (MsgPkt.Cmd == CMD_SET_LAN_CONFIGURATION_PARAMETERS)
  111. && (pSetLanCfg->ChannelNum == LAN_RMCP_CHANNEL))
  112. {
  113. //Modify IP
  114. if(pSetLanCfg->ParameterSelect == LAN_PARAM_IP_ADDRESS)
  115. {
  116. sprintf(cmdStr, "ifconfig eth0 %d.%d.%d.%d up",
  117. pSetLanCfg->ConfigData.IPAddr[0], pSetLanCfg->ConfigData.IPAddr[1],
  118. pSetLanCfg->ConfigData.IPAddr[2], pSetLanCfg->ConfigData.IPAddr[3]);
  119. printf("Execute cmd: %s\n", cmdStr);
  120. sleep(1);
  121. system(cmdStr);
  122. }
  123. else if(pSetLanCfg->ParameterSelect == LAN_PARAM_MAC_ADDRESS)
  124. {
  125. sprintf(cmdStr, "ifconfig eth0 hw ether %02x:%02x:%02x:%02x:%02x:%02x",
  126. pSetLanCfg->ConfigData.MACAddr[0], pSetLanCfg->ConfigData.MACAddr[1],
  127. pSetLanCfg->ConfigData.MACAddr[2], pSetLanCfg->ConfigData.MACAddr[3],
  128. pSetLanCfg->ConfigData.MACAddr[4], pSetLanCfg->ConfigData.MACAddr[5]);
  129. printf("Execute cmd: %s\n", cmdStr);
  130. sleep(1);
  131. system("ifconfig eth0 down");
  132. system(cmdStr);
  133. system("ifconfig eth0 up");
  134. }
  135. else if(pSetLanCfg->ParameterSelect == LAN_PARAM_SUBNET_MASK)
  136. {
  137. sprintf(cmdStr, "ifconfig eth0 netmask %d.%d.%d.%d",
  138. pSetLanCfg->ConfigData.SubNetMask[0], pSetLanCfg->ConfigData.SubNetMask[1],
  139. pSetLanCfg->ConfigData.SubNetMask[2], pSetLanCfg->ConfigData.SubNetMask[3]);
  140. printf("Execute cmd: %s\n", cmdStr);
  141. sleep(1);
  142. system(cmdStr);
  143. }
  144. else if(pSetLanCfg->ParameterSelect == LAN_PARAM_DEFAULT_GATEWAY_IP)
  145. {
  146. sprintf(cmdStr, "route add default gw %d.%d.%d.%d",
  147. pSetLanCfg->ConfigData.DefaultGatewayIPAddr[0], pSetLanCfg->ConfigData.DefaultGatewayIPAddr[1],
  148. pSetLanCfg->ConfigData.DefaultGatewayIPAddr[2], pSetLanCfg->ConfigData.DefaultGatewayIPAddr[3]);
  149. printf("Execute cmd: %s\n", cmdStr);
  150. sleep(1);
  151. system(cmdStr);
  152. }
  153. }
  154. else if(((MsgPkt.NetFnLUN>>2) == NETFN_STORLEAD)
  155. && (MsgPkt.Cmd == CMD_SET_LAN_INFO))
  156. {
  157. LanInfo_T *pSetLanInfo = (LanInfo_T*)&MsgPkt.Data[2];
  158. sleep(1);
  159. //down
  160. sprintf(cmdStr, "ifconfig eth%d down", index);
  161. printf("%s\n", cmdStr);
  162. system(cmdStr);
  163. //set mac
  164. sprintf(cmdStr, "ifconfig eth%d hw ether %02x:%02x:%02x:%02x:%02x:%02x",
  165. index, pSetLanInfo->MACAddr[0], pSetLanInfo->MACAddr[1],
  166. pSetLanInfo->MACAddr[2], pSetLanInfo->MACAddr[3],
  167. pSetLanInfo->MACAddr[4], pSetLanInfo->MACAddr[5]);
  168. printf("%s\n", cmdStr);
  169. system(cmdStr);
  170. //ip, broadcast, netmask
  171. sprintf(cmdStr, "ifconfig eth%d %d.%d.%d.%d broadcast %d.%d.%d.%d netmask %d.%d.%d.%d up",
  172. index, pSetLanInfo->IPAddr[0], pSetLanInfo->IPAddr[1],
  173. pSetLanInfo->IPAddr[2], pSetLanInfo->IPAddr[3], pSetLanInfo->BroadCast[0],
  174. pSetLanInfo->BroadCast[1], pSetLanInfo->BroadCast[2], pSetLanInfo->BroadCast[3],
  175. pSetLanInfo->NetMask[0], pSetLanInfo->NetMask[1], pSetLanInfo->NetMask[2],
  176. pSetLanInfo->NetMask[3]);
  177. printf("%s\n", cmdStr);
  178. system(cmdStr);
  179. //default gw
  180. sprintf(cmdStr, "route add default gw %d.%d.%d.%d", pSetLanInfo->DefaultGW[0],
  181. pSetLanInfo->DefaultGW[1],pSetLanInfo->DefaultGW[2],pSetLanInfo->DefaultGW[3]);
  182. printf("%s\n", cmdStr);
  183. system(cmdStr);
  184. }
  185. if(isSave)
  186. {
  187. FlushIPMIToFlash();
  188. }
  189. }
  190. }
  191. }
  192. }