Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
---|---|
2 | /* |
3 | * IPv6 IOAM implementation |
4 | * |
5 | * Author: |
6 | * Justin Iurman <justin.iurman@uliege.be> |
7 | */ |
8 | |
9 | #ifndef _NET_IOAM6_H |
10 | #define _NET_IOAM6_H |
11 | |
12 | #include <linux/net.h> |
13 | #include <linux/ipv6.h> |
14 | #include <linux/ioam6.h> |
15 | #include <linux/ioam6_genl.h> |
16 | #include <linux/rhashtable-types.h> |
17 | |
18 | struct ioam6_namespace { |
19 | struct rhash_head head; |
20 | struct rcu_head rcu; |
21 | |
22 | struct ioam6_schema __rcu *schema; |
23 | |
24 | __be16 id; |
25 | __be32 data; |
26 | __be64 data_wide; |
27 | }; |
28 | |
29 | struct ioam6_schema { |
30 | struct rhash_head head; |
31 | struct rcu_head rcu; |
32 | |
33 | struct ioam6_namespace __rcu *ns; |
34 | |
35 | u32 id; |
36 | int len; |
37 | __be32 hdr; |
38 | |
39 | u8 data[]; |
40 | }; |
41 | |
42 | struct ioam6_pernet_data { |
43 | struct mutex lock; |
44 | struct rhashtable namespaces; |
45 | struct rhashtable schemas; |
46 | }; |
47 | |
48 | static inline struct ioam6_pernet_data *ioam6_pernet(struct net *net) |
49 | { |
50 | #if IS_ENABLED(CONFIG_IPV6) |
51 | return net->ipv6.ioam6_data; |
52 | #else |
53 | return NULL; |
54 | #endif |
55 | } |
56 | |
57 | struct ioam6_namespace *ioam6_namespace(struct net *net, __be16 id); |
58 | void ioam6_fill_trace_data(struct sk_buff *skb, |
59 | struct ioam6_namespace *ns, |
60 | struct ioam6_trace_hdr *trace, |
61 | bool is_input); |
62 | |
63 | int ioam6_init(void); |
64 | void ioam6_exit(void); |
65 | |
66 | int ioam6_iptunnel_init(void); |
67 | void ioam6_iptunnel_exit(void); |
68 | |
69 | void ioam6_event(enum ioam6_event_type type, struct net *net, gfp_t gfp, |
70 | void *opt, unsigned int opt_len); |
71 | |
72 | #endif /* _NET_IOAM6_H */ |
73 |
Warning: This file is not a C or C++ file. It does not have highlighting.