Re: [PATCH V3 net-next 1/5] icmp: add support for RFC 8335 PROBE
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2021-02-22 04:43:58
On Wed, Feb 17, 2021 at 1:10 PM Andreas Roeseler [off-list ref] wrote:
quoted hunk ↗ jump to hunk
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 <redacted> --- Changes since v1: - Add AFI_IP and AFI_IP6 definitions Changes since v2: Suggested by Willem de Brujin [off-list ref] - Add prefix for PROBE specific defined variables - Create struct icmp_ext_echo_iio for parsing incoming packet --- include/uapi/linux/icmp.h | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+)diff --git a/include/uapi/linux/icmp.h b/include/uapi/linux/icmp.h index fb169a50895e..166ca77561de 100644 --- a/include/uapi/linux/icmp.h +++ b/include/uapi/linux/icmp.h@@ -66,6 +66,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)/* position of active flag in reply */ +#define EXT_ECHOREPLY_IPV4 (1 << 1)/* position of ipv4 flag in reply */ +#define EXT_ECHOREPLY_IPV6 1 /* position of ipv6 flag in reply */ +#define EXT_ECHO_CTYPE_NAME 1 +#define EXT_ECHO_CTYPE_INDEX 2 +#define EXT_ECHO_CTYPE_ADDR 3 +#define EXT_ECHO_AFI_IP 1 /* Address Family Identifier for IPV4 */ +#define EXT_ECHO_AFI_IP6 2 /* Address Family Identifier for IPV6 */ struct icmphdr { __u8 type;@@ -118,4 +135,27 @@ struct icmp_extobj_hdr { __u8 class_type; }; +/* RFC 8335: 2.1 Header for C-type 3 payload */ +struct icmp_ext_echo_ctype3_hdr { + __u16 afi; + __u8 addrlen; + __u8 reserved; +}; + +/* RFC 8335: Interface Identification Object */ +struct icmp_ext_echo_iio { + struct icmp_extobj_hdr extobj_hdr; + union { + __u32 ifIndex;
please no camelcase.
+ char name;
why single char?
+ struct {
+ struct icmp_ext_echo_ctype3_hdr ctype3_hdr;
+ union {
+ __be32 ipv4_addr;perhaps struct in_addr
+ struct in6_addr ipv6_addr; + } ip_addr; + } addr; + } ident; +}; + #endif /* _UAPI_LINUX_ICMP_H */ -- 2.25.1