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