ipv6: ioam: Data plane support for Pre-allocated Trace
Implement support for processing the IOAM Pre-allocated Trace with IPv6, see [1] and [2]. Introduce a new IPv6 Hop-by-Hop TLV option, see IANA [3]. A new per-interface sysctl is introduced. The value is a boolean to accept (=1) or ignore (=0, by default) IPv6 IOAM options on ingress for an interface: - net.ipv6.conf.XXX.ioam6_enabled Two other sysctls are introduced to define IOAM IDs, represented by an integer. They are respectively per-namespace and per-interface: - net.ipv6.ioam6_id - net.ipv6.conf.XXX.ioam6_id The value of the first one represents the IOAM ID of the node itself (u32; max and default value = U32_MAX>>8, due to hop limit concatenation) while the other represents the IOAM ID of an interface (u16; max and default value = U16_MAX). Each "ioam6_id" sysctl has a "_wide" equivalent: - net.ipv6.ioam6_id_wide - net.ipv6.conf.XXX.ioam6_id_wide The value of the first one represents the wide IOAM ID of the node itself (u64; max and default value = U64_MAX>>8, due to hop limit concatenation) while the other represents the wide IOAM ID of an interface (u32; max and default value = U32_MAX). The use of short and wide equivalents is not exclusive, a deployment could choose to leverage both. For example, net.ipv6.conf.XXX.ioam6_id (short format) could be an identifier for a physical interface, whereas net.ipv6.conf.XXX.ioam6_id_wide (wide format) could be an identifier for a logical sub-interface. Documentation about new sysctls is provided at the end of this patchset. Two relativistic hash tables are used: one for IOAM namespaces, the other for IOAM schemas. A namespace can only have a single active schema and a schema can only be attached to a single namespace (1:1 relationship). [1] https://tools.ietf.org/html/draft-ietf-ippm-ioam-ipv6-options [2] https://tools.ietf.org/html/draft-ietf-ippm-ioam-data [3] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2 Signed-off-by:Justin Iurman <justin.iurman@uliege.be> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- include/linux/ioam6.h 13 additions, 0 deletionsinclude/linux/ioam6.h
- include/linux/ipv6.h 3 additions, 0 deletionsinclude/linux/ipv6.h
- include/net/ioam6.h 64 additions, 0 deletionsinclude/net/ioam6.h
- include/net/netns/ipv6.h 3 additions, 0 deletionsinclude/net/netns/ipv6.h
- include/uapi/linux/in6.h 1 addition, 0 deletionsinclude/uapi/linux/in6.h
- include/uapi/linux/ioam6.h 9 additions, 0 deletionsinclude/uapi/linux/ioam6.h
- include/uapi/linux/ipv6.h 3 additions, 0 deletionsinclude/uapi/linux/ipv6.h
- net/ipv6/Makefile 1 addition, 1 deletionnet/ipv6/Makefile
- net/ipv6/addrconf.c 37 additions, 0 deletionsnet/ipv6/addrconf.c
- net/ipv6/af_inet6.c 10 additions, 0 deletionsnet/ipv6/af_inet6.c
- net/ipv6/exthdrs.c 61 additions, 0 deletionsnet/ipv6/exthdrs.c
- net/ipv6/ioam6.c 333 additions, 0 deletionsnet/ipv6/ioam6.c
- net/ipv6/sysctl_net_ipv6.c 19 additions, 0 deletionsnet/ipv6/sysctl_net_ipv6.c
Loading
Please register or sign in to comment