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