Skip to content

Commit

Permalink
icmp: add support for RFC 8335 PROBE
Browse files Browse the repository at this point in the history
Add definitions for PROBE ICMP types and codes.

Add AFI definitions for IP and IPV6 as specified by IANA

Add a struct to represent the additional header when probing by IP
address (ctype == 3) for use in parsing incoming PROBE messages

Add a struct to represent the entire Interface Identification Object
(IIO) section of an incoming PROBE packet

Signed-off-by: Andreas Roeseler <andreas.a.roeseler@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Andreas Roeseler authored and David S. Miller committed Mar 30, 2021
1 parent fdb5cc6 commit 2b246b2
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions include/uapi/linux/icmp.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@

#include <linux/types.h>
#include <asm/byteorder.h>
#include <linux/in.h>
#include <linux/if.h>
#include <linux/in6.h>

#define ICMP_ECHOREPLY 0 /* Echo Reply */
#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */
Expand Down Expand Up @@ -66,6 +69,23 @@
#define ICMP_EXC_TTL 0 /* TTL count exceeded */
#define ICMP_EXC_FRAGTIME 1 /* Fragment Reass time exceeded */

/* Codes for EXT_ECHO (PROBE) */
#define ICMP_EXT_ECHO 42
#define ICMP_EXT_ECHOREPLY 43
#define ICMP_EXT_MAL_QUERY 1 /* Malformed Query */
#define ICMP_EXT_NO_IF 2 /* No such Interface */
#define ICMP_EXT_NO_TABLE_ENT 3 /* No such Table Entry */
#define ICMP_EXT_MULT_IFS 4 /* Multiple Interfaces Satisfy Query */

/* Constants for EXT_ECHO (PROBE) */
#define EXT_ECHOREPLY_ACTIVE (1 << 2)/* active bit in reply message */
#define EXT_ECHOREPLY_IPV4 (1 << 1)/* ipv4 bit in reply message */
#define EXT_ECHOREPLY_IPV6 1 /* ipv6 bit in reply message */
#define EXT_ECHO_CTYPE_NAME 1
#define EXT_ECHO_CTYPE_INDEX 2
#define EXT_ECHO_CTYPE_ADDR 3
#define ICMP_AFI_IP 1 /* Address Family Identifier for ipv4 */
#define ICMP_AFI_IP6 2 /* Address Family Identifier for ipv6 */

struct icmphdr {
__u8 type;
Expand Down Expand Up @@ -118,4 +138,26 @@ struct icmp_extobj_hdr {
__u8 class_type;
};

/* RFC 8335: 2.1 Header for c-type 3 payload */
struct icmp_ext_echo_ctype3_hdr {
__be16 afi;
__u8 addrlen;
__u8 reserved;
};

/* RFC 8335: 2.1 Interface Identification Object */
struct icmp_ext_echo_iio {
struct icmp_extobj_hdr extobj_hdr;
union {
char name[IFNAMSIZ];
__be32 ifindex;
struct {
struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
union {
struct in_addr ipv4_addr;
struct in6_addr ipv6_addr;
} ip_addr;
} addr;
} ident;
};
#endif /* _UAPI_LINUX_ICMP_H */

0 comments on commit 2b246b2

Please sign in to comment.