/** @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
-\r
-Module Name:\r
-\r
- Ip4Option.h\r
-\r
-Abstract:\r
-\r
IP4 option support routines.\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_OPTION_H__\r
#define __EFI_IP4_OPTION_H__\r
\r
-enum {\r
- IP4_OPTION_EOP = 0,\r
- IP4_OPTION_NOP = 1,\r
- IP4_OPTION_LSRR = 131, // Loss source and record routing, 10000011\r
- IP4_OPTION_SSRR = 137, // Strict source and record routing, 10001001\r
- IP4_OPTION_RR = 7, // Record routing, 00000111\r
+#define IP4_OPTION_EOP 0\r
+#define IP4_OPTION_NOP 1\r
+#define IP4_OPTION_LSRR 131 // Loss source and record routing, 10000011\r
+#define IP4_OPTION_SSRR 137 // Strict source and record routing, 10001001\r
+#define IP4_OPTION_RR 7 // Record routing, 00000111\r
+\r
+#define IP4_OPTION_COPY_MASK 0x80\r
\r
- IP4_OPTION_COPY_MASK = 0x80\r
-};\r
+/**\r
+ Validate the IP4 option format for both the packets we received\r
+ and will transmit. It will compute the ICMP error message fields\r
+ if the option is mal-formated. But this information isn't used.\r
\r
+ @param[in] Option The first byte of the option\r
+ @param[in] OptionLen The length of the whole option\r
+ @param[in] Rcvd The option is from the packet we received if TRUE,\r
+ otherwise the option we wants to transmit.\r
+\r
+ @retval TRUE The option is properly formatted\r
+ @retval FALSE The option is mal-formated\r
+\r
+**/\r
BOOLEAN\r
Ip4OptionIsValid (\r
IN UINT8 *Option,\r
- IN UINT32 OptLen,\r
+ IN UINT32 OptionLen,\r
IN BOOLEAN Rcvd\r
);\r
\r
+/**\r
+ Copy the option from the original option to buffer. It\r
+ handles the details such as:\r
+ 1. whether copy the single IP4 option to the first/non-first\r
+ fragments.\r
+ 2. Pad the options copied over to aligned to 4 bytes.\r
+\r
+ @param[in] Option The original option to copy from\r
+ @param[in] OptionLen The length of the original option\r
+ @param[in] FirstFragment Whether it is the first fragment\r
+ @param[in, out] Buf The buffer to copy options to. NULL\r
+ @param[in, out] BufLen The length of the buffer\r
+\r
+ @retval EFI_SUCCESS The options are copied over\r
+ @retval EFI_BUFFER_TOO_SMALL Buf is NULL or BufLen provided is too small.\r
+\r
+**/\r
EFI_STATUS\r
Ip4CopyOption (\r
- IN UINT8 *Option,\r
- IN UINT32 OptLen,\r
- IN BOOLEAN Fragment,\r
- IN UINT8 *Buf, OPTIONAL\r
+ IN UINT8 *Option,\r
+ IN UINT32 OptionLen,\r
+ IN BOOLEAN FirstFragment,\r
+ IN OUT UINT8 *Buf, OPTIONAL\r
IN OUT UINT32 *BufLen\r
);\r
#endif\r