summaryrefslogtreecommitdiff
path: root/usr/src/cmd/lms/LMEConnectionCompat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/lms/LMEConnectionCompat.cpp')
-rw-r--r--usr/src/cmd/lms/LMEConnectionCompat.cpp335
1 files changed, 0 insertions, 335 deletions
diff --git a/usr/src/cmd/lms/LMEConnectionCompat.cpp b/usr/src/cmd/lms/LMEConnectionCompat.cpp
deleted file mode 100644
index 6a91067872..0000000000
--- a/usr/src/cmd/lms/LMEConnectionCompat.cpp
+++ /dev/null
@@ -1,335 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * - Neither the name of Intel Corp. nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *******************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <cerrno>
-#include "types.h"
-#include "LMEConnection.h"
-#include "LMS_if_compat.h"
-#include "Lock.h"
-#include "glue.h"
-
-#ifdef _LINUX
-#define _strnicmp strncasecmp
-#endif
-
-extern glue plugin;
-
-const GUID LMEConnection::_guidCompat = {0x3d98d9b7, 0x1ce8, 0x4252, {0xb3, 0x37, 0x2e, 0xff, 0x10, 0x6e, 0xf2, 0x9f}};
-
-int LMEConnection::CompatSendMessage(UINT8 connID, UINT32 len, unsigned char *buffer)
-{
- if (!IsInitialized()) {
- PRINT("[Compat]State: not connected to HECI.\n");
- return -1;
- }
-
- unsigned char sendBuf[1024 + sizeof(LMS_SEND_DATA_MESSAGE)];
- LMS_SEND_DATA_MESSAGE *msg;
-
- if (len > 1024) {
- return -1;
- }
-
- msg = (LMS_SEND_DATA_MESSAGE *)sendBuf;
- msg->MessageType = LMS_MESSAGE_TYPE_SEND_DATA;
- msg->ConnectionId = connID;
- msg->DataLength = htons(len);
- memcpy(msg->Data, buffer, len);
-
- return _sendMessage(sendBuf, sizeof(LMS_SEND_DATA_MESSAGE) + len);
-}
-
-void LMEConnection::CompatCloseConnection(int connID, int status)
-{
- if (!IsInitialized()) {
- PRINT("[Compat]State: not connected to HECI.\n");
- return;
- }
-
- LMS_CLOSE_CONNECTION_MESSAGE msg;
-
- msg.MessageType = LMS_MESSAGE_TYPE_CLOSE_CONNECTION;
- msg.ConnectionId = connID;
- msg.ClosingReason = status;
-
- _sendMessage((unsigned char *)&msg, sizeof(msg));
-}
-
-bool LMEConnection::CompatProtocolVersion()
-{
- if (!IsInitialized()) {
- PRINT("[Compat]State: not connected to HECI.\n");
- return false;
- }
-
- LMS_PROTO_VERSION_MESSAGE msg;
-
- memset(&msg, 0, sizeof(msg));
- msg.MessageType = LMS_MESSAGE_TYPE_PROTO_VERSION;
- msg.ConnectionId = 0;
- msg.Protocol = 0;
-
- PRINT("[Compat]Sending Protocol Version to LME\n");
- int bytesWritten = _sendMessage((unsigned char *)&msg, sizeof(msg));
- return (bytesWritten == sizeof(msg));
-}
-
-bool LMEConnection::CompatRequestIPFQDN()
-{
- if (!IsInitialized()) {
- PRINT("[Compat]State: not connected to HECI.\n");
- return false;
- }
-
- LMS_IP_FQDN_REQUEST_MESSAGE msg;
-
- memset(&msg, 0, sizeof(msg));
- msg.MessageType = LMS_MESSAGE_TYPE_IP_FQDN_REQUEST;
- msg.ConnectionId = 0;
-
- PRINT("[Compat]Sending IP_FQDN request to LME\n");
- int bytesWritten = _sendMessage((unsigned char *)&msg, sizeof(msg));
- return (bytesWritten == sizeof(msg));
-}
-
-bool LMEConnection::CompatOpenConnection(in_port_t mePort, ATAddress addr, unsigned int &connID)
-{
- if (!IsInitialized()) {
- PRINT("[Compat]State: not connected to HECI.\n");
- return false;
- }
-
- unsigned char currReqID = _reqID++;
- bool ret = false;
- LMS_OPEN_CONNECTION_EX_MESSAGE openConnectionExMsg;
- LMS_OPEN_CONNECTION_MESSAGE openConnectionMsg;
- unsigned char *msg = NULL;
- int msgLen = 0;
- size_t addrSize = 0;
- const void *inAddr = addr.inAddr(addrSize);
-
- if (protocolVer == LMS_PROCOL_VERSION_COMPAT) {
- memset(&openConnectionExMsg, 0, sizeof(openConnectionExMsg));
- openConnectionExMsg.MessageType = LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX;
- openConnectionExMsg.ConnectionId = 0;
- openConnectionExMsg.Protocol = LMS_PROTOCOL_TYPE_TCP_IPV4;
- openConnectionExMsg.Flags = 0;
- openConnectionExMsg.OpenRequestId = currReqID;
- memcpy(openConnectionExMsg.Host, inAddr, addrSize);
- openConnectionExMsg.HostPort = htons(addr.inPort());
- openConnectionExMsg.MEPort = htons(mePort);
-
- msg = (unsigned char *)&openConnectionExMsg;
- msgLen = sizeof(openConnectionExMsg);
- PRINT("[Compat]OpenConnectionEx %x (%d) p=%d mp=%d\n",
- *(int *)inAddr, addrSize, addr.inPort(), mePort);
- }
- else {
- memset(&openConnectionMsg, 0, sizeof(openConnectionMsg));
- openConnectionMsg.MessageType = LMS_MESSAGE_TYPE_OPEN_CONNECTION;
- openConnectionMsg.ConnectionId = 0;
- openConnectionMsg.Protocol = LMS_PROTOCOL_TYPE_TCP_IPV4;
- openConnectionMsg.OpenRequestId = currReqID;
- memcpy(openConnectionMsg.HostIPAddress, inAddr, addrSize);
- openConnectionMsg.HostPort = htons(addr.inPort());
- openConnectionMsg.MEPort = htons(mePort);
-
- msg = (unsigned char *)&openConnectionMsg;
- msgLen = sizeof(openConnectionMsg);
- PRINT("[Compat]OpenConnection %x (%d) p=%d mp=%d\n",
- *(int *)inAddr, addrSize, addr.inPort(), mePort);
- }
-
- // save as pending request
- CompatConnection conn;
- conn.event = new Event();
- conn.status = LMS_CONNECTION_STATUS_FAILED;
- conn.connID = 0;
-
- _compatMapLock.acquire();
- _compatPendingConnections[currReqID] = conn;
- _compatMapLock.release();
-
- int bytesWritten;
- bytesWritten = _sendMessage(msg, msgLen);
- if (bytesWritten != msgLen) {
- goto out;
- }
-
- if (conn.event->wait(10000) == false) {
- // no response from FW
- goto out;
- }
-
- ret = true;
-
-out:
- {
- Lock ml(_compatMapLock);
-
- if (_compatPendingConnections[currReqID].status != LMS_CONNECTION_STATUS_OK) {
- ret = false;
- } else {
- connID = _compatPendingConnections[currReqID].connID;
- }
- _compatPendingConnections.erase(currReqID);
- }
-
- delete conn.event;
- conn.event = NULL;
-
- return ret;
-}
-
-void LMEConnection::_doRXCompat()
-{
- unsigned int bytesRead;
- int status = 1;
-
- _threadStartedEvent.set();
-
- unsigned char *rxBuffer = new unsigned char[_heciCompat.GetBufferSize()];
-
- while (true) {
- bytesRead = (unsigned int)_receiveMessage(rxBuffer, _heciCompat.GetBufferSize());
-
- if ((int)bytesRead < 0) {
- PRINT("[Compat]Error receiving data from HECI\n");
- Deinit();
- break;
- }
-
- if (bytesRead == 0) {
- // ERROR
- continue;
- }
-
- PRINT("[Compat]Received from LME %d bytes (msg type %02d)\n", bytesRead, rxBuffer[0]);
-
- if (bytesRead < 2) {
- // ERROR
- continue;
- }
-
- if (plugin.preprocess(rxBuffer, bytesRead) == LMS_DROPPED) {
- continue;
- }
-
- switch (rxBuffer[0]) {
- case LMS_MESSAGE_TYPE_PROTO_VERSION_REPLY:
- CompatRequestIPFQDN();
- break;
-
- case LMS_MESSAGE_TYPE_CLOSE_CONNECTION:
- case LMS_MESSAGE_TYPE_SEND_DATA:
- case LMS_MESSAGE_TYPE_IP_FQDN:
- _cb(_cbParam, rxBuffer, bytesRead, &status);
- break;
-
- case LMS_MESSAGE_TYPE_OPEN_CONNECTION_REPLY:
- {
- LMS_OPEN_CONNECTION_REPLY_MESSAGE *repMsg =
- (LMS_OPEN_CONNECTION_REPLY_MESSAGE *)rxBuffer;
-
- Lock ml(_compatMapLock);
-
- CompatConnMap::iterator itr;
- itr = _compatPendingConnections.find(repMsg->OpenRequestId);
- if (itr != _compatPendingConnections.end()) {
- (*itr).second.connID = repMsg->ConnectionId;
- (*itr).second.status = repMsg->Status;
- (*itr).second.event->set();
- PRINT("[Compat]Open connection reply %d %d =%d\n", repMsg->OpenRequestId, repMsg->ConnectionId, repMsg->Status);
- }
- }
- break;
-
- case LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX:
- {
- // report incoming connection request
- _cb(_cbParam, rxBuffer, bytesRead, &status);
-
- if (IsInitialized() && (status == 1)) {
- if (plugin.retry(rxBuffer, bytesRead) == LMS_DROPPED) {
- continue;
- } else {
- _cb(_cbParam, rxBuffer, bytesRead, &status);
- }
- }
-
- LMS_OPEN_CONNECTION_EX_MESSAGE *msg =
- (LMS_OPEN_CONNECTION_EX_MESSAGE *)rxBuffer;
-
- if ((msg->Flags & HOSTNAME_BIT) != 0) {
- PRINT("[Compat]Got client connection request %d for host %s, port %d\n",
- msg->ConnectionId, msg->Host, ntohs(msg->HostPort));
- }
- else {
- PRINT("[Compat]Got client connection request %d for IP %s, port %d\n",
- msg->ConnectionId, inet_ntoa(*((struct in_addr *)msg->Host)), ntohs(msg->HostPort));
- }
-
- LMS_OPEN_CONNECTION_REPLY_MESSAGE repMsg;
- memset(&repMsg, 0, sizeof(repMsg));
-
- repMsg.MessageType = LMS_MESSAGE_TYPE_OPEN_CONNECTION_REPLY;
- repMsg.ConnectionId = msg->ConnectionId;
- if (status == 0) {
- repMsg.Status = LMS_CONNECTION_STATUS_OK;
- } else {
- repMsg.Status = LMS_CONNECTION_STATUS_FAILED;
- }
-
- DWORD bytesWritten;
- bytesWritten = _sendMessage((unsigned char *)&repMsg, sizeof(repMsg));
- if (bytesWritten != sizeof(repMsg)) {
- PRINT("[Compat]Send Open Connection Reply failed: bytesWritten: %lu\n", bytesWritten);
- }
- }
- break;
-
- default:
- // Uknown request. Ignore
- break;
- }
-
- if (IsInitialized()) {
- plugin.postprocess(rxBuffer, bytesRead, status);
- }
- }
-
- if (rxBuffer != NULL) {
- delete[] rxBuffer;
- }
-}
-