PendActionTask.c 6.1 KB

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