icmp.h File Reference

ICMP (Internet Control Message Protocol) More...

#include "core/net.h"

Go to the source code of this file.

Macros

#define ICMP_QUERY_ID_MIN   0
 
#define ICMP_QUERY_ID_MAX   32767
 

Enumerations

enum  IcmpType {
  ICMP_TYPE_ECHO_REPLY = 0, ICMP_TYPE_DEST_UNREACHABLE = 3, ICMP_TYPE_SOURCE_QUENCH = 4, ICMP_TYPE_REDIRECT = 5,
  ICMP_TYPE_ALTERNATE_HOST_ADDR = 6, ICMP_TYPE_ECHO_REQUEST = 8, ICMP_TYPE_ROUTER_ADV = 9, ICMP_TYPE_ROUTER_SOL = 10,
  ICMP_TYPE_TIME_EXCEEDED = 11, ICMP_TYPE_PARAM_PROBLEM = 12, ICMP_TYPE_TIMESTAMP_REQUEST = 13, ICMP_TYPE_TIMESTAMP_REPLY = 14,
  ICMP_TYPE_INFO_REQUEST = 15, ICMP_TYPE_INFO_REPLY = 16, ICMP_TYPE_ADDR_MASK_REQUEST = 17, ICMP_TYPE_ADDR_MASK_REPLY = 18,
  ICMP_TYPE_TRACEROUTE = 30
}
 ICMP message type. More...
 
enum  IcmpDestUnreachableCode {
  ICMP_CODE_NET_UNREACHABLE = 0, ICMP_CODE_HOST_UNREACHABLE = 1, ICMP_CODE_PROTOCOL_UNREACHABLE = 2, ICMP_CODE_PORT_UNREACHABLE = 3,
  ICMP_CODE_FRAG_NEEDED_AND_DF_SET = 4, ICMP_CODE_SOURCE_ROUTE_FAILED = 5
}
 Destination Unreachable message codes. More...
 
enum  IcmpTimeExceededCode { ICMP_CODE_TTL_EXCEEDED = 0, ICMP_CODE_REASSEMBLY_TIME_EXCEEDED = 1 }
 Time Exceeded message codes. More...
 

Functions

error_t icmpEnableEchoRequests (NetInterface *interface, bool_t enable)
 Enable support for ICMP Echo Request messages. More...
 
error_t icmpEnableBroadcastEchoRequests (NetInterface *interface, bool_t enable)
 Enable support for broadcast ICMP Echo Request messages. More...
 
void icmpProcessMessage (NetInterface *interface, const Ipv4PseudoHeader *requestPseudoHeader, const NetBuffer *buffer, size_t offset)
 Incoming ICMP message processing. More...
 
void icmpProcessEchoRequest (NetInterface *interface, const Ipv4PseudoHeader *requestPseudoHeader, const NetBuffer *request, size_t requestOffset)
 Echo Request message processing. More...
 
error_t icmpSendErrorMessage (NetInterface *interface, uint8_t type, uint8_t code, uint8_t parameter, const NetBuffer *ipPacket, size_t ipPacketOffset)
 Send an ICMP Error message. More...
 
void icmpUpdateInStats (uint8_t type)
 Update ICMP input statistics. More...
 
void icmpUpdateOutStats (uint8_t type)
 Update ICMP output statistics. More...
 
void icmpDumpMessage (const IcmpHeader *message)
 Dump ICMP message for debugging purpose. More...
 
void icmpDumpEchoMessage (const IcmpEchoMessage *message)
 Dump ICMP Echo Request or Echo Reply message. More...
 
void icmpDumpErrorMessage (const IcmpErrorMessage *message)
 Dump generic ICMP Error message. More...
 

Variables

typedef __packed_struct
 ICMP header. More...
 
uint8_t code
 
uint16_t checksum
 
uint8_t data []
 
 IcmpHeader
 
uint16_t identifier
 
uint16_t unused
 
 IcmpQueryMessage
 
uint16_t sequenceNumber
 
 IcmpEchoMessage
 
uint8_t parameter
 
 IcmpErrorMessage
 
 IcmpDestUnreachableMessage
 
 IcmpTimeExceededMessage
 
uint8_t pointer
 
 IcmpParamProblemMessage
 

Detailed Description

ICMP (Internet Control Message Protocol)

License

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

Copyright (C) 2010-2025 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.5.0

Definition in file icmp.h.

Macro Definition Documentation

◆ ICMP_QUERY_ID_MAX

#define ICMP_QUERY_ID_MAX   32767

Definition at line 46 of file icmp.h.

◆ ICMP_QUERY_ID_MIN

#define ICMP_QUERY_ID_MIN   0

Definition at line 39 of file icmp.h.

Enumeration Type Documentation

◆ IcmpDestUnreachableCode

Destination Unreachable message codes.

Enumerator
ICMP_CODE_NET_UNREACHABLE 
ICMP_CODE_HOST_UNREACHABLE 
ICMP_CODE_PROTOCOL_UNREACHABLE 
ICMP_CODE_PORT_UNREACHABLE 
ICMP_CODE_FRAG_NEEDED_AND_DF_SET 
ICMP_CODE_SOURCE_ROUTE_FAILED 

Definition at line 91 of file icmp.h.

◆ IcmpTimeExceededCode

Time Exceeded message codes.

Enumerator
ICMP_CODE_TTL_EXCEEDED 
ICMP_CODE_REASSEMBLY_TIME_EXCEEDED 

