Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
6ae0a628 YG |
2 | #ifndef __NET_PSAMPLE_H |
3 | #define __NET_PSAMPLE_H | |
4 | ||
5 | #include <uapi/linux/psample.h> | |
6ae0a628 YG |
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; | |
dbf47a2a | 14 | struct rcu_head rcu; |
6ae0a628 YG |
15 | }; |
16 | ||
a03e99d3 IS |
17 | struct psample_metadata { |
18 | u32 trunc_size; | |
19 | int in_ifindex; | |
20 | int out_ifindex; | |
07e1a580 IS |
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; | |
a03e99d3 IS |
28 | }; |
29 | ||
6ae0a628 | 30 | struct psample_group *psample_group_get(struct net *net, u32 group_num); |
4a5da47d | 31 | void psample_group_take(struct psample_group *group); |
6ae0a628 YG |
32 | void psample_group_put(struct psample_group *group); |
33 | ||
beb7f2de RD |
34 | struct sk_buff; |
35 | ||
6ae0a628 YG |
36 | #if IS_ENABLED(CONFIG_PSAMPLE) |
37 | ||
38 | void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, | |
a03e99d3 | 39 | u32 sample_rate, const struct psample_metadata *md); |
6ae0a628 YG |
40 | |
41 | #else | |
42 | ||
43 | static inline void psample_sample_packet(struct psample_group *group, | |
a03e99d3 IS |
44 | struct sk_buff *skb, u32 sample_rate, |
45 | const struct psample_metadata *md) | |
6ae0a628 YG |
46 | { |
47 | } | |
48 | ||
49 | #endif | |
50 | ||
51 | #endif /* __NET_PSAMPLE_H */ |