| #ifndef _EFI_IP_H |
| #define _EFI_IP_H |
| |
| /*++ |
| Copyright (c) 2013 Intel Corporation |
| |
| --*/ |
| |
| #define EFI_IP4_SERVICE_BINDING_PROTOCOL \ |
| {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}} |
| |
| #define EFI_IP4_PROTOCOL \ |
| {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}} |
| |
| #define EFI_IP6_SERVICE_BINDING_PROTOCOL \ |
| {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}} |
| |
| #define EFI_IP6_PROTOCOL \ |
| {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}} |
| |
| INTERFACE_DECL(_EFI_IP4); |
| INTERFACE_DECL(_EFI_IP6); |
| |
| typedef struct { |
| EFI_HANDLE InstanceHandle; |
| EFI_IPv4_ADDRESS Ip4Address; |
| EFI_IPv4_ADDRESS SubnetMask; |
| } EFI_IP4_ADDRESS_PAIR; |
| |
| typedef struct { |
| EFI_HANDLE DriverHandle; |
| UINT32 AddressCount; |
| EFI_IP4_ADDRESS_PAIR AddressPairs[1]; |
| } EFI_IP4_VARIABLE_DATA; |
| |
| typedef struct { |
| UINT8 DefaultProtocol; |
| BOOLEAN AcceptAnyProtocol; |
| BOOLEAN AcceptIcmpErrors; |
| BOOLEAN AcceptBroadcast; |
| BOOLEAN AcceptPromiscuous; |
| BOOLEAN UseDefaultAddress; |
| EFI_IPv4_ADDRESS StationAddress; |
| EFI_IPv4_ADDRESS SubnetMask; |
| UINT8 TypeOfService; |
| UINT8 TimeToLive; |
| BOOLEAN DoNotFragment; |
| BOOLEAN RawData; |
| UINT32 ReceiveTimeout; |
| UINT32 TransmitTimeout; |
| } EFI_IP4_CONFIG_DATA; |
| |
| typedef struct { |
| EFI_IPv4_ADDRESS SubnetAddress; |
| EFI_IPv4_ADDRESS SubnetMask; |
| EFI_IPv4_ADDRESS GatewayAddress; |
| } EFI_IP4_ROUTE_TABLE; |
| |
| typedef struct { |
| UINT8 Type; |
| UINT8 Code; |
| } EFI_IP4_ICMP_TYPE; |
| |
| typedef struct { |
| BOOLEAN IsStarted; |
| UINT32 MaxPacketSize; |
| EFI_IP4_CONFIG_DATA ConfigData; |
| BOOLEAN IsConfigured; |
| UINT32 GroupCount; |
| EFI_IPv4_ADDRESS *GroupTable; |
| UINT32 RouteCount; |
| EFI_IP4_ROUTE_TABLE *RouteTable; |
| UINT32 IcmpTypeCount; |
| EFI_IP4_ICMP_TYPE *IcmpTypeList; |
| } EFI_IP4_MODE_DATA; |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_GET_MODE_DATA) ( |
| IN struct _EFI_IP4 *This, |
| OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, |
| OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, |
| OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_CONFIGURE) ( |
| IN struct _EFI_IP4 *This, |
| IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_GROUPS) ( |
| IN struct _EFI_IP4 *This, |
| IN BOOLEAN JoinFlag, |
| IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_ROUTES) ( |
| IN struct _EFI_IP4 *This, |
| IN BOOLEAN DeleteRoute, |
| IN EFI_IPv4_ADDRESS *SubnetAddress, |
| IN EFI_IPv4_ADDRESS *SubnetMask, |
| IN EFI_IPv4_ADDRESS *GatewayAddress |
| ); |
| |
| #pragma pack(1) |
| typedef struct { |
| UINT8 HeaderLength:4; |
| UINT8 Version:4; |
| UINT8 TypeOfService; |
| UINT16 TotalLength; |
| UINT16 Identification; |
| UINT16 Fragmentation; |
| UINT8 TimeToLive; |
| UINT8 Protocol; |
| UINT16 Checksum; |
| EFI_IPv4_ADDRESS SourceAddress; |
| EFI_IPv4_ADDRESS DestinationAddress; |
| } EFI_IP4_HEADER; |
| #pragma pack() |
| |
| typedef struct { |
| UINT32 FragmentLength; |
| VOID *FragmentBuffer; |
| } EFI_IP4_FRAGMENT_DATA; |
| |
| typedef struct { |
| EFI_TIME TimeStamp; |
| EFI_EVENT RecycleSignal; |
| UINT32 HeaderLength; |
| EFI_IP4_HEADER *Header; |
| UINT32 OptionsLength; |
| VOID *Options; |
| UINT32 DataLength; |
| UINT32 FragmentCount; |
| EFI_IP4_FRAGMENT_DATA FragmentTable[1]; |
| } EFI_IP4_RECEIVE_DATA; |
| |
| typedef struct { |
| EFI_IPv4_ADDRESS SourceAddress; |
| EFI_IPv4_ADDRESS GatewayAddress; |
| UINT8 Protocol; |
| UINT8 TypeOfService; |
| UINT8 TimeToLive; |
| BOOLEAN DoNotFragment; |
| } EFI_IP4_OVERRIDE_DATA; |
| |
| typedef struct { |
| EFI_IPv4_ADDRESS DestinationAddress; |
| EFI_IP4_OVERRIDE_DATA *OverrideData; |
| UINT32 OptionsLength; |
| VOID *OptionsBuffer; |
| UINT32 TotalDataLength; |
| UINT32 FragmentCount; |
| EFI_IP4_FRAGMENT_DATA FragmentTable[1]; |
| } EFI_IP4_TRANSMIT_DATA; |
| |
| typedef struct { |
| EFI_EVENT Event; |
| EFI_STATUS Status; |
| union { |
| EFI_IP4_RECEIVE_DATA *RxData; |
| EFI_IP4_TRANSMIT_DATA *TxData; |
| } Packet; |
| } EFI_IP4_COMPLETION_TOKEN; |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_TRANSMIT) ( |
| IN struct _EFI_IP4 *This, |
| IN EFI_IP4_COMPLETION_TOKEN *Token |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_RECEIVE) ( |
| IN struct _EFI_IP4 *This, |
| IN EFI_IP4_COMPLETION_TOKEN *Token |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_CANCEL)( |
| IN struct _EFI_IP4 *This, |
| IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_POLL) ( |
| IN struct _EFI_IP4 *This |
| ); |
| |
| typedef struct _EFI_IP4 { |
| EFI_IP4_GET_MODE_DATA GetModeData; |
| EFI_IP4_CONFIGURE Configure; |
| EFI_IP4_GROUPS Groups; |
| EFI_IP4_ROUTES Routes; |
| EFI_IP4_TRANSMIT Transmit; |
| EFI_IP4_RECEIVE Receive; |
| EFI_IP4_CANCEL Cancel; |
| EFI_IP4_POLL Poll; |
| } EFI_IP4; |
| |
| typedef struct { |
| UINT8 DefaultProtocol; |
| BOOLEAN AcceptAnyProtocol; |
| BOOLEAN AcceptIcmpErrors; |
| BOOLEAN AcceptPromiscuous; |
| EFI_IPv6_ADDRESS DestinationAddress; |
| EFI_IPv6_ADDRESS StationAddress; |
| UINT8 TrafficClass; |
| UINT8 HopLimit; |
| UINT32 FlowLabel; |
| UINT32 ReceiveTimeout; |
| UINT32 TransmitTimeout; |
| } EFI_IP6_CONFIG_DATA; |
| |
| typedef struct { |
| EFI_IPv6_ADDRESS Address; |
| UINT8 PrefixLength; |
| } EFI_IP6_ADDRESS_INFO; |
| |
| typedef struct { |
| EFI_IPv6_ADDRESS Gateway; |
| EFI_IPv6_ADDRESS Destination; |
| UINT8 PrefixLength; |
| } EFI_IP6_ROUTE_TABLE; |
| |
| typedef enum { |
| EfiNeighborInComplete, |
| EfiNeighborReachable, |
| EfiNeighborStale, |
| EfiNeighborDelay, |
| EfiNeighborProbe |
| } EFI_IP6_NEIGHBOR_STATE; |
| |
| typedef struct { |
| EFI_IPv6_ADDRESS Neighbor; |
| EFI_MAC_ADDRESS LinkAddress; |
| EFI_IP6_NEIGHBOR_STATE State; |
| } EFI_IP6_NEIGHBOR_CACHE; |
| |
| typedef struct { |
| UINT8 Type; |
| UINT8 Code; |
| } EFI_IP6_ICMP_TYPE; |
| |
| //*********************************************************** |
| // ICMPv6 type definitions for error messages |
| //*********************************************************** |
| #define ICMP_V6_DEST_UNREACHABLE 0x1 |
| #define ICMP_V6_PACKET_TOO_BIG 0x2 |
| #define ICMP_V6_TIME_EXCEEDED 0x3 |
| #define ICMP_V6_PARAMETER_PROBLEM 0x4 |
| |
| //*********************************************************** |
| // ICMPv6 type definition for informational messages |
| //*********************************************************** |
| #define ICMP_V6_ECHO_REQUEST 0x80 |
| #define ICMP_V6_ECHO_REPLY 0x81 |
| #define ICMP_V6_LISTENER_QUERY 0x82 |
| #define ICMP_V6_LISTENER_REPORT 0x83 |
| #define ICMP_V6_LISTENER_DONE 0x84 |
| #define ICMP_V6_ROUTER_SOLICIT 0x85 |
| #define ICMP_V6_ROUTER_ADVERTISE 0x86 |
| #define ICMP_V6_NEIGHBOR_SOLICIT 0x87 |
| #define ICMP_V6_NEIGHBOR_ADVERTISE 0x88 |
| #define ICMP_V6_REDIRECT 0x89 |
| #define ICMP_V6_LISTENER_REPORT_2 0x8F |
| |
| //*********************************************************** |
| // ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE |
| //*********************************************************** |
| #define ICMP_V6_NO_ROUTE_TO_DEST 0x0 |
| #define ICMP_V6_COMM_PROHIBITED 0x1 |
| #define ICMP_V6_BEYOND_SCOPE 0x2 |
| #define ICMP_V6_ADDR_UNREACHABLE 0x3 |
| #define ICMP_V6_PORT_UNREACHABLE 0x4 |
| #define ICMP_V6_SOURCE_ADDR_FAILED 0x5 |
| #define ICMP_V6_ROUTE_REJECTED 0x6 |
| |
| //*********************************************************** |
| // ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED |
| //*********************************************************** |
| #define ICMP_V6_TIMEOUT_HOP_LIMIT 0x0 |
| #define ICMP_V6_TIMEOUT_REASSEMBLE 0x1 |
| |
| //*********************************************************** |
| // ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM |
| //*********************************************************** |
| #define ICMP_V6_ERRONEOUS_HEADER 0x0 |
| #define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1 |
| #define ICMP_V6_UNRECOGNIZE_OPTION 0x2 |
| |
| typedef struct { |
| BOOLEAN IsStarted; |
| UINT32 MaxPacketSize; |
| EFI_IP6_CONFIG_DATA ConfigData; |
| BOOLEAN IsConfigured; |
| UINT32 AddressCount; |
| EFI_IP6_ADDRESS_INFO *AddressList; |
| UINT32 GroupCount; |
| EFI_IPv6_ADDRESS *GroupTable; |
| UINT32 RouteCount; |
| EFI_IP6_ROUTE_TABLE *RouteTable; |
| UINT32 NeighborCount; |
| EFI_IP6_NEIGHBOR_CACHE *NeighborCache; |
| UINT32 PrefixCount; |
| EFI_IP6_ADDRESS_INFO *PrefixTable; |
| UINT32 IcmpTypeCount; |
| EFI_IP6_ICMP_TYPE *IcmpTypeList; |
| } EFI_IP6_MODE_DATA; |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_GET_MODE_DATA) ( |
| IN struct _EFI_IP6 *This, |
| OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, |
| OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, |
| OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_CONFIGURE) ( |
| IN struct _EFI_IP6 *This, |
| IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL |
| ); |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_GROUPS) ( |
| IN struct _EFI_IP6 *This, |
| IN BOOLEAN JoinFlag, |
| IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_ROUTES) ( |
| IN struct _EFI_IP6 *This, |
| IN BOOLEAN DeleteRoute, |
| IN EFI_IPv6_ADDRESS *Destination OPTIONAL, |
| IN UINT8 PrefixLength, |
| IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_NEIGHBORS) ( |
| IN struct _EFI_IP6 *This, |
| IN BOOLEAN DeleteFlag, |
| IN EFI_IPv6_ADDRESS *TargetIp6Address, |
| IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL, |
| IN UINT32 Timeout, |
| IN BOOLEAN Override |
| ); |
| |
| typedef struct _EFI_IP6_FRAGMENT_DATA { |
| UINT32 FragmentLength; |
| VOID *FragmentBuffer; |
| } EFI_IP6_FRAGMENT_DATA; |
| |
| typedef struct _EFI_IP6_OVERRIDE_DATA { |
| UINT8 Protocol; |
| UINT8 HopLimit; |
| UINT32 FlowLabel; |
| } EFI_IP6_OVERRIDE_DATA; |
| |
| typedef struct _EFI_IP6_TRANSMIT_DATA { |
| EFI_IPv6_ADDRESS DestinationAddress; |
| EFI_IP6_OVERRIDE_DATA *OverrideData; |
| UINT32 ExtHdrsLength; |
| VOID *ExtHdrs; |
| UINT8 NextHeader; |
| UINT32 DataLength; |
| UINT32 FragmentCount; |
| EFI_IP6_FRAGMENT_DATA FragmentTable[1]; |
| } EFI_IP6_TRANSMIT_DATA; |
| |
| #pragma pack(1) |
| typedef struct _EFI_IP6_HEADER { |
| UINT8 TrafficClassH:4; |
| UINT8 Version:4; |
| UINT8 FlowLabelH:4; |
| UINT8 TrafficClassL:4; |
| UINT16 FlowLabelL; |
| UINT16 PayloadLength; |
| UINT8 NextHeader; |
| UINT8 HopLimit; |
| EFI_IPv6_ADDRESS SourceAddress; |
| EFI_IPv6_ADDRESS DestinationAddress; |
| } EFI_IP6_HEADER; |
| #pragma pack() |
| |
| typedef struct _EFI_IP6_RECEIVE_DATA { |
| EFI_TIME TimeStamp; |
| EFI_EVENT RecycleSignal; |
| UINT32 HeaderLength; |
| EFI_IP6_HEADER *Header; |
| UINT32 DataLength; |
| UINT32 FragmentCount; |
| EFI_IP6_FRAGMENT_DATA FragmentTable[1]; |
| } EFI_IP6_RECEIVE_DATA; |
| |
| typedef struct { |
| EFI_EVENT Event; |
| EFI_STATUS Status; |
| union { |
| EFI_IP6_RECEIVE_DATA *RxData; |
| EFI_IP6_TRANSMIT_DATA *TxData; |
| } Packet; |
| } EFI_IP6_COMPLETION_TOKEN; |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_TRANSMIT) ( |
| IN struct _EFI_IP6 *This, |
| IN EFI_IP6_COMPLETION_TOKEN *Token |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_RECEIVE) ( |
| IN struct _EFI_IP6 *This, |
| IN EFI_IP6_COMPLETION_TOKEN *Token |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_CANCEL)( |
| IN struct _EFI_IP6 *This, |
| IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL |
| ); |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP6_POLL) ( |
| IN struct _EFI_IP6 *This |
| ); |
| |
| typedef struct _EFI_IP6 { |
| EFI_IP6_GET_MODE_DATA GetModeData; |
| EFI_IP6_CONFIGURE Configure; |
| EFI_IP6_GROUPS Groups; |
| EFI_IP6_ROUTES Routes; |
| EFI_IP6_NEIGHBORS Neighbors; |
| EFI_IP6_TRANSMIT Transmit; |
| EFI_IP6_RECEIVE Receive; |
| EFI_IP6_CANCEL Cancel; |
| EFI_IP6_POLL Poll; |
| } EFI_IP6; |
| |
| #endif /* _EFI_IP_H */ |