Definition at line 106 of file icmp.h.

◆ IcmpType

enum IcmpType

ICMP message type.

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

Enumerator
ICMP_TYPE_ECHO_REPLY 
ICMP_TYPE_DEST_UNREACHABLE 
ICMP_TYPE_SOURCE_QUENCH 
ICMP_TYPE_REDIRECT 
ICMP_TYPE_ALTERNATE_HOST_ADDR 
ICMP_TYPE_ECHO_REQUEST 
ICMP_TYPE_ROUTER_ADV 
ICMP_TYPE_ROUTER_SOL 
ICMP_TYPE_TIME_EXCEEDED 
ICMP_TYPE_PARAM_PROBLEM 
ICMP_TYPE_TIMESTAMP_REQUEST 
ICMP_TYPE_TIMESTAMP_REPLY 
ICMP_TYPE_INFO_REQUEST 
ICMP_TYPE_INFO_REPLY 
ICMP_TYPE_ADDR_MASK_REQUEST 
ICMP_TYPE_ADDR_MASK_REPLY 
ICMP_TYPE_TRACEROUTE 

Definition at line 65 of file icmp.h.

Function Documentation

◆ icmpDumpEchoMessage()

void icmpDumpEchoMessage ( const IcmpEchoMessage message)

Dump ICMP Echo Request or Echo Reply message.

Parameters
[in]messagePointer to the ICMP message

Definition at line 657 of file icmp.c.

◆ icmpDumpErrorMessage()

void icmpDumpErrorMessage ( const IcmpErrorMessage message)

Dump generic ICMP Error message.

Parameters
[in]messagePointer to the ICMP message

Definition at line 673 of file icmp.c.

◆ icmpDumpMessage()

void icmpDumpMessage ( const IcmpHeader message)

Dump ICMP message for debugging purpose.

Parameters
[in]messagePointer to the ICMP message

Definition at line 643 of file icmp.c.

◆ icmpEnableBroadcastEchoRequests()

error_t icmpEnableBroadcastEchoRequests ( NetInterface interface,
bool_t  enable 
)

Enable support for broadcast ICMP Echo Request messages.

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

Definition at line 84 of file icmp.c.

◆ icmpEnableEchoRequests()

error_t icmpEnableEchoRequests ( NetInterface interface,
bool_t  enable 
)

Enable support for ICMP Echo Request messages.

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

Definition at line 57 of file icmp.c.

◆ icmpProcessEchoRequest()

void icmpProcessEchoRequest ( NetInterface interface,
const Ipv4PseudoHeader requestPseudoHeader,
const NetBuffer request,
size_t  requestOffset 
)

Echo Request message processing.

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

Definition at line 193 of file icmp.c.

◆ icmpProcessMessage()

void icmpProcessMessage ( NetInterface interface,
const Ipv4PseudoHeader requestPseudoHeader,
const NetBuffer buffer,
size_t  offset 
)

Incoming ICMP message processing.

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

Definition at line 111 of file icmp.c.

◆ icmpSendErrorMessage()

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

Send an ICMP 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 IPv4 packet
[in]ipPacketOffsetOffset to the first byte of the IPv4 packet
Returns
Error code

Definition at line 338 of file icmp.c.

◆ icmpUpdateInStats()

void icmpUpdateInStats ( uint8_t  type)

Update ICMP input statistics.

Parameters
[in]typeICMP message type

Definition at line 489 of file icmp.c.

◆ icmpUpdateOutStats()

void icmpUpdateOutStats ( uint8_t  type)

Update ICMP output statistics.

Parameters
[in]typeICMPv6 message type

Definition at line 564 of file icmp.c.

Variable Documentation

◆ __packed_struct

typedef __packed_struct
Initial value:
{
uint8_t type

ICMP header.

ICMP Parameter Problem message.

ICMP Time Exceeded message.

ICMP Destination Unreachable message.

ICMP Error message.

ICMP Echo Request and Echo Reply messages.

ICMP Query message.

Definition at line 125 of file icmp.h.

◆ checksum

uint16_t checksum

Definition at line 129 of file icmp.h.

◆ code

uint8_t code

Definition at line 128 of file icmp.h.

◆ data

uint8_t data[]

Definition at line 130 of file icmp.h.

◆ IcmpDestUnreachableMessage

IcmpDestUnreachableMessage

Definition at line 190 of file icmp.h.

◆ IcmpEchoMessage

IcmpEchoMessage

Definition at line 161 of file icmp.h.

◆ IcmpErrorMessage

IcmpErrorMessage

Definition at line 176 of file icmp.h.

◆ IcmpHeader

IcmpHeader

Definition at line 131 of file icmp.h.

◆ IcmpParamProblemMessage

IcmpParamProblemMessage

Definition at line 219 of file icmp.h.

◆ IcmpQueryMessage

IcmpQueryMessage

Definition at line 146 of file icmp.h.

◆ IcmpTimeExceededMessage

IcmpTimeExceededMessage

Definition at line 204 of file icmp.h.

◆ identifier

uint16_t identifier

Definition at line 143 of file icmp.h.

◆ parameter

uint8_t parameter

Definition at line 173 of file icmp.h.

◆ pointer

uint8_t pointer

Definition at line 216 of file icmp.h.

◆ sequenceNumber

uint32_t sequenceNumber

Definition at line 159 of file icmp.h.

◆ unused

uint8_t unused[3]

Definition at line 144 of file icmp.h.

uint8_t type
Definition: coap_common.h:176