1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef _UAPI_SMC_DIAG_H_ 3 #define _UAPI_SMC_DIAG_H_ 4 5 #include <linux/types.h> 6 #include <linux/inet_diag.h> 7 #include <rdma/ib_user_verbs.h> 8 9 /* Request structure */ 10 struct smc_diag_req { 11 __u8 diag_family; 12 __u8 pad[2]; 13 __u8 diag_ext; /* Query extended information */ 14 struct inet_diag_sockid id; 15 }; 16 17 /* Base info structure. It contains socket identity (addrs/ports/cookie) based 18 * on the internal clcsock, and more SMC-related socket data 19 */ 20 struct smc_diag_msg { 21 __u8 diag_family; 22 __u8 diag_state; 23 __u8 diag_fallback; 24 __u8 diag_shutdown; 25 struct inet_diag_sockid id; 26 27 __u32 diag_uid; 28 __u64 diag_inode; 29 }; 30 31 /* Extensions */ 32 33 enum { 34 SMC_DIAG_NONE, 35 SMC_DIAG_CONNINFO, 36 SMC_DIAG_LGRINFO, 37 SMC_DIAG_SHUTDOWN, 38 __SMC_DIAG_MAX, 39 }; 40 41 #define SMC_DIAG_MAX (__SMC_DIAG_MAX - 1) 42 43 /* SMC_DIAG_CONNINFO */ 44 45 struct smc_diag_cursor { 46 __u16 reserved; 47 __u16 wrap; 48 __u32 count; 49 }; 50 51 struct smc_diag_conninfo { 52 __u32 token; /* unique connection id */ 53 __u32 sndbuf_size; /* size of send buffer */ 54 __u32 rmbe_size; /* size of RMB element */ 55 __u32 peer_rmbe_size; /* size of peer RMB element */ 56 /* local RMB element cursors */ 57 struct smc_diag_cursor rx_prod; /* received producer cursor */ 58 struct smc_diag_cursor rx_cons; /* received consumer cursor */ 59 /* peer RMB element cursors */ 60 struct smc_diag_cursor tx_prod; /* sent producer cursor */ 61 struct smc_diag_cursor tx_cons; /* sent consumer cursor */ 62 __u8 rx_prod_flags; /* received producer flags */ 63 __u8 rx_conn_state_flags; /* recvd connection flags*/ 64 __u8 tx_prod_flags; /* sent producer flags */ 65 __u8 tx_conn_state_flags; /* sent connection flags*/ 66 /* send buffer cursors */ 67 struct smc_diag_cursor tx_prep; /* prepared to be sent cursor */ 68 struct smc_diag_cursor tx_sent; /* sent cursor */ 69 struct smc_diag_cursor tx_fin; /* confirmed sent cursor */ 70 }; 71 72 /* SMC_DIAG_LINKINFO */ 73 74 struct smc_diag_linkinfo { 75 __u8 link_id; /* link identifier */ 76 __u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */ 77 __u8 ibport; /* RDMA device port number */ 78 __u8 gid[40]; /* local GID */ 79 __u8 peer_gid[40]; /* peer GID */ 80 }; 81 82 struct smc_diag_lgrinfo { 83 struct smc_diag_linkinfo lnk[1]; 84 __u8 role; 85 }; 86 #endif /* _UAPI_SMC_DIAG_H_ */ 87