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