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