- assocated -> associated - malformated -> malformatted - mal-formated -> mal-formatted - formated -> formatted - octects -> octets - responsiblity -> responsibility - enought -> enough - immediatly -> immediately - integar -> integer - Alogrithem -> Algorithm - Initializeion -> Initialization - primelenght -> primelength - Vlaue -> Value - perfoms -> performs - randome -> random - verifed -> verified - finallization -> finalization - Intializes -> Initializes - specifed -> specified - if -> If - Decrption -> Decryption - Autahentication -> Authentication - informatino -> information - alogrithm -> algorithm - Authenticaion -> Authentication - Alogrithem -> Algorithm - containning -> containing - paramter -> parameter Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gary Lin <glin@suse.com> Reviewed-By: Siyuan Fu <siyuan.fu@intel.com> Reviewed-By: Jiaxin Wu <jiaxin.wu@intel.com>
		
			
				
	
	
		
			192 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Definition of IP6 option process routines.
 | |
| 
 | |
|   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
|   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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_IP6_OPTION_H__
 | |
| #define __EFI_IP6_OPTION_H__
 | |
| 
 | |
| #define IP6_FRAGMENT_OFFSET_MASK (~0x3)
 | |
| 
 | |
| typedef struct _IP6_FRAGMENT_HEADER {
 | |
|   UINT8                     NextHeader;
 | |
|   UINT8                     Reserved;
 | |
|   UINT16                    FragmentOffset;
 | |
|   UINT32                    Identification;
 | |
| } IP6_FRAGMENT_HEADER;
 | |
| 
 | |
| typedef struct _IP6_ROUTING_HEADER {
 | |
|   UINT8                     NextHeader;
 | |
|   UINT8                     HeaderLen;
 | |
|   UINT8                     RoutingType;
 | |
|   UINT8                     SegmentsLeft;
 | |
| } IP6_ROUTING_HEADER;
 | |
| 
 | |
| typedef enum {
 | |
|   Ip6OptionPad1             = 0,
 | |
|   Ip6OptionPadN             = 1,
 | |
|   Ip6OptionRouterAlert      = 5,
 | |
|   Ip6OptionSkip             = 0,
 | |
|   Ip6OptionDiscard          = 0x40,
 | |
|   Ip6OptionParameterProblem = 0x80,
 | |
|   Ip6OptionMask             = 0xc0,
 | |
| 
 | |
|   Ip6OptionEtherSource      = 1,
 | |
|   Ip6OptionEtherTarget      = 2,
 | |
|   Ip6OptionPrefixInfo       = 3,
 | |
|   Ip6OptionRedirected       = 4,
 | |
|   Ip6OptionMtu              = 5
 | |
| } IP6_OPTION_TYPE;
 | |
| 
 | |
