18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
28c2ecf20Sopenharmony_ci#ifndef _UAPI_SMC_DIAG_H_
38c2ecf20Sopenharmony_ci#define _UAPI_SMC_DIAG_H_
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/types.h>
68c2ecf20Sopenharmony_ci#include <linux/inet_diag.h>
78c2ecf20Sopenharmony_ci#include <rdma/ib_user_verbs.h>
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci/* Request structure */
108c2ecf20Sopenharmony_cistruct smc_diag_req {
118c2ecf20Sopenharmony_ci	__u8	diag_family;
128c2ecf20Sopenharmony_ci	__u8	pad[2];
138c2ecf20Sopenharmony_ci	__u8	diag_ext;		/* Query extended information */
148c2ecf20Sopenharmony_ci	struct inet_diag_sockid	id;
158c2ecf20Sopenharmony_ci};
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/* Base info structure. It contains socket identity (addrs/ports/cookie) based
188c2ecf20Sopenharmony_ci * on the internal clcsock, and more SMC-related socket data
198c2ecf20Sopenharmony_ci */
208c2ecf20Sopenharmony_cistruct smc_diag_msg {
218c2ecf20Sopenharmony_ci	__u8		diag_family;
228c2ecf20Sopenharmony_ci	__u8		diag_state;
238c2ecf20Sopenharmony_ci	union {
248c2ecf20Sopenharmony_ci		__u8	diag_mode;
258c2ecf20Sopenharmony_ci		__u8	diag_fallback; /* the old name of the field */
268c2ecf20Sopenharmony_ci	};
278c2ecf20Sopenharmony_ci	__u8		diag_shutdown;
288c2ecf20Sopenharmony_ci	struct inet_diag_sockid id;
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	__u32		diag_uid;
318c2ecf20Sopenharmony_ci	__aligned_u64	diag_inode;
328c2ecf20Sopenharmony_ci};
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci/* Mode of a connection */
358c2ecf20Sopenharmony_cienum {
368c2ecf20Sopenharmony_ci	SMC_DIAG_MODE_SMCR,
378c2ecf20Sopenharmony_ci	SMC_DIAG_MODE_FALLBACK_TCP,
388c2ecf20Sopenharmony_ci	SMC_DIAG_MODE_SMCD,
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci/* Extensions */
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cienum {
448c2ecf20Sopenharmony_ci	SMC_DIAG_NONE,
458c2ecf20Sopenharmony_ci	SMC_DIAG_CONNINFO,
468c2ecf20Sopenharmony_ci	SMC_DIAG_LGRINFO,
478c2ecf20Sopenharmony_ci	SMC_DIAG_SHUTDOWN,
488c2ecf20Sopenharmony_ci	SMC_DIAG_DMBINFO,
498c2ecf20Sopenharmony_ci	SMC_DIAG_FALLBACK,
508c2ecf20Sopenharmony_ci	__SMC_DIAG_MAX,
518c2ecf20Sopenharmony_ci};
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#define SMC_DIAG_MAX (__SMC_DIAG_MAX - 1)
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci/* SMC_DIAG_CONNINFO */
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_cistruct smc_diag_cursor {
588c2ecf20Sopenharmony_ci	__u16	reserved;
598c2ecf20Sopenharmony_ci	__u16	wrap;
608c2ecf20Sopenharmony_ci	__u32	count;
618c2ecf20Sopenharmony_ci};
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_cistruct smc_diag_conninfo {
648c2ecf20Sopenharmony_ci	__u32			token;		/* unique connection id */
658c2ecf20Sopenharmony_ci	__u32			sndbuf_size;	/* size of send buffer */
668c2ecf20Sopenharmony_ci	__u32			rmbe_size;	/* size of RMB element */
678c2ecf20Sopenharmony_ci	__u32			peer_rmbe_size;	/* size of peer RMB element */
688c2ecf20Sopenharmony_ci	/* local RMB element cursors */
698c2ecf20Sopenharmony_ci	struct smc_diag_cursor	rx_prod;	/* received producer cursor */
708c2ecf20Sopenharmony_ci	struct smc_diag_cursor	rx_cons;	/* received consumer cursor */
718c2ecf20Sopenharmony_ci	/* peer RMB element cursors */
728c2ecf20Sopenharmony_ci	struct smc_diag_cursor	tx_prod;	/* sent producer cursor */
738c2ecf20Sopenharmony_ci	struct smc_diag_cursor	tx_cons;	/* sent consumer cursor */
748c2ecf20Sopenharmony_ci	__u8			rx_prod_flags;	/* received producer flags */
758c2ecf20Sopenharmony_ci	__u8			rx_conn_state_flags; /* recvd connection flags*/
768c2ecf20Sopenharmony_ci	__u8			tx_prod_flags;	/* sent producer flags */
778c2ecf20Sopenharmony_ci	__u8			tx_conn_state_flags; /* sent connection flags*/
788c2ecf20Sopenharmony_ci	/* send buffer cursors */
798c2ecf20Sopenharmony_ci	struct smc_diag_cursor	tx_prep;	/* prepared to be sent cursor */
808c2ecf20Sopenharmony_ci	struct smc_diag_cursor	tx_sent;	/* sent cursor */
818c2ecf20Sopenharmony_ci	struct smc_diag_cursor	tx_fin;		/* confirmed sent cursor */
828c2ecf20Sopenharmony_ci};
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci/* SMC_DIAG_LINKINFO */
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_cistruct smc_diag_linkinfo {
878c2ecf20Sopenharmony_ci	__u8 link_id;			/* link identifier */
888c2ecf20Sopenharmony_ci	__u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
898c2ecf20Sopenharmony_ci	__u8 ibport;			/* RDMA device port number */
908c2ecf20Sopenharmony_ci	__u8 gid[40];			/* local GID */
918c2ecf20Sopenharmony_ci	__u8 peer_gid[40];		/* peer GID */
928c2ecf20Sopenharmony_ci};
938c2ecf20Sopenharmony_ci
948c2ecf20Sopenharmony_cistruct smc_diag_lgrinfo {
958c2ecf20Sopenharmony_ci	struct smc_diag_linkinfo	lnk[1];
968c2ecf20Sopenharmony_ci	__u8				role;
978c2ecf20Sopenharmony_ci};
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_cistruct smc_diag_fallback {
1008c2ecf20Sopenharmony_ci	__u32 reason;
1018c2ecf20Sopenharmony_ci	__u32 peer_diagnosis;
1028c2ecf20Sopenharmony_ci};
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_cistruct smcd_diag_dmbinfo {		/* SMC-D Socket internals */
1058c2ecf20Sopenharmony_ci	__u32		linkid;		/* Link identifier */
1068c2ecf20Sopenharmony_ci	__aligned_u64	peer_gid;	/* Peer GID */
1078c2ecf20Sopenharmony_ci	__aligned_u64	my_gid;		/* My GID */
1088c2ecf20Sopenharmony_ci	__aligned_u64	token;		/* Token of DMB */
1098c2ecf20Sopenharmony_ci	__aligned_u64	peer_token;	/* Token of remote DMBE */
1108c2ecf20Sopenharmony_ci};
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ci#endif /* _UAPI_SMC_DIAG_H_ */
113