icmpv6.c File Reference

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

#include <string.h>
#include "core/net.h"
#include "core/ip.h"
#include "ipv6/ipv6.h"
#include "ipv6/ipv6_misc.h"
#include "ipv6/ipv6_pmtu.h"
#include "ipv6/icmpv6.h"
#include "ipv6/mld.h"
#include "ipv6/ndp.h"
#include "ipv6/ndp_router_adv.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 icmpv6EnableMulticastEchoRequest (NetInterface *interface, bool_t enable)
 Enable support for multicast Echo Request messages. More...
 
void icmpv6ProcessMessage (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset, uint8_t hopLimit)
 Incoming ICMPv6 message processing. More...
 
void icmpv6ProcessDestUnreachable (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset)
 Destination Unreachable message processing. More...
 
void icmpv6ProcessPacketTooBig (NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, const NetBuffer *buffer, size_t offset)
 Packet Too Big message processing. More...
 
void icmpv6ProcessEchoRequest (NetInterface *interface, 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

Copyright (C) 2010-2018 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
1.9.0

Definition in file icmpv6.c.

Macro Definition Documentation

◆ TRACE_LEVEL

#define TRACE_LEVEL   ICMPV6_TRACE_LEVEL

Definition at line 37 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 633 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 662 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 678 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 619 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 647 of file icmpv6.c.

◆ icmpv6EnableMulticastEchoRequest()

error_t icmpv6EnableMulticastEchoRequest ( NetInterface interface,
bool_t  enable 
)

Enable support for multicast Echo Request messages.

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

Definition at line 66 of file icmpv6.c.

◆ icmpv6ProcessDestUnreachable()

void icmpv6ProcessDestUnreachable ( NetInterface interface,
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 237 of file icmpv6.c.

◆ icmpv6ProcessEchoRequest()

void icmpv6ProcessEchoRequest ( NetInterface interface,
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 336 of file icmpv6.c.

◆ icmpv6ProcessMessage()

void icmpv6ProcessMessage ( NetInterface interface,
Ipv6PseudoHeader pseudoHeader,
const NetBuffer buffer,
size_t  offset,
uint8_t  hopLimit 
)

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]hopLimitHop Limit field from IPv6 header

Definition at line 93 of file icmpv6.c.

◆ icmpv6ProcessPacketTooBig()

void icmpv6ProcessPacketTooBig ( NetInterface interface,
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 272 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 462 of file icmpv6.c.