]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.h
BaseTools:Change the path of the file that Binary Cache
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Input.h
index fcbfb01699602f4d4e46716a04add60e0bec6d49..f4d45d1613d0d95fb3c1d1141df7466d70ddac25 100644 (file)
@@ -1,34 +1,23 @@
 /** @file\r
 \r
-Copyright (c) 2005 - 2006, Intel Corporation\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
-Module Name:\r
-\r
-  Ip4Input.h\r
-\r
-Abstract:\r
-\r
+Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #ifndef __EFI_IP4_INPUT_H__\r
 #define __EFI_IP4_INPUT_H__\r
 \r
-typedef enum {\r
-  IP4_MIN_HEADLEN       = 20,\r
-  IP4_MAX_HEADLEN       = 60,\r
+#define IP4_MIN_HEADLEN        20\r
+#define IP4_MAX_HEADLEN        60\r
+///\r
+/// 8(ESP header) + 16(max IV) + 16(max padding) + 2(ESP tail) + 12(max ICV) = 54\r
+///\r
+#define IP4_MAX_IPSEC_HEADLEN  54\r
 \r
-  IP4_ASSEMLE_HASH_SIZE = 31,\r
-  IP4_FRAGMENT_LIFE     = 120,\r
-  IP4_MAX_PACKET_SIZE   = 65535\r
-} IP4_INPUT_ENUM_TYPES;\r
+#define IP4_ASSEMLE_HASH_SIZE  31\r
+#define IP4_FRAGMENT_LIFE      120\r
+#define IP4_MAX_PACKET_SIZE    65535\r
 \r
 ///\r
 /// Per packet information for input process. LinkFlag specifies whether\r
@@ -91,16 +80,43 @@ typedef struct {
 #define IP4_RXDATA_WRAP_SIZE(NumFrag) \\r
           (sizeof (IP4_RXDATA_WRAP) + sizeof (EFI_IP4_FRAGMENT_DATA) * ((NumFrag) - 1))\r
 \r
+/**\r
+  Initialize an already allocated assemble table. This is generally\r
+  the assemble table embedded in the IP4 service instance.\r
+\r
+  @param[in, out]  Table                  The assemble table to initialize.\r
+\r
+**/\r
 VOID\r
 Ip4InitAssembleTable (\r
-  IN IP4_ASSEMBLE_TABLE     *Table\r
+  IN OUT IP4_ASSEMBLE_TABLE     *Table\r
   );\r
 \r
+/**\r
+  Clean up the assemble table: remove all the fragments\r
+  and assemble entries.\r
+\r
+  @param[in]  Table                  The assemble table to clean up\r
+\r
+**/\r
 VOID\r
 Ip4CleanAssembleTable (\r
   IN IP4_ASSEMBLE_TABLE     *Table\r
   );\r
 \r
