1 1.1 jakllsch /* $NetBSD: efiip.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch #ifndef _EFI_IP_H 4 1.1 jakllsch #define _EFI_IP_H 5 1.1 jakllsch 6 1.1 jakllsch /*++ 7 1.1 jakllsch Copyright (c) 2013 Intel Corporation 8 1.1 jakllsch 9 1.1 jakllsch --*/ 10 1.1 jakllsch 11 1.1 jakllsch #define EFI_IP4_SERVICE_BINDING_PROTOCOL \ 12 1.1 jakllsch {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}} 13 1.1 jakllsch 14 1.1 jakllsch #define EFI_IP4_PROTOCOL \ 15 1.1 jakllsch {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}} 16 1.1 jakllsch 17 1.1 jakllsch #define EFI_IP6_SERVICE_BINDING_PROTOCOL \ 18 1.1 jakllsch {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}} 19 1.1 jakllsch 20 1.1 jakllsch #define EFI_IP6_PROTOCOL \ 21 1.1 jakllsch {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}} 22 1.1 jakllsch 23 1.1 jakllsch INTERFACE_DECL(_EFI_IP4); 24 1.1 jakllsch INTERFACE_DECL(_EFI_IP6); 25 1.1 jakllsch 26 1.1 jakllsch typedef struct { 27 1.1 jakllsch EFI_HANDLE InstanceHandle; 28 1.1 jakllsch EFI_IPv4_ADDRESS Ip4Address; 29 1.1 jakllsch EFI_IPv4_ADDRESS SubnetMask; 30 1.1 jakllsch } EFI_IP4_ADDRESS_PAIR; 31 1.1 jakllsch 32 1.1 jakllsch typedef struct { 33 1.1 jakllsch EFI_HANDLE DriverHandle; 34 1.1 jakllsch UINT32 AddressCount; 35 1.1 jakllsch EFI_IP4_ADDRESS_PAIR AddressPairs[1]; 36 1.1 jakllsch } EFI_IP4_VARIABLE_DATA; 37 1.1 jakllsch 38 1.1 jakllsch typedef struct { 39 1.1 jakllsch UINT8 DefaultProtocol; 40 1.1 jakllsch BOOLEAN AcceptAnyProtocol; 41 1.1 jakllsch BOOLEAN AcceptIcmpErrors; 42 1.1 jakllsch BOOLEAN AcceptBroadcast; 43 1.1 jakllsch BOOLEAN AcceptPromiscuous; 44 1.1 jakllsch BOOLEAN UseDefaultAddress; 45 1.1 jakllsch EFI_IPv4_ADDRESS StationAddress; 46 1.1 jakllsch EFI_IPv4_ADDRESS SubnetMask; 47 1.1 jakllsch UINT8 TypeOfService; 48 1.1 jakllsch UINT8 TimeToLive; 49 1.1 jakllsch BOOLEAN DoNotFragment; 50 1.1 jakllsch BOOLEAN RawData; 51 1.1 jakllsch UINT32 ReceiveTimeout; 52 1.1 jakllsch UINT32 TransmitTimeout; 53 1.1 jakllsch } EFI_IP4_CONFIG_DATA; 54 1.1 jakllsch 55 1.1 jakllsch typedef struct { 56 1.1 jakllsch EFI_IPv4_ADDRESS SubnetAddress; 57 1.1 jakllsch EFI_IPv4_ADDRESS SubnetMask; 58 1.1 jakllsch EFI_IPv4_ADDRESS GatewayAddress; 59 1.1 jakllsch } EFI_IP4_ROUTE_TABLE; 60 1.1 jakllsch 61 1.1 jakllsch typedef struct { 62 1.1 jakllsch UINT8 Type; 63 1.1 jakllsch UINT8 Code; 64 1.1 jakllsch } EFI_IP4_ICMP_TYPE; 65 1.1 jakllsch 66 1.1 jakllsch typedef struct { 67 1.1 jakllsch BOOLEAN IsStarted; 68 1.1 jakllsch UINT32 MaxPacketSize; 69 1.1 jakllsch EFI_IP4_CONFIG_DATA ConfigData; 70 1.1 jakllsch BOOLEAN IsConfigured; 71 1.1 jakllsch UINT32 GroupCount; 72 1.1 jakllsch EFI_IPv4_ADDRESS *GroupTable; 73 1.1 jakllsch UINT32 RouteCount; 74 1.1 jakllsch EFI_IP4_ROUTE_TABLE *RouteTable; 75 1.1 jakllsch UINT32 IcmpTypeCount; 76 1.1 jakllsch EFI_IP4_ICMP_TYPE *IcmpTypeList; 77 1.1 jakllsch } EFI_IP4_MODE_DATA; 78 1.1 jakllsch 79 1.1 jakllsch typedef 80 1.1 jakllsch EFI_STATUS 81 1.1 jakllsch (EFIAPI *EFI_IP4_GET_MODE_DATA) ( 82 1.1 jakllsch IN struct _EFI_IP4 *This, 83 1.1 jakllsch OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 84 1.1 jakllsch OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 85 1.1 jakllsch OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 86 1.1 jakllsch ); 87 1.1 jakllsch 88 1.1 jakllsch typedef 89 1.1 jakllsch EFI_STATUS 90 1.1 jakllsch (EFIAPI *EFI_IP4_CONFIGURE) ( 91 1.1 jakllsch IN struct _EFI_IP4 *This, 92 1.1 jakllsch IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL 93 1.1 jakllsch ); 94 1.1 jakllsch 95 1.1 jakllsch typedef 96 1.1 jakllsch EFI_STATUS 97 1.1 jakllsch (EFIAPI *EFI_IP4_GROUPS) ( 98 1.1 jakllsch IN struct _EFI_IP4 *This, 99 1.1 jakllsch IN BOOLEAN JoinFlag, 100 1.1 jakllsch IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL 101 1.1 jakllsch ); 102 1.1 jakllsch 103 1.1 jakllsch typedef 104 1.1 jakllsch EFI_STATUS 105 1.1 jakllsch (EFIAPI *EFI_IP4_ROUTES) ( 106 1.1 jakllsch IN struct _EFI_IP4 *This, 107 1.1 jakllsch IN BOOLEAN DeleteRoute, 108 1.1 jakllsch IN EFI_IPv4_ADDRESS *SubnetAddress, 109 1.1 jakllsch IN EFI_IPv4_ADDRESS *SubnetMask, 110 1.1 jakllsch IN EFI_IPv4_ADDRESS *GatewayAddress 111 1.1 jakllsch ); 112 1.1 jakllsch 113 1.1 jakllsch #pragma pack(1) 114 1.1 jakllsch typedef struct { 115 1.1 jakllsch UINT8 HeaderLength:4; 116 1.1 jakllsch UINT8 Version:4; 117 1.1 jakllsch UINT8 TypeOfService; 118 1.1 jakllsch UINT16 TotalLength; 119 1.1 jakllsch UINT16 Identification; 120 1.1 jakllsch UINT16 Fragmentation; 121 1.1 jakllsch UINT8 TimeToLive; 122 1.1 jakllsch UINT8 Protocol; 123 1.1 jakllsch UINT16 Checksum; 124 1.1 jakllsch EFI_IPv4_ADDRESS SourceAddress; 125 1.1 jakllsch EFI_IPv4_ADDRESS DestinationAddress; 126 1.1 jakllsch } EFI_IP4_HEADER; 127 1.1 jakllsch #pragma pack() 128 1.1 jakllsch 129 1.1 jakllsch typedef struct { 130 1.1 jakllsch UINT32 FragmentLength; 131 1.1 jakllsch VOID *FragmentBuffer; 132 1.1 jakllsch } EFI_IP4_FRAGMENT_DATA; 133 1.1 jakllsch 134 1.1 jakllsch typedef struct { 135 1.1 jakllsch EFI_TIME TimeStamp; 136 1.1 jakllsch EFI_EVENT RecycleSignal; 137 1.1 jakllsch UINT32 HeaderLength; 138 1.1 jakllsch EFI_IP4_HEADER *Header; 139 1.1 jakllsch UINT32 OptionsLength; 140 1.1 jakllsch VOID *Options; 141 1.1 jakllsch UINT32 DataLength; 142 1.1 jakllsch UINT32 FragmentCount; 143 1.1 jakllsch EFI_IP4_FRAGMENT_DATA FragmentTable[1]; 144 1.1 jakllsch } EFI_IP4_RECEIVE_DATA; 145 1.1 jakllsch 146 1.1 jakllsch typedef struct { 147 1.1 jakllsch EFI_IPv4_ADDRESS SourceAddress; 148 1.1 jakllsch EFI_IPv4_ADDRESS GatewayAddress; 149 1.1 jakllsch UINT8 Protocol; 150 1.1 jakllsch UINT8 TypeOfService; 151 1.1 jakllsch UINT8 TimeToLive; 152 1.1 jakllsch BOOLEAN DoNotFragment; 153 1.1 jakllsch } EFI_IP4_OVERRIDE_DATA; 154 1.1 jakllsch 155 1.1 jakllsch typedef struct { 156 1.1 jakllsch EFI_IPv4_ADDRESS DestinationAddress; 157 1.1 jakllsch EFI_IP4_OVERRIDE_DATA *OverrideData; 158 1.1 jakllsch UINT32 OptionsLength; 159 1.1 jakllsch VOID *OptionsBuffer; 160 1.1 jakllsch UINT32 TotalDataLength; 161 1.1 jakllsch UINT32 FragmentCount; 162 1.1 jakllsch EFI_IP4_FRAGMENT_DATA FragmentTable[1]; 163 1.1 jakllsch } EFI_IP4_TRANSMIT_DATA; 164 1.1 jakllsch 165 1.1 jakllsch typedef struct { 166 1.1 jakllsch EFI_EVENT Event; 167 1.1 jakllsch EFI_STATUS Status; 168 1.1 jakllsch union { 169 1.1 jakllsch EFI_IP4_RECEIVE_DATA *RxData; 170 1.1 jakllsch EFI_IP4_TRANSMIT_DATA *TxData; 171 1.1 jakllsch } Packet; 172 1.1 jakllsch } EFI_IP4_COMPLETION_TOKEN; 173 1.1 jakllsch 174 1.1 jakllsch typedef 175 1.1 jakllsch EFI_STATUS 176 1.1 jakllsch (EFIAPI *EFI_IP4_TRANSMIT) ( 177 1.1 jakllsch IN struct _EFI_IP4 *This, 178 1.1 jakllsch IN EFI_IP4_COMPLETION_TOKEN *Token 179 1.1 jakllsch ); 180 1.1 jakllsch 181 1.1 jakllsch typedef 182 1.1 jakllsch EFI_STATUS 183 1.1 jakllsch (EFIAPI *EFI_IP4_RECEIVE) ( 184 1.1 jakllsch IN struct _EFI_IP4 *This, 185 1.1 jakllsch IN EFI_IP4_COMPLETION_TOKEN *Token 186 1.1 jakllsch ); 187 1.1 jakllsch 188 1.1 jakllsch typedef 189 1.1 jakllsch EFI_STATUS 190 1.1 jakllsch (EFIAPI *EFI_IP4_CANCEL)( 191 1.1 jakllsch IN struct _EFI_IP4 *This, 192 1.1 jakllsch IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL 193 1.1 jakllsch ); 194 1.1 jakllsch 195 1.1 jakllsch typedef 196 1.1 jakllsch EFI_STATUS 197 1.1 jakllsch (EFIAPI *EFI_IP4_POLL) ( 198 1.1 jakllsch IN struct _EFI_IP4 *This 199 1.1 jakllsch ); 200 1.1 jakllsch 201 1.1 jakllsch typedef struct _EFI_IP4 { 202 1.1 jakllsch EFI_IP4_GET_MODE_DATA GetModeData; 203 1.1 jakllsch EFI_IP4_CONFIGURE Configure; 204 1.1 jakllsch EFI_IP4_GROUPS Groups; 205 1.1 jakllsch EFI_IP4_ROUTES Routes; 206 1.1 jakllsch EFI_IP4_TRANSMIT Transmit; 207 1.1 jakllsch EFI_IP4_RECEIVE Receive; 208 1.1 jakllsch EFI_IP4_CANCEL Cancel; 209 1.1 jakllsch EFI_IP4_POLL Poll; 210 1.1 jakllsch } EFI_IP4; 211 1.1 jakllsch 212 1.1 jakllsch typedef struct { 213 1.1 jakllsch UINT8 DefaultProtocol; 214 1.1 jakllsch BOOLEAN AcceptAnyProtocol; 215 1.1 jakllsch BOOLEAN AcceptIcmpErrors; 216 1.1 jakllsch BOOLEAN AcceptPromiscuous; 217 1.1 jakllsch EFI_IPv6_ADDRESS DestinationAddress; 218 1.1 jakllsch EFI_IPv6_ADDRESS StationAddress; 219 1.1 jakllsch UINT8 TrafficClass; 220 1.1 jakllsch UINT8 HopLimit; 221 1.1 jakllsch UINT32 FlowLabel; 222 1.1 jakllsch UINT32 ReceiveTimeout; 223 1.1 jakllsch UINT32 TransmitTimeout; 224 1.1 jakllsch } EFI_IP6_CONFIG_DATA; 225 1.1 jakllsch 226 1.1 jakllsch typedef struct { 227 1.1 jakllsch EFI_IPv6_ADDRESS Address; 228 1.1 jakllsch UINT8 PrefixLength; 229 1.1 jakllsch } EFI_IP6_ADDRESS_INFO; 230 1.1 jakllsch 231 1.1 jakllsch typedef struct { 232 1.1 jakllsch EFI_IPv6_ADDRESS Gateway; 233 1.1 jakllsch EFI_IPv6_ADDRESS Destination; 234 1.1 jakllsch UINT8 PrefixLength; 235 1.1 jakllsch } EFI_IP6_ROUTE_TABLE; 236 1.1 jakllsch 237 1.1 jakllsch typedef enum { 238 1.1 jakllsch EfiNeighborInComplete, 239 1.1 jakllsch EfiNeighborReachable, 240 1.1 jakllsch EfiNeighborStale, 241 1.1 jakllsch EfiNeighborDelay, 242 1.1 jakllsch EfiNeighborProbe 243 1.1 jakllsch } EFI_IP6_NEIGHBOR_STATE; 244 1.1 jakllsch 245 1.1 jakllsch typedef struct { 246 1.1 jakllsch EFI_IPv6_ADDRESS Neighbor; 247 1.1 jakllsch EFI_MAC_ADDRESS LinkAddress; 248 1.1 jakllsch EFI_IP6_NEIGHBOR_STATE State; 249 1.1 jakllsch } EFI_IP6_NEIGHBOR_CACHE; 250 1.1 jakllsch 251 1.1 jakllsch typedef struct { 252 1.1 jakllsch UINT8 Type; 253 1.1 jakllsch UINT8 Code; 254 1.1 jakllsch } EFI_IP6_ICMP_TYPE; 255 1.1 jakllsch 256 1.1 jakllsch //*********************************************************** 257 1.1 jakllsch // ICMPv6 type definitions for error messages 258 1.1 jakllsch //*********************************************************** 259 1.1 jakllsch #define ICMP_V6_DEST_UNREACHABLE 0x1 260 1.1 jakllsch #define ICMP_V6_PACKET_TOO_BIG 0x2 261 1.1 jakllsch #define ICMP_V6_TIME_EXCEEDED 0x3 262 1.1 jakllsch #define ICMP_V6_PARAMETER_PROBLEM 0x4 263 1.1 jakllsch 264 1.1 jakllsch //*********************************************************** 265 1.1 jakllsch // ICMPv6 type definition for informational messages 266 1.1 jakllsch //*********************************************************** 267 1.1 jakllsch #define ICMP_V6_ECHO_REQUEST 0x80 268 1.1 jakllsch #define ICMP_V6_ECHO_REPLY 0x81 269 1.1 jakllsch #define ICMP_V6_LISTENER_QUERY 0x82 270 1.1 jakllsch #define ICMP_V6_LISTENER_REPORT 0x83 271 1.1 jakllsch #define ICMP_V6_LISTENER_DONE 0x84 272 1.1 jakllsch #define ICMP_V6_ROUTER_SOLICIT 0x85 273 1.1 jakllsch #define ICMP_V6_ROUTER_ADVERTISE 0x86 274 1.1 jakllsch #define ICMP_V6_NEIGHBOR_SOLICIT 0x87 275 1.1 jakllsch #define ICMP_V6_NEIGHBOR_ADVERTISE 0x88 276 1.1 jakllsch #define ICMP_V6_REDIRECT 0x89 277 1.1 jakllsch #define ICMP_V6_LISTENER_REPORT_2 0x8F 278 1.1 jakllsch 279 1.1 jakllsch //*********************************************************** 280 1.1 jakllsch // ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE 281 1.1 jakllsch //*********************************************************** 282 1.1 jakllsch #define ICMP_V6_NO_ROUTE_TO_DEST 0x0 283 1.1 jakllsch #define ICMP_V6_COMM_PROHIBITED 0x1 284 1.1 jakllsch #define ICMP_V6_BEYOND_SCOPE 0x2 285 1.1 jakllsch #define ICMP_V6_ADDR_UNREACHABLE 0x3 286 1.1 jakllsch #define ICMP_V6_PORT_UNREACHABLE 0x4 287 1.1 jakllsch #define ICMP_V6_SOURCE_ADDR_FAILED 0x5 288 1.1 jakllsch #define ICMP_V6_ROUTE_REJECTED 0x6 289 1.1 jakllsch 290 1.1 jakllsch //*********************************************************** 291 1.1 jakllsch // ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED 292 1.1 jakllsch //*********************************************************** 293 1.1 jakllsch #define ICMP_V6_TIMEOUT_HOP_LIMIT 0x0 294 1.1 jakllsch #define ICMP_V6_TIMEOUT_REASSEMBLE 0x1 295 1.1 jakllsch 296 1.1 jakllsch //*********************************************************** 297 1.1 jakllsch // ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM 298 1.1 jakllsch //*********************************************************** 299 1.1 jakllsch #define ICMP_V6_ERRONEOUS_HEADER 0x0 300 1.1 jakllsch #define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1 301 1.1 jakllsch #define ICMP_V6_UNRECOGNIZE_OPTION 0x2 302 1.1 jakllsch 303 1.1 jakllsch typedef struct { 304 1.1 jakllsch BOOLEAN IsStarted; 305 1.1 jakllsch UINT32 MaxPacketSize; 306 1.1 jakllsch EFI_IP6_CONFIG_DATA ConfigData; 307 1.1 jakllsch BOOLEAN IsConfigured; 308 1.1 jakllsch UINT32 AddressCount; 309 1.1 jakllsch EFI_IP6_ADDRESS_INFO *AddressList; 310 1.1 jakllsch UINT32 GroupCount; 311 1.1 jakllsch EFI_IPv6_ADDRESS *GroupTable; 312 1.1 jakllsch UINT32 RouteCount; 313 1.1 jakllsch EFI_IP6_ROUTE_TABLE *RouteTable; 314 1.1 jakllsch UINT32 NeighborCount; 315 1.1 jakllsch EFI_IP6_NEIGHBOR_CACHE *NeighborCache; 316 1.1 jakllsch UINT32 PrefixCount; 317 1.1 jakllsch EFI_IP6_ADDRESS_INFO *PrefixTable; 318 1.1 jakllsch UINT32 IcmpTypeCount; 319 1.1 jakllsch EFI_IP6_ICMP_TYPE *IcmpTypeList; 320 1.1 jakllsch } EFI_IP6_MODE_DATA; 321 1.1 jakllsch 322 1.1 jakllsch typedef 323 1.1 jakllsch EFI_STATUS 324 1.1 jakllsch (EFIAPI *EFI_IP6_GET_MODE_DATA) ( 325 1.1 jakllsch IN struct _EFI_IP6 *This, 326 1.1 jakllsch OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, 327 1.1 jakllsch OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 328 1.1 jakllsch OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 329 1.1 jakllsch ); 330 1.1 jakllsch 331 1.1 jakllsch typedef 332 1.1 jakllsch EFI_STATUS 333 1.1 jakllsch (EFIAPI *EFI_IP6_CONFIGURE) ( 334 1.1 jakllsch IN struct _EFI_IP6 *This, 335 1.1 jakllsch IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL 336 1.1 jakllsch ); 337 1.1 jakllsch typedef 338 1.1 jakllsch EFI_STATUS 339 1.1 jakllsch (EFIAPI *EFI_IP6_GROUPS) ( 340 1.1 jakllsch IN struct _EFI_IP6 *This, 341 1.1 jakllsch IN BOOLEAN JoinFlag, 342 1.1 jakllsch IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL 343 1.1 jakllsch ); 344 1.1 jakllsch 345 1.1 jakllsch typedef 346 1.1 jakllsch EFI_STATUS 347 1.1 jakllsch (EFIAPI *EFI_IP6_ROUTES) ( 348 1.1 jakllsch IN struct _EFI_IP6 *This, 349 1.1 jakllsch IN BOOLEAN DeleteRoute, 350 1.1 jakllsch IN EFI_IPv6_ADDRESS *Destination OPTIONAL, 351 1.1 jakllsch IN UINT8 PrefixLength, 352 1.1 jakllsch IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL 353 1.1 jakllsch ); 354 1.1 jakllsch 355 1.1 jakllsch typedef 356 1.1 jakllsch EFI_STATUS 357 1.1 jakllsch (EFIAPI *EFI_IP6_NEIGHBORS) ( 358 1.1 jakllsch IN struct _EFI_IP6 *This, 359 1.1 jakllsch IN BOOLEAN DeleteFlag, 360 1.1 jakllsch IN EFI_IPv6_ADDRESS *TargetIp6Address, 361 1.1 jakllsch IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL, 362 1.1 jakllsch IN UINT32 Timeout, 363 1.1 jakllsch IN BOOLEAN Override 364 1.1 jakllsch ); 365 1.1 jakllsch 366 1.1 jakllsch typedef struct _EFI_IP6_FRAGMENT_DATA { 367 1.1 jakllsch UINT32 FragmentLength; 368 1.1 jakllsch VOID *FragmentBuffer; 369 1.1 jakllsch } EFI_IP6_FRAGMENT_DATA; 370 1.1 jakllsch 371 1.1 jakllsch typedef struct _EFI_IP6_OVERRIDE_DATA { 372 1.1 jakllsch UINT8 Protocol; 373 1.1 jakllsch UINT8 HopLimit; 374 1.1 jakllsch UINT32 FlowLabel; 375 1.1 jakllsch } EFI_IP6_OVERRIDE_DATA; 376 1.1 jakllsch 377 1.1 jakllsch typedef struct _EFI_IP6_TRANSMIT_DATA { 378 1.1 jakllsch EFI_IPv6_ADDRESS DestinationAddress; 379 1.1 jakllsch EFI_IP6_OVERRIDE_DATA *OverrideData; 380 1.1 jakllsch UINT32 ExtHdrsLength; 381 1.1 jakllsch VOID *ExtHdrs; 382 1.1 jakllsch UINT8 NextHeader; 383 1.1 jakllsch UINT32 DataLength; 384 1.1 jakllsch UINT32 FragmentCount; 385 1.1 jakllsch EFI_IP6_FRAGMENT_DATA FragmentTable[1]; 386 1.1 jakllsch } EFI_IP6_TRANSMIT_DATA; 387 1.1 jakllsch 388 1.1 jakllsch #pragma pack(1) 389 1.1 jakllsch typedef struct _EFI_IP6_HEADER { 390 1.1 jakllsch UINT8 TrafficClassH:4; 391 1.1 jakllsch UINT8 Version:4; 392 1.1 jakllsch UINT8 FlowLabelH:4; 393 1.1 jakllsch UINT8 TrafficClassL:4; 394 1.1 jakllsch UINT16 FlowLabelL; 395 1.1 jakllsch UINT16 PayloadLength; 396 1.1 jakllsch UINT8 NextHeader; 397 1.1 jakllsch UINT8 HopLimit; 398 1.1 jakllsch EFI_IPv6_ADDRESS SourceAddress; 399 1.1 jakllsch EFI_IPv6_ADDRESS DestinationAddress; 400 1.1 jakllsch } EFI_IP6_HEADER; 401 1.1 jakllsch #pragma pack() 402 1.1 jakllsch 403 1.1 jakllsch typedef struct _EFI_IP6_RECEIVE_DATA { 404 1.1 jakllsch EFI_TIME TimeStamp; 405 1.1 jakllsch EFI_EVENT RecycleSignal; 406 1.1 jakllsch UINT32 HeaderLength; 407 1.1 jakllsch EFI_IP6_HEADER *Header; 408 1.1 jakllsch UINT32 DataLength; 409 1.1 jakllsch UINT32 FragmentCount; 410 1.1 jakllsch EFI_IP6_FRAGMENT_DATA FragmentTable[1]; 411 1.1 jakllsch } EFI_IP6_RECEIVE_DATA; 412 1.1 jakllsch 413 1.1 jakllsch typedef struct { 414 1.1 jakllsch EFI_EVENT Event; 415 1.1 jakllsch EFI_STATUS Status; 416 1.1 jakllsch union { 417 1.1 jakllsch EFI_IP6_RECEIVE_DATA *RxData; 418 1.1 jakllsch EFI_IP6_TRANSMIT_DATA *TxData; 419 1.1 jakllsch } Packet; 420 1.1 jakllsch } EFI_IP6_COMPLETION_TOKEN; 421 1.1 jakllsch 422 1.1 jakllsch typedef 423 1.1 jakllsch EFI_STATUS 424 1.1 jakllsch (EFIAPI *EFI_IP6_TRANSMIT) ( 425 1.1 jakllsch IN struct _EFI_IP6 *This, 426 1.1 jakllsch IN EFI_IP6_COMPLETION_TOKEN *Token 427 1.1 jakllsch ); 428 1.1 jakllsch 429 1.1 jakllsch typedef 430 1.1 jakllsch EFI_STATUS 431 1.1 jakllsch (EFIAPI *EFI_IP6_RECEIVE) ( 432 1.1 jakllsch IN struct _EFI_IP6 *This, 433 1.1 jakllsch IN EFI_IP6_COMPLETION_TOKEN *Token 434 1.1 jakllsch ); 435 1.1 jakllsch 436 1.1 jakllsch typedef 437 1.1 jakllsch EFI_STATUS 438 1.1 jakllsch (EFIAPI *EFI_IP6_CANCEL)( 439 1.1 jakllsch IN struct _EFI_IP6 *This, 440 1.1 jakllsch IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL 441 1.1 jakllsch ); 442 1.1 jakllsch 443 1.1 jakllsch typedef 444 1.1 jakllsch EFI_STATUS 445 1.1 jakllsch (EFIAPI *EFI_IP6_POLL) ( 446 1.1 jakllsch IN struct _EFI_IP6 *This 447 1.1 jakllsch ); 448 1.1 jakllsch 449 1.1 jakllsch typedef struct _EFI_IP6 { 450 1.1 jakllsch EFI_IP6_GET_MODE_DATA GetModeData; 451 1.1 jakllsch EFI_IP6_CONFIGURE Configure; 452 1.1 jakllsch EFI_IP6_GROUPS Groups; 453 1.1 jakllsch EFI_IP6_ROUTES Routes; 454 1.1 jakllsch EFI_IP6_NEIGHBORS Neighbors; 455 1.1 jakllsch EFI_IP6_TRANSMIT Transmit; 456 1.1 jakllsch EFI_IP6_RECEIVE Receive; 457 1.1 jakllsch EFI_IP6_CANCEL Cancel; 458 1.1 jakllsch EFI_IP6_POLL Poll; 459 1.1 jakllsch } EFI_IP6; 460 1.1 jakllsch 461 1.1 jakllsch #endif /* _EFI_IP_H */ 462