icmpv6.h File Reference

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

#include "core/net.h"

Go to the source code of this file.

Enumerations

enum  Icmpv6Type {
  ICMPV6_TYPE_DEST_UNREACHABLE = 1 , ICMPV6_TYPE_PACKET_TOO_BIG = 2 , ICMPV6_TYPE_TIME_EXCEEDED = 3 , ICMPV6_TYPE_PARAM_PROBLEM = 4 ,
  ICMPV6_TYPE_ECHO_REQUEST = 128 , ICMPV6_TYPE_ECHO_REPLY = 129 , ICMPV6_TYPE_MULTICAST_LISTENER_QUERY = 130 , ICMPV6_TYPE_MULTICAST_LISTENER_REPORT_V1 = 131 ,
  ICMPV6_TYPE_MULTICAST_LISTENER_DONE_V1 = 132 , ICMPV6_TYPE_ROUTER_SOL = 133 , ICMPV6_TYPE_ROUTER_ADV = 134 , ICMPV6_TYPE_NEIGHBOR_SOL = 135 ,
  ICMPV6_TYPE_NEIGHBOR_ADV = 136 , ICMPV6_TYPE_REDIRECT = 137 , ICMPV6_TYPE_MULTICAST_LISTENER_REPORT_V2 = 143
}
 ICMPv6 message type. More...
 
enum  Icmpv6DestUnreachableCode {
  ICMPV6_CODE_NO_ROUTE_TO_DEST = 0 , ICMPV6_CODE_ADMIN_PROHIBITED = 1 , ICMPV6_CODE_BEYOND_SCOPE_OF_SRC_ADDR = 2 , ICMPV6_CODE_ADDR_UNREACHABLE = 3 ,
  ICMPV6_CODE_PORT_UNREACHABLE = 4
}
 Destination Unreachable message codes. More...
 
enum  Icmpv6TimeExceededCode { ICMPV6_CODE_HOP_LIMIT_EXCEEDED = 0 , ICMPV6_CODE_REASSEMBLY_TIME_EXCEEDED = 1 }
 Time Exceeded message codes. More...
 
enum  Icmpv6ParamProblemCode { ICMPV6_CODE_INVALID_HEADER_FIELD = 0 , ICMPV6_CODE_UNKNOWN_NEXT_HEADER = 1 , ICMPV6_CODE_UNKNOWN_IPV6_OPTION = 2 }
 Parameter Problem message codes. More...
 

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, uint8_t hopLimit)
 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...
 

Variables

typedef __packed_struct
 ICMPv6 header. More...
 
uint8_t code
 
uint16_t checksum
 
uint8_t data []
 
 Icmpv6Header
 
uint32_t parameter
 
 Icmpv6ErrorMessage
 
uint32_t unused
 
 Icmpv6DestUnreachableMessage
 
uint32_t mtu
 
 Icmpv6PacketTooBigMessage
 
 Icmpv6TimeExceededMessage
 
uint32_t pointer
 
 Icmpv6ParamProblemMessage
 
uint16_t identifier
 
uint16_t sequenceNumber
 
 Icmpv6EchoMessage
 

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.

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

Definition in file icmpv6.h.

Enumeration Type Documentation

◆ Icmpv6DestUnreachableCode

Destination Unreachable message codes.

Enumerator
ICMPV6_CODE_NO_ROUTE_TO_DEST 
ICMPV6_CODE_ADMIN_PROHIBITED 
ICMPV6_CODE_BEYOND_SCOPE_OF_SRC_ADDR 
ICMPV6_CODE_ADDR_UNREACHABLE 
ICMPV6_CODE_PORT_UNREACHABLE 

Definition at line 75 of file icmpv6.h.

◆ Icmpv6ParamProblemCode

Parameter Problem message codes.

Enumerator
ICMPV6_CODE_INVALID_HEADER_FIELD 
ICMPV6_CODE_UNKNOWN_NEXT_HEADER 
ICMPV6_CODE_UNKNOWN_IPV6_OPTION 

Definition at line 99 of file icmpv6.h.

◆ Icmpv6TimeExceededCode

Time Exceeded message codes.

Enumerator
ICMPV6_CODE_HOP_LIMIT_EXCEEDED 
ICMPV6_CODE_REASSEMBLY_TIME_EXCEEDED 

Definition at line 89 of file icmpv6.h.

◆ Icmpv6Type

enum Icmpv6Type

ICMPv6 message type.

