162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci#ifndef _UAPI_SMC_DIAG_H_ 362306a36Sopenharmony_ci#define _UAPI_SMC_DIAG_H_ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/types.h> 662306a36Sopenharmony_ci#include <linux/inet_diag.h> 762306a36Sopenharmony_ci#include <rdma/ib_user_verbs.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* Request structure */ 1062306a36Sopenharmony_cistruct smc_diag_req { 1162306a36Sopenharmony_ci __u8 diag_family; 1262306a36Sopenharmony_ci __u8 pad[2]; 1362306a36Sopenharmony_ci __u8 diag_ext; /* Query extended information */ 1462306a36Sopenharmony_ci struct inet_diag_sockid id; 1562306a36Sopenharmony_ci}; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci/* Base info structure. It contains socket identity (addrs/ports/cookie) based 1862306a36Sopenharmony_ci * on the internal clcsock, and more SMC-related socket data 1962306a36Sopenharmony_ci */ 2062306a36Sopenharmony_cistruct smc_diag_msg { 2162306a36Sopenharmony_ci __u8 diag_family; 2262306a36Sopenharmony_ci __u8 diag_state; 2362306a36Sopenharmony_ci union { 2462306a36Sopenharmony_ci __u8 diag_mode; 2562306a36Sopenharmony_ci __u8 diag_fallback; /* the old name of the field */ 2662306a36Sopenharmony_ci }; 2762306a36Sopenharmony_ci __u8 diag_shutdown; 2862306a36Sopenharmony_ci struct inet_diag_sockid id; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci __u32 diag_uid; 3162306a36Sopenharmony_ci __aligned_u64 diag_inode; 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* Mode of a connection */ 3562306a36Sopenharmony_cienum { 3662306a36Sopenharmony_ci SMC_DIAG_MODE_SMCR, 3762306a36Sopenharmony_ci SMC_DIAG_MODE_FALLBACK_TCP, 3862306a36Sopenharmony_ci SMC_DIAG_MODE_SMCD, 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* Extensions */ 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cienum { 4462306a36Sopenharmony_ci SMC_DIAG_NONE, 4562306a36Sopenharmony_ci SMC_DIAG_CONNINFO, 4662306a36Sopenharmony_ci SMC_DIAG_LGRINFO, 4762306a36Sopenharmony_ci SMC_DIAG_SHUTDOWN, 4862306a36Sopenharmony_ci SMC_DIAG_DMBINFO, 4962306a36Sopenharmony_ci SMC_DIAG_FALLBACK, 5062306a36Sopenharmony_ci __SMC_DIAG_MAX, 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define SMC_DIAG_MAX (__SMC_DIAG_MAX - 1) 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/* SMC_DIAG_CONNINFO */ 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistruct smc_diag_cursor { 5862306a36Sopenharmony_ci __u16 reserved; 5962306a36Sopenharmony_ci __u16 wrap; 6062306a36Sopenharmony_ci __u32 count; 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistruct smc_diag_conninfo { 6462306a36Sopenharmony_ci __u32 token; /* unique connection id */ 6562306a36Sopenharmony_ci __u32 sndbuf_size; /* size of send buffer */ 6662306a36Sopenharmony_ci __u32 rmbe_size; /* size of RMB element */ 6762306a36Sopenharmony_ci __u32 peer_rmbe_size; /* size of peer RMB element */ 6862306a36Sopenharmony_ci /* local RMB element cursors */ 6962306a36Sopenharmony_ci struct smc_diag_cursor rx_prod; /* received producer cursor */ 7062306a36Sopenharmony_ci struct smc_diag_cursor rx_cons; /* received consumer cursor */ 7162306a36Sopenharmony_ci /* peer RMB element cursors */ 7262306a36Sopenharmony_ci struct smc_diag_cursor tx_prod; /* sent producer cursor */ 7362306a36Sopenharmony_ci struct smc_diag_cursor tx_cons; /* sent consumer cursor */ 7462306a36Sopenharmony_ci __u8 rx_prod_flags; /* received producer flags */ 7562306a36Sopenharmony_ci __u8 rx_conn_state_flags; /* recvd connection flags*/ 7662306a36Sopenharmony_ci __u8 tx_prod_flags; /* sent producer flags */ 7762306a36Sopenharmony_ci __u8 tx_conn_state_flags; /* sent connection flags*/ 7862306a36Sopenharmony_ci /* send buffer cursors */ 7962306a36Sopenharmony_ci struct smc_diag_cursor tx_prep; /* prepared to be sent cursor */ 8062306a36Sopenharmony_ci struct smc_diag_cursor tx_sent; /* sent cursor */ 8162306a36Sopenharmony_ci struct smc_diag_cursor tx_fin; /* confirmed sent cursor */ 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* SMC_DIAG_LINKINFO */ 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistruct smc_diag_linkinfo { 8762306a36Sopenharmony_ci __u8 link_id; /* link identifier */ 8862306a36Sopenharmony_ci __u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */ 8962306a36Sopenharmony_ci __u8 ibport; /* RDMA device port number */ 9062306a36Sopenharmony_ci __u8 gid[40]; /* local GID */ 9162306a36Sopenharmony_ci __u8 peer_gid[40]; /* peer GID */ 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_cistruct smc_diag_lgrinfo { 9562306a36Sopenharmony_ci struct smc_diag_linkinfo lnk[1]; 9662306a36Sopenharmony_ci __u8 role; 9762306a36Sopenharmony_ci}; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct smc_diag_fallback { 10062306a36Sopenharmony_ci __u32 reason; 10162306a36Sopenharmony_ci __u32 peer_diagnosis; 10262306a36Sopenharmony_ci}; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cistruct smcd_diag_dmbinfo { /* SMC-D Socket internals */ 10562306a36Sopenharmony_ci __u32 linkid; /* Link identifier */ 10662306a36Sopenharmony_ci __aligned_u64 peer_gid; /* Peer GID */ 10762306a36Sopenharmony_ci __aligned_u64 my_gid; /* My GID */ 10862306a36Sopenharmony_ci __aligned_u64 token; /* Token of DMB */ 10962306a36Sopenharmony_ci __aligned_u64 peer_token; /* Token of remote DMBE */ 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci#endif /* _UAPI_SMC_DIAG_H_ */ 113