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