4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Definition for IP6 pesudo interface structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __EFI_IP6_IF_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __EFI_IP6_IF_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP6_LINK_RX_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'R')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP6_LINK_TX_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'T')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP6_INTERFACE_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'I')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IP6_ADDR_INFO_SIGNATURE SIGNATURE_32 ('I', 'P', 'A', 'I')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// This prototype is used by both receive and transmission.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// When receiving Netbuf is allocated by IP6_INTERFACE, and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// released by IP6. Flag shows whether the frame is received
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// as unicast/multicast/anycast...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// When transmitting, the Netbuf is from IP6, and provided
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// to the callback as a reference. Flag isn't used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// IpInstance can be NULL which means that it is the IP6 driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// itself sending the packets. IP6 driver may send packets that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// don't belong to any instance, such as ICMP errors, ICMP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// informational packets. IpInstance is used as a tag in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// this module.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(*IP6_FRAME_CALLBACK) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NET_BUF *Packet,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS IoStatus,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 LinkFlag,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Each receive request is wrapped in an IP6_LINK_RX_TOKEN.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Upon completion, the Callback will be called. Only one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// receive request is send to MNP. IpInstance is always NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Reference MNP's spec for information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IP6_FRAME_CALLBACK CallBack;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} IP6_LINK_RX_TOKEN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Each transmit request is wrapped in an IP6_LINK_TX_TOKEN.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Upon completion, the Callback will be called.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IP6_PROTOCOL *IpInstance;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IP6_FRAME_CALLBACK CallBack;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NET_BUF *Packet;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MAC_ADDRESS DstMac;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MAC_ADDRESS SrcMac;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MANAGED_NETWORK_TRANSMIT_DATA MnpTxData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} IP6_LINK_TX_TOKEN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _IP6_ADDRESS_INFO {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IPv6_ADDRESS Address;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsAnycast;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 PrefixLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ValidLifetime;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PreferredLifetime;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Callback to select which frame to cancel. Caller can cancel a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// single frame, or all the frame from an IP instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncBOOLEAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(*IP6_FRAME_TO_CANCEL) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IP6_LINK_TX_TOKEN *Frame,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _IP6_INTERFACE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INTN RefCnt;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // IP address and prefix length of the interface. The fileds
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // are invalid if (Configured == FALSE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY AddressList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 AddressCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Configured;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IP6_SERVICE *Service;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Controller;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Image;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Queues to keep the frames sent and waiting ARP request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY ArpQues;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY SentFrames;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The interface's configuration variables
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DupAddrDetect;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY DupAddrDetectList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY DelayJoinList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // All the IP instances that have the same IP/SubnetMask are linked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // together through IpInstances. If any of the instance enables
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // promiscuous receive, PromiscRecv is true.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY IpInstances;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN PromiscRecv;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create an IP6_INTERFACE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpSb The IP6 service binding instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] LinkLocal If TRUE, the instance is created for link-local address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Otherwise, it is not for a link-local address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Point to the created IP6_INTERFACE, otherwise NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIP6_INTERFACE *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6CreateInterface (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_SERVICE *IpSb,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN LinkLocal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Free the interface used by IpInstance. All the IP instance with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the same Ip/prefix pair share the same interface. It is reference
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync counted. All the frames that haven't been sent will be cancelled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Because the IpInstance is optional, the caller must remove
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IpInstance from the interface's instance list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Interface The interface used by the IpInstance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpInstance The IP instance that free the interface. NULL if
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the IP driver is releasing the default interface.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6CleanInterface (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_INTERFACE *Interface,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_PROTOCOL *IpInstance OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Free the link layer transmit token. It will close the event
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then free the memory used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token Token to free.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6FreeLinkTxToken (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_LINK_TX_TOKEN *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Request Ip6OnFrameReceivedDpc as a DPC at TPL_CALLBACK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Event The receive event delivered to MNP for receive.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Context Context for the callback.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6OnFrameReceived (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EVENT Event,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Request to receive the packet from the interface.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CallBack Function to call when the receive finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpSb Points to the IP6 service binding instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ALREADY_STARTED There is already a pending receive request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate resources to receive.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The recieve request has been started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6ReceiveFrame (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_FRAME_CALLBACK CallBack,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_SERVICE *IpSb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Send a frame from the interface. If the next hop is multicast address,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync it is transmitted immediately. If the next hop is a unicast,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and the NextHop's MAC is not known, it will perform address resolution.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If some error happened, the CallBack won't be called. So, the caller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync must test the return value, and take action when there is an error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Interface The interface to send the frame from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpInstance The IP child that request the transmission.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL if it is the IP6 driver itself.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Packet The packet to transmit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] NextHop The immediate destination to transmit the packet to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CallBack Function to call back when transmit finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context Opaque parameter to the call back.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Failed to allocate resource to send the frame.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING Can't resolve the MAC for the nexthop.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The packet successfully transmitted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6SendFrame (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_INTERFACE *Interface,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_PROTOCOL *IpInstance OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN NET_BUF *Packet,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IPv6_ADDRESS *NextHop,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP6_FRAME_CALLBACK CallBack,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The heartbeat timer of IP6 service instance. It times out
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync all of its IP6 children's received-but-not-delivered and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transmitted-but-not-recycle packets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Event The IP6 service instance's heart beat timer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context The IP6 service instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp6TimerTicking (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EVENT Event,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif