-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Justin Iurman
authored and
David S. Miller
committed
Jul 21, 2021
1 parent
db67f21
commit 9ee11f0
Showing
13 changed files
with
557 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
/* SPDX-License-Identifier: GPL-2.0+ */ | ||
/* | ||
* IPv6 IOAM | ||
* | ||
* Author: | ||
* Justin Iurman <justin.iurman@uliege.be> | ||
*/ | ||
#ifndef _LINUX_IOAM6_H | ||
#define _LINUX_IOAM6_H | ||
|
||
#include <uapi/linux/ioam6.h> | ||
|
||
#endif /* _LINUX_IOAM6_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/* SPDX-License-Identifier: GPL-2.0+ */ | ||
/* | ||
* IPv6 IOAM implementation | ||
* | ||
* Author: | ||
* Justin Iurman <justin.iurman@uliege.be> | ||
*/ | ||
|
||
#ifndef _NET_IOAM6_H | ||
#define _NET_IOAM6_H | ||
|
||
#include <linux/net.h> | ||
#include <linux/ipv6.h> | ||
#include <linux/ioam6.h> | ||
#include <linux/rhashtable-types.h> | ||
|
||
struct ioam6_namespace { | ||
struct rhash_head head; | ||
struct rcu_head rcu; | ||
|
||
struct ioam6_schema __rcu *schema; | ||
|
||
__be16 id; | ||
__be32 data; | ||
__be64 data_wide; | ||
}; | ||
|
||
struct ioam6_schema { | ||
struct rhash_head head; | ||
struct rcu_head rcu; | ||
|
||
struct ioam6_namespace __rcu *ns; | ||
|
||
u32 id; | ||
int len; | ||
__be32 hdr; | ||
|
||
u8 data[0]; | ||
}; | ||
|
||
struct ioam6_pernet_data { | ||
struct mutex lock; | ||
struct rhashtable namespaces; | ||
struct rhashtable schemas; | ||
}; | ||
|
||
static inline struct ioam6_pernet_data *ioam6_pernet(struct net *net) | ||
{ | ||
#if IS_ENABLED(CONFIG_IPV6) | ||
return net->ipv6.ioam6_data; | ||
#else | ||
return NULL; | ||
#endif | ||
} | ||
|
||
struct ioam6_namespace *ioam6_namespace(struct net *net, __be16 id); | ||
void ioam6_fill_trace_data(struct sk_buff *skb, | ||
struct ioam6_namespace *ns, | ||
struct ioam6_trace_hdr *trace); | ||
|
||
int ioam6_init(void); | ||
void ioam6_exit(void); | ||
|
||
#endif /* _NET_IOAM6_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.