1 /*++ 2 3 Copyright (c) 2005 - 2010, 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 Ip4.h 15 16 Abstract: 17 18 EFI_IP4_PROTOCOL definition in UEFI 2.2 specification. 19 20 --*/ 21 22 #ifndef _IP4_H_ 23 #define _IP4_H_ 24 25 #include EFI_PROTOCOL_DEFINITION (ManagedNetwork) 26 #include EFI_PROTOCOL_DEFINITION (ServiceBinding) 27 28 // 29 //GUID definitions 30 // 31 #define EFI_IP4_SERVICE_BINDING_PROTOCOL_GUID \ 32 {0xc51711e7, 0xb4bf, 0x404a, {0xbf, 0xb8, 0x0a, 0x04, 0x8e, 0xf1, 0xff, 0xe4}} 33 34 #define EFI_IP4_PROTOCOL_GUID \ 35 {0x41d94cd2, 0x35b6, 0x455a, {0x82, 0x58, 0xd4, 0xe5, 0x13, 0x34, 0xaa, 0xdd}} 36 37 EFI_FORWARD_DECLARATION (EFI_IP4_PROTOCOL); 38 39 typedef struct { 40 EFI_HANDLE InstanceHandle; 41 EFI_IPv4_ADDRESS Ip4Address; 42 EFI_IPv4_ADDRESS SubnetMask; 43 } EFI_IP4_ADDRESS_PAIR; 44 45 typedef struct { 46 EFI_HANDLE DriverHandle; 47 UINT32 AddressCount; 48 EFI_IP4_ADDRESS_PAIR AddressPairs[1]; 49 } EFI_IP4_VARIABLE_DATA; 50 51 typedef struct { 52 UINT8 DefaultProtocol; 53 BOOLEAN AcceptAnyProtocol; 54 BOOLEAN AcceptIcmpErrors; 55 BOOLEAN AcceptBroadcast; 56 BOOLEAN AcceptPromiscuous; 57 BOOLEAN UseDefaultAddress; 58 EFI_IPv4_ADDRESS StationAddress; 59 EFI_IPv4_ADDRESS SubnetMask; 60 UINT8 TypeOfService; 61 UINT8 TimeToLive; 62 BOOLEAN DoNotFragment; 63 BOOLEAN RawData; 64 UINT32 ReceiveTimeout; 65 UINT32 TransmitTimeout; 66 } EFI_IP4_CONFIG_DATA; 67 68 69 typedef struct _EFI_IP4_ROUTE_TABLE { 70 EFI_IPv4_ADDRESS SubnetAddress; 71 EFI_IPv4_ADDRESS SubnetMask; 72 EFI_IPv4_ADDRESS GatewayAddress; 73 } EFI_IP4_ROUTE_TABLE; 74 75 typedef struct _EFI_IP4_ICMP_TYPE { 76 UINT8 Type; 77 UINT8 Code; 78 } EFI_IP4_ICMP_TYPE; 79 80 typedef struct { 81 BOOLEAN IsStarted; 82 UINT32 MaxPacketSize; 83 84 EFI_IP4_CONFIG_DATA ConfigData; 85 BOOLEAN IsConfigured; 86 87 UINT32 GroupCount; 88 EFI_IPv4_ADDRESS *GroupTable; 89 90 UINT32 RouteCount; 91 EFI_IP4_ROUTE_TABLE *RouteTable; 92 93 UINT32 IcmpTypeCount; 94 EFI_IP4_ICMP_TYPE *IcmpTypeList; 95 } EFI_IP4_MODE_DATA; 96 97 #pragma pack(1) 98 typedef struct _EFI_IP4_HEADER { 99 UINT8 HeaderLength:4; 100 UINT8 Version:4; 101 UINT8 TypeOfService; 102 UINT16 TotalLength; 103 UINT16 Identification; 104 UINT16 Fragmentation; 105 UINT8 TimeToLive; 106 UINT8 Protocol; 107 UINT16 Checksum; 108 EFI_IPv4_ADDRESS SourceAddress; 109 EFI_IPv4_ADDRESS DestinationAddress; 110 } EFI_IP4_HEADER; 111 #pragma pack() 112 113 typedef struct _EFI_IP4_FRAGMENT_DATA { 114 UINT32 FragmentLength; 115 VOID *FragmentBuffer; 116 } EFI_IP4_FRAGMENT_DATA; 117 118 119 typedef struct _EFI_IP4_OVERRIDE_DATA { 120 EFI_IPv4_ADDRESS SourceAddress; 121 EFI_IPv4_ADDRESS GatewayAddress; 122 123 UINT8 Protocol; 124 UINT8 TypeOfService; 125 UINT8 TimeToLive; 126 BOOLEAN DoNotFragment; 127 } EFI_IP4_OVERRIDE_DATA; 128 129 typedef struct _EFI_IP4_TRANSMIT_DATA { 130 EFI_IPv4_ADDRESS DestinationAddress; 131 132 EFI_IP4_OVERRIDE_DATA *OverrideData; 133 UINT32 OptionsLength; 134 VOID *OptionsBuffer; 135 136 UINT32 TotalDataLength; 137 UINT32 FragmentCount; 138 EFI_IP4_FRAGMENT_DATA FragmentTable[1]; 139 } EFI_IP4_TRANSMIT_DATA; 140 141 typedef struct _EFI_IP4_RECEIVE_DATA { 142 EFI_TIME TimeStamp; 143 EFI_EVENT RecycleSignal; 144 145 UINT32 HeaderLength; 146 EFI_IP4_HEADER *Header; 147 148 UINT32 OptionsLength; 149 VOID *Options; 150 151 UINT32 DataLength; 152 UINT32 FragmentCount; 153 EFI_IP4_FRAGMENT_DATA FragmentTable[1]; 154 } EFI_IP4_RECEIVE_DATA; 155 156 typedef struct _EFI_IP4_COMPLETION_TOKEN { 157 EFI_EVENT Event; 158 EFI_STATUS Status; 159 160 union { 161 EFI_IP4_RECEIVE_DATA *RxData; 162 EFI_IP4_TRANSMIT_DATA *TxData; 163 } Packet; 164 } EFI_IP4_COMPLETION_TOKEN; 165 166 typedef 167 EFI_STATUS 168 (EFIAPI *EFI_IP4_GET_MODE_DATA) ( 169 IN EFI_IP4_PROTOCOL *This, 170 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 171 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 172 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 173 ); 174 175 typedef 176 EFI_STATUS 177 (EFIAPI *EFI_IP4_CONFIGURE) ( 178 IN EFI_IP4_PROTOCOL *This, 179 IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL 180 ); 181 182 typedef 183 EFI_STATUS 184 (EFIAPI *EFI_IP4_GROUPS) ( 185 IN EFI_IP4_PROTOCOL *This, 186 IN BOOLEAN JoinFlag, 187 IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL 188 ); 189 190 typedef 191 EFI_STATUS 192 (EFIAPI *EFI_IP4_ROUTES) ( 193 IN EFI_IP4_PROTOCOL *This, 194 IN BOOLEAN DeleteRoute, 195 IN EFI_IPv4_ADDRESS *SubnetAddress, 196 IN EFI_IPv4_ADDRESS *SubnetMask, 197 IN EFI_IPv4_ADDRESS *GatewayAddress 198 ); 199 200 typedef 201 EFI_STATUS 202 (EFIAPI *EFI_IP4_TRANSMIT) ( 203 IN EFI_IP4_PROTOCOL *This, 204 IN EFI_IP4_COMPLETION_TOKEN *Token 205 ); 206 207 typedef 208 EFI_STATUS 209 (EFIAPI *EFI_IP4_RECEIVE) ( 210 IN EFI_IP4_PROTOCOL *This, 211 IN EFI_IP4_COMPLETION_TOKEN *Token 212 ); 213 214 typedef 215 EFI_STATUS 216 (EFIAPI *EFI_IP4_CANCEL) ( 217 IN EFI_IP4_PROTOCOL *This, 218 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL 219 ); 220 221 typedef 222 EFI_STATUS 223 (EFIAPI *EFI_IP4_POLL) ( 224 IN EFI_IP4_PROTOCOL *This 225 ); 226 227 struct _EFI_IP4_PROTOCOL { 228 EFI_IP4_GET_MODE_DATA GetModeData; 229 EFI_IP4_CONFIGURE Configure; 230 EFI_IP4_GROUPS Groups; 231 EFI_IP4_ROUTES Routes; 232 EFI_IP4_TRANSMIT Transmit; 233 EFI_IP4_RECEIVE Receive; 234 EFI_IP4_CANCEL Cancel; 235 EFI_IP4_POLL Poll; 236 }; 237 238 239 extern EFI_GUID gEfiIp4ServiceBindingProtocolGuid; 240 extern EFI_GUID gEfiIp4RegistryDataGuid; 241 extern EFI_GUID gEfiIp4ProtocolGuid; 242 #endif 243