]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
Import ioam6 uapi headers
authorDavid Ahern <dsahern@kernel.org>
Mon, 2 Aug 2021 17:32:26 +0000 (11:32 -0600)
committerDavid Ahern <dsahern@kernel.org>
Mon, 2 Aug 2021 17:32:26 +0000 (11:32 -0600)
Import ioam6 uapi headers from kernel headers at last sync commit.

Signed-off-by: David Ahern <dsahern@kernel.org>
include/uapi/linux/ioam6.h [new file with mode: 0644]
include/uapi/linux/ioam6_genl.h [new file with mode: 0644]
include/uapi/linux/ioam6_iptunnel.h [new file with mode: 0644]

diff --git a/include/uapi/linux/ioam6.h b/include/uapi/linux/ioam6.h
new file mode 100644 (file)
index 0000000..d1653a3
--- /dev/null
@@ -0,0 +1,133 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ *  IPv6 IOAM implementation
+ *
+ *  Author:
+ *  Justin Iurman <justin.iurman@uliege.be>
+ */
+
+#ifndef _LINUX_IOAM6_H
+#define _LINUX_IOAM6_H
+
+#include <asm/byteorder.h>
+#include <linux/types.h>
+
+#define IOAM6_U16_UNAVAILABLE U16_MAX
+#define IOAM6_U32_UNAVAILABLE U32_MAX
+#define IOAM6_U64_UNAVAILABLE U64_MAX
+
+#define IOAM6_DEFAULT_ID (IOAM6_U32_UNAVAILABLE >> 8)
+#define IOAM6_DEFAULT_ID_WIDE (IOAM6_U64_UNAVAILABLE >> 8)
+#define IOAM6_DEFAULT_IF_ID IOAM6_U16_UNAVAILABLE
+#define IOAM6_DEFAULT_IF_ID_WIDE IOAM6_U32_UNAVAILABLE
+
+/*
+ * IPv6 IOAM Option Header
+ */
+struct ioam6_hdr {
+       __u8 opt_type;
+       __u8 opt_len;
+       __u8 :8;                                /* reserved */
+#define IOAM6_TYPE_PREALLOC 0
+       __u8 type;
+} __attribute__((packed));
+
+/*
+ * IOAM Trace Header
+ */
+struct ioam6_trace_hdr {
+       __be16  namespace_id;
+
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+
+       __u8    :1,                             /* unused */
+               :1,                             /* unused */
+               overflow:1,
+               nodelen:5;
+
+       __u8    remlen:7,
+               :1;                             /* unused */
+
+       union {
+               __be32 type_be32;
+
+               struct {
+                       __u32   bit7:1,
+                               bit6:1,
+                               bit5:1,
+                               bit4:1,
+                               bit3:1,
+                               bit2:1,
+                               bit1:1,
+                               bit0:1,
+                               bit15:1,        /* unused */
+                               bit14:1,        /* unused */
+                               bit13:1,        /* unused */
+                               bit12:1,        /* unused */
+                               bit11:1,
+                               bit10:1,
+                               bit9:1,
+                               bit8:1,
+                               bit23:1,        /* reserved */
+                               bit22:1,
+                               bit21:1,        /* unused */
+                               bit20:1,        /* unused */
+                               bit19:1,        /* unused */
+                               bit18:1,        /* unused */
+                               bit17:1,        /* unused */
+                               bit16:1,        /* unused */
+                               :8;             /* reserved */
+               } type;
+       };
+
+#elif defined(__BIG_ENDIAN_BITFIELD)
+
+       __u8    nodelen:5,
+               overflow:1,
+               :1,                             /* unused */
+               :1;                             /* unused */
+
+       __u8    :1,                             /* unused */
+               remlen:7;
+
+       union {
+               __be32 type_be32;
+
+               struct {
+                       __u32   bit0:1,
+                               bit1:1,
+                               bit2:1,
+                               bit3:1,
+                               bit4:1,
+                               bit5:1,
+                               bit6:1,
+                               bit7:1,
+                               bit8:1,
+                               bit9:1,
+                               bit10:1,
+                               bit11:1,
+                               bit12:1,        /* unused */
+                               bit13:1,        /* unused */
+                               bit14:1,        /* unused */
+                               bit15:1,        /* unused */
+                               bit16:1,        /* unused */
+                               bit17:1,        /* unused */
+                               bit18:1,        /* unused */
+                               bit19:1,        /* unused */
+                               bit20:1,        /* unused */
+                               bit21:1,        /* unused */
+                               bit22:1,
+                               bit23:1,        /* reserved */
+                               :8;             /* reserved */
+               } type;
+       };
+
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+
+#define IOAM6_TRACE_DATA_SIZE_MAX 244
+       __u8    data[0];
+} __attribute__((packed));
+
+#endif /* _LINUX_IOAM6_H */
diff --git a/include/uapi/linux/ioam6_genl.h b/include/uapi/linux/ioam6_genl.h
new file mode 100644 (file)
index 0000000..6043d9f
--- /dev/null
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ *  IPv6 IOAM Generic Netlink API
+ *
+ *  Author:
+ *  Justin Iurman <justin.iurman@uliege.be>
+ */
+
+#ifndef _LINUX_IOAM6_GENL_H
+#define _LINUX_IOAM6_GENL_H
+
+#define IOAM6_GENL_NAME "IOAM6"
+#define IOAM6_GENL_VERSION 0x1
+
+enum {
+       IOAM6_ATTR_UNSPEC,
+
+       IOAM6_ATTR_NS_ID,       /* u16 */
+       IOAM6_ATTR_NS_DATA,     /* u32 */
+       IOAM6_ATTR_NS_DATA_WIDE,/* u64 */
+
+#define IOAM6_MAX_SCHEMA_DATA_LEN (255 * 4)
+       IOAM6_ATTR_SC_ID,       /* u32 */
+       IOAM6_ATTR_SC_DATA,     /* Binary */
+       IOAM6_ATTR_SC_NONE,     /* Flag */
+
+       IOAM6_ATTR_PAD,
+
+       __IOAM6_ATTR_MAX,
+};
+
+#define IOAM6_ATTR_MAX (__IOAM6_ATTR_MAX - 1)
+
+enum {
+       IOAM6_CMD_UNSPEC,
+
+       IOAM6_CMD_ADD_NAMESPACE,
+       IOAM6_CMD_DEL_NAMESPACE,
+       IOAM6_CMD_DUMP_NAMESPACES,
+
+       IOAM6_CMD_ADD_SCHEMA,
+       IOAM6_CMD_DEL_SCHEMA,
+       IOAM6_CMD_DUMP_SCHEMAS,
+
+       IOAM6_CMD_NS_SET_SCHEMA,
+
+       __IOAM6_CMD_MAX,
+};
+
+#define IOAM6_CMD_MAX (__IOAM6_CMD_MAX - 1)
+
+#endif /* _LINUX_IOAM6_GENL_H */
diff --git a/include/uapi/linux/ioam6_iptunnel.h b/include/uapi/linux/ioam6_iptunnel.h
new file mode 100644 (file)
index 0000000..fdf52e6
--- /dev/null
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ *  IPv6 IOAM Lightweight Tunnel API
+ *
+ *  Author:
+ *  Justin Iurman <justin.iurman@uliege.be>
+ */
+
+#ifndef _LINUX_IOAM6_IPTUNNEL_H
+#define _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 /* _LINUX_IOAM6_IPTUNNEL_H */