xref: /titanic_41/usr/src/cmd/lms/LMS_if_compat.h (revision 617e2443dfc17fe44fd44c0675d6aad2ffc9df42)
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