diff options
Diffstat (limited to 'MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h')
-rw-r--r-- | MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h | 476 |
1 files changed, 238 insertions, 238 deletions
diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h index 9db1d8ac79..22db034a0a 100644 --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h @@ -1,238 +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. -// -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 * -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 +/** @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.
+//
+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 *
+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
|