icmp.h File Reference

ICMP (Internet Control Message Protocol) More...

#include "core/net.h"

Go to the source code of this file.

Enumerations

enum  IcmpType {
  ICMP_TYPE_ECHO_REPLY = 0, ICMP_TYPE_DEST_UNREACHABLE = 3, ICMP_TYPE_SOURCE_QUENCH = 4, ICMP_TYPE_REDIRECT = 5,
  ICMP_TYPE_ECHO_REQUEST = 8, 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 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
 
uint8_t parameter
 
uint8_t unused [3]
 
 IcmpErrorMessage
 
 IcmpDestUnreachableMessage
 
 IcmpTimeExceededMessage
 
uint8_t pointer
 
 IcmpParamProblemMessage
 
uint16_t identifier
 
uint16_t sequenceNumber
 
 IcmpEchoMessage
 

Detailed Description

ICMP (Internet Control Message Protocol)

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.2

Definition in 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 73 of file icmp.h.

◆ IcmpTimeExceededCode

Time Exceeded message codes.

Enumerator
ICMP_CODE_TTL_EXCEEDED 
ICMP_CODE_REASSEMBLY_TIME_EXCEEDED 

Definition at line 88 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_ECHO_REQUEST 
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 

Definition at line 51 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 609 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 625 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 595 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 441 of file icmp.c.

◆ icmpUpdateOutStats()

void icmpUpdateOutStats ( uint8_t  type)

Update ICMP output statistics.

Parameters
[in]typeICMPv6 message type

Definition at line 516 of file icmp.c.

Variable Documentation

◆ __packed_struct

typedef __packed_struct
Initial value:
{
uint8_t type

ICMP header.

ICMP Echo Request and Echo Reply messages.

ICMP Parameter Problem message.

ICMP Time Exceeded message.

ICMP Destination Unreachable message.

ICMP Error message.

Definition at line 107 of file icmp.h.

◆ checksum

uint16_t checksum

Definition at line 111 of file icmp.h.

◆ code

uint8_t code

Definition at line 110 of file icmp.h.

◆ data

uint8_t data[]

Definition at line 112 of file icmp.h.

◆ IcmpDestUnreachableMessage

IcmpDestUnreachableMessage

Definition at line 142 of file icmp.h.

◆ IcmpEchoMessage

IcmpEchoMessage

Definition at line 186 of file icmp.h.

◆ IcmpErrorMessage

IcmpErrorMessage

Definition at line 128 of file icmp.h.

◆ IcmpHeader

IcmpHeader

Definition at line 113 of file icmp.h.

◆ IcmpParamProblemMessage

IcmpParamProblemMessage

Definition at line 171 of file icmp.h.

◆ IcmpTimeExceededMessage

IcmpTimeExceededMessage

Definition at line 156 of file icmp.h.

◆ identifier

uint16_t identifier

Definition at line 183 of file icmp.h.

◆ parameter

uint8_t parameter

Definition at line 125 of file icmp.h.

◆ pointer

uint8_t pointer

Definition at line 168 of file icmp.h.

◆ sequenceNumber

uint32_t sequenceNumber

Definition at line 184 of file icmp.h.

◆ unused

uint8_t unused[3]

Definition at line 126 of file icmp.h.

uint8_t type
Definition: coap_common.h:176