| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef __NET_PSAMPLE_H | |
| #define __NET_PSAMPLE_H | |
| #include <uapi/linux/psample.h> | |
| #include <linux/list.h> | |
| struct psample_group { | |
| struct list_head list; | |
| struct net *net; | |
| u32 group_num; | |
| u32 refcount; | |
| u32 seq; | |
| struct rcu_head rcu; | |
| }; | |
| struct psample_metadata { | |
| u32 trunc_size; | |
| int in_ifindex; | |
| int out_ifindex; | |
| u16 out_tc; | |
| u64 out_tc_occ; /* bytes */ | |
| u64 latency; /* nanoseconds */ | |
| u8 out_tc_valid:1, | |
| out_tc_occ_valid:1, | |
| latency_valid:1, | |
| rate_as_probability:1, | |
| unused:4; | |
| const u8 *user_cookie; | |
| u32 user_cookie_len; | |
| }; | |
| struct psample_group *psample_group_get(struct net *net, u32 group_num); | |
| void psample_group_take(struct psample_group *group); | |
| void psample_group_put(struct psample_group *group); | |
| struct sk_buff; | |
| #if IS_ENABLED(CONFIG_PSAMPLE) | |
| void psample_sample_packet(struct psample_group *group, | |
| const struct sk_buff *skb, u32 sample_rate, | |
| const struct psample_metadata *md); | |
| #else | |
| static inline void psample_sample_packet(struct psample_group *group, | |
| const struct sk_buff *skb, | |
| u32 sample_rate, | |
| const struct psample_metadata *md) | |
| { | |
| } | |
| #endif | |
| #endif /* __NET_PSAMPLE_H */ |