1/******************************************************************************* 2 * Copyright (C) 2004-2008 Intel Corp. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * - Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 10 * - Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * - Neither the name of Intel Corp. nor the names of its 15 * contributors may be used to endorse or promote products derived from this 16 * software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 *******************************************************************************/ 30 31#ifndef _LMS_IF_COMPAT_H_ 32#define _LMS_IF_COMPAT_H_ 33 34#include "types.h" 35 36// disable the "zero-sized array" warning in Visual C++ 37#ifdef _MSC_VER 38#pragma warning(disable:4200) 39#endif 40 41#pragma pack(1) 42 43typedef enum { 44 LMS_MESSAGE_TYPE_OPEN_CONNECTION = 0x01, 45 LMS_MESSAGE_TYPE_OPEN_CONNECTION_REPLY = 0x02, 46 LMS_MESSAGE_TYPE_CLOSE_CONNECTION = 0x03, 47 LMS_MESSAGE_TYPE_SEND_DATA = 0x04, 48 LMS_MESSAGE_TYPE_IP_FQDN_REQUEST = 0x05, 49 LMS_MESSAGE_TYPE_IP_FQDN = 0x06, 50 LMS_MESSAGE_TYPE_PROTO_VERSION = 0x07, 51 LMS_MESSAGE_TYPE_PROTO_VERSION_REPLY = 0x08, 52 LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX = 0x0a 53} LMS_MESSAGE_TYPE; 54 55typedef enum { 56 LMS_PROTOCOL_TYPE_TCP_IPV4 = 0x00, 57 LMS_PROTOCOL_TYPE_UDP_IPV4 = 0x01, 58 LMS_PROTOCOL_TYPE_TCP_IPV6 = 0x02, 59 LMS_PROTOCOL_TYPE_UDP_IPV6 = 0x03 60} LMS_PROTOCOL_TYPE; 61 62typedef enum { 63 LMS_CONNECTION_STATUS_OK = 0x00, 64 LMS_CONNECTION_STATUS_FAILED = 0x01, 65 LMS_CONNECTION_STATUS_TOO_MANY = 0x02 66} LMS_CONNECTION_STATUS; 67 68typedef enum { 69 LMS_CLOSE_STATUS_CLIENT = 0x00, 70 LMS_CLOSE_STATUS_INTERNAL = 0x01, 71 LMS_CLOSE_STATUS_SOCKET = 0x02, 72 LMS_CLOSE_STATUS_SHUTDOWN = 0x03 73} LMS_CLOSE_STATUS; 74 75typedef enum { 76 LMS_IP_ADDRESS_SHARED = 0x00, 77 LMS_IP_ADDRESS_DUAL_IPV4 = 0x01, 78 LMS_IP_ADDRESS_DUAL_IPV6 = 0x02 79} LMS_IP_ADDRESS_TYPE; 80 81typedef enum { 82 LMS_PROTOCOL_STATUS_OK = 0x00, 83 LMS_PROTOCOL_STATUS_PROPOSE_ANOTHER = 0x01 84} LMS_PROTOCOL_STATUS; 85 86/** 87 * LMS_OPEN_CONNECTION_MESSAGE - open connection request 88 * 89 * @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION 90 * @ConnectionId: 0 if sent from LMS, positive if sent from LME 91 * @Protocol: One of LMS_PROTOCOL_TYPE 92 * @OpenRequestId: Any number; used to match the request to the response 93 * @HostIPAddress: Source IP address of the initiating application, in network 94 * order (Big Endian). If IPv4, only the first 4 bytes are used 95 * and the rest must be 0. 96 * @HostPort: Source port of the initiating application, in network order (Big 97 * Endian). 98 * @MEPort: Destination port of the initiating application, in network order 99 * (Big Endian). 100 */ 101typedef struct { 102 UINT8 MessageType; 103 UINT8 ConnectionId; 104 UINT8 Protocol; 105 UINT8 OpenRequestId; 106 UINT8 HostIPAddress[16]; 107 UINT16 HostPort; 108 UINT16 MEPort; 109} LMS_OPEN_CONNECTION_MESSAGE; 110 111/** 112 * LMS_OPEN_CONNECTION_REPLY_MESSAGE - open connection reply 113 * 114 * @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION_REPLY 115 * @ConnectionId: Assigned by LME 116 * @Status: One of LMS_CONNECTION_STATUS 117 * @OpenRequestId: The same as the OpenRequestID value in the open connection 118 * request message. 119 */ 120typedef struct { 121 UINT8 MessageType; 122 UINT8 ConnectionId; 123 UINT8 Status; 124 UINT8 OpenRequestId; 125} LMS_OPEN_CONNECTION_REPLY_MESSAGE; 126 127/** 128 * LMS_OPEN_CONNECTION_EX_MESSAGE - open connection request 129 * 130 * @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX 131 * @ConnectionId: Unique identifier 132 * @Protocol: One of LMS_PROTOCOL_TYPE 133 * @Flags: If first bit is set then Host is an hostname, otherwise Host is an IP address. 134 * If second bit is set then connection is from remote console, otherwise 135 * it is from local application. The other bits must be zero. 136 * @Reserved: Must be zero 137 * @OpenRequestId: Any number; used to match the request to the response 138 * @Host: Source IP address of the initiating application, in network 139 * order (Big Endian). If IPv4, only the first 4 bytes are used 140 * and the rest must be 0. 141 * @HostPort: Source port of the initiating application, in network order (Big 142 * Endian). 143 * @MEPort: Destination port of the initiating application, in network order 144 * (Big Endian). 145 */ 146 147#define HOSTNAME_BIT 0x1 148#define REMOTE_BIT 0x2 149 150#define FQDN_MAX_SIZE 256 151 152typedef struct { 153 UINT8 MessageType; 154 UINT8 ConnectionId; 155 UINT8 Protocol; 156 UINT8 Flags; 157 UINT32 Reserved; 158 UINT8 OpenRequestId; 159 UINT8 Host[FQDN_MAX_SIZE]; 160 UINT16 HostPort; 161 UINT16 MEPort; 162} LMS_OPEN_CONNECTION_EX_MESSAGE; 163 164///** 165// * LMS_OPEN_CONNECTION_EX_REPLY_MESSAGE - open connection reply 166// * 167// * @MessageType: LMS_MESSAGE_TYPE_OPEN_CONNECTION_EX_REPLY 168// * @ConnectionId: Should match value in connection request 169// * @Status: One of LMS_CONNECTION_STATUS 170// * @OpenRequestId: The same as the OpenRequestID value in the open connection 171// * request message. 172// */ 173//typedef struct { 174// UINT8 MessageType; 175// UINT8 ConnectionId; 176// UINT8 Status; 177// UINT8 OpenRequestId; 178//} LMS_OPEN_CONNECTION_EX_REPLY_MESSAGE; 179 180/** 181 * LMS_CLOSE_CONNECTION_MESSAGE - close connection request 182 * 183 * @MessageType: LMS_MESSAGE_TYPE_CLOSE_CONNECTION 184 * @ConnectionId: The connection ID chosen by the LME when the connection 185 * was established. 186 * @ClosingReason: One of LMS_CLOSE_STATUS 187 */ 188typedef struct { 189 UINT8 MessageType; 190 UINT8 ConnectionId; 191 UINT8 ClosingReason; 192} LMS_CLOSE_CONNECTION_MESSAGE; 193 194/** 195 * LMS_SEND_DATA_MESSAGE - sends data betwen LMS and LME 196 * 197 * @MessageType: LMS_MESSAGE_TYPE_SEND_DATA 198 * @ConnectionId: The connection ID chosen by the LME when the connection 199 * was established. 200 * @DataLength: Length of data field, in Big Endian. 201 * @Data: The data to transfer 202 */ 203typedef struct { 204 UINT8 MessageType; 205 UINT8 ConnectionId; 206 UINT16 DataLength; 207 UINT8 Data[0]; 208} LMS_SEND_DATA_MESSAGE; 209 210/** 211 * LMS_IP_FQDN_REQUEST_MESSAGE - Requests IP/FQDN data 212 * 213 * @MessageType: LMS_MESSAGE_TYPE_IP_FQDN_REQUEST 214 * @ConnectionId: Must be 0. 215 */ 216typedef struct { 217 UINT8 MessageType; 218 UINT8 ConnectionId; 219} LMS_IP_FQDN_REQUEST_MESSAGE; 220 221/** 222 * LMS_IP_FQDN_MESSAGE - sends IP/FQDN info 223 * 224 * @MessageType: LMS_MESSAGE_TYPE_IP_FQDN 225 * @ConnectionId: Must be 0. 226 * @IPType: One of LMS_IP_ADDRESS_TYPE. 227 * @Reserved: Must be 0. 228 * @AMTIPAddress: The Intel(R) AMT IP address, in network order (Big Endian). 229 * If IPv4, then only the first 4 bytes are used and the rest 230 * must be 0. 231 * @FQDN: A NUL terminated string specifying the Fully Qualified Domain Name. 232 */ 233typedef struct { 234 UINT8 MessageType; 235 UINT8 ConnectionId; 236 UINT8 IPType; 237 UINT8 Reserved; 238 UINT8 AMTIPAddress[16]; 239 UINT8 FQDN[FQDN_MAX_SIZE]; 240} LMS_IP_FQDN_MESSAGE; 241 242/** 243 * LMS_PROTO_VERSION_MESSAGE - sends protocol version information 244 * 245 * @MessageType: LMS_MESSAGE_TYPE_PROTO_VERSION 246 * @ConnectionId: Must be 0. 247 * @Protocol: Protocol version. 248 */ 249typedef struct { 250 UINT8 MessageType; 251 UINT8 ConnectionId; 252 UINT8 Protocol; 253} LMS_PROTO_VERSION_MESSAGE; 254 255/** 256 * LMS_PROTO_VERSION_REPLY_MESSAGE - sends protocol version information 257 * 258 * @MessageType: LMS_MESSAGE_TYPE_PROTO_VERSION_REPLY 259 * @ConnectionId: Must be 0. 260 * @Protocol: Protocol version. 261 * @Status: One of LMS_PROTOCOL_STATUS. 262 */ 263typedef struct { 264 UINT8 MessageType; 265 UINT8 ConnectionId; 266 UINT8 Protocol; 267 UINT8 Status; 268} LMS_PROTO_VERSION_REPLY_MESSAGE; 269 270#pragma pack() 271 272#endif 273 274