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 */ 10struct 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 */ 20struct 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 33enum { 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 45struct smc_diag_cursor { 46 __u16 reserved; 47 __u16 wrap; 48 __u32 count; 49}; 50 51struct 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 74struct 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 82struct smc_diag_lgrinfo { 83 struct smc_diag_linkinfo lnk[1]; 84 __u8 role; 85}; 86#endif /* _UAPI_SMC_DIAG_H_ */ 87