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