]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
icmp: add support for RFC 8335 PROBE
authorAndreas Roeseler <andreas.a.roeseler@gmail.com>
Tue, 30 Mar 2021 01:45:15 +0000 (18:45 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 30 Mar 2021 20:29:39 +0000 (13:29 -0700)
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>
include/uapi/linux/icmp.h

index fb169a50895ebc812cd280de11bd1d950bc740a2..222325d1d80e85b203a1ab55aa04686498e407fa 100644 (file)
@@ -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      */
 #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;
@@ -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 */