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
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.
25 #include <Protocol/Ip4.h>
26 #include <Library/IpIoLib.h>
27 #include <Library/NetLib.h>
30 // type and code define for ICMP protocol error got
33 #define ICMP_TYPE_UNREACH 3
34 #define ICMP_TYPE_TIMXCEED 11
35 #define ICMP_TYPE_PARAMPROB 12
36 #define ICMP_TYPE_SOURCEQUENCH 4
38 #define ICMP_CODE_UNREACH_NET 0
39 #define ICMP_CODE_UNREACH_HOST 1
40 #define ICMP_CODE_UNREACH_PROTOCOL 2
41 #define ICMP_CODE_UNREACH_PORT 3
42 #define ICMP_CODE_UNREACH_NEEDFRAG 4
43 #define ICMP_CODE_UNREACH_SRCFAIL 5
44 #define ICMP_CODE_UNREACH_NET_UNKNOWN 6
45 #define ICMP_CODE_UNREACH_HOST_UNKNOWN 7
46 #define ICMP_CODE_UNREACH_ISOLATED 8
47 #define ICMP_CODE_UNREACH_NET_PROHIB 9
48 #define ICMP_CODE_UNREACH_HOST_PROHIB 10
49 #define ICMP_CODE_UNREACH_TOSNET 11
50 #define ICMP_CODE_UNREACH_TOSHOST 12
53 // this error will be delivered to the
54 // listening transportation layer protocol
58 ICMP_ERR_UNREACH_NET
= 0,
59 ICMP_ERR_UNREACH_HOST
,
60 ICMP_ERR_UNREACH_PROTOCOL
,
61 ICMP_ERR_UNREACH_PORT
,
63 ICMP_ERR_UNREACH_SRCFAIL
,
64 ICMP_ERR_TIMXCEED_INTRANS
,
65 ICMP_ERR_TIMXCEED_REASS
,
70 typedef struct _ICMP_ERROR_INFO
{
77 // Driver Consumed Protocol Prototypes
79 //@MT:#include EFI_PROTOCOL_CONSUMER (Ip4)
80 //@MT:#include EFI_PROTOCOL_CONSUMER (Udp4)
82 #define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2)
84 extern EFI_IP4_CONFIG_DATA mIpIoDefaultIpConfigData
;
86 typedef struct _EFI_NET_SESSION_DATA
{
89 EFI_IP4_HEADER
*IpHdr
;
90 } EFI_NET_SESSION_DATA
;
95 IN EFI_STATUS Status
, // rcvd pkt result
96 IN ICMP_ERROR IcmpErr
, // if Status == EFI_ICMP_ERROR, this
97 // field is valid for user
98 IN EFI_NET_SESSION_DATA
*NetSession
, // the communication point
99 IN NET_BUF
*Pkt
, // packet received
100 IN VOID
*Context
// the Context provided by user for recive data
106 IN EFI_STATUS Status
, // sent pkt result
107 IN VOID
*Context
, // the context provided by user for sending data
108 IN VOID
*Sender
, // the sender to be notified
109 IN VOID
*NotifyData
// sent pkt related data to notify
112 typedef struct _IP_IO
{
115 // the node used to link this IpIo to the active IpIo list.
117 NET_LIST_ENTRY Entry
;
119 // the list used to maintain the IP instance for different sending purpose.
121 NET_LIST_ENTRY IpList
;
124 // the ip instance consumed by this IP IO
126 EFI_HANDLE Controller
;
128 EFI_HANDLE ChildHandle
;
129 EFI_IP4_PROTOCOL
*Ip
;
130 BOOLEAN IsConfigured
;
133 // some ip config data can be changed
138 // token and event used to get data from IP
140 EFI_IP4_COMPLETION_TOKEN RcvToken
;
143 // list entry used to link the token passed to IP_IO
145 NET_LIST_ENTRY PendingSndList
;
148 // User interface used to get notify from IP_IO
152 PKT_RCVD_NOTIFY PktRcvdNotify
;
153 PKT_SENT_NOTIFY PktSentNotify
;
156 typedef struct _IP_IO_OPEN_DATA
{
157 EFI_IP4_CONFIG_DATA IpConfigData
;
160 PKT_RCVD_NOTIFY PktRcvdNotify
;
161 PKT_SENT_NOTIFY PktSentNotify
;
164 typedef struct _IP_IO_SEND_ENTRY
{
165 NET_LIST_ENTRY Entry
;
169 EFI_IP4_PROTOCOL
*Ip
;
171 EFI_IP4_COMPLETION_TOKEN
*SndToken
;
174 typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE
;
176 typedef struct _IP_IO_IP_INFO
{
179 NET_LIST_ENTRY Entry
;
180 EFI_HANDLE ChildHandle
;
181 EFI_IP4_PROTOCOL
*Ip
;
182 EFI_IP4_COMPLETION_TOKEN DummyRcvToken
;
189 IN EFI_HANDLE Controller
205 IN IP_IO_OPEN_DATA
*OpenData
212 IN IP_IO_IP_INFO
*Sender
,
213 IN VOID
*Context OPTIONAL
,
214 IN VOID
*NotifyData OPTIONAL
,
216 IN IP_IO_OVERRIDE
*OverrideData
232 IN IP_IO_IP_INFO
*IpInfo
,
233 IN OUT EFI_IP4_CONFIG_DATA
*Ip4ConfigData OPTIONAL
239 IN IP_IO_IP_INFO
*IpInfo
249 IpIoGetIcmpErrStatus (
250 IN ICMP_ERROR IcmpError
,
251 OUT BOOLEAN
*IsHard
, OPTIONAL
252 OUT BOOLEAN
*Notify OPTIONAL