add ability to configure session retry and timeout settings,

add chassis power status command with return value indicating status
This commit is contained in:
Duncan Laurie 2005-04-20 23:04:00 +00:00
parent fecfc09c8b
commit 90448837ec
6 changed files with 43 additions and 7 deletions

View File

@ -52,5 +52,6 @@
#define IPMI_CHASSIS_POLICY_ALWAYS_OFF 0x0
int ipmi_chassis_main(struct ipmi_intf *, int, char **);
int ipmi_chassis_power_status(struct ipmi_intf * intf);
#endif /*IPMI_CHASSIS_H*/

View File

@ -85,6 +85,7 @@ struct ipmi_session {
int password;
int port;
int active;
int retry;
uint32_t session_id;
uint32_t in_seq;
@ -193,6 +194,8 @@ void ipmi_intf_session_set_privlvl(struct ipmi_intf * intf, uint8_t privlvl);
void ipmi_intf_session_set_cipher_suite_id(struct ipmi_intf * intf, uint8_t cipher_suite_id);
void ipmi_intf_session_set_port(struct ipmi_intf * intf, int port);
void ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype);
void ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout);
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry);
void ipmi_cleanup(struct ipmi_intf * intf);
#endif /* IPMI_INTF_H */

View File

@ -46,7 +46,7 @@
extern int verbose;
static int
int
ipmi_chassis_power_status(struct ipmi_intf * intf)
{
struct ipmi_rs * rsp;
@ -68,7 +68,14 @@ ipmi_chassis_power_status(struct ipmi_intf * intf)
return -1;
}
printf("Chassis Power is %s\n", (rsp->data[0] & 0x1) ? "on" : "off");
return rsp->data[0] & 1;
}
static int
ipmi_chassis_print_power_status(struct ipmi_intf * intf)
{
printf("Chassis Power is %s\n",
ipmi_chassis_power_status(intf) ? "on" : "off");
return 0;
}

View File

@ -242,6 +242,24 @@ ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype)
intf->session->authtype_set = authtype;
}
void
ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout)
{
if (intf->session == NULL)
return;
intf->session->timeout = timeout;
}
void
ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry)
{
if (intf->session == NULL)
return;
intf->session->retry = retry;
}
void
ipmi_cleanup(struct ipmi_intf * intf)
{

View File

@ -223,7 +223,7 @@ struct ipmi_rs * ipmi_lan_recv_packet(struct ipmi_intf * intf)
return NULL;
}
alarm(IPMI_LAN_TIMEOUT);
alarm(intf->session->timeout);
rc = recv(intf->fd, &rsp.data, IPMI_BUF_SIZE, 0);
alarm(0);
@ -238,7 +238,7 @@ struct ipmi_rs * ipmi_lan_recv_packet(struct ipmi_intf * intf)
* response is read before the connection refused is returned)
*/
if (rc < 0) {
alarm(IPMI_LAN_TIMEOUT);
alarm(intf->session->timeout);
rc = recv(intf->fd, &rsp.data, IPMI_BUF_SIZE, 0);
alarm(0);
if (rc < 0) {
@ -726,7 +726,7 @@ ipmi_lan_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req)
break;
usleep(5000);
if (++try >= IPMI_LAN_RETRY) {
if (++try >= intf->session->retry) {
lprintf(LOG_DEBUG, " No response from remote controller");
break;
}
@ -1336,6 +1336,10 @@ int ipmi_lan_open(struct ipmi_intf * intf)
s->port = IPMI_LAN_PORT;
if (s->privlvl == 0)
s->privlvl = IPMI_SESSION_PRIV_ADMIN;
if (s->timeout == 0)
s->timeout = IPMI_LAN_TIMEOUT;
if (s->retry == 0)
s->retry = IPMI_LAN_RETRY;
if (s->hostname == NULL || strlen(s->hostname) == 0) {
lprintf(LOG_ERR, "No hostname specified!");

View File

@ -2010,7 +2010,7 @@ ipmi_lanplus_send_payload(
}
while (try < IPMI_LAN_RETRY) {
while (try < session->retry) {
if (ipmi_lan_send_packet(intf, msg_data, msg_length) < 0) {
@ -3022,6 +3022,10 @@ ipmi_lanplus_open(struct ipmi_intf * intf)
session->port = IPMI_LANPLUS_PORT;
if (!session->privlvl)
session->privlvl = IPMI_SESSION_PRIV_USER;
if (!session->timeout)
session->timeout = IPMI_LAN_TIMEOUT;
if (!session->retry)
session->retry = IPMI_LAN_RETRY;
if (session->hostname == NULL || strlen(session->hostname) == 0) {
lprintf(LOG_ERR, "No hostname specified!");
@ -3042,7 +3046,6 @@ ipmi_lanplus_open(struct ipmi_intf * intf)
//session->sol_data.last_received_byte_count = 0;
memset(session->v2_data.sik, 0, IPMI_SIK_BUFFER_SIZE);
memset(session->v2_data.kg, 0, IPMI_KG_BUFFER_SIZE);
session->timeout = IPMI_LAN_TIMEOUT;
/* open port to BMC */