+/**\r
+  The IP4 input routine. It is called by the IP4_INTERFACE when a\r
+  IP4 fragment is received from MNP.\r
+\r
+  @param[in]  Ip4Instance        The IP4 child that request the receive, most like\r
+                                 it is NULL.\r
+  @param[in]  Packet             The IP4 packet received.\r
+  @param[in]  IoStatus           The return status of receive request.\r
+  @param[in]  Flag               The link layer flag for the packet received, such\r
+                                 as multicast.\r
+  @param[in]  Context            The IP4 service instance that own the MNP.\r
+\r
+**/\r
 VOID\r
 Ip4AccpetFrame (\r
   IN IP4_PROTOCOL           *Ip4Instance,\r
@@ -110,29 +126,121 @@ Ip4AccpetFrame (
   IN VOID                   *Context\r
   );\r
 \r
+/**\r
+  Demultiple the packet. the packet delivery is processed in two\r
+  passes. The first pass will enque a shared copy of the packet\r
+  to each IP4 child that accepts the packet. The second pass will\r
+  deliver a non-shared copy of the packet to each IP4 child that\r
+  has pending receive requests. Data is copied if more than one\r
+  child wants to consume the packet because each IP child needs\r
+  its own copy of the packet to make changes.\r
+\r
+  @param[in]  IpSb               The IP4 service instance that received the packet.\r
+  @param[in]  Head               The header of the received packet.\r
+  @param[in]  Packet             The data of the received packet.\r
+  @param[in]  Option             Point to the IP4 packet header options.\r
+  @param[in]  OptionLen          Length of the IP4 packet header options.\r
+\r
+  @retval EFI_NOT_FOUND          No IP child accepts the packet.\r
+  @retval EFI_SUCCESS            The packet is enqueued or delivered to some IP\r
+                                 children.\r
+\r
+**/\r
 EFI_STATUS\r
 Ip4Demultiplex (\r
-  IN IP4_SERVICE            *SbInstance,\r
+  IN IP4_SERVICE            *IpSb,\r
   IN IP4_HEAD               *Head,\r
-  IN NET_BUF                *Packet\r
+  IN NET_BUF                *Packet,\r
+  IN UINT8                  *Option,\r
+  IN UINT32                 OptionLen\r
   );\r
 \r
+/**\r
+  Enqueue a received packet to all the IP children that share\r
+  the same interface.\r
+\r
+  @param[in]  IpSb               The IP4 service instance that receive the packet.\r
+  @param[in]  Head               The header of the received packet.\r
+  @param[in]  Packet             The data of the received packet.\r
+  @param[in]  Option             Point to the IP4 packet header options.\r
+  @param[in]  OptionLen          Length of the IP4 packet header options.\r
+  @param[in]  IpIf               The interface to enqueue the packet to.\r
+\r
+  @return The number of the IP4 children that accepts the packet\r
+\r
+**/\r
 INTN\r
 Ip4InterfaceEnquePacket (\r
-  IN IP4_SERVICE            *SbInstance,\r
+  IN IP4_SERVICE            *IpSb,\r
   IN IP4_HEAD               *Head,\r
   IN NET_BUF                *Packet,\r
-  IN IP4_INTERFACE          *Interface\r
+  IN UINT8                  *Option,\r
+  IN UINT32                 OptionLen,\r
+  IN IP4_INTERFACE          *IpIf\r
   );\r
 \r
+/**\r
+  Deliver the received packets to upper layer if there are both received\r
+  requests and enqueued packets. If the enqueued packet is shared, it will\r
+  duplicate it to a non-shared packet, release the shared packet, then\r
+  deliver the non-shared packet up.\r
+\r
+  @param[in]  IpInstance         The IP child to deliver the packet up.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES   Failed to allocate resources to deliver the\r
+                                 packets.\r
+  @retval EFI_SUCCESS            All the enqueued packets that can be delivered\r
+                                 are delivered up.\r
+\r
+**/\r
 EFI_STATUS\r
 Ip4InstanceDeliverPacket (\r
-  IN IP4_PROTOCOL           *Ip4Instance\r
+  IN IP4_PROTOCOL           *IpInstance\r
   );\r
 \r
+/**\r
+  Timeout the fragment and enqueued packets.\r
+\r
+  @param[in]  IpSb                   The IP4 service instance to timeout\r
+\r
+**/\r
 VOID\r
 Ip4PacketTimerTicking (\r
   IN IP4_SERVICE            *IpSb\r
   );\r
 \r
+/**\r
+  The work function to locate IPsec protocol to process the inbound or\r
+  outbound IP packets. The process routine handls the packet with following\r
+  actions: bypass the packet, discard the packet, or protect the packet.\r
+\r
+  @param[in]       IpSb          The IP4 service instance.\r
+  @param[in, out]  Head          The The caller supplied IP4 header.\r
+  @param[in, out]  Netbuf        The IP4 packet to be processed by IPsec.\r
+  @param[in, out]  Options       The caller supplied options.\r
+  @param[in, out]  OptionsLen    The length of the option.\r
+  @param[in]       Direction     The directionality in an SPD entry,\r
+                                 EfiIPsecInBound or EfiIPsecOutBound.\r
+  @param[in]       Context       The token's wrap.\r
+\r
+  @retval EFI_SUCCESS            The IPsec protocol is not available or disabled.\r
+  @retval EFI_SUCCESS            The packet was bypassed and all buffers remain the same.\r
+  @retval EFI_SUCCESS            The packet was protected.\r
+  @retval EFI_ACCESS_DENIED      The packet was discarded.\r
+  @retval EFI_OUT_OF_RESOURCES   There is no suffcient resource to complete the operation.\r
+  @retval EFI_BUFFER_TOO_SMALL   The number of non-empty block is bigger than the\r
+                                 number of input data blocks when build a fragment table.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip4IpSecProcessPacket (\r
+  IN     IP4_SERVICE            *IpSb,\r
+  IN OUT IP4_HEAD               **Head,\r
+  IN OUT NET_BUF                **Netbuf,\r
+  IN OUT UINT8                  **Options,\r
+  IN OUT UINT32                 *OptionsLen,\r
+  IN     EFI_IPSEC_TRAFFIC_DIR  Direction,\r
+  IN     VOID                   *Context\r
+  );\r
+\r
 #endif\r