diff options
Diffstat (limited to 'src/plugins/lanplus/lanplus.c')
-rw-r--r-- | src/plugins/lanplus/lanplus.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/plugins/lanplus/lanplus.c b/src/plugins/lanplus/lanplus.c index 8776212..2a89a14 100644 --- a/src/plugins/lanplus/lanplus.c +++ b/src/plugins/lanplus/lanplus.c @@ -57,6 +57,7 @@ #include <ipmitool/ipmi_lanp.h> #include <ipmitool/ipmi_channel.h> #include <ipmitool/ipmi_intf.h> +#include <ipmitool/ipmi_sel.h> #include <ipmitool/ipmi_strings.h> #include <ipmitool/hpm2.h> #include <ipmitool/bswap.h> @@ -606,7 +607,7 @@ ipmiv2_lan_ping(struct ipmi_intf * intf) * Receive whatever comes back. Ignore received packets that don't correspond * to a request we've sent. * - * Returns: the ipmi_rs packet describing the/a reponse we expect. + * Returns: the ipmi_rs packet describing the/a response we expect. */ static struct ipmi_rs * ipmi_lan_poll_single(struct ipmi_intf * intf) @@ -651,7 +652,7 @@ ipmi_lan_poll_single(struct ipmi_intf * intf) * * 1) An IPMI 1.5 packet (the response to our GET CHANNEL * AUTHENTICATION CAPABILITIES request) - * 2) An RMCP+ message with an IPMI reponse payload + * 2) An RMCP+ message with an IPMI response payload * 3) AN RMCP+ open session response * 4) An RAKP-2 message (response to an RAKP 1 message) * 5) An RAKP-4 message (response to an RAKP 3 message) @@ -662,6 +663,21 @@ ipmi_lan_poll_single(struct ipmi_intf * intf) read_session_data(rsp, &offset, intf->session); + /* + * Skip packets that are not intended for this session + */ + if ((session->v2_data.session_state == LANPLUS_STATE_ACTIVE) && + (rsp->session.authtype == IPMI_SESSION_AUTHTYPE_RMCP_PLUS) && + (rsp->session.id != intf->session->v2_data.console_id)) + { + lprintf(LOG_INFO, "packet session id 0x%x does not " + "match active session 0x%0x", + rsp->session.id, intf->session->v2_data.console_id); + lprintf(LOG_ERR, "ERROR: Received an Unexpected message ID"); + /* read one more packet */ + return (struct ipmi_rs *)1; + } + if (lanplus_has_valid_auth_code(rsp, intf->session) == 0) { lprintf(LOG_ERR, "ERROR: Received message with invalid authcode!"); return NULL; @@ -681,7 +697,7 @@ ipmi_lan_poll_single(struct ipmi_intf * intf) } /* - * Handle IPMI responses (case #1 and #2) -- all IPMI reponses + * Handle IPMI responses (case #1 and #2) -- all IPMI responses */ if (rsp->session.payloadtype == IPMI_PAYLOAD_TYPE_IPMI) { struct ipmi_rq_entry * entry; @@ -863,7 +879,7 @@ ipmi_lan_poll_single(struct ipmi_intf * intf) * Receive whatever comes back. Ignore received packets that don't correspond * to a request we've sent. * - * Returns: the ipmi_rs packet describing the/a reponse we expect. + * Returns: the ipmi_rs packet describing the/a response we expect. */ static struct ipmi_rs * ipmi_lan_poll_recv(struct ipmi_intf * intf) @@ -881,7 +897,7 @@ ipmi_lan_poll_recv(struct ipmi_intf * intf) /* - * read_open_session_reponse + * read_open_session_response * * Initialize the ipmi_rs from the IPMI 2.x open session response data. * @@ -903,7 +919,7 @@ read_open_session_response(struct ipmi_rs * rsp, int offset) /* Message tag */ rsp->payload.open_session_response.message_tag = rsp->data[offset]; - /* RAKP reponse code */ + /* RAKP response code */ rsp->payload.open_session_response.rakp_return_code = rsp->data[offset + 1]; /* Maximum privilege level */ @@ -970,7 +986,7 @@ read_rakp2_message( /* Message tag */ rsp->payload.rakp2_message.message_tag = rsp->data[offset]; - /* RAKP reponse code */ + /* RAKP response code */ rsp->payload.rakp2_message.rakp_return_code = rsp->data[offset + 1]; /* Console session ID */ @@ -1051,7 +1067,7 @@ read_rakp4_message( /* Message tag */ rsp->payload.rakp4_message.message_tag = rsp->data[offset]; - /* RAKP reponse code */ + /* RAKP response code */ rsp->payload.rakp4_message.rakp_return_code = rsp->data[offset + 1]; /* Console session ID */ @@ -1162,19 +1178,6 @@ read_session_data_v2x( #endif - /* - * Verify that the session ID is what we think it should be - */ - if ((s->v2_data.session_state == LANPLUS_STATE_ACTIVE) && - (rsp->session.id != s->v2_data.console_id)) - { - lprintf(LOG_ERR, "packet session id 0x%x does not " - "match active session 0x%0x", - rsp->session.id, s->v2_data.console_id); - assert(0); - } - - /* Ignored, so far */ memcpy(&rsp->session.seq, rsp->data + *offset, 4); *offset += 4; @@ -1399,10 +1402,6 @@ void getIpmiPayloadWireRep( msg[len++] = IPMI_REMOTE_SWID; msg[len++] = curr_seq << 2; msg[len++] = 0x34; /* Send Message rqst */ - #if 0 /* From lan.c example */ - entry->req.msg.target_cmd = entry->req.msg.cmd; /* Save target command */ - entry->req.msg.cmd = 0x34; /* (fixup request entry) */ - #endif msg[len++] = (0x40|intf->target_channel); /* Track request*/ payload->payload_length += 7; @@ -2101,7 +2100,7 @@ ipmi_lanplus_send_payload( struct ipmi_v2_payload * payload) { struct ipmi_rs * rsp = NULL; - uint8_t * msg_data; + uint8_t * msg_data = NULL; int msg_length; struct ipmi_session * session = intf->session; struct ipmi_rq_entry * entry = NULL; @@ -2341,6 +2340,7 @@ ipmi_lanplus_send_payload( case IPMI_PAYLOAD_TYPE_RMCP_OPEN_REQUEST: case IPMI_PAYLOAD_TYPE_RAKP_1: case IPMI_PAYLOAD_TYPE_RAKP_3: + case IPMI_PAYLOAD_TYPE_SOL: free(msg_data); msg_data = NULL; break; @@ -3416,7 +3416,7 @@ ipmi_lanplus_open(struct ipmi_intf * intf) if (!ipmi_oem_active(intf, "i82571spt") && ipmi_get_auth_capabilities_cmd(intf, &auth_cap)) { lprintf(LOG_INFO, "Error issuing Get Channel " - "Authentication Capabilies request"); + "Authentication Capabilities request"); goto fail; } |