TianoCore EDK2 master
Loading...
Searching...
No Matches
Ip6Option.c File Reference
#include "Ip6Impl.h"

Go to the source code of this file.

Functions

BOOLEAN Ip6IsOptionValid (IN IP6_SERVICE *IpSb, IN NET_BUF *Packet, IN UINT8 *Option, IN UINT16 OptionLen, IN UINT32 Pointer)
 
BOOLEAN Ip6IsNDOptionValid (IN UINT8 *Option, IN UINT16 OptionLen)
 
BOOLEAN Ip6IsValidProtocol (IN IP6_SERVICE *IpSb, IN UINT8 NextHeader)
 
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)
 
EFI_STATUS Ip6FillHopByHop (OUT UINT8 *Buffer, IN OUT UINTN *BufferLen, IN UINT8 NextHeader)
 
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)
 

Detailed Description

IP6 option support functions and routines.

Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.

SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file Ip6Option.c.

Function Documentation

◆ Ip6FillFragmentHeader()

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 
)

Insert a Fragment Header to the Extension headers and output it in UpdatedExtHdrs.

Parameters
[in]IpSbThe IP6 service instance to transmit the packet.
[in]NextHeaderThe extension header type of first extension header.
[in]LastHeaderThe extension header type of last extension header.
[in]ExtHdrsThe length of the original extension header.
[in]ExtHdrsLenThe length of the extension headers.
[in]FragmentOffsetThe fragment offset of the data following the header.
[out]UpdatedExtHdrsThe updated ExtHdrs with Fragment header inserted. It's caller's responsibility to free this buffer.
Return values
EFI_OUT_OF_RESOURCESFailed to finish the operation due to lake of resource.
EFI_UNSUPPORTEDThe extension header specified in ExtHdrs is not supported currently.
EFI_SUCCESSThe operation performed successfully.

Definition at line 711 of file Ip6Option.c.

◆ Ip6FillHopByHop()

EFI_STATUS Ip6FillHopByHop ( OUT UINT8 *  Buffer,
IN OUT UINTN BufferLen,
IN UINT8  NextHeader 
)

Generate an IPv6 router alert option in network order and output it through Buffer.

Parameters
[out]BufferPoints to a buffer to record the generated option.
[in,out]BufferLenThe length of Buffer, in bytes.
[in]NextHeaderThe 8-bit selector indicates the type of header immediately following the Hop-by-Hop Options header.
Return values
EFI_BUFFER_TOO_SMALLThe Buffer is too small to contain the generated option. BufferLen is updated for the required size.
EFI_SUCCESSThe option is generated and filled in to Buffer.

Definition at line 663 of file Ip6Option.c.

◆ Ip6IsExtsValid()

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 
)

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.

Parameters
[in]IpSbThe IP6 service instance. This is an optional parameter.
[in]PacketThe data of the packet. Ignored if NULL.
[in]NextHeaderThe next header field in IPv6 basic header.
[in]ExtHdrsThe first byte of the option.
[in]ExtHdrsLenThe length of the whole option.
[in]RcvdThe option is from the packet we received if TRUE, otherwise, the option we want to transmit.
[out]FormerHeaderThe offset of NextHeader which points to Fragment Header when we received, of the ExtHdrs. Ignored if we transmit.
[out]LastHeaderThe pointer of NextHeader of the last extension header processed by IP6.
[out]RealExtsLenThe length of extension headers processed by IP6 layer. This is an optional parameter that may be NULL.
[out]UnFragmentLenThe length of unfragmented length of extension headers. This is an optional parameter that may be NULL.
[out]FragmentedIndicate whether the packet is fragmented. This is an optional parameter that may be NULL.
Return values
TRUEThe option is properly formatted.
FALSEThe option is malformatted.

Definition at line 318 of file Ip6Option.c.

◆ Ip6IsNDOptionValid()

BOOLEAN Ip6IsNDOptionValid ( IN UINT8 *  Option,
IN UINT16  OptionLen 
)

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.

Parameters
[in]OptionThe first byte of the option.
[in]OptionLenThe length of the whole option.
Return values
TRUEThe option is properly formatted.
FALSEThe option is malformatted.

Definition at line 150 of file Ip6Option.c.

◆ Ip6IsOptionValid()

BOOLEAN Ip6IsOptionValid ( IN IP6_SERVICE IpSb,
IN NET_BUF Packet,
IN UINT8 *  Option,
IN UINT16  OptionLen,
IN UINT32  Pointer 
)

Validate the IP6 option format for both the packets we received and that we will transmit. It will compute the ICMPv6 error message fields if the option is malformatted.

Parameters
[in]IpSbThe IP6 service data.
[in]PacketThe to be validated packet.
[in]OptionThe first byte of the option.
[in]OptionLenThe length of all options, expressed in byte length of octets. Maximum length is 2046 bytes or ((n + 1) * 8) - 2 where n is 255.
[in]PointerIdentifies the octet offset within the invoking packet where the error was detected.
Return values
TRUEThe option is properly formatted.
FALSEThe option is malformatted.

Definition at line 31 of file Ip6Option.c.

◆ Ip6IsValidProtocol()

BOOLEAN Ip6IsValidProtocol ( IN IP6_SERVICE IpSb,
IN UINT8  NextHeader 
)

Validate whether the NextHeader is a known valid protocol or one of the user configured protocols from the upper layer.

Parameters
[in]IpSbThe IP6 service instance.
[in]NextHeaderThe next header field.
Return values
TRUEThe NextHeader is a known valid protocol or user configured.
FALSEThe NextHeader is not a known valid protocol.

Definition at line 252 of file Ip6Option.c.