| /**
 | |
|   Validate the IP6 extension header format for both the packets we received
 | |
|   and that we will transmit. It will compute the ICMPv6 error message fields
 | |
|   if the option is mal-formatted.
 | |
| 
 | |
|   @param[in]  IpSb          The IP6 service instance. This is an optional parameter.
 | |
|   @param[in]  Packet        The data of the packet. Ignored if NULL.
 | |
|   @param[in]  NextHeader    The next header field in IPv6 basic header.
 | |
|   @param[in]  ExtHdrs       The first byte of the option.
 | |
|   @param[in]  ExtHdrsLen    The length of the whole option.
 | |
|   @param[in]  Rcvd          The option is from the packet we received if TRUE,
 | |
|                             otherwise, the option we want to transmit.
 | |
|   @param[out] FormerHeader  The offset of NextHeader which points to Fragment
 | |
|                             Header when we received, of the ExtHdrs.
 | |
|                             Ignored if we transmit.
 | |
|   @param[out] LastHeader    The pointer of NextHeader of the last extension
 | |
|                             header processed by IP6.
 | |
|   @param[out] RealExtsLen   The length of extension headers processed by IP6 layer.
 | |
|                             This is an optional parameter that may be NULL.
 | |
|   @param[out] UnFragmentLen The length of unfragmented length of extension headers.
 | |
|                             This is an optional parameter that may be NULL.
 | |
|   @param[out] Fragmented    Indicate whether the packet is fragmented.
 | |
|                             This is an optional parameter that may be NULL.
 | |
| 
 | |
|   @retval     TRUE          The option is properly formatted.
 | |
|   @retval     FALSE         The option is malformatted.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| Ip6IsExtsValid (
 | |
|   IN IP6_SERVICE            *IpSb           OPTIONAL,
 | |
|   IN NET_BUF                *Packet         OPTIONAL,
 | |
|   IN UINT8                  *NextHeader,
 | |
|   IN UINT8                  *ExtHdrs,
 | |
|   IN UINT32                 ExtHdrsLen,
 | |
|   IN BOOLEAN                Rcvd,
 | |
|   OUT UINT32                *FormerHeader   OPTIONAL,
 | |
|   OUT UINT8                 **LastHeader,
 | |
|   OUT UINT32                *RealExtsLen    OPTIONAL,
 | |
|   OUT UINT32                *UnFragmentLen  OPTIONAL,
 | |
|   OUT BOOLEAN               *Fragmented     OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Generate an IPv6 router alert option in network order and output it through Buffer.
 | |
| 
 | |
|   @param[out]     Buffer         Points to a buffer to record the generated option.
 | |
|   @param[in, out] BufferLen      The length of Buffer, in bytes.
 | |
|   @param[in]      NextHeader     The 8-bit selector indicates the type of header
 | |
|                                  immediately following the Hop-by-Hop Options header.
 | |
| 
 | |
|   @retval EFI_BUFFER_TOO_SMALL   The Buffer is too small to contain the generated
 | |
|                                  option. BufferLen is updated for the required size.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The option is generated and filled in to Buffer.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| Ip6FillHopByHop (
 | |
|   OUT UINT8                  *Buffer,
 | |
|   IN OUT UINTN               *BufferLen,
 | |
|   IN UINT8                   NextHeader
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Insert a Fragment Header to the Extension headers and output it in UpdatedExtHdrs.
 | |
| 
 | |
|   @param[in]  IpSb             The IP6 service instance to transmit the packet.
 | |
|   @param[in]  NextHeader       The extension header type of first extension header.
 | |
|   @param[in]  LastHeader       The extension header type of last extension header.
 | |
|   @param[in]  ExtHdrs          The length of the original extension header.
 | |
|   @param[in]  ExtHdrsLen       The length of the extension headers.
 | |
|   @param[in]  FragmentOffset   The fragment offset of the data following the header.
 | |
|   @param[out] UpdatedExtHdrs   The updated ExtHdrs with Fragment header inserted.
 | |
|                                It's caller's responsibility to free this buffer.
 | |
| 
 | |
|   @retval EFI_OUT_OF_RESOURCES Failed to finish the operation due to lake of
 | |
|                                resource.
 | |
|   @retval EFI_UNSUPPORTED      The extension header specified in ExtHdrs is not
 | |
|                                supported currently.
 | |
|   @retval EFI_SUCCESS          The operation performed successfully.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| Ip6FillFragmentHeader (
 | |
|   IN  IP6_SERVICE           *IpSb,
 | |
|   IN  UINT8                 NextHeader,
 | |
|   IN  UINT8                 LastHeader,
 | |
|   IN  UINT8                 *ExtHdrs,
 | |
|   IN  UINT32                ExtHdrsLen,
 | |
|   IN  UINT16                FragmentOffset,
 | |
|   OUT UINT8                 **UpdatedExtHdrs
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Copy the extension headers from the original to buffer. A Fragment header is
 | |
|   appended to the end.
 | |
| 
 | |
|   @param[in]       NextHeader       The 8-bit selector indicates the type of
 | |
|                                     the fragment header's next header.
 | |
|   @param[in]       ExtHdrs          The length of the original extension header.
 | |
|   @param[in]       LastHeader       The pointer of next header of last extension header.
 | |
|   @param[in]       FragmentOffset   The fragment offset of the data following the header.
 | |
|   @param[in]       UnFragmentHdrLen The length of unfragmented length of extension headers.
 | |
|   @param[in, out]  Buf              The buffer to copy options to.
 | |
|   @param[in, out]  BufLen           The length of the buffer.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The options are copied over.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  The buffer caller provided is too small.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| Ip6CopyExts (
 | |
|   IN UINT8                  NextHeader,
 | |
|   IN UINT8                  *ExtHdrs,
 | |
|   IN UINT8                  *LastHeader,
 | |
|   IN UINT16                 FragmentOffset,
 | |
|   IN UINT32                 UnFragmentHdrLen,
 | |
|   IN OUT UINT8              *Buf,
 | |
|   IN OUT UINT32             *BufLen
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Validate the IP6 option format for both the packets we received
 | |
|   and that we will transmit. It supports the defined options in Neighbor
 | |
|   Discovery messages.
 | |
| 
 | |
|   @param[in]  Option            The first byte of the option.
 | |
|   @param[in]  OptionLen         The length of the whole option.
 | |
| 
 | |
|   @retval TRUE     The option is properly formatted.
 | |
|   @retval FALSE    The option is malformatted.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| Ip6IsNDOptionValid (
 | |
|   IN UINT8                  *Option,
 | |
|   IN UINT16                 OptionLen
 | |
|   );
 | |
| 
 | |
| #endif
 |