The type field indicates the type of the message. Its value determines the format of the remaining data

Enumerator
ICMPV6_TYPE_DEST_UNREACHABLE 
ICMPV6_TYPE_PACKET_TOO_BIG 
ICMPV6_TYPE_TIME_EXCEEDED 
ICMPV6_TYPE_PARAM_PROBLEM 
ICMPV6_TYPE_ECHO_REQUEST 
ICMPV6_TYPE_ECHO_REPLY 
ICMPV6_TYPE_MULTICAST_LISTENER_QUERY 
ICMPV6_TYPE_MULTICAST_LISTENER_REPORT_V1 
ICMPV6_TYPE_MULTICAST_LISTENER_DONE_V1 
ICMPV6_TYPE_ROUTER_SOL 
ICMPV6_TYPE_ROUTER_ADV 
ICMPV6_TYPE_NEIGHBOR_SOL 
ICMPV6_TYPE_NEIGHBOR_ADV 
ICMPV6_TYPE_REDIRECT 
ICMPV6_TYPE_MULTICAST_LISTENER_REPORT_V2 

Definition at line 51 of file icmpv6.h.

Function Documentation

◆ icmpv6DumpDestUnreachableMessage()

void icmpv6DumpDestUnreachableMessage ( const Icmpv6DestUnreachableMessage message)

Dump ICMPv6 Destination Unreachable message.

Parameters
[in]messagePointer to the ICMPv6 message

Definition at line 687 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 716 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 732 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 673 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 701 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 268 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 369 of file icmpv6.c.

◆ icmpv6ProcessMessage()

void icmpv6ProcessMessage ( NetInterface interface,
const 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 123 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 304 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 507 of file icmpv6.c.

Variable Documentation

◆ __packed_struct

typedef __packed_struct
Initial value:
{
uint8_t type
uint8_t type
Definition: coap_common.h:176

ICMPv6 header.

ICMPv6 Echo Request and Echo Reply messages.

ICMPv6 Parameter Problem message.

ICMPv6 Time Exceeded message.

ICMPv6 Packet Too Big message.

ICMPv6 Destination Unreachable message.

ICMPv6 Error message.

A Destination Unreachable message is generated in response to a packet that cannot be delivered to its destination address for reasons other than congestion

A Packet Too Big message is sent by a router in response to a packet that it cannot forward because the packet is larger than the MTU of the outgoing link

A Time Exceeded message is sent by a router when it receives a packet with a Hop Limit of zero

A Parameter Problem message is sent by an IPv6 node when it finds a problem with a field in the IPv6 header or extension headers such that it cannot complete processing the packet

Every node must implement an ICMPv6 Echo responder function that receives Echo Requests and sends corresponding Echo Replies

Definition at line 119 of file icmpv6.h.

◆ checksum

uint16_t checksum

Definition at line 123 of file icmpv6.h.

◆ code

uint8_t code

Definition at line 122 of file icmpv6.h.

◆ data

uint8_t data[]

Definition at line 124 of file icmpv6.h.

◆ Icmpv6DestUnreachableMessage

Icmpv6DestUnreachableMessage

Definition at line 158 of file icmpv6.h.

◆ Icmpv6EchoMessage

Icmpv6EchoMessage

Definition at line 233 of file icmpv6.h.

◆ Icmpv6ErrorMessage

Icmpv6ErrorMessage

Definition at line 139 of file icmpv6.h.

◆ Icmpv6Header

Icmpv6Header

Definition at line 125 of file icmpv6.h.

◆ Icmpv6PacketTooBigMessage

Icmpv6PacketTooBigMessage

Definition at line 177 of file icmpv6.h.

◆ Icmpv6ParamProblemMessage

Icmpv6ParamProblemMessage

Definition at line 214 of file icmpv6.h.

◆ Icmpv6TimeExceededMessage

Icmpv6TimeExceededMessage

Definition at line 195 of file icmpv6.h.

◆ identifier

uint16_t identifier

Definition at line 230 of file icmpv6.h.

◆ mtu

uint32_t mtu

Definition at line 175 of file icmpv6.h.

◆ parameter

uint32_t parameter

Definition at line 137 of file icmpv6.h.

◆ pointer

uint32_t pointer

Definition at line 212 of file icmpv6.h.

◆ sequenceNumber

uint16_t sequenceNumber

Definition at line 231 of file icmpv6.h.

◆ unused

uint32_t unused

Definition at line 156 of file icmpv6.h.