Commit 3edede08 authored by Justin Iurman's avatar Justin Iurman Committed by David S. Miller
Browse files

ipv6: ioam: Support for IOAM injection with lwtunnels



Add support for the IOAM inline insertion (only for the host-to-host use case)
which is per-route configured with lightweight tunnels. The target is iproute2
and the patch is ready. It will be posted as soon as this patchset is merged.
Here is an overview:

$ ip -6 ro ad fc00::1/128 encap ioam6 trace type 0x800000 ns 1 size 12 dev eth0

This example configures an IOAM Pre-allocated Trace option attached to the
fc00::1/128 prefix. The IOAM namespace (ns) is 1, the size of the pre-allocated
trace data block is 12 octets (size) and only the first IOAM data (bit 0:
hop_limit + node id) is included in the trace (type) represented as a bitfield.

The reason why the in-transit (IPv6-in-IPv6 encapsulation) use case is not
implemented is explained on the patchset cover.

Signed-off-by: default avatarJustin Iurman <justin.iurman@uliege.be>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8c6f6fa6
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 *  IPv6 IOAM Lightweight Tunnel API
 *
 *  Author:
 *  Justin Iurman <justin.iurman@uliege.be>
 */
#ifndef _LINUX_IOAM6_IPTUNNEL_H
#define _LINUX_IOAM6_IPTUNNEL_H

#include <uapi/linux/ioam6_iptunnel.h>

#endif /* _LINUX_IOAM6_IPTUNNEL_H */
+3 −0
Original line number Diff line number Diff line
@@ -61,4 +61,7 @@ void ioam6_fill_trace_data(struct sk_buff *skb,
int ioam6_init(void);
void ioam6_exit(void);

int ioam6_iptunnel_init(void);
void ioam6_iptunnel_exit(void);

#endif /* _NET_IOAM6_H */
+1 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ struct ioam6_trace_hdr {
#error "Please fix <asm/byteorder.h>"
#endif

#define IOAM6_TRACE_DATA_SIZE_MAX 244
	__u8	data[0];
} __attribute__((packed));

+20 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
/*
 *  IPv6 IOAM Lightweight Tunnel API
 *
 *  Author:
 *  Justin Iurman <justin.iurman@uliege.be>
 */

#ifndef _UAPI_LINUX_IOAM6_IPTUNNEL_H
#define _UAPI_LINUX_IOAM6_IPTUNNEL_H

enum {
	IOAM6_IPTUNNEL_UNSPEC,
	IOAM6_IPTUNNEL_TRACE,		/* struct ioam6_trace_hdr */
	__IOAM6_IPTUNNEL_MAX,
};

#define IOAM6_IPTUNNEL_MAX (__IOAM6_IPTUNNEL_MAX - 1)

#endif /* _UAPI_LINUX_IOAM6_IPTUNNEL_H */
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ enum lwtunnel_encap_types {
	LWTUNNEL_ENCAP_BPF,
	LWTUNNEL_ENCAP_SEG6_LOCAL,
	LWTUNNEL_ENCAP_RPL,
	LWTUNNEL_ENCAP_IOAM6,
	__LWTUNNEL_ENCAP_MAX,
};

Loading