1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __NET_PSAMPLE_H |
3 | #define __NET_PSAMPLE_H |
4 | |
5 | #include <uapi/linux/psample.h> |
6 | #include <linux/list.h> |
7 | |
8 | struct psample_group { |
9 | struct list_head list; |
10 | struct net *net; |
11 | u32 group_num; |
12 | u32 refcount; |
13 | u32 seq; |
14 | struct rcu_head rcu; |
15 | }; |
16 | |
17 | struct psample_metadata { |
18 | u32 trunc_size; |
19 | int in_ifindex; |
20 | int out_ifindex; |
21 | u16 out_tc; |
22 | u64 out_tc_occ; /* bytes */ |
23 | u64 latency; /* nanoseconds */ |
24 | u8 out_tc_valid:1, |
25 | out_tc_occ_valid:1, |
26 | latency_valid:1, |
27 | unused:5; |
28 | }; |
29 | |
30 | struct psample_group *psample_group_get(struct net *net, u32 group_num); |
31 | void psample_group_take(struct psample_group *group); |
32 | void psample_group_put(struct psample_group *group); |
33 | |
34 | struct sk_buff; |
35 | |
36 | #if IS_ENABLED(CONFIG_PSAMPLE) |
37 | |
38 | void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, |
39 | u32 sample_rate, const struct psample_metadata *md); |
40 | |
41 | #else |
42 | |
43 | static inline void psample_sample_packet(struct psample_group *group, |
44 | struct sk_buff *skb, u32 sample_rate, |
45 | const struct psample_metadata *md) |
46 | { |
47 | } |
48 | |
49 | #endif |
50 | |
51 | #endif /* __NET_PSAMPLE_H */ |
52 | |