LMS_if_compat.h revision 617e2443dfc17fe44fd44c0675d6aad2ffc9df42
/*******************************************************************************
* 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.
*******************************************************************************/
#ifndef _LMS_IF_COMPAT_H_
#define _LMS_IF_COMPAT_H_
#include "types.h"
// disable the "zero-sized array" warning in Visual C++
#ifdef _MSC_VER
#pragma warning(disable:4200)
#endif
#pragma pack(1)
typedef enum {
LMS_MESSAGE_TYPE_OPEN_CONNECTION = 0x01,
LMS_MESSAGE_TYPE_OPEN_CONNECTION_REPLY = 0x02,
LMS_MESSAGE_TYPE_CLOSE_CONNECTION = 0x03,
LMS_MESSAGE_TYPE_SEND_DATA = 0x04,
LMS_MESSAGE_TYPE_IP_FQDN_REQUEST = 0x05,
LMS_MESSAGE_TYPE_IP_FQDN = 0x06,
LMS_MESSAGE_TYPE_PROTO_VERSION = 0x07,
LMS_MESSAGE_TYPE_PROTO_VERSION_REPLY = 0x08,
LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX = 0x0a
} LMS_MESSAGE_TYPE;
typedef enum {
LMS_PROTOCOL_TYPE_TCP_IPV4 = 0x00,
LMS_PROTOCOL_TYPE_UDP_IPV4 = 0x01,
LMS_PROTOCOL_TYPE_TCP_IPV6 = 0x02,
LMS_PROTOCOL_TYPE_UDP_IPV6 = 0x03
} LMS_PROTOCOL_TYPE;
typedef enum {
LMS_CONNECTION_STATUS_OK = 0x00,
LMS_CONNECTION_STATUS_FAILED = 0x01,
LMS_CONNECTION_STATUS_TOO_MANY = 0x02
} LMS_CONNECTION_STATUS;
typedef enum {
LMS_CLOSE_STATUS_CLIENT = 0x00,
LMS_CLOSE_STATUS_INTERNAL = 0x01,
LMS_CLOSE_STATUS_SOCKET = 0x02,
LMS_CLOSE_STATUS_SHUTDOWN = 0x03
} LMS_CLOSE_STATUS;
typedef enum {
LMS_IP_ADDRESS_SHARED = 0x00,
LMS_IP_ADDRESS_DUAL_IPV4 = 0x01,
LMS_IP_ADDRESS_DUAL_IPV6 = 0x02
} LMS_IP_ADDRESS_TYPE;
typedef enum {
LMS_PROTOCOL_STATUS_OK = 0x00,
LMS_PROTOCOL_STATUS_PROPOSE_ANOTHER = 0x01
} LMS_PROTOCOL_STATUS;
/**
* LMS_OPEN_CONNECTION_MESSAGE - open connection request
*
* @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION
* @ConnectionId: 0 if sent from LMS, positive if sent from LME
* @Protocol: One of LMS_PROTOCOL_TYPE
* @OpenRequestId: Any number; used to match the request to the response
* @HostIPAddress: Source IP address of the initiating application, in network
* order (Big Endian). If IPv4, only the first 4 bytes are used
* and the rest must be 0.
* @HostPort: Source port of the initiating application, in network order (Big
* Endian).
* @MEPort: Destination port of the initiating application, in network order
* (Big Endian).
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 Protocol;
UINT8 OpenRequestId;
UINT8 HostIPAddress[16];
UINT16 HostPort;
UINT16 MEPort;
} LMS_OPEN_CONNECTION_MESSAGE;
/**
* LMS_OPEN_CONNECTION_REPLY_MESSAGE - open connection reply
*
* @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION_REPLY
* @ConnectionId: Assigned by LME
* @Status: One of LMS_CONNECTION_STATUS
* @OpenRequestId: The same as the OpenRequestID value in the open connection
* request message.
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 Status;
UINT8 OpenRequestId;
} LMS_OPEN_CONNECTION_REPLY_MESSAGE;
/**
* LMS_OPEN_CONNECTION_EX_MESSAGE - open connection request
*
* @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX
* @ConnectionId: Unique identifier
* @Protocol: One of LMS_PROTOCOL_TYPE
* @Flags: If first bit is set then Host is an hostname, otherwise Host is an IP address.
* If second bit is set then connection is from remote console, otherwise
* it is from local application. The other bits must be zero.
* @Reserved: Must be zero
* @OpenRequestId: Any number; used to match the request to the response
* @Host: Source IP address of the initiating application, in network
* order (Big Endian). If IPv4, only the first 4 bytes are used
* and the rest must be 0.
* @HostPort: Source port of the initiating application, in network order (Big
* Endian).
* @MEPort: Destination port of the initiating application, in network order
* (Big Endian).
*/
#define HOSTNAME_BIT 0x1
#define REMOTE_BIT 0x2
#define FQDN_MAX_SIZE 256
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 Protocol;
UINT8 Flags;
UINT32 Reserved;
UINT8 OpenRequestId;
UINT8 Host[FQDN_MAX_SIZE];
UINT16 HostPort;
UINT16 MEPort;
} LMS_OPEN_CONNECTION_EX_MESSAGE;
///**
// * LMS_OPEN_CONNECTION_EX_REPLY_MESSAGE - open connection reply
// *
// * @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX_REPLY
// * @ConnectionId: Should match value in connection request
// * @Status: One of LMS_CONNECTION_STATUS
// * @OpenRequestId: The same as the OpenRequestID value in the open connection
// * request message.
// */
//typedef struct {
// UINT8 MessageType;
// UINT8 ConnectionId;
// UINT8 Status;
// UINT8 OpenRequestId;
//} LMS_OPEN_CONNECTION_EX_REPLY_MESSAGE;
/**
* LMS_CLOSE_CONNECTION_MESSAGE - close connection request
*
* @MessageType: LMS_MESSAGE_TYPE_CLOSE_CONNECTION
* @ConnectionId: The connection ID chosen by the LME when the connection
* was established.
* @ClosingReason: One of LMS_CLOSE_STATUS
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 ClosingReason;
} LMS_CLOSE_CONNECTION_MESSAGE;
/**
* LMS_SEND_DATA_MESSAGE - sends data betwen LMS and LME
*
* @MessageType: LMS_MESSAGE_TYPE_SEND_DATA
* @ConnectionId: The connection ID chosen by the LME when the connection
* was established.
* @DataLength: Length of data field, in Big Endian.
* @Data: The data to transfer
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT16 DataLength;
UINT8 Data[0];
} LMS_SEND_DATA_MESSAGE;
/**
* LMS_IP_FQDN_REQUEST_MESSAGE - Requests IP/FQDN data
*
* @MessageType: LMS_MESSAGE_TYPE_IP_FQDN_REQUEST
* @ConnectionId: Must be 0.
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
} LMS_IP_FQDN_REQUEST_MESSAGE;
/**
* LMS_IP_FQDN_MESSAGE - sends IP/FQDN info
*
* @MessageType: LMS_MESSAGE_TYPE_IP_FQDN
* @ConnectionId: Must be 0.
* @IPType: One of LMS_IP_ADDRESS_TYPE.
* @Reserved: Must be 0.
* @AMTIPAddress: The Intel(R) AMT IP address, in network order (Big Endian).
* If IPv4, then only the first 4 bytes are used and the rest
* must be 0.
* @FQDN: A NUL terminated string specifying the Fully Qualified Domain Name.
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 IPType;
UINT8 Reserved;
UINT8 AMTIPAddress[16];
UINT8 FQDN[FQDN_MAX_SIZE];
} LMS_IP_FQDN_MESSAGE;
/**
* LMS_PROTO_VERSION_MESSAGE - sends protocol version information
*
* @MessageType: LMS_MESSAGE_TYPE_PROTO_VERSION
* @ConnectionId: Must be 0.
* @Protocol: Protocol version.
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 Protocol;
} LMS_PROTO_VERSION_MESSAGE;
/**
* LMS_PROTO_VERSION_REPLY_MESSAGE - sends protocol version information
*
* @MessageType: LMS_MESSAGE_TYPE_PROTO_VERSION_REPLY
* @ConnectionId: Must be 0.
* @Protocol: Protocol version.
* @Status: One of LMS_PROTOCOL_STATUS.
*/
typedef struct {
UINT8 MessageType;
UINT8 ConnectionId;
UINT8 Protocol;
UINT8 Status;
} LMS_PROTO_VERSION_REPLY_MESSAGE;
#pragma pack()
#endif