16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2f16a7dd5SUrsula Braun #ifndef _UAPI_SMC_DIAG_H_ 3f16a7dd5SUrsula Braun #define _UAPI_SMC_DIAG_H_ 4f16a7dd5SUrsula Braun 5f16a7dd5SUrsula Braun #include <linux/types.h> 6f16a7dd5SUrsula Braun #include <linux/inet_diag.h> 7ea6819e1SNicolas Dichtel #include <rdma/ib_user_verbs.h> 8f16a7dd5SUrsula Braun 9f16a7dd5SUrsula Braun /* Request structure */ 10f16a7dd5SUrsula Braun struct smc_diag_req { 11f16a7dd5SUrsula Braun __u8 diag_family; 12f16a7dd5SUrsula Braun __u8 pad[2]; 13f16a7dd5SUrsula Braun __u8 diag_ext; /* Query extended information */ 14f16a7dd5SUrsula Braun struct inet_diag_sockid id; 15f16a7dd5SUrsula Braun }; 16f16a7dd5SUrsula Braun 17f16a7dd5SUrsula Braun /* Base info structure. It contains socket identity (addrs/ports/cookie) based 18f16a7dd5SUrsula Braun * on the internal clcsock, and more SMC-related socket data 19f16a7dd5SUrsula Braun */ 20f16a7dd5SUrsula Braun struct smc_diag_msg { 21f16a7dd5SUrsula Braun __u8 diag_family; 22f16a7dd5SUrsula Braun __u8 diag_state; 23d4f0006aSEugene Syromiatnikov union { 24c601171dSKarsten Graul __u8 diag_mode; 25d4f0006aSEugene Syromiatnikov __u8 diag_fallback; /* the old name of the field */ 26d4f0006aSEugene Syromiatnikov }; 27f16a7dd5SUrsula Braun __u8 diag_shutdown; 28f16a7dd5SUrsula Braun struct inet_diag_sockid id; 29f16a7dd5SUrsula Braun 30f16a7dd5SUrsula Braun __u32 diag_uid; 31a21048c8SEugene Syromiatnikov __aligned_u64 diag_inode; 32f16a7dd5SUrsula Braun }; 33f16a7dd5SUrsula Braun 34c601171dSKarsten Graul /* Mode of a connection */ 35c601171dSKarsten Graul enum { 36c601171dSKarsten Graul SMC_DIAG_MODE_SMCR, 37c601171dSKarsten Graul SMC_DIAG_MODE_FALLBACK_TCP, 38c601171dSKarsten Graul SMC_DIAG_MODE_SMCD, 39c601171dSKarsten Graul }; 40c601171dSKarsten Graul 41f16a7dd5SUrsula Braun /* Extensions */ 42f16a7dd5SUrsula Braun 43f16a7dd5SUrsula Braun enum { 44f16a7dd5SUrsula Braun SMC_DIAG_NONE, 45f16a7dd5SUrsula Braun SMC_DIAG_CONNINFO, 46f16a7dd5SUrsula Braun SMC_DIAG_LGRINFO, 47f16a7dd5SUrsula Braun SMC_DIAG_SHUTDOWN, 484b1b7d3bSHans Wippel SMC_DIAG_DMBINFO, 49603cc149SKarsten Graul SMC_DIAG_FALLBACK, 50f16a7dd5SUrsula Braun __SMC_DIAG_MAX, 51f16a7dd5SUrsula Braun }; 52f16a7dd5SUrsula Braun 53f16a7dd5SUrsula Braun #define SMC_DIAG_MAX (__SMC_DIAG_MAX - 1) 54f16a7dd5SUrsula Braun 55f16a7dd5SUrsula Braun /* SMC_DIAG_CONNINFO */ 56f16a7dd5SUrsula Braun 57f16a7dd5SUrsula Braun struct smc_diag_cursor { 58f16a7dd5SUrsula Braun __u16 reserved; 59f16a7dd5SUrsula Braun __u16 wrap; 60f16a7dd5SUrsula Braun __u32 count; 61f16a7dd5SUrsula Braun }; 62f16a7dd5SUrsula Braun 63f16a7dd5SUrsula Braun struct smc_diag_conninfo { 64f16a7dd5SUrsula Braun __u32 token; /* unique connection id */ 65f16a7dd5SUrsula Braun __u32 sndbuf_size; /* size of send buffer */ 66f16a7dd5SUrsula Braun __u32 rmbe_size; /* size of RMB element */ 67f16a7dd5SUrsula Braun __u32 peer_rmbe_size; /* size of peer RMB element */ 68f16a7dd5SUrsula Braun /* local RMB element cursors */ 69f16a7dd5SUrsula Braun struct smc_diag_cursor rx_prod; /* received producer cursor */ 70f16a7dd5SUrsula Braun struct smc_diag_cursor rx_cons; /* received consumer cursor */ 71f16a7dd5SUrsula Braun /* peer RMB element cursors */ 72f16a7dd5SUrsula Braun struct smc_diag_cursor tx_prod; /* sent producer cursor */ 73f16a7dd5SUrsula Braun struct smc_diag_cursor tx_cons; /* sent consumer cursor */ 74f16a7dd5SUrsula Braun __u8 rx_prod_flags; /* received producer flags */ 75f16a7dd5SUrsula Braun __u8 rx_conn_state_flags; /* recvd connection flags*/ 76f16a7dd5SUrsula Braun __u8 tx_prod_flags; /* sent producer flags */ 77f16a7dd5SUrsula Braun __u8 tx_conn_state_flags; /* sent connection flags*/ 78f16a7dd5SUrsula Braun /* send buffer cursors */ 79f16a7dd5SUrsula Braun struct smc_diag_cursor tx_prep; /* prepared to be sent cursor */ 80f16a7dd5SUrsula Braun struct smc_diag_cursor tx_sent; /* sent cursor */ 81f16a7dd5SUrsula Braun struct smc_diag_cursor tx_fin; /* confirmed sent cursor */ 82f16a7dd5SUrsula Braun }; 83f16a7dd5SUrsula Braun 84f16a7dd5SUrsula Braun /* SMC_DIAG_LINKINFO */ 85f16a7dd5SUrsula Braun 86f16a7dd5SUrsula Braun struct smc_diag_linkinfo { 87f16a7dd5SUrsula Braun __u8 link_id; /* link identifier */ 88f16a7dd5SUrsula Braun __u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */ 89f16a7dd5SUrsula Braun __u8 ibport; /* RDMA device port number */ 90f16a7dd5SUrsula Braun __u8 gid[40]; /* local GID */ 91f16a7dd5SUrsula Braun __u8 peer_gid[40]; /* peer GID */ 92f16a7dd5SUrsula Braun }; 93f16a7dd5SUrsula Braun 94f16a7dd5SUrsula Braun struct smc_diag_lgrinfo { 95f16a7dd5SUrsula Braun struct smc_diag_linkinfo lnk[1]; 96f16a7dd5SUrsula Braun __u8 role; 97f16a7dd5SUrsula Braun }; 984b1b7d3bSHans Wippel 99603cc149SKarsten Graul struct smc_diag_fallback { 100603cc149SKarsten Graul __u32 reason; 101603cc149SKarsten Graul __u32 peer_diagnosis; 102603cc149SKarsten Graul }; 103603cc149SKarsten Graul 1044b1b7d3bSHans Wippel struct smcd_diag_dmbinfo { /* SMC-D Socket internals */ 1054b1b7d3bSHans Wippel __u32 linkid; /* Link identifier */ 106a21048c8SEugene Syromiatnikov __aligned_u64 peer_gid; /* Peer GID */ 107a21048c8SEugene Syromiatnikov __aligned_u64 my_gid; /* My GID */ 108a21048c8SEugene Syromiatnikov __aligned_u64 token; /* Token of DMB */ 109a21048c8SEugene Syromiatnikov __aligned_u64 peer_token; /* Token of remote DMBE */ 110*01fd1617SWen Gu __aligned_u64 peer_gid_ext; /* Peer GID (extended part) */ 111*01fd1617SWen Gu __aligned_u64 my_gid_ext; /* My GID (extended part) */ 1124b1b7d3bSHans Wippel }; 1134b1b7d3bSHans Wippel 114f16a7dd5SUrsula Braun #endif /* _UAPI_SMC_DIAG_H_ */ 115