mbox series

[V2,net-next,0/5] add support for RFC 8335 PROBE

Message ID cover.1612393368.git.andreas.a.roeseler@gmail.com
Headers show
Series add support for RFC 8335 PROBE | expand

Message

Andreas Roeseler Feb. 3, 2021, 11:24 p.m. UTC
The popular utility ping has several severe limitations such as the
inability to query specific interfaces on a node and requiring
bidirectional connectivity between the probing and probed interfaces.
RFC 8335 attempts to solve these limitations by creating the new utility
PROBE which is a specialized ICMP message that makes use of the ICMP
Extention Structure outlined in RFC 4884.

This patchset adds definitions for the ICMP Extended Echo Request and
Reply (PROBE) types for both IPV4 and IPV6, adds a sysctl to enable 
response to PROBE messages, expands the list of supported ICMP messages
to accommodate PROBE types, and adds functionality to respond to PROBE
requests.

Changes since v1:
 - Add AFI definitions
 - Switch to functions such as dev_get_by_name and ip_dev_find to lookup
   net devices 

Andreas Roeseler (5):
  icmp: add support for RFC 8335 PROBE
  ICMPV6: add support for RFC 8335 PROBE
  net: add sysctl for enabling RFC 8335 PROBE messages
  net: add support for sending RFC 8335 PROBE messages
  icmp: add response to RFC 8335 PROBE messages

 include/net/netns/ipv4.h    |  1 +
 include/uapi/linux/icmp.h   | 24 +++++++++
 include/uapi/linux/icmpv6.h |  6 +++
 net/ipv4/icmp.c             | 98 +++++++++++++++++++++++++++++++++----
 net/ipv4/ping.c             |  4 +-
 net/ipv4/sysctl_net_ipv4.c  |  7 +++
 6 files changed, 129 insertions(+), 11 deletions(-)

Comments

Willem de Bruijn Feb. 4, 2021, 7:42 p.m. UTC | #1
On Wed, Feb 3, 2021 at 6:25 PM Andreas Roeseler
<andreas.a.roeseler@gmail.com> wrote:
>

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

>

> Signed-off-by: Andreas Roeseler <andreas.a.roeseler@gmail.com>

> ---

> Changes since v1:

>  - Add AFI_IP and AFI_IP6 definitions

> ---

>  include/uapi/linux/icmp.h | 24 ++++++++++++++++++++++++

>  1 file changed, 24 insertions(+)

>

> diff --git a/include/uapi/linux/icmp.h b/include/uapi/linux/icmp.h

> index fb169a50895e..e70bfcc06247 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 CTYPE_NAME             1

> +#define CTYPE_INDEX            2

> +#define CTYPE_ADDR             3


Please use a prefix. These definitions are too generic and may clash
with others. Same for the two below. Does all this need to be defined
UAPI?

> +#define AFI_IP                 1       /* Address Family Identifier for IPV4 */

> +#define AFI_IP6                        2       /* Address Family Identifier for IPV6 */

>

>  struct icmphdr {

>    __u8         type;

> @@ -118,4 +135,11 @@ struct icmp_extobj_hdr {

>         __u8            class_type;

>  };

>

> +/* RFC 8335: 2.1 Header for C-type 3 payload */

> +struct icmp_ext_ctype3_hdr {

> +       __u16           afi;

> +       __u8            addrlen;

> +       __u8            reserved;

> +};

> +

>  #endif /* _UAPI_LINUX_ICMP_H */

> --

> 2.25.1

>