]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h
Fixed OPTIONAL/comma issue
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4If.h
index 9db1d8ac79892b9e3421240e500e02f23bee07c5..305e826a8d51d0d9e5f811e3b5fddae20b1b7a80 100644 (file)
-/** @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\r
+  Definition for IP4 pesudo interface structure.\r
+  \r
+Copyright (c) 2005 - 2006, Intel Corporation.<BR>\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_IF_H__\r
+#define __EFI_IP4_IF_H__\r
+\r
+typedef enum {\r
+  IP4_FRAME_RX_SIGNATURE  = SIGNATURE_32 ('I', 'P', 'F', 'R'),\r
+  IP4_FRAME_TX_SIGNATURE  = SIGNATURE_32 ('I', 'P', 'F', 'T'),\r
+  IP4_FRAME_ARP_SIGNATURE = SIGNATURE_32 ('I', 'P', 'F', 'A'),\r
+  IP4_INTERFACE_SIGNATURE = SIGNATURE_32 ('I', 'P', 'I', 'F')\r
+} IP4_IF_ENUM_TYPES;\r
+\r
+/**\r
+  This prototype is used by both receive and transmission.\r
+  When receiving Netbuf is allocated by IP4_INTERFACE, and\r
+  released by IP4. Flag shows whether the frame is received\r
+  as link broadcast/multicast...\r
+\r
+  When transmitting, the Netbuf is from IP4, and provided\r
+  to the callback as a reference. Flag isn't used.\r
+\r
+  @param[in] IpInstance The instance that sent or received the packet.\r
+                        IpInstance can be NULL which means that it is the IP4 driver\r
+                        itself sending the packets. IP4 driver may send packets that\r
+                        don't belong to any instance, such as ICMP errors, ICMP echo\r
+                        responses, or IGMP packets. IpInstance is used as a tag in\r
+                        this module.\r
+  @param[in] Packet     The sent or received packet.\r
+  @param[in] IoStatus   Status of sending or receiving.\r
+  @param[in] LinkFlag   Indicate if the frame is received as link broadcast/multicast.\r
+                        When transmitting, it is not used.\r
+  @param[in] Context    Additional data for callback.\r
+\r
+  @retval None.\r
+**/\r
+typedef\r
+VOID\r
+(*IP4_FRAME_CALLBACK)(\r
+  IN IP4_PROTOCOL              *IpInstance       OPTIONAL,\r
+  IN NET_BUF                   *Packet,\r
+  IN EFI_STATUS                IoStatus,\r
+  IN UINT32                    LinkFlag,\r
+  IN VOID                      *Context\r
+  );\r
+\r
+///\r
+/// Each receive request is wrapped in an IP4_LINK_RX_TOKEN.\r
+/// Upon completion, the Callback will be called. Only one\r
+/// receive request is send to MNP. IpInstance is always NULL.\r
+/// Reference MNP's spec for information.\r
+///\r
+typedef struct {\r
+  UINT32                                Signature;\r
+  IP4_INTERFACE                         *Interface;\r
+\r
+  IP4_PROTOCOL                          *IpInstance;\r
+  IP4_FRAME_CALLBACK                    CallBack;\r
+  VOID                                  *Context;\r
+\r
+  EFI_MANAGED_NETWORK_COMPLETION_TOKEN  MnpToken;\r
+} IP4_LINK_RX_TOKEN;\r
+\r
+///\r
+/// Each transmit request is wrapped in an IP4_LINK_TX_TOKEN.\r
+/// Upon completion, the Callback will be called.\r
+///\r
+typedef struct {\r
+  UINT32                                Signature;\r
+  LIST_ENTRY                            Link;\r
+\r
+  IP4_INTERFACE                         *Interface;\r
+\r
+  IP4_PROTOCOL                          *IpInstance;\r
+  IP4_FRAME_CALLBACK                    CallBack;\r
+  NET_BUF                               *Packet;\r
+  VOID                                  *Context;\r
+\r
+  EFI_MAC_ADDRESS                       DstMac;\r
+  EFI_MAC_ADDRESS                       SrcMac;\r
+\r
+  EFI_MANAGED_NETWORK_COMPLETION_TOKEN  MnpToken;\r
+  EFI_MANAGED_NETWORK_TRANSMIT_DATA     MnpTxData;\r
+} IP4_LINK_TX_TOKEN;\r
+\r
+///\r
+/// Only one ARP request is requested for all the frames in\r
+/// a time. It is started for the first frames to the Ip. Any\r
+/// subsequent transmission frame will be linked to Frames, and\r
+/// be sent all at once the ARP requests succeed.\r
+///\r
+typedef struct {\r
+  UINT32                  Signature;\r
+  LIST_ENTRY              Link;\r
+\r
+  LIST_ENTRY              Frames;\r
+  IP4_INTERFACE           *Interface;\r
+\r
+  //\r
+  // ARP requesting staffs\r
+  //\r
+  EFI_EVENT               OnResolved;\r
+  IP4_ADDR                Ip;\r
+  EFI_MAC_ADDRESS         Mac;\r
+} IP4_ARP_QUE;\r
+\r
+/**\r
+  Callback to select which frame to cancel. Caller can cancel a\r
+  single frame, or all the frame from an IP instance.\r
+\r
+  @param Frame      The sending frame to check for cancellation.\r
+  @param Context    Additional data for callback.\r
+\r
+  @retval TRUE      The sending of the frame should be cancelled.\r
+  @retval FALSE     Do not cancel the frame sending.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(*IP4_FRAME_TO_CANCEL)(\r
+  IP4_LINK_TX_TOKEN       *Frame,\r
+  VOID                    *Context\r
+  );\r
+\r
+//\r
+// Each IP4 instance has its own station address. All the instances\r
+// with the same station address share a single interface structure.\r
+// Each interface has its own ARP child, and shares one MNP child.\r
+// Notice the special cases that DHCP can configure the interface\r
+// with 0.0.0.0/0.0.0.0.\r
+//\r
+struct _IP4_INTERFACE {\r
+  UINT32                        Signature;\r
+  LIST_ENTRY                    Link;\r
+  INTN                          RefCnt;\r
+\r
+  //\r
+  // IP address and subnet mask of the interface. It also contains\r
+  // the subnet/net broadcast address for quick access. The fileds\r
+  // are invalid if (Configured == FALSE)\r
+  //\r
+  IP4_ADDR                      Ip;\r
+  IP4_ADDR                      SubnetMask;\r
+  IP4_ADDR                      SubnetBrdcast;\r
+  IP4_ADDR                      NetBrdcast;\r
+  BOOLEAN                       Configured;\r
+\r
+  //\r
+  // Handle used to create/destory ARP child. All the IP children\r
+  // share one MNP which is owned by IP service binding.\r
+  //\r
+  EFI_HANDLE                    Controller;\r
+  EFI_HANDLE                    Image;\r
+\r
+  EFI_MANAGED_NETWORK_PROTOCOL  *Mnp;\r
+  EFI_ARP_PROTOCOL              *Arp;\r
+  EFI_HANDLE                    ArpHandle;\r
+\r
+  //\r
+  // Queues to keep the frames sent and waiting ARP request.\r
+  //\r
+  LIST_ENTRY                    ArpQues;\r
+  LIST_ENTRY                    SentFrames;\r
+  IP4_LINK_RX_TOKEN             *RecvRequest;\r
+\r
+  //\r
+  // The interface's MAC and broadcast MAC address.\r
+  //\r
+  EFI_MAC_ADDRESS               Mac;\r
+  EFI_MAC_ADDRESS               BroadcastMac;\r
+  UINT32                        HwaddrLen;\r
+\r
+  //\r
+  // All the IP instances that have the same IP/SubnetMask are linked\r
+  // together through IpInstances. If any of the instance enables\r
+  // promiscuous receive, PromiscRecv is true.\r
+  //\r
+  LIST_ENTRY                    IpInstances;\r
+  BOOLEAN                       PromiscRecv;\r
+};\r
+\r
+/**\r
+  Create an IP4_INTERFACE. Delay the creation of ARP instance until\r
+  the interface is configured.\r
+\r
+  @param[in]  Mnp               The shared MNP child of this IP4 service binding\r
+                                instance\r
+  @param[in]  Controller        The controller this IP4 service binding instance\r
+                                is installed. Most like the UNDI handle.\r
+  @param[in]  ImageHandle       This driver's image handle\r
+\r
+  @return Point to the created IP4_INTERFACE, otherwise NULL.\r
+\r
+**/\r
+IP4_INTERFACE *\r
+Ip4CreateInterface (\r
+  IN  EFI_MANAGED_NETWORK_PROTOCOL  *Mnp,\r
+  IN  EFI_HANDLE                    Controller,\r
+  IN  EFI_HANDLE                    ImageHandle\r
+  );\r
+\r
+/**\r
+  Set the interface's address, create and configure\r
+  the ARP child if necessary.\r
+\r
+  @param  Interface         The interface to set the address\r
+  @param  IpAddr            The interface's IP address\r
+  @param  SubnetMask        The interface's netmask\r
+\r
+  @retval EFI_SUCCESS           The interface is configured with Ip/netmask pair,\r
+                                and a ARP is created for it.\r
+  @retval Others                Failed to set the interface's address.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip4SetAddress (\r
+  IN OUT IP4_INTERFACE      *Interface,\r
+  IN     IP4_ADDR           IpAddr,\r
+  IN     IP4_ADDR           SubnetMask\r
+  );\r
+\r
+/**\r
+  Free the interface used by IpInstance. All the IP instance with\r
+  the same Ip/Netmask pair share the same interface. It is reference\r
+  counted. All the frames haven't been sent will be cancelled.\r
+  Because the IpInstance is optional, the caller must remove\r
+  IpInstance from the interface's instance list itself.\r
+\r
+  @param[in]  Interface         The interface used by the IpInstance\r
+  @param[in]  IpInstance        The Ip instance that free the interface. NULL if\r
+                                the Ip driver is releasing the default interface.\r
+\r
+  @retval EFI_SUCCESS           The interface use IpInstance is freed.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip4FreeInterface (\r
+  IN  IP4_INTERFACE         *Interface,\r
+  IN  IP4_PROTOCOL          *IpInstance           OPTIONAL\r
+  );\r
+\r
+/**\r
+  Send a frame from the interface. If the next hop is broadcast or\r
+  multicast address, it is transmitted immediately. If the next hop\r
+  is a unicast, it will consult ARP to resolve the NextHop's MAC.\r
+  If some error happened, the CallBack won't be called. So, the caller\r
+  must test the return value, and take action when there is an error.\r
+\r
+  @param[in]  Interface         The interface to send the frame from\r
+  @param[in]  IpInstance        The IP child that request the transmission.  NULL\r
+                                if it is the IP4 driver itself.\r
+  @param[in]  Packet            The packet to transmit.\r
+  @param[in]  NextHop           The immediate destination to transmit the packet\r
+                                to.\r
+  @param[in]  CallBack          Function to call back when transmit finished.\r
+  @param[in]  Context           Opaque parameter to the call back.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES  Failed to allocate resource to send the frame\r
+  @retval EFI_NO_MAPPING        Can't resolve the MAC for the nexthop\r
+  @retval EFI_SUCCESS           The packet is successfully transmitted.\r
+  @retval other                 Other error occurs.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip4SendFrame (\r
+  IN  IP4_INTERFACE         *Interface,\r
+  IN  IP4_PROTOCOL          *IpInstance       OPTIONAL,\r
+  IN  NET_BUF               *Packet,\r
+  IN  IP4_ADDR              NextHop,\r
+  IN  IP4_FRAME_CALLBACK    CallBack,\r
+  IN  VOID                  *Context\r
+  );\r
+\r
+/**\r
+  Remove all the frames on the interface that pass the FrameToCancel,\r
+  either queued on ARP queues or that have already been delivered to\r
+  MNP and not yet recycled.\r
+\r
+  @param[in]  Interface         Interface to remove the frames from\r
+  @param[in]  IoStatus          The transmit status returned to the frames'\r
+                                callback\r
+  @param[in]  FrameToCancel     Function to select the frame to cancel, NULL to\r
+                                select all\r
+  @param[in]  Context           Opaque parameters passed to FrameToCancel\r
+\r
+**/\r
+VOID\r
+Ip4CancelFrames (\r
+  IN IP4_INTERFACE          *Interface,\r
+  IN EFI_STATUS             IoStatus,\r
+  IN IP4_FRAME_TO_CANCEL    FrameToCancel    OPTIONAL,\r
+  IN VOID                   *Context\r
+  );\r
+\r
+/**\r
+  If there is a pending receive request, cancel it. Don't call\r
+  the receive request's callback because this function can be only\r
+  called if the instance or driver is tearing itself down. It\r
+  doesn't make sense to call it back. But it is necessary to call\r
+  the transmit token's callback to give it a chance to free the\r
+  packet and update the upper layer's transmit request status, say\r
+  that from the UDP.\r
+\r
+  @param[in]  Interface         The interface used by the IpInstance\r
+\r
+**/\r
+VOID\r
+Ip4CancelReceive (\r
+  IN IP4_INTERFACE          *Interface\r
+  );\r
+\r
+/**\r
+  Request to receive the packet from the interface.\r
+\r
+  @param[in]  Interface         The interface to receive the frames from\r
+  @param[in]  IpInstance        The instance that requests the receive. NULL for\r
+                                the driver itself.\r
+  @param[in]  CallBack          Function to call when receive finished.\r
+  @param[in]  Context           Opaque parameter to the callback\r
+\r
+  @retval EFI_ALREADY_STARTED   There is already a pending receive request.\r
+  @retval EFI_OUT_OF_RESOURCES  Failed to allocate resource to receive\r
+  @retval EFI_SUCCESS           The recieve request has been started.\r
+  @retval other                 Other error occurs.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip4ReceiveFrame (\r
+  IN  IP4_INTERFACE         *Interface,\r
+  IN  IP4_PROTOCOL          *IpInstance       OPTIONAL,\r
+  IN  IP4_FRAME_CALLBACK    CallBack,\r
+  IN  VOID                  *Context\r
+  );\r
+\r
+#endif\r