/** @file\r
Implementation of EFI_IP6_PROTOCOL protocol interfaces and type definitions.\r
\r
- Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
#include <Uefi.h>\r
\r
+#include <IndustryStandard/Dhcp.h>\r
+\r
#include <Protocol/ServiceBinding.h>\r
#include <Protocol/ManagedNetwork.h>\r
#include <Protocol/IpSec.h>\r
#include "Ip6ConfigNv.h"\r
#include "Ip6ConfigImpl.h"\r
\r
-#define IP6_PROTOCOL_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'P')\r
-#define IP6_SERVICE_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'S')\r
+#define IP6_PROTOCOL_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'P')\r
+#define IP6_SERVICE_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'S')\r
\r
//\r
// The state of IP6 protocol. It starts from UNCONFIGED. if it is\r
// is called, it becomes UNCONFIGED again. If (partly) destroyed, it\r
// becomes DESTROY.\r
//\r
-#define IP6_STATE_UNCONFIGED 0\r
-#define IP6_STATE_CONFIGED 1\r
+#define IP6_STATE_UNCONFIGED 0\r
+#define IP6_STATE_CONFIGED 1\r
\r
//\r
// The state of IP6 service. It starts from UNSTARTED. It transits\r
#define IP6_SERVICE_FROM_PROTOCOL(Sb) \\r
CR ((Sb), IP6_SERVICE, ServiceBinding, IP6_SERVICE_SIGNATURE)\r
\r
-#define IP6_NO_MAPPING(IpInstance) (!(IpInstance)->Interface->Configured)\r
+#define IP6_NO_MAPPING(IpInstance) (!(IpInstance)->Interface->Configured)\r
\r
-extern EFI_IPSEC2_PROTOCOL *mIpSec;\r
+extern EFI_IPSEC2_PROTOCOL *mIpSec;\r
+extern BOOLEAN mIpSec2Installed;\r
\r
//\r
// IP6_TXTOKEN_WRAP wraps the upper layer's transmit token.\r
// user's event signalled.\r
//\r
typedef struct {\r
- IP6_PROTOCOL *IpInstance;\r
- EFI_IP6_COMPLETION_TOKEN *Token;\r
- EFI_EVENT IpSecRecycleSignal;\r
- NET_BUF *Packet;\r
- BOOLEAN Sent;\r
- INTN Life;\r
+ IP6_PROTOCOL *IpInstance;\r
+ EFI_IP6_COMPLETION_TOKEN *Token;\r
+ EFI_EVENT IpSecRecycleSignal;\r
+ NET_BUF *Packet;\r
+ BOOLEAN Sent;\r
+ INTN Life;\r
} IP6_TXTOKEN_WRAP;\r
\r
typedef struct {\r
- EFI_EVENT IpSecRecycleSignal;\r
- NET_BUF *Packet;\r
+ EFI_EVENT IpSecRecycleSignal;\r
+ NET_BUF *Packet;\r
} IP6_IPSEC_WRAP;\r
\r
//\r
// fragments will be freed at last.\r
//\r
typedef struct {\r
- LIST_ENTRY Link;\r
- IP6_PROTOCOL *IpInstance;\r
- NET_BUF *Packet;\r
- EFI_IP6_RECEIVE_DATA RxData;\r
+ LIST_ENTRY Link;\r
+ IP6_PROTOCOL *IpInstance;\r
+ NET_BUF *Packet;\r
+ EFI_IP6_RECEIVE_DATA RxData;\r
} IP6_RXDATA_WRAP;\r
\r
struct _IP6_PROTOCOL {\r
- UINT32 Signature;\r
+ UINT32 Signature;\r
\r
- EFI_IP6_PROTOCOL Ip6Proto;\r
- EFI_HANDLE Handle;\r
- INTN State;\r
+ EFI_IP6_PROTOCOL Ip6Proto;\r
+ EFI_HANDLE Handle;\r
+ INTN State;\r
\r
- IP6_SERVICE *Service;\r
- LIST_ENTRY Link; // Link to all the IP protocol from the service\r
+ IP6_SERVICE *Service;\r
+ LIST_ENTRY Link; // Link to all the IP protocol from the service\r
\r
- UINT8 PrefixLength; // PrefixLength of the configured station address.\r
+ UINT8 PrefixLength; // PrefixLength of the configured station address.\r
//\r
- // User's transmit/receive tokens, and received/deliverd packets\r
+ // User's transmit/receive tokens, and received/delivered packets\r
//\r
- NET_MAP RxTokens;\r
- NET_MAP TxTokens; // map between (User's Token, IP6_TXTOKE_WRAP)\r
- LIST_ENTRY Received; // Received but not delivered packet\r
- LIST_ENTRY Delivered; // Delivered and to be recycled packets\r
- EFI_LOCK RecycleLock;\r
+ NET_MAP RxTokens;\r
+ NET_MAP TxTokens; // map between (User's Token, IP6_TXTOKE_WRAP)\r
+ LIST_ENTRY Received; // Received but not delivered packet\r
+ LIST_ENTRY Delivered; // Delivered and to be recycled packets\r
+ EFI_LOCK RecycleLock;\r
\r
- IP6_INTERFACE *Interface;\r
- LIST_ENTRY AddrLink; // Ip instances with the same IP address.\r
+ IP6_INTERFACE *Interface;\r
+ LIST_ENTRY AddrLink; // Ip instances with the same IP address.\r
\r
- EFI_IPv6_ADDRESS *GroupList; // stored in network order.\r
- UINT32 GroupCount;\r
+ EFI_IPv6_ADDRESS *GroupList; // stored in network order.\r
+ UINT32 GroupCount;\r
\r
- EFI_IP6_CONFIG_DATA ConfigData;\r
- BOOLEAN InDestroy;\r
+ EFI_IP6_CONFIG_DATA ConfigData;\r
+ BOOLEAN InDestroy;\r
};\r
\r
struct _IP6_SERVICE {\r
- UINT32 Signature;\r
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
- INTN State;\r
+ UINT32 Signature;\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+ INTN State;\r
\r
//\r
// List of all the IP instances and interfaces, and default\r
// interface and route table and caches.\r
//\r
- UINTN NumChildren;\r
- LIST_ENTRY Children;\r
+ UINTN NumChildren;\r
+ LIST_ENTRY Children;\r
\r
- LIST_ENTRY Interfaces;\r
+ LIST_ENTRY Interfaces;\r
\r
- IP6_INTERFACE *DefaultInterface;\r
- IP6_ROUTE_TABLE *RouteTable;\r
+ IP6_INTERFACE *DefaultInterface;\r
+ IP6_ROUTE_TABLE *RouteTable;\r
\r
- IP6_LINK_RX_TOKEN RecvRequest;\r
+ IP6_LINK_RX_TOKEN RecvRequest;\r
\r
//\r
// Ip reassemble utilities and MLD data\r
//\r
- IP6_ASSEMBLE_TABLE Assemble;\r
- IP6_MLD_SERVICE_DATA MldCtrl;\r
+ IP6_ASSEMBLE_TABLE Assemble;\r
+ IP6_MLD_SERVICE_DATA MldCtrl;\r
\r
- EFI_IPv6_ADDRESS LinkLocalAddr;\r
- BOOLEAN LinkLocalOk;\r
- BOOLEAN LinkLocalDadFail;\r
- BOOLEAN Dhcp6NeedStart;\r
- BOOLEAN Dhcp6NeedInfoRequest;\r
+ EFI_IPv6_ADDRESS LinkLocalAddr;\r
+ BOOLEAN LinkLocalOk;\r
+ BOOLEAN LinkLocalDadFail;\r
+ BOOLEAN Dhcp6NeedStart;\r
+ BOOLEAN Dhcp6NeedInfoRequest;\r
\r
//\r
// ND data\r
//\r
- UINT8 CurHopLimit;\r
- UINT32 LinkMTU;\r
- UINT32 BaseReachableTime;\r
- UINT32 ReachableTime;\r
- UINT32 RetransTimer;\r
- LIST_ENTRY NeighborTable;\r
+ UINT8 CurHopLimit;\r
+ UINT32 LinkMTU;\r
+ UINT32 BaseReachableTime;\r
+ UINT32 ReachableTime;\r
+ UINT32 RetransTimer;\r
+ LIST_ENTRY NeighborTable;\r
\r
- LIST_ENTRY OnlinkPrefix;\r
- LIST_ENTRY AutonomousPrefix;\r
+ LIST_ENTRY OnlinkPrefix;\r
+ LIST_ENTRY AutonomousPrefix;\r
\r
- LIST_ENTRY DefaultRouterList;\r
- UINT32 RoundRobin;\r
+ LIST_ENTRY DefaultRouterList;\r
+ UINT32 RoundRobin;\r
\r
- UINT8 InterfaceIdLen;\r
- UINT8 *InterfaceId;\r
+ UINT8 InterfaceIdLen;\r
+ UINT8 *InterfaceId;\r
\r
- BOOLEAN RouterAdvertiseReceived;\r
- UINT8 SolicitTimer;\r
- UINT32 Ticks;\r
+ BOOLEAN RouterAdvertiseReceived;\r
+ UINT8 SolicitTimer;\r
+ UINT32 Ticks;\r
\r
//\r
// Low level protocol used by this service instance\r
//\r
- EFI_HANDLE Image;\r
- EFI_HANDLE Controller;\r
+ EFI_HANDLE Image;\r
+ EFI_HANDLE Controller;\r
\r
- EFI_HANDLE MnpChildHandle;\r
- EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
+ EFI_HANDLE MnpChildHandle;\r
+ EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
\r
- EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;\r
- EFI_SIMPLE_NETWORK_MODE SnpMode;\r
+ EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;\r
+ EFI_SIMPLE_NETWORK_MODE SnpMode;\r
\r
- EFI_EVENT Timer;\r
- EFI_EVENT FasterTimer;\r
+ EFI_EVENT Timer;\r
+ EFI_EVENT FasterTimer;\r
\r
//\r
// IPv6 Configuration Protocol instance\r
//\r
- IP6_CONFIG_INSTANCE Ip6ConfigInstance;\r
+ IP6_CONFIG_INSTANCE Ip6ConfigInstance;\r
\r
//\r
// The string representation of the current mac address of the\r
// NIC this IP6_SERVICE works on.\r
//\r
- CHAR16 *MacString;\r
- UINT32 MaxPacketSize;\r
- UINT32 OldMaxPacketSize;\r
+ CHAR16 *MacString;\r
+ UINT32 MaxPacketSize;\r
+ UINT32 OldMaxPacketSize;\r
};\r
\r
/**\r
VOID\r
EFIAPI\r
Ip6FreeTxToken (\r
- IN VOID *Context\r
+ IN VOID *Context\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
Ip6ServiceConfigMnp (\r
- IN IP6_SERVICE *IpSb,\r
- IN BOOLEAN Force\r
+ IN IP6_SERVICE *IpSb,\r
+ IN BOOLEAN Force\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
Ip6Cancel (\r
- IN IP6_PROTOCOL *IpInstance,\r
- IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL\r
+ IN IP6_PROTOCOL *IpInstance,\r
+ IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL\r
);\r
\r
/**\r
**/\r
VOID\r
Ip6InitProtocol (\r
- IN IP6_SERVICE *IpSb,\r
- IN OUT IP6_PROTOCOL *IpInstance\r
+ IN IP6_SERVICE *IpSb,\r
+ IN OUT IP6_PROTOCOL *IpInstance\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
Ip6CleanProtocol (\r
- IN OUT IP6_PROTOCOL *IpInstance\r
+ IN OUT IP6_PROTOCOL *IpInstance\r
);\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
EfiIp6GetModeData (\r
- IN EFI_IP6_PROTOCOL *This,\r
- OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,\r
- OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,\r
- OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL\r
+ IN EFI_IP6_PROTOCOL *This,\r
+ OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,\r
+ OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,\r
+ OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL\r
);\r
\r
/**\r
@retval EFI_DEVICE_ERROR An unexpected system or network error occurred. The EFI IPv6\r
Protocol driver instance was not opened.\r
@retval EFI_UNSUPPORTED Default protocol specified through\r
- Ip6ConfigData.DefaulProtocol isn't supported.\r
+ Ip6ConfigData.DefaultProtocol isn't supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
EfiIp6Configure (\r
- IN EFI_IP6_PROTOCOL *This,\r
- IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL\r
+ IN EFI_IP6_PROTOCOL *This,\r
+ IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL\r
);\r
\r
/**\r
the destination IPv6 address arithmetically. The gateway address must be on the same subnet as the\r
configured station address.\r
\r
- The default route is added with Destination and PrefixLegth both set to all zeros. The\r
+ The default route is added with Destination and PrefixLength both set to all zeros. The\r
default route matches all destination IPv6 addresses that do not match any other routes.\r
\r
All EFI IPv6 Protocol instances share a routing table.\r
EFI_STATUS\r
EFIAPI\r
EfiIp6Routes (\r
- IN EFI_IP6_PROTOCOL *This,\r
- IN BOOLEAN DeleteRoute,\r
- IN EFI_IPv6_ADDRESS *Destination OPTIONAL,\r
- IN UINT8 PrefixLength,\r
- IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL\r
+ IN EFI_IP6_PROTOCOL *This,\r
+ IN BOOLEAN DeleteRoute,\r
+ IN EFI_IPv6_ADDRESS *Destination OPTIONAL,\r
+ IN UINT8 PrefixLength,\r
+ IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
EfiIp6Neighbors (\r
- IN EFI_IP6_PROTOCOL *This,\r
- IN BOOLEAN DeleteFlag,\r
- IN EFI_IPv6_ADDRESS *TargetIp6Address,\r
- IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL,\r
- IN UINT32 Timeout,\r
- IN BOOLEAN Override\r
+ IN EFI_IP6_PROTOCOL *This,\r
+ IN BOOLEAN DeleteFlag,\r
+ IN EFI_IPv6_ADDRESS *TargetIp6Address,\r
+ IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL,\r
+ IN UINT32 Timeout,\r
+ IN BOOLEAN Override\r
);\r
\r
/**\r
is signaled.\r
\r
Current Udp implementation creates an IP child for each Udp child.\r
- It initates a asynchronous receive immediately whether or not\r
+ It initiates a asynchronous receive immediately whether or not\r
there is no mapping. Therefore, disable the returning EFI_NO_MAPPING for now.\r
To enable it, the following check must be performed:\r
\r
EFI_STATUS\r
EFIAPI\r
EfiIp6Poll (\r
- IN EFI_IP6_PROTOCOL *This\r
+ IN EFI_IP6_PROTOCOL *This\r
);\r
\r
#endif\r