diff options
author | vanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-07-30 02:37:10 +0000 |
---|---|---|
committer | vanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-07-30 02:37:10 +0000 |
commit | 772db4bb33ae66fa20e39f786b5f80d107d450a5 (patch) | |
tree | 206a2d4756e0f7e245e08ca75f3ba10df2e1cf7a /MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h | |
parent | eca7eaf49be5f23e3c79270621df7097ef585349 (diff) | |
download | edk2-platforms-772db4bb33ae66fa20e39f786b5f80d107d450a5.tar.xz |
Import ArpDxe, Dhcp4Dxe, Ip4Dxe, Mtftp4Dxe, PxeBcDxe and PxeDhcp4Dxe.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3492 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h')
-rw-r--r-- | MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h new file mode 100644 index 0000000000..a324c82430 --- /dev/null +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h @@ -0,0 +1,238 @@ +/** @file + +Copyright (c) 2005 - 2006, Intel Corporation +All rights reserved. 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. + + +Module Name: + + Ip4If.h + +Abstract: + + Definition for IP4 pesudo interface structure. + + +**/ + +#ifndef __EFI_IP4_IF_H__ +#define __EFI_IP4_IF_H__ + +enum { + IP4_FRAME_RX_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'R'), + IP4_FRAME_TX_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'T'), + IP4_FRAME_ARP_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'A'), + IP4_INTERFACE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'I', 'F'), +}; + +// +// This prototype is used by both receive and transmission. +// When receiving Netbuf is allocated by IP4_INTERFACE, and +// released by IP4. Flag shows whether the frame is received +// as link broadcast/multicast... +// +// When transmitting, the Netbuf is from IP4, and provided +// to the callback as a reference. Flag isn't used. +// +// IpInstance can be NULL which means that it is the IP4 driver +// itself sending the packets. IP4 driver may send packets that +// don't belong to any instance, such as ICMP errors, ICMP echo +// responses, or IGMP packets. IpInstance is used as a tag in +// this module. +// +typedef +VOID +(*IP4_FRAME_CALLBACK) ( + IP4_PROTOCOL *IpInstance, OPTIONAL + NET_BUF *Packet, + EFI_STATUS IoStatus, + UINT32 LinkFlag, + VOID *Context + ); + +// +// Each receive request is wrapped in an IP4_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; + IP4_INTERFACE *Interface; + + IP4_PROTOCOL *IpInstance; + IP4_FRAME_CALLBACK CallBack; + VOID *Context; + + EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken; +} IP4_LINK_RX_TOKEN; + +// +// Each transmit request is wrapped in an IP4_LINK_TX_TOKEN. +// Upon completion, the Callback will be called. +// +typedef struct { + UINT32 Signature; + NET_LIST_ENTRY Link; + + IP4_INTERFACE *Interface; + + IP4_PROTOCOL *IpInstance; + IP4_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; +} IP4_LINK_TX_TOKEN; + +// +// Only one ARP request is requested for all the frames in +// a time. It is started for the first frames to the Ip. Any +// subsequent transmission frame will be linked to Frames, and +// be sent all at once the ARP requests succeed. +// +typedef struct { + UINT32 Signature; + NET_LIST_ENTRY Link; + + NET_LIST_ENTRY Frames; + IP4_INTERFACE *Interface; + + // + // ARP requesting staffs + // + EFI_EVENT OnResolved; + IP4_ADDR Ip; + EFI_MAC_ADDRESS Mac; +} IP4_ARP_QUE; + +// +// Callback to select which frame to cancel. Caller can cancel a +// single frame, or all the frame from an IP instance. +// +typedef +BOOLEAN +(*IP4_FRAME_TO_CANCEL) ( + IP4_LINK_TX_TOKEN *Frame, + VOID *Context + ); + +// +// Each IP4 instance has its own station address. All the instances +// with the same station address share a single interface structure. +// Each interface has its own ARP child, and shares one MNP child. +// Notice the special cases that DHCP can configure the interface +// with 0.0.0.0/0.0.0.0. +// +typedef struct _IP4_INTERFACE { + UINT32 Signature; + NET_LIST_ENTRY Link; + INTN RefCnt; + + // + // IP address and subnet mask of the interface. It also contains + // the subnet/net broadcast address for quick access. The fileds + // are invalid if (Configured == FALSE) + // + IP4_ADDR Ip; + IP4_ADDR SubnetMask; + IP4_ADDR SubnetBrdcast; + IP4_ADDR NetBrdcast; + BOOLEAN Configured; + + // + // Handle used to create/destory ARP child. All the IP children + // share one MNP which is owned by IP service binding. + // + EFI_HANDLE Controller; + EFI_HANDLE Image; + + EFI_MANAGED_NETWORK_PROTOCOL *Mnp; + EFI_ARP_PROTOCOL *Arp; + EFI_HANDLE ArpHandle; + + // + // Queues to keep the frames sent and waiting ARP request. + // + NET_LIST_ENTRY ArpQues; + NET_LIST_ENTRY SentFrames; + IP4_LINK_RX_TOKEN *RecvRequest; + + // + // The interface's MAC and broadcast MAC address. + // + EFI_MAC_ADDRESS Mac; + EFI_MAC_ADDRESS BroadcastMac; + UINT32 HwaddrLen; + + // + // 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. + // + NET_LIST_ENTRY IpInstances; + BOOLEAN PromiscRecv; +} IP4_INTERFACE; + +IP4_INTERFACE * +Ip4CreateInterface ( + IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp, + IN EFI_HANDLE Controller, + IN EFI_HANDLE ImageHandle + ); + +EFI_STATUS +Ip4SetAddress ( + IN IP4_INTERFACE *Interface, + IN IP4_ADDR IpAddr, + IN IP4_ADDR SubnetMask + ); + +EFI_STATUS +Ip4FreeInterface ( + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance OPTIONAL + ); + +EFI_STATUS +Ip4SendFrame ( + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance, OPTIONAL + IN NET_BUF *Packet, + IN IP4_ADDR NextHop, + IN IP4_FRAME_CALLBACK CallBack, + IN VOID *Context + ); + +VOID +Ip4CancelFrames ( + IN IP4_INTERFACE *Interface, + IN EFI_STATUS IoStatus, + IN IP4_FRAME_TO_CANCEL FrameToCancel, OPTIONAL + IN VOID *Context + ); + +VOID +Ip4CancelReceive ( + IN IP4_INTERFACE *Interface + ); + +EFI_STATUS +Ip4ReceiveFrame ( + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance, OPTIONAL + IN IP4_FRAME_CALLBACK CallBack, + IN VOID *Context + ); + +#endif |