1 /*++ 2 3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 4 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 Udp4.h 15 16 Abstract: 17 18 --*/ 19 20 #ifndef _UDP4_H_ 21 #define _UDP4_H_ 22 23 #include EFI_PROTOCOL_DEFINITION (ServiceBinding) 24 #include EFI_PROTOCOL_DEFINITION (Ip4) 25 26 // 27 //GUID definitions 28 // 29 #define EFI_UDP4_SERVICE_BINDING_PROTOCOL_GUID \ 30 { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} } 31 32 #define EFI_UDP4_PROTOCOL_GUID \ 33 { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} } 34 35 typedef struct { 36 EFI_HANDLE InstanceHandle; 37 EFI_IPv4_ADDRESS LocalAddress; 38 UINT16 LocalPort; 39 EFI_IPv4_ADDRESS RemoteAddress; 40 UINT16 RemotePort; 41 } EFI_UDP4_SERVICE_POINT; 42 43 typedef struct { 44 EFI_HANDLE DriverHandle; 45 UINT32 ServiceCount; 46 EFI_UDP4_SERVICE_POINT Services[1]; 47 } EFI_UDP4_VARIABLE_DATA; 48 49 // 50 //ICMP error definitions 51 // 52 #define EFI_NETWORK_UNREACHABLE EFIERR(100) 53 #define EFI_HOST_UNREACHABLE EFIERR(101) 54 #define EFI_PROTOCOL_UNREACHABLE EFIERR(102) 55 #define EFI_PORT_UNREACHABLE EFIERR(103) 56 57 EFI_FORWARD_DECLARATION (EFI_UDP4_PROTOCOL); 58 59 //************************************************* 60 // EFI_UDP4_FRAGMENT_DATA * 61 //************************************************* 62 typedef struct { 63 UINT32 FragmentLength; 64 VOID *FragmentBuffer; 65 } EFI_UDP4_FRAGMENT_DATA; 66 67 //************************************************* 68 // EFI_UDP4_SESSION_DATA * 69 //************************************************* 70 typedef struct { 71 EFI_IPv4_ADDRESS SourceAddress; 72 UINT16 SourcePort; 73 EFI_IPv4_ADDRESS DestinationAddress; 74 UINT16 DestinationPort; 75 } EFI_UDP4_SESSION_DATA; 76 77 //************************************************ 78 // EFI_UDP4_CONFIG_DATA * 79 //************************************************ 80 typedef struct { 81 //Receiving Filters 82 BOOLEAN AcceptBroadcast; 83 BOOLEAN AcceptPromiscuous; 84 BOOLEAN AcceptAnyPort; 85 BOOLEAN AllowDuplicatePort; 86 //I/O parameters 87 UINT8 TypeOfService; 88 UINT8 TimeToLive; 89 BOOLEAN DoNotFragment; 90 UINT32 ReceiveTimeout; 91 UINT32 TransmitTimeout; 92 //Access Point 93 BOOLEAN UseDefaultAddress; 94 EFI_IPv4_ADDRESS StationAddress; 95 EFI_IPv4_ADDRESS SubnetMask; 96 UINT16 StationPort; 97 EFI_IPv4_ADDRESS RemoteAddress; 98 UINT16 RemotePort; 99 } EFI_UDP4_CONFIG_DATA; 100 101 //******************************************************* 102 // EFI_UDP4_TRANSMIT_DATA * 103 //******************************************************* 104 typedef struct { 105 EFI_UDP4_SESSION_DATA *UdpSessionData; 106 EFI_IPv4_ADDRESS *GatewayAddress; 107 UINT32 DataLength; 108 UINT32 FragmentCount; 109 EFI_UDP4_FRAGMENT_DATA FragmentTable[1]; 110 } EFI_UDP4_TRANSMIT_DATA; 111 112 //******************************************************* 113 // EFI_UDP4_RECEIVE_DATA * 114 //******************************************************* 115 typedef struct { 116 EFI_TIME TimeStamp; 117 EFI_EVENT RecycleSignal; 118 EFI_UDP4_SESSION_DATA UdpSession; 119 UINT32 DataLength; 120 UINT32 FragmentCount; 121 EFI_UDP4_FRAGMENT_DATA FragmentTable[1]; 122 } EFI_UDP4_RECEIVE_DATA; 123 124 125 //******************************************************* 126 // EFI_UDP4_COMPLETION_TOKEN * 127 //******************************************************* 128 typedef struct { 129 EFI_EVENT Event; 130 EFI_STATUS Status; 131 union { 132 EFI_UDP4_RECEIVE_DATA *RxData; 133 EFI_UDP4_TRANSMIT_DATA *TxData; 134 } Packet; 135 } EFI_UDP4_COMPLETION_TOKEN; 136 137 typedef 138 EFI_STATUS 139 (EFIAPI *EFI_UDP4_GET_MODE_DATA) ( 140 IN EFI_UDP4_PROTOCOL *This, 141 OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL, 142 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 143 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 144 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 145 ); 146 147 typedef 148 EFI_STATUS 149 (EFIAPI *EFI_UDP4_CONFIGURE) ( 150 IN EFI_UDP4_PROTOCOL *This, 151 IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL 152 ); 153 154 typedef 155 EFI_STATUS 156 (EFIAPI *EFI_UDP4_GROUPS) ( 157 IN EFI_UDP4_PROTOCOL *This, 158 IN BOOLEAN JoinFlag, 159 IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL 160 ); 161 162 typedef 163 EFI_STATUS 164 (EFIAPI *EFI_UDP4_ROUTES) ( 165 IN EFI_UDP4_PROTOCOL *This, 166 IN BOOLEAN DeleteRoute, 167 IN EFI_IPv4_ADDRESS *SubnetAddress, 168 IN EFI_IPv4_ADDRESS *SubnetMask, 169 IN EFI_IPv4_ADDRESS *GatewayAddress 170 ); 171 172 typedef 173 EFI_STATUS 174 (EFIAPI *EFI_UDP4_TRANSMIT) ( 175 IN EFI_UDP4_PROTOCOL *This, 176 IN EFI_UDP4_COMPLETION_TOKEN *Token 177 ); 178 179 typedef 180 EFI_STATUS 181 (EFIAPI *EFI_UDP4_RECEIVE) ( 182 IN EFI_UDP4_PROTOCOL *This, 183 IN EFI_UDP4_COMPLETION_TOKEN *Token 184 ); 185 186 typedef 187 EFI_STATUS 188 (EFIAPI *EFI_UDP4_CANCEL)( 189 IN EFI_UDP4_PROTOCOL *This, 190 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL 191 ); 192 193 typedef 194 EFI_STATUS 195 (EFIAPI *EFI_UDP4_POLL) ( 196 IN EFI_UDP4_PROTOCOL *This 197 ); 198 199 struct _EFI_UDP4_PROTOCOL { 200 EFI_UDP4_GET_MODE_DATA GetModeData; 201 EFI_UDP4_CONFIGURE Configure; 202 EFI_UDP4_GROUPS Groups; 203 EFI_UDP4_ROUTES Routes; 204 EFI_UDP4_TRANSMIT Transmit; 205 EFI_UDP4_RECEIVE Receive; 206 EFI_UDP4_CANCEL Cancel; 207 EFI_UDP4_POLL Poll; 208 }; 209 210 extern EFI_GUID gEfiUdp4ServiceBindingProtocolGuid; 211 extern EFI_GUID gEfiUdp4ProtocolGuid; 212 extern EFI_GUID gEfiUdp4RegistryDataGuid; 213 214 #endif 215