• Justin Iurman's avatar
    ipv6: ioam: Data plane support for Pre-allocated Trace · 9ee11f0f
    Justin Iurman authored
    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-2Signed-off-by: default avatarJustin Iurman <justin.iurman@uliege.be>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9ee11f0f
ioam6.h 1.11 KB