1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _RDS_INFO_H |
3 | #define _RDS_INFO_H |
4 | |
5 | struct rds_info_lengths { |
6 | unsigned int nr; |
7 | unsigned int each; |
8 | }; |
9 | |
10 | struct rds_info_iterator; |
11 | |
12 | /* |
13 | * These functions must fill in the fields of @lens to reflect the size |
14 | * of the available info source. If the snapshot fits in @len then it |
15 | * should be copied using @iter. The caller will deduce if it was copied |
16 | * or not by comparing the lengths. |
17 | */ |
18 | typedef void (*rds_info_func)(struct socket *sock, unsigned int len, |
19 | struct rds_info_iterator *iter, |
20 | struct rds_info_lengths *lens); |
21 | |
22 | void rds_info_register_func(int optname, rds_info_func func); |
23 | void rds_info_deregister_func(int optname, rds_info_func func); |
24 | int rds_info_getsockopt(struct socket *sock, int optname, char __user *optval, |
25 | int __user *optlen); |
26 | void rds_info_copy(struct rds_info_iterator *iter, void *data, |
27 | unsigned long bytes); |
28 | void rds_info_iter_unmap(struct rds_info_iterator *iter); |
29 | |
30 | |
31 | #endif |
32 | |