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/Ip4Impl.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/Ip4Impl.h')
-rw-r--r-- | MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h new file mode 100644 index 0000000000..1bbee93237 --- /dev/null +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h @@ -0,0 +1,258 @@ +/** @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: + + Ip4Impl.h + +Abstract: + + Ip4 internal functions and type defintions. + + +**/ + +#ifndef __EFI_IP4_IMPL_H__ +#define __EFI_IP4_IMPL_H__ + +#include <PiDxe.h>
+
+#include <Protocol/IP4.h>
+#include <Protocol/IP4Config.h>
+#include <Protocol/Arp.h>
+#include <Protocol/ManagedNetwork.h>
+
+#include <Library/DebugLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/BaseLib.h>
+#include <Library/UefiLib.h> +#include <Library/NetLib.h> +#include <Library/BaseMemoryLib.h> +#include <Library/MemoryAllocationLib.h> + +#include "IP4Common.h" +#include "IP4Driver.h" +#include "IP4If.h" +#include "Ip4Icmp.h" +#include "IP4Option.h" +#include "Ip4Igmp.h" +#include "IP4Route.h" +#include "IP4Input.h" +#include "IP4Output.h" + +enum { + IP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'P'), + IP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'S'), + + // + // The state of IP4 protocol. It starts from UNCONFIGED. if it is + // successfully configured, it goes to CONFIGED. if configure NULL + // is called, it becomes UNCONFIGED again. If (partly) destoried, it + // becomes DESTORY. + // + IP4_STATE_UNCONFIGED = 0, + IP4_STATE_CONFIGED, + IP4_STATE_DESTORY, + + // + // The state of IP4 service. It starts from UNSTARTED. It transits + // to STARTED if autoconfigure is started. If default address is + // configured, it becomes CONFIGED. and if partly destoried, it goes + // to DESTORY. + // + IP4_SERVICE_UNSTARTED = 0, + IP4_SERVICE_STARTED, + IP4_SERVICE_CONFIGED, + IP4_SERVICE_DESTORY, +}; + +// +// IP4_TXTOKEN_WRAP wraps the upper layer's transmit token. +// The user's data is kept in the Packet. When fragment is +// needed, each fragment of the Packet has a reference to the +// Packet, no data is actually copied. The Packet will be +// released when all the fragments of it have been recycled by +// MNP. Upon then, the IP4_TXTOKEN_WRAP will be released, and +// user's event signalled. +// +typedef struct { + IP4_PROTOCOL *IpInstance; + EFI_IP4_COMPLETION_TOKEN *Token; + NET_BUF *Packet; + BOOLEAN Sent; + INTN Life; +} IP4_TXTOKEN_WRAP; + +// +// IP4_RXDATA_WRAP wraps the data IP4 child delivers to the +// upper layers. The received packet is kept in the Packet. +// The Packet itself may be constructured from some fragments. +// All the fragments of the Packet is organized by a +// IP4_ASSEMBLE_ENTRY structure. If the Packet is recycled by +// the upper layer, the assemble entry and its associated +// fragments will be freed at last. +// +typedef struct { + NET_LIST_ENTRY Link; + IP4_PROTOCOL *IpInstance; + NET_BUF *Packet; + EFI_IP4_RECEIVE_DATA RxData; +} IP4_RXDATA_WRAP; + +typedef struct _IP4_PROTOCOL { + UINT32 Signature; + + EFI_IP4_PROTOCOL Ip4Proto; + EFI_HANDLE Handle; + INTN State; + + IP4_SERVICE *Service; + NET_LIST_ENTRY Link; // Link to all the IP protocol from the service + + // + // User's transmit/receive tokens, and received/deliverd packets + // + NET_MAP RxTokens; + NET_MAP TxTokens; // map between (User's Token, IP4_TXTOKE_WRAP) + NET_LIST_ENTRY Received; // Received but not delivered packet + NET_LIST_ENTRY Delivered; // Delivered and to be recycled packets + EFI_LOCK RecycleLock; + + // + // Instance's address and route tables. There are two route tables. + // RouteTable is used by the IP4 driver to route packet. EfiRouteTable + // is used to communicate the current route info to the upper layer. + // + IP4_INTERFACE *Interface; + NET_LIST_ENTRY AddrLink; // Ip instances with the same IP address. + IP4_ROUTE_TABLE *RouteTable; + + EFI_IP4_ROUTE_TABLE *EfiRouteTable; + UINT32 EfiRouteCount; + + // + // IGMP data for this instance + // + IP4_ADDR *Groups; // stored in network byte order + UINT32 GroupCount; + + EFI_IP4_CONFIG_DATA ConfigData; + +} IP4_PROTOCOL; + +typedef struct _IP4_SERVICE { + UINT32 Signature; + EFI_SERVICE_BINDING_PROTOCOL ServiceBinding; + INTN State; + BOOLEAN InDestory; + + // + // List of all the IP instances and interfaces, and default + // interface and route table and caches. + // + UINTN NumChildren; + NET_LIST_ENTRY Children; + + NET_LIST_ENTRY Interfaces; + + IP4_INTERFACE *DefaultInterface; + IP4_ROUTE_TABLE *DefaultRouteTable; + + // + // Ip reassemble utilities, and IGMP data + // + IP4_ASSEMBLE_TABLE Assemble; + IGMP_SERVICE_DATA IgmpCtrl; + + // + // Low level protocol used by this service instance + // + EFI_HANDLE Image; + EFI_HANDLE Controller; + + EFI_HANDLE MnpChildHandle; + EFI_MANAGED_NETWORK_PROTOCOL *Mnp; + + EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData; + EFI_SIMPLE_NETWORK_MODE SnpMode; + + EFI_EVENT Timer; + + // + // Auto configure staff + // + EFI_IP4_CONFIG_PROTOCOL *Ip4Config; + EFI_EVENT DoneEvent; + EFI_EVENT ReconfigEvent; + + // + // The string representation of the current mac address of the + // NIC this IP4_SERVICE works on. + // + CHAR16 *MacString; +} IP4_SERVICE; + +#define IP4_INSTANCE_FROM_PROTOCOL(Ip4) \ + CR ((Ip4), IP4_PROTOCOL, Ip4Proto, IP4_PROTOCOL_SIGNATURE) + +#define IP4_SERVICE_FROM_PROTOCOL(Sb) \ + CR ((Sb), IP4_SERVICE, ServiceBinding, IP4_SERVICE_SIGNATURE) + +#define IP4_NO_MAPPING(IpInstance) (!(IpInstance)->Interface->Configured) + +extern EFI_IP4_PROTOCOL mEfiIp4ProtocolTemplete; + +EFI_STATUS +Ip4ServiceConfigMnp ( + IN IP4_SERVICE *IpSb, + IN BOOLEAN Force + ); + +VOID +Ip4InitProtocol ( + IN IP4_SERVICE *IpSb, + IN IP4_PROTOCOL *IpInstance + ); + +EFI_STATUS +Ip4CleanProtocol ( + IN IP4_PROTOCOL *IpInstance + ); + +EFI_STATUS +Ip4Cancel ( + IN IP4_PROTOCOL *IpInstance, + IN EFI_IP4_COMPLETION_TOKEN *Token + ); + +EFI_STATUS +Ip4Groups ( + IN IP4_PROTOCOL *IpInstance, + IN BOOLEAN JoinFlag, + IN EFI_IPv4_ADDRESS *GroupAddress + ); + +VOID +EFIAPI +Ip4TimerTicking ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +EFI_STATUS +Ip4SentPacketTicking ( + IN NET_MAP *Map, + IN NET_MAP_ITEM *Item, + IN VOID *Context + ); +#endif |