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 43 typedef 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 55 typedef 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 62 typedef 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 68 typedef 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 75 typedef 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 81 typedef 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 */ 101 typedef 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 */ 120 typedef 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 152 typedef 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 */ 188 typedef 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 */ 203 typedef 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 */ 216 typedef 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 */ 233 typedef 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 */ 249 typedef 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 */ 263 typedef 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