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