SOL plumbing work. Lots of reformatting.

This commit is contained in:
Jeremy Ellington 2004-07-28 15:01:57 +00:00
parent 5713ee5fc3
commit b27ddb4902

View File

@ -77,8 +77,6 @@ static struct ipmi_rq_entry * ipmi_req_entries;
static struct ipmi_rq_entry * ipmi_req_entries_tail;
static int recv_timeout = IPMI_LAN_TIMEOUT;
static sigjmp_buf jmpbuf;
@ -88,10 +86,12 @@ static struct ipmi_rs * ipmi_lan_poll_recv(struct ipmi_intf * intf);
static struct ipmi_rs * ipmi_lanplus_send_ipmi_cmd(struct ipmi_intf * intf, struct ipmi_rq * req);
static struct ipmi_rs * ipmi_lanplus_send_payload(struct ipmi_intf * intf,
struct ipmi_v2_payload * payload);
static void getIpmiPayloadWireRep(unsigned char * out,
struct ipmi_rq * req,
unsigned char rq_seq);
static void getSolPayloadWireRep(unsigned char * msg,
static void getIpmiPayloadWireRep(
unsigned char * out,
struct ipmi_rq * req,
unsigned char rq_seq);
static void getSolPayloadWireRep(
unsigned char * msg,
struct ipmi_v2_payload * payload);
static void read_open_session_response(struct ipmi_rs * rsp, int offset);
static void read_rakp2_message(struct ipmi_rs * rsp, int offset, unsigned char alg);
@ -102,11 +102,14 @@ static void read_session_data_v2x(struct ipmi_rs * rsp, int * offset, struct ipm
static void read_ipmi_response(struct ipmi_rs * rsp, int * offset);
static void read_sol_packet(struct ipmi_rs * rsp, int * offset);
static struct ipmi_rs * ipmi_lanplus_recv_sol(struct ipmi_intf * intf);
static struct ipmi_rs * ipmi_lanplus_send_sol(struct ipmi_intf * intf,
static struct ipmi_rs * ipmi_lanplus_send_sol(
struct ipmi_intf * intf,
struct ipmi_v2_payload * payload);
static int check_sol_packet_for_data(struct ipmi_intf * intf,
static int check_sol_packet_for_data(
struct ipmi_intf * intf,
struct ipmi_rs *rsp);
static void ack_sol_packet(struct ipmi_intf * intf,
static void ack_sol_packet(
struct ipmi_intf * intf,
struct ipmi_rs * rsp);
@ -125,8 +128,9 @@ extern int verbose;
/*
* Reverse the order of arbitrarily long strings of bytes
*/
void lanplus_swap(unsigned char * buffer,
int length)
void lanplus_swap(
unsigned char * buffer,
int length)
{
int i;
unsigned char temp;
@ -245,7 +249,11 @@ ipmi_req_clear_entries(void)
}
int ipmi_lan_send_packet(struct ipmi_intf * intf, unsigned char * data, int data_len)
int
ipmi_lan_send_packet(
struct ipmi_intf * intf,
unsigned char * data, int
data_len)
{
if (verbose >= 2)
printbuf(data, data_len, ">> sending packet");
@ -255,7 +263,8 @@ int ipmi_lan_send_packet(struct ipmi_intf * intf, unsigned char * data, int data
struct ipmi_rs * ipmi_lan_recv_packet(struct ipmi_intf * intf)
struct ipmi_rs *
ipmi_lan_recv_packet(struct ipmi_intf * intf)
{
static struct ipmi_rs rsp;
int rc;
@ -266,7 +275,7 @@ struct ipmi_rs * ipmi_lan_recv_packet(struct ipmi_intf * intf)
return NULL;
}
alarm(recv_timeout);
alarm(intf->session->timeout);
rc = recv(intf->fd, &rsp.data, BUF_SIZE, 0);
alarm(0);
@ -281,7 +290,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(recv_timeout);
alarm(intf->session->timeout);
rc = recv(intf->fd, &rsp.data, BUF_SIZE, 0);
alarm(0);
if (rc < 0) {
@ -718,7 +727,8 @@ ipmi_lan_poll_recv(struct ipmi_intf * intf)
*
* returns 0 on success, 1 on error
*/
void read_open_session_response(struct ipmi_rs * rsp, int offset)
void
read_open_session_response(struct ipmi_rs * rsp, int offset)
{
/* Message tag */
rsp->payload.open_session_response.message_tag = rsp->data[offset];
@ -772,7 +782,11 @@ void read_open_session_response(struct ipmi_rs * rsp, int offset)
*
* returns 0 on success, 1 on error
*/
void read_rakp2_message(struct ipmi_rs * rsp, int offset, unsigned char auth_alg)
void
read_rakp2_message(
struct ipmi_rs * rsp,
int offset,
unsigned char auth_alg)
{
int i;
@ -822,13 +836,15 @@ void read_rakp2_message(struct ipmi_rs * rsp, int offset, unsigned char auth_alg
break;
case IPMI_AUTH_RAKP_HMAC_MD5:
printf("read_rakp2_message: no support for IPMI_AUTH_RAKP_HMAC_MD5\n");
printf("read_rakp2_message: no support for "
"IPMI_AUTH_RAKP_HMAC_MD5\n");
assert(0);
break;
}
}
/*
* read_rakp4_message
*
@ -847,7 +863,11 @@ void read_rakp2_message(struct ipmi_rs * rsp, int offset, unsigned char auth_alg
*
* returns 0 on success, 1 on error
*/
void read_rakp4_message(struct ipmi_rs * rsp, int offset, unsigned char integrity_alg)
void
read_rakp4_message(
struct ipmi_rs * rsp,
int offset,
unsigned char integrity_alg)
{
int i;
@ -903,12 +923,16 @@ void read_rakp4_message(struct ipmi_rs * rsp, int offset, unsigned char integrit
*
* param rsp [in/out] we read from the data buffer and populate the session
* specific fields.
* param offset [in/out] should point to the beginning of the session when this
* function is called. The offset will be adjusted to point to the
* end of the session when this function exits.
* param offset [in/out] should point to the beginning of the session when
* this function is called. The offset will be adjusted to
* point to the end of the session when this function exits.
* param session holds our session state
*/
void read_session_data(struct ipmi_rs * rsp, int * offset, struct ipmi_session * s)
void
read_session_data(
struct ipmi_rs * rsp,
int * offset,
struct ipmi_session * s)
{
/* We expect to read different stuff depending on the authtype */
rsp->session.authtype = rsp->data[*offset];
@ -935,13 +959,15 @@ void read_session_data(struct ipmi_rs * rsp, int * offset, struct ipmi_session *
* param rsp [in/out] we read from the data buffer and populate the session
* specific fields.
* param offset [in/out] should point to the beginning of the session when this
* function is called. The offset will be adjusted to point to the
* end of the session when this function exits.
* param s holds our session state
* function is called. The offset will be adjusted to point to
* the end of the session when this function exits.
* param s holds our session state
*/
void read_session_data_v2x(struct ipmi_rs * rsp,
int * offset,
struct ipmi_session * s)
void
read_session_data_v2x(
struct ipmi_rs * rsp,
int * offset,
struct ipmi_session * s)
{
rsp->session.authtype = rsp->data[(*offset)++];
@ -1004,7 +1030,10 @@ void read_session_data_v2x(struct ipmi_rs * rsp,
* end of the session when this function exits.
* param s holds our session state
*/
void read_session_data_v15(struct ipmi_rs * rsp, int * offset, struct ipmi_session * s)
void read_session_data_v15(
struct ipmi_rs * rsp,
int * offset,
struct ipmi_session * s)
{
/* All v15 messages are IPMI messages */
rsp->session.payloadtype = IPMI_PAYLOAD_TYPE_IPMI;
@ -1136,7 +1165,8 @@ void read_sol_packet(struct ipmi_rs * rsp, int * offset)
* param crypt_alg [in] specifies the encryption to use
* param rq_seq [in] is the IPMI command sequence number.
*/
void getIpmiPayloadWireRep(unsigned char * msg,
void getIpmiPayloadWireRep(
unsigned char * msg,
struct ipmi_rq * req,
unsigned char rq_seq)
{
@ -1188,7 +1218,8 @@ void getIpmiPayloadWireRep(unsigned char * msg,
* param msg [out] will contain our wire representation
* param payload [in] holds the v2 payload with our SOL data
*/
void getSolPayloadWireRep(unsigned char * msg, /* output */
void getSolPayloadWireRep(
unsigned char * msg, /* output */
struct ipmi_v2_payload * payload) /* input */
{
int i = 0;
@ -1256,10 +1287,11 @@ void getSolPayloadWireRep(unsigned char * msg, /* output */
* +----------------------+
*/
void
ipmi_lanplus_build_v2x_msg(struct ipmi_intf * intf, /* in */
struct ipmi_v2_payload * payload, /* in */
int * msg_len, /* out */
unsigned char ** msg_data) /* out */
ipmi_lanplus_build_v2x_msg(
struct ipmi_intf * intf, /* in */
struct ipmi_v2_payload * payload, /* in */
int * msg_len, /* out */
unsigned char ** msg_data) /* out */
{
unsigned int session_trailer_length = 0;
struct ipmi_session * session = intf->session;
@ -1401,7 +1433,7 @@ void
*/
if (session->v2_data.session_state == LANPLUS_STATE_ACTIVE)
{
/* Payload length is adjusted as necessary by lanplus_encrypt_payload */
/* Payload len is adjusted as necessary by lanplus_encrypt_payload */
lanplus_encrypt_payload(session->v2_data.crypt_alg, /* input */
session->v2_data.k2, /* input */
msg + IPMI_LANPLUS_OFFSET_PAYLOAD, /* input */
@ -1413,8 +1445,10 @@ void
/* Now we know the payload length */
msg[IMPI_LANPLUS_OFFSET_PAYLOAD_SIZE ] = payload->payload_length & 0xff;
msg[IMPI_LANPLUS_OFFSET_PAYLOAD_SIZE + 1] = (payload->payload_length >> 8) & 0xff;
msg[IMPI_LANPLUS_OFFSET_PAYLOAD_SIZE ] =
payload->payload_length & 0xff;
msg[IMPI_LANPLUS_OFFSET_PAYLOAD_SIZE + 1] =
(payload->payload_length >> 8) & 0xff;
@ -1519,8 +1553,9 @@ void
*
*/
static struct ipmi_rq_entry *
ipmi_lanplus_build_v2x_ipmi_cmd(struct ipmi_intf * intf,
struct ipmi_rq * req)
ipmi_lanplus_build_v2x_ipmi_cmd(
struct ipmi_intf * intf,
struct ipmi_rq * req)
{
struct ipmi_v2_payload v2_payload;
struct ipmi_rq_entry * entry;
@ -1602,7 +1637,9 @@ static struct ipmi_rq_entry *
* +--------------------+
*/
static struct ipmi_rq_entry *
ipmi_lanplus_build_v15_ipmi_cmd(struct ipmi_intf * intf, struct ipmi_rq * req)
ipmi_lanplus_build_v15_ipmi_cmd(
struct ipmi_intf * intf,
struct ipmi_rq * req)
{
struct rmcp_hdr rmcp = {
.ver = RMCP_VERSION_1,
@ -1712,13 +1749,44 @@ static struct ipmi_rq_entry *
/*
* is_sol_packet
*/
static int
is_sol_packet(struct ipmi_rs * rsp)
{
return (rsp &&
(rsp->session.authtype == IPMI_SESSION_AUTHTYPE_RMCP_PLUS) &&
(rsp->session.payloadtype == IPMI_PAYLOAD_TYPE_SOL));
}
/*
* sol_response_acks_packet
*/
static int
sol_response_acks_packet(
struct ipmi_rs * rsp,
struct ipmi_v2_payload * payload)
{
return (is_sol_packet(rsp) &&
payload &&
(payload->payload_type == IPMI_PAYLOAD_TYPE_SOL) &&
(rsp->payload.sol_packet.acked_packet_number ==
payload->payload.sol_packet.packet_sequence_number));
}
/*
* ipmi_lanplus_send_payload
*
*/
struct ipmi_rs *
ipmi_lanplus_send_payload(struct ipmi_intf * intf,
struct ipmi_v2_payload * payload)
ipmi_lanplus_send_payload(
struct ipmi_intf * intf,
struct ipmi_v2_payload * payload)
{
struct ipmi_rs * rsp;
unsigned char * msg_data;
@ -1862,9 +1930,9 @@ struct ipmi_rs *
if (intf->pedantic)
ipmi_lan_pedantic(intf);
usleep(100);
usleep(100); /* Not sure what this is for */
/* Remember our connection state */
switch (payload->payload_type)
{
case IPMI_PAYLOAD_TYPE_RMCP_OPEN_REQUEST:
@ -1878,48 +1946,75 @@ struct ipmi_rs *
break;
}
/*
* Special case for SOL outbound packets.
*
* Non-ACK packets require an ACK from the BMC (that matches
* our packet!).
*
* While waiting for our ACK, it's very possible that we
* will receive additional data form the BMC (that we will have
* to ACK).
*
* Also, this is not perfectly correct. We would like
* to give the appropriate timeout for SOL retries, but our
* timeout mechanism is in our recv() call. Thus _any_
* incoming packet from the BMC will use up one of our tries,
* even if it is not our ACK, and even if it comes in before
* our retry timeout. I will make this code more sophisticated
* (!!!) if I see that this is a problem.
*
* Yet another issue. If we get nack at this point, we are
* basically screwed because we can't adjust our data here. We
* have been encrypted in a frame above. I have no way of testing
* NACKS now anyway. If I see that this is a problem, I will
* make this code more sophisticated.
*/
if (payload->payload_type == IPMI_PAYLOAD_TYPE_SOL)
{
//if (! payload->payload.sol_packet.packet_sequence_number)
//{
/* This was just an ACK. We can leave now. No retry. */
if (! payload->payload.sol_packet.packet_sequence_number)
{
/* We're just sending an ACK. No need to retry. */
break;
//}
}
//int try_count = 1;
rsp = ipmi_lanplus_recv_sol(intf); /* Grab the next packet */
if (sol_response_acks_packet(rsp, payload))
break;
// jme : todo. We need to wait for an ack. And if we
// don't receive an ACK, we need to resend.
/* We need an ACK */
//for (try_count = 1; try_count < 3; ++try_count)
//{
// rsp = ipmi_lan_poll_recv(intf);
/* Sets our last see */
// handleIncomingSolPacket(rsp);
// if (acksPacket(rsp, payload))
// break;
//}
//break;
else if (is_sol_packet(rsp) && rsp->data_len)
{
/*
* We're still waiting for our ACK, but we more daa from
* the BMC
*/
intf->session->sol_data.sol_input_handler(rsp);
}
}
/*
* This call is NOT made for SOL packets
*/
rsp = ipmi_lan_poll_recv(intf);
if (rsp)
break;
/* Non-SOL processing */
else
{
rsp = ipmi_lan_poll_recv(intf);
if (rsp)
break;
usleep(5000);
}
usleep(5000);
try++;
}
/* IPMI messages are deleted under ipmi_lan_poll_recv() */
if (payload->payload_type == IPMI_PAYLOAD_TYPE_SOL)
free(msg_data);
return rsp;
}
@ -1928,13 +2023,16 @@ struct ipmi_rs *
/*
* ipmi_lanplus_send_sol
*
* Sends a SOL packet
* Sends a SOL packet.
*
* return 0 on success
* -1 on error
* Returns a pointer to the SOL ACK we received, or
* 0 on failure
*
*/
struct ipmi_rs * ipmi_lanplus_send_sol(struct ipmi_intf * intf,
struct ipmi_v2_payload * v2_payload)
struct ipmi_rs *
ipmi_lanplus_send_sol(
struct ipmi_intf * intf,
struct ipmi_v2_payload * v2_payload)
{
struct ipmi_rs * rs;
@ -1975,8 +2073,10 @@ struct ipmi_rs * ipmi_lanplus_send_sol(struct ipmi_intf * intf,
*
* returns the number of new bytes in the SOL packet
*/
static int check_sol_packet_for_new_data(struct ipmi_intf * intf,
struct ipmi_rs *rsp)
static int
check_sol_packet_for_new_data(
struct ipmi_intf * intf,
struct ipmi_rs *rsp)
{
static unsigned char last_received_sequence_number = 0;
static unsigned char last_received_byte_count = 0;
@ -2039,8 +2139,10 @@ static int check_sol_packet_for_new_data(struct ipmi_intf * intf,
*
* Provided the specified packet looks reasonable, ACK it.
*/
static void ack_sol_packet(struct ipmi_intf * intf,
struct ipmi_rs * rsp)
static void
ack_sol_packet(
struct ipmi_intf * intf,
struct ipmi_rs * rsp)
{
if (rsp &&
(rsp->session.authtype == IPMI_SESSION_AUTHTYPE_RMCP_PLUS) &&
@ -2079,7 +2181,8 @@ static void ack_sol_packet(struct ipmi_intf * intf,
* Receive a SOL packet and send an ACK in response.
*
*/
struct ipmi_rs * ipmi_lanplus_recv_sol(struct ipmi_intf * intf)
struct ipmi_rs *
ipmi_lanplus_recv_sol(struct ipmi_intf * intf)
{
struct ipmi_rs * rsp = ipmi_lan_poll_recv(intf);
@ -2102,7 +2205,9 @@ struct ipmi_rs * ipmi_lanplus_recv_sol(struct ipmi_intf * intf)
* Build a payload request and dispatch it.
*/
struct ipmi_rs *
ipmi_lanplus_send_ipmi_cmd(struct ipmi_intf * intf, struct ipmi_rq * req)
ipmi_lanplus_send_ipmi_cmd(
struct ipmi_intf * intf,
struct ipmi_rq * req)
{
struct ipmi_v2_payload v2_payload;
@ -2133,8 +2238,10 @@ struct ipmi_rs *
* get a successful response
*
*/
static int ipmi_get_auth_capabilities_cmd(struct ipmi_intf * intf,
struct get_channel_auth_cap_rsp * auth_cap)
static int
ipmi_get_auth_capabilities_cmd(
struct ipmi_intf * intf,
struct get_channel_auth_cap_rsp * auth_cap)
{
struct ipmi_rs * rsp;
struct ipmi_rq req;
@ -2154,8 +2261,8 @@ static int ipmi_get_auth_capabilities_cmd(struct ipmi_intf * intf,
if (!rsp || rsp->ccode) {
/*
* It's very possible that this failed because we asked for IPMI v2 data.
* Ask again, without requesting IPMI v2 data
* It's very possible that this failed because we asked for IPMI
* v2 data. Ask again, without requesting IPMI v2 data.
*/
msg_data[0] &= 0x7F;
@ -2179,7 +2286,8 @@ static int ipmi_get_auth_capabilities_cmd(struct ipmi_intf * intf,
static int impi_close_session_cmd(struct ipmi_intf * intf)
static int
impi_close_session_cmd(struct ipmi_intf * intf)
{
struct ipmi_rs * rsp;
struct ipmi_rq req;
@ -2235,7 +2343,8 @@ static int impi_close_session_cmd(struct ipmi_intf * intf)
* Build and send the open session command. See section 13.17 of the IPMI
* v2 specification for details.
*/
static int ipmi_lanplus_open_session(struct ipmi_intf * intf)
static int
ipmi_lanplus_open_session(struct ipmi_intf * intf)
{
struct ipmi_v2_payload v2_payload;
struct ipmi_session * session = intf->session;
@ -2325,12 +2434,18 @@ static int ipmi_lanplus_open_session(struct ipmi_intf * intf)
session->v2_data.console_id)
printf("Warning: Console session ID is not what we requested\n");
session->v2_data.max_priv_level = rsp->payload.open_session_response.max_priv_level;
session->v2_data.bmc_id = rsp->payload.open_session_response.bmc_id;
session->v2_data.auth_alg = rsp->payload.open_session_response.auth_alg;
session->v2_data.integrity_alg = rsp->payload.open_session_response.integrity_alg;
session->v2_data.crypt_alg = rsp->payload.open_session_response.crypt_alg;
session->v2_data.session_state = LANPLUS_STATE_OPEN_SESSION_RECEIEVED;
session->v2_data.max_priv_level =
rsp->payload.open_session_response.max_priv_level;
session->v2_data.bmc_id =
rsp->payload.open_session_response.bmc_id;
session->v2_data.auth_alg =
rsp->payload.open_session_response.auth_alg;
session->v2_data.integrity_alg =
rsp->payload.open_session_response.integrity_alg;
session->v2_data.crypt_alg =
rsp->payload.open_session_response.crypt_alg;
session->v2_data.session_state =
LANPLUS_STATE_OPEN_SESSION_RECEIEVED;
}
return rc;
@ -2349,12 +2464,14 @@ static int ipmi_lanplus_open_session(struct ipmi_intf * intf)
* returns 0 on success
* 1 on failure
*
* Note that failure is only indicated if we have an internal error of some kind. If
* we actually get a RAKP 2 message in response to our RAKP 1 message, any errors
* will be stored in session->v2_data.rakp2_return_code and sent to the BMC in
* the RAKP 3 message.
* Note that failure is only indicated if we have an internal error of
* some kind. If we actually get a RAKP 2 message in response to our
* RAKP 1 message, any errors will be stored in
* session->v2_data.rakp2_return_code and sent to the BMC in the RAKP
* 3 message.
*/
static int ipmi_lanplus_rakp1(struct ipmi_intf * intf)
static int
ipmi_lanplus_rakp1(struct ipmi_intf * intf)
{
struct ipmi_v2_payload v2_payload;
struct ipmi_session * session = intf->session;
@ -2395,7 +2512,8 @@ static int ipmi_lanplus_rakp1(struct ipmi_intf * intf)
#endif
if (verbose > 1)
printbuf(session->v2_data.console_rand, 16, ">> Console generated random number");
printbuf(session->v2_data.console_rand, 16,
">> Console generated random number");
/*
@ -2486,15 +2604,16 @@ static int ipmi_lanplus_rakp1(struct ipmi_intf * intf)
* from the BMC, here. See section 13.20 of the IPMI v2 specification for
* details.
*
* If the RAKP 2 return code is not IPMI_RAKP_STATUS_NO_ERRORS, we will exit with
* an error code immediately after sendint the RAKP 3 message.
* If the RAKP 2 return code is not IPMI_RAKP_STATUS_NO_ERRORS, we will
* exit with an error code immediately after sendint the RAKP 3 message.
*
* param intf is the intf that holds all the state we are concerned with
*
* returns 0 on success
* 1 on failure
*/
static int ipmi_lanplus_rakp3(struct ipmi_intf * intf)
static int
ipmi_lanplus_rakp3(struct ipmi_intf * intf)
{
struct ipmi_v2_payload v2_payload;
struct ipmi_session * session = intf->session;
@ -2527,10 +2646,10 @@ static int ipmi_lanplus_rakp3(struct ipmi_intf * intf)
v2_payload.payload.rakp_1_message.message = msg;
/*
* If the rakp2 return code indicates and error, we don't have to generate an
* authcode or session integrity key. In that case, we are simply sending a
* RAKP 3 message to indicate to the BMC that the RAKP 2 message caused an
* error.
* If the rakp2 return code indicates and error, we don't have to
* generate an authcode or session integrity key. In that case, we
* are simply sending a RAKP 3 message to indicate to the BMC that the
* RAKP 2 message caused an error.
*/
if (session->v2_data.rakp2_return_code == IPMI_RAKP_STATUS_NO_ERRORS)
{
@ -2637,7 +2756,8 @@ static int ipmi_lanplus_rakp3(struct ipmi_intf * intf)
/**
* ipmi_lan_close
*/
void ipmi_lanplus_close(struct ipmi_intf * intf)
void
ipmi_lanplus_close(struct ipmi_intf * intf)
{
if (!intf->abort)
impi_close_session_cmd(intf);
@ -2659,7 +2779,8 @@ void ipmi_lanplus_close(struct ipmi_intf * intf)
/**
* ipmi_lanplus_open
*/
int ipmi_lanplus_open(struct ipmi_intf * intf)
int
ipmi_lanplus_open(struct ipmi_intf * intf)
{
int rc;
struct sigaction act;
@ -2696,6 +2817,7 @@ int 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 */
@ -2726,7 +2848,8 @@ int ipmi_lanplus_open(struct ipmi_intf * intf)
/* connect to UDP socket so we get async errors */
rc = connect(intf->fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
rc = connect(intf->fd,
(struct sockaddr *)&addr, sizeof(struct sockaddr_in));
if (rc < 0) {
perror("connect failed");
intf->close(intf);
@ -2758,7 +2881,8 @@ int ipmi_lanplus_open(struct ipmi_intf * intf)
if (ipmi_get_auth_capabilities_cmd(intf, &auth_cap));
{
if (verbose)
printf("Error issuing Get Channel Authentication Capabilies request\n");
printf("Error issuing Get Channel Authentication "
"Capabilies request\n");
goto fail;
}
}
@ -2899,7 +3023,8 @@ void test_crypt2()
/**
* lanplus_intf_setup
*/
int lanplus_intf_setup(struct ipmi_intf ** intf)
int
lanplus_intf_setup(struct ipmi_intf ** intf)
{
//test_crypt1();
assert("lanplus_intf_setup");
@ -2914,4 +3039,6 @@ int lanplus_intf_setup(struct ipmi_intf ** intf)
}
int intf_setup(struct ipmi_intf ** intf) __attribute__ ((weak, alias("lanplus_intf_setup")));
int
intf_setup(struct ipmi_intf ** intf)
__attribute__ ((weak, alias("lanplus_intf_setup")));