icmpv6.c File Reference

ICMPv6 (Internet Control Message Protocol Version 6) More...

#include "core/net.h"
#include "core/ip.h"
#include "ipv6/ipv6.h"
#include "ipv6/ipv6_pmtu.h"
#include "ipv6/ipv6_misc.h"
#include "ipv6/icmpv6.h"
#include "ipv6/ndp.h"
#include "ipv6/ndp_router_adv_misc.h"
#include "mld/mld_node_misc.h"
#include "mibs/ip_mib_module.h"
#include "debug.h"

Go to the source code of this file.

Macros

#define TRACE_LEVEL   ICMPV6_TRACE_LEVEL
 

Functions

error_t icmpv6EnableEchoRequests (NetInterface *interface, bool_t enable)
 Enable support for ICMPv6 Echo Request messages. More...
 
error_t icmpv6EnableMulticastEchoRequests (NetInterface *interface, bool_t enable)
 Enable support for multicast ICMPv6 Echo Request messages. More...
 
void icmpv6ProcessMessage (NetInterface *interface, const Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset, const NetRxAncillary *ancillary)
 Incoming ICMPv6 message processing. More...
 
void icmpv6ProcessDestUnreachable (NetInterface *interface, const Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset)
 Destination Unreachable message processing. More...
 
void icmpv6ProcessPacketTooBig (NetInterface *interface, const Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset)
 Packet Too Big message processing. More...
 
void icmpv6ProcessEchoRequest (NetInterface *interface, const Ipv6PseudoHeader *requestPseudoHeader, const NetBuffer *request, size_t requestOffset)
 Echo Request message processing. More...
 
error_t icmpv6SendErrorMessage (NetInterface *interface, uint8_t type, uint8_t code, uint32_t parameter, const NetBuffer *ipPacket, size_t ipPacketOffset)
 Send an ICMPv6 Error message. More...
 
void icmpv6DumpMessage (const Icmpv6Header *message)
 Dump ICMPv6 message for debugging purpose. More...
 
void icmpv6DumpDestUnreachableMessage (const Icmpv6DestUnreachableMessage *message)
 Dump ICMPv6 Destination Unreachable message. More...
 
void icmpv6DumpPacketTooBigMessage (const Icmpv6PacketTooBigMessage *message)
 Dump ICMPv6 Packet Too Big message. More...
 
void icmpv6DumpEchoMessage (const Icmpv6EchoMessage *message)
 Dump ICMPv6 Echo Request or Echo Reply message. More...
 
void icmpv6DumpErrorMessage (const Icmpv6ErrorMessage *message)
 Dump generic ICMPv6 Error message. More...
 

Detailed Description

ICMPv6 (Internet Control Message Protocol Version 6)

License

SPDX-License-Identifier: GPL-2.0-or-later

Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.

This file is part of CycloneTCP Open.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Description

ICMPv6 is used by IPv6 nodes to report errors encountered in processing packets, and to perform other Internet-layer functions. ICMPv6 is an integral part of IPv6 and must be fully implemented by every IPv6 node. Refer to the RFC 2463 for more details

Author
Oryx Embedded SARL (www.oryx-embedded.com)
Version
2.4.4

Definition in file icmpv6.c.

Macro Definition Documentation

◆ TRACE_LEVEL

#define TRACE_LEVEL   ICMPV6_TRACE_LEVEL

Definition at line 39 of file icmpv6.c.

Function Documentation

◆ icmpv6DumpDestUnreachableMessage()

void icmpv6DumpDestUnreachableMessage ( const Icmpv6DestUnreachableMessage message)

Dump ICMPv6 Destination Unreachable message.

Parameters
[in]messagePointer to the ICMPv6 message

Definition at line 686 of file icmpv6.c.

◆ icmpv6DumpEchoMessage()

void icmpv6DumpEchoMessage ( const Icmpv6EchoMessage message)

Dump ICMPv6 Echo Request or Echo Reply message.

Parameters
[in]messagePointer to the ICMPv6 message

Definition at line 715 of file icmpv6.c.

◆ icmpv6DumpErrorMessage()

void icmpv6DumpErrorMessage ( const Icmpv6ErrorMessage message)

