Changed the code style. it could pass EBC and ICC build.
[people/mcb30/edk2.git] / edk2 / MdeModulePkg / Include / Library / IpIoLib.h
1 /** @file
2
3 Copyright (c) 2005 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14   IpIo.h
15
16 Abstract:
17
18
19 **/
20
21 #ifndef _IP_IO_H_
22 #define _IP_IO_H_
23
24 #include <PiDxe.h>
25 #include <Protocol/Ip4.h>\r
26 #include <Library/IpIoLib.h>\r
27 #include <Library/NetLib.h>
28
29 //\r
30 // type and code define for ICMP protocol error got\r
31 // from IP\r
32 //\r
33 #define ICMP_TYPE_UNREACH              3\r
34 #define ICMP_TYPE_TIMXCEED            11\r
35 #define ICMP_TYPE_PARAMPROB            12\r
36 #define ICMP_TYPE_SOURCEQUENCH         4\r
37 \r
38 #define ICMP_CODE_UNREACH_NET          0\r
39 #define ICMP_CODE_UNREACH_HOST         1\r
40 #define ICMP_CODE_UNREACH_PROTOCOL     2\r
41 #define ICMP_CODE_UNREACH_PORT         3\r
42 #define ICMP_CODE_UNREACH_NEEDFRAG     4\r
43 #define ICMP_CODE_UNREACH_SRCFAIL      5\r
44 #define ICMP_CODE_UNREACH_NET_UNKNOWN  6\r
45 #define ICMP_CODE_UNREACH_HOST_UNKNOWN 7\r
46 #define ICMP_CODE_UNREACH_ISOLATED     8\r
47 #define ICMP_CODE_UNREACH_NET_PROHIB   9\r
48 #define ICMP_CODE_UNREACH_HOST_PROHIB  10\r
49 #define ICMP_CODE_UNREACH_TOSNET       11\r
50 #define ICMP_CODE_UNREACH_TOSHOST      12\r
51 \r
52 //\r
53 // this error will be delivered to the\r
54 // listening transportation layer protocol\r
55 // consuming IpIO\r
56 //\r
57 typedef enum {\r
58   ICMP_ERR_UNREACH_NET      = 0,\r
59   ICMP_ERR_UNREACH_HOST,\r
60   ICMP_ERR_UNREACH_PROTOCOL,\r
61   ICMP_ERR_UNREACH_PORT,\r
62   ICMP_ERR_MSGSIZE,\r
63   ICMP_ERR_UNREACH_SRCFAIL,\r
64   ICMP_ERR_TIMXCEED_INTRANS,\r
65   ICMP_ERR_TIMXCEED_REASS,\r
66   ICMP_ERR_QUENCH,\r
67   ICMP_ERR_PARAMPROB\r
68 } ICMP_ERROR;\r
69 \r
70 typedef struct _ICMP_ERROR_INFO {\r
71   BOOLEAN     IsHard;\r
72   BOOLEAN     Notify;\r
73 } ICMP_ERROR_INFO;\r
74
75 #define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2)
76
77 extern EFI_IP4_CONFIG_DATA  mIpIoDefaultIpConfigData;
78
79 typedef struct _EFI_NET_SESSION_DATA {
80   IP4_ADDR        Source;
81   IP4_ADDR        Dest;
82   EFI_IP4_HEADER  *IpHdr;
83 } EFI_NET_SESSION_DATA;
84
85 typedef
86 VOID
87 (*PKT_RCVD_NOTIFY) (
88   IN EFI_STATUS           Status,  // rcvd pkt result
89   IN ICMP_ERROR           IcmpErr, // if Status == EFI_ICMP_ERROR, this
90                                   // field is valid for user
91   IN EFI_NET_SESSION_DATA *NetSession, // the communication point
92   IN NET_BUF              *Pkt,    // packet received
93   IN VOID                 *Context // the Context provided by user for recive data
94   );
95
96 typedef
97 VOID
98 (*PKT_SENT_NOTIFY) (
99   IN EFI_STATUS  Status,      // sent pkt result
100   IN VOID        *Context,    // the context provided by user for sending data
101   IN VOID        *Sender,     // the sender to be notified
102   IN VOID        *NotifyData  // sent pkt related data to notify
103   );
104
105 typedef struct _IP_IO {
106
107   //
108   // the node used to link this IpIo to the active IpIo list.
109   //
110   NET_LIST_ENTRY                Entry;
111
112   // the list used to maintain the IP instance for different sending purpose.
113   //
114   NET_LIST_ENTRY                IpList;
115
116   //
117   // the ip instance consumed by this IP IO
118   //
119   EFI_HANDLE                    Controller;
120   EFI_HANDLE                    Image;
121   EFI_HANDLE                    ChildHandle;
122   EFI_IP4_PROTOCOL              *Ip;
123   BOOLEAN                       IsConfigured;
124
125   //
126   // some ip config data can be changed
127   //
128   UINT8                         Protocol;
129
130   //
131   // token and event used to get data from IP
132   //
133   EFI_IP4_COMPLETION_TOKEN      RcvToken;
134
135   //
136   // list entry used to link the token passed to IP_IO
137   //
138   NET_LIST_ENTRY                PendingSndList;
139
140   //
141   // User interface used to get notify from IP_IO
142   //
143   VOID                          *RcvdContext;
144   VOID                          *SndContext;
145   PKT_RCVD_NOTIFY               PktRcvdNotify;
146   PKT_SENT_NOTIFY               PktSentNotify;
147 } IP_IO;
148
149 typedef struct _IP_IO_OPEN_DATA {
150   EFI_IP4_CONFIG_DATA IpConfigData;
151   VOID                *RcvdContext;
152   VOID                *SndContext;
153   PKT_RCVD_NOTIFY     PktRcvdNotify;
154   PKT_SENT_NOTIFY     PktSentNotify;
155 } IP_IO_OPEN_DATA;
156
157 typedef struct _IP_IO_SEND_ENTRY {
158   NET_LIST_ENTRY            Entry;
159   IP_IO                     *IpIo;
160   VOID                      *Context;
161   VOID                      *NotifyData;
162   EFI_IP4_PROTOCOL          *Ip;
163   NET_BUF                   *Pkt;
164   EFI_IP4_COMPLETION_TOKEN  *SndToken;
165 } IP_IO_SEND_ENTRY;
166
167 typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE;
168
169 typedef struct _IP_IO_IP_INFO {
170   IP4_ADDR                  Addr;
171   IP4_ADDR                  SubnetMask;
172   NET_LIST_ENTRY            Entry;
173   EFI_HANDLE                ChildHandle;
174   EFI_IP4_PROTOCOL          *Ip;
175   EFI_IP4_COMPLETION_TOKEN  DummyRcvToken;
176   INTN                      RefCnt;
177 } IP_IO_IP_INFO;
178
179 IP_IO *
180 IpIoCreate (
181   IN EFI_HANDLE Image,
182   IN EFI_HANDLE Controller
183   );
184
185 EFI_STATUS
186 IpIoDestroy (
187   IN IP_IO *IpIo
188   );
189
190 EFI_STATUS
191 IpIoStop (
192   IN IP_IO *IpIo
193   );
194
195 EFI_STATUS
196 IpIoOpen (
197   IN IP_IO           *IpIo,
198   IN IP_IO_OPEN_DATA *OpenData
199   );
200
201 EFI_STATUS
202 IpIoSend (
203   IN IP_IO           *IpIo,
204   IN NET_BUF         *Pkt,
205   IN IP_IO_IP_INFO   *Sender,
206   IN VOID            *Context    OPTIONAL,
207   IN VOID            *NotifyData OPTIONAL,
208   IN IP4_ADDR        Dest,
209   IN IP_IO_OVERRIDE  *OverrideData
210   );
211
212 VOID
213 IpIoCancelTxToken (
214   IN IP_IO  *IpIo,
215   IN VOID   *Packet
216   );
217
218 IP_IO_IP_INFO *
219 IpIoAddIp (
220   IN IP_IO  *IpIo
221   );
222
223 EFI_STATUS
224 IpIoConfigIp (
225   IN     IP_IO_IP_INFO        *IpInfo,
226   IN OUT EFI_IP4_CONFIG_DATA  *Ip4ConfigData OPTIONAL
227   );
228
229 VOID
230 IpIoRemoveIp (
231   IN IP_IO            *IpIo,
232   IN IP_IO_IP_INFO    *IpInfo
233   );
234
235 IP_IO_IP_INFO *
236 IpIoFindSender (
237   IN OUT IP_IO     **IpIo,
238   IN     IP4_ADDR  Src
239   );
240
241 EFI_STATUS
242 IpIoGetIcmpErrStatus (
243   IN  ICMP_ERROR  IcmpError,
244   OUT BOOLEAN     *IsHard, OPTIONAL
245   OUT BOOLEAN     *Notify OPTIONAL
246   );
247
248 #endif