Dump generic ICMPv6 Error message.

Parameters
[in]messagePointer to the ICMPv6 message

Definition at line 731 of file icmpv6.c.

◆ icmpv6DumpMessage()

void icmpv6DumpMessage ( const Icmpv6Header message)

Dump ICMPv6 message for debugging purpose.

Parameters
[in]messagePointer to the ICMP message

Definition at line 672 of file icmpv6.c.

◆ icmpv6DumpPacketTooBigMessage()

void icmpv6DumpPacketTooBigMessage ( const Icmpv6PacketTooBigMessage message)

Dump ICMPv6 Packet Too Big message.

Parameters
[in]messagePointer to the ICMPv6 message

Definition at line 700 of file icmpv6.c.

◆ icmpv6EnableEchoRequests()

error_t icmpv6EnableEchoRequests ( NetInterface interface,
bool_t  enable 
)

Enable support for ICMPv6 Echo Request messages.

Parameters
[in]interfaceUnderlying network interface
[in]enableThis flag specifies whether the host will respond to ICMPv6 Echo Requests. When the flag is set to FALSE, incoming ICMPv6 Echo Request messages will be dropped
Returns
Error code

Definition at line 67 of file icmpv6.c.

◆ icmpv6EnableMulticastEchoRequests()

error_t icmpv6EnableMulticastEchoRequests ( NetInterface interface,
bool_t  enable 
)

Enable support for multicast ICMPv6 Echo Request messages.

Parameters
[in]interfaceUnderlying network interface
[in]enableThis flag specifies whether the host will respond to multicast ICMPv6 Echo Requests. When the flag is set to FALSE, incoming ICMPv6 Echo Request messages destined to a multicast address will be dropped
Returns
Error code

Definition at line 95 of file icmpv6.c.

◆ icmpv6ProcessDestUnreachable()

void icmpv6ProcessDestUnreachable ( NetInterface interface,
const Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset 
)

Destination Unreachable message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the incoming ICMPv6 message
[in]offsetOffset to the first byte of the ICMPv6 message

Definition at line 267 of file icmpv6.c.

◆ icmpv6ProcessEchoRequest()

void icmpv6ProcessEchoRequest ( NetInterface interface,
const Ipv6PseudoHeader requestPseudoHeader,
const NetBuffer request,
size_t  requestOffset 
)

Echo Request message processing.

Parameters
[in]interfaceUnderlying network interface
[in]requestPseudoHeaderIPv6 pseudo header
[in]requestMulti-part buffer containing the incoming ICMPv6 message
[in]requestOffsetOffset to the first byte of the ICMPv6 message

Definition at line 368 of file icmpv6.c.

◆ icmpv6ProcessMessage()

void icmpv6ProcessMessage ( NetInterface interface,
const Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset,
const NetRxAncillary ancillary 
)

Incoming ICMPv6 message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the incoming ICMPv6 message
[in]offsetOffset to the first byte of the ICMPv6 message
[in]ancillaryAdditional options passed to the stack along with the packet

Definition at line 124 of file icmpv6.c.

◆ icmpv6ProcessPacketTooBig()

void icmpv6ProcessPacketTooBig ( NetInterface interface,
const Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset 
)

Packet Too Big message processing.

Parameters
[in]interfaceUnderlying network interface
[in]pseudoHeaderIPv6 pseudo header
[in]bufferMulti-part buffer containing the incoming ICMPv6 message
[in]offsetOffset to the first byte of the ICMPv6 message

Definition at line 303 of file icmpv6.c.

◆ icmpv6SendErrorMessage()

error_t icmpv6SendErrorMessage ( NetInterface interface,
uint8_t  type,
uint8_t  code,
uint32_t  parameter,
const NetBuffer ipPacket,
size_t  ipPacketOffset 
)

Send an ICMPv6 Error message.

Parameters
[in]interfaceUnderlying network interface
[in]typeMessage type
[in]codeSpecific message code
[in]parameterSpecific message parameter
[in]ipPacketMulti-part buffer that holds the invoking IPv6 packet
[in]ipPacketOffsetOffset to the first byte of the IPv6 packet
Returns
Error code

Definition at line 506 of file icmpv6.c.