Home | History | Annotate | Download | only in rdma
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 #ifndef _UAPI_RDMA_NETLINK_H
      3 #define _UAPI_RDMA_NETLINK_H
      4 
      5 #include <linux/types.h>
      6 
      7 enum {
      8 	RDMA_NL_RDMA_CM = 1,
      9 	RDMA_NL_IWCM,
     10 	RDMA_NL_RSVD,
     11 	RDMA_NL_LS,	/* RDMA Local Services */
     12 	RDMA_NL_NLDEV,	/* RDMA device interface */
     13 	RDMA_NL_NUM_CLIENTS
     14 };
     15 
     16 enum {
     17 	RDMA_NL_GROUP_CM = 1,
     18 	RDMA_NL_GROUP_IWPM,
     19 	RDMA_NL_GROUP_LS,
     20 	RDMA_NL_NUM_GROUPS
     21 };
     22 
     23 #define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
     24 #define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
     25 #define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
     26 
     27 enum {
     28 	RDMA_NL_RDMA_CM_ID_STATS = 0,
     29 	RDMA_NL_RDMA_CM_NUM_OPS
     30 };
     31 
     32 enum {
     33 	RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1,
     34 	RDMA_NL_RDMA_CM_ATTR_DST_ADDR,
     35 	RDMA_NL_RDMA_CM_NUM_ATTR,
     36 };
     37 
     38 /* iwarp port mapper op-codes */
     39 enum {
     40 	RDMA_NL_IWPM_REG_PID = 0,
     41 	RDMA_NL_IWPM_ADD_MAPPING,
     42 	RDMA_NL_IWPM_QUERY_MAPPING,
     43 	RDMA_NL_IWPM_REMOVE_MAPPING,
     44 	RDMA_NL_IWPM_REMOTE_INFO,
     45 	RDMA_NL_IWPM_HANDLE_ERR,
     46 	RDMA_NL_IWPM_MAPINFO,
     47 	RDMA_NL_IWPM_MAPINFO_NUM,
     48 	RDMA_NL_IWPM_NUM_OPS
     49 };
     50 
     51 struct rdma_cm_id_stats {
     52 	__u32	qp_num;
     53 	__u32	bound_dev_if;
     54 	__u32	port_space;
     55 	__s32	pid;
     56 	__u8	cm_state;
     57 	__u8	node_type;
     58 	__u8	port_num;
     59 	__u8	qp_type;
     60 };
     61 
     62 enum {
     63 	IWPM_NLA_REG_PID_UNSPEC = 0,
     64 	IWPM_NLA_REG_PID_SEQ,
     65 	IWPM_NLA_REG_IF_NAME,
     66 	IWPM_NLA_REG_IBDEV_NAME,
     67 	IWPM_NLA_REG_ULIB_NAME,
     68 	IWPM_NLA_REG_PID_MAX
     69 };
     70 
     71 enum {
     72 	IWPM_NLA_RREG_PID_UNSPEC = 0,
     73 	IWPM_NLA_RREG_PID_SEQ,
     74 	IWPM_NLA_RREG_IBDEV_NAME,
     75 	IWPM_NLA_RREG_ULIB_NAME,
     76 	IWPM_NLA_RREG_ULIB_VER,
     77 	IWPM_NLA_RREG_PID_ERR,
     78 	IWPM_NLA_RREG_PID_MAX
     79 
     80 };
     81 
     82 enum {
     83 	IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0,
     84 	IWPM_NLA_MANAGE_MAPPING_SEQ,
     85 	IWPM_NLA_MANAGE_ADDR,
     86 	IWPM_NLA_MANAGE_MAPPED_LOC_ADDR,
     87 	IWPM_NLA_RMANAGE_MAPPING_ERR,
     88 	IWPM_NLA_RMANAGE_MAPPING_MAX
     89 };
     90 
     91 #define IWPM_NLA_MANAGE_MAPPING_MAX 3
     92 #define IWPM_NLA_QUERY_MAPPING_MAX  4
     93 #define IWPM_NLA_MAPINFO_SEND_MAX   3
     94 
     95 enum {
     96 	IWPM_NLA_QUERY_MAPPING_UNSPEC = 0,
     97 	IWPM_NLA_QUERY_MAPPING_SEQ,
     98 	IWPM_NLA_QUERY_LOCAL_ADDR,
     99 	IWPM_NLA_QUERY_REMOTE_ADDR,
    100 	IWPM_NLA_RQUERY_MAPPED_LOC_ADDR,
    101 	IWPM_NLA_RQUERY_MAPPED_REM_ADDR,
    102 	IWPM_NLA_RQUERY_MAPPING_ERR,
    103 	IWPM_NLA_RQUERY_MAPPING_MAX
    104 };
    105 
    106 enum {
    107 	IWPM_NLA_MAPINFO_REQ_UNSPEC = 0,
    108 	IWPM_NLA_MAPINFO_ULIB_NAME,
    109 	IWPM_NLA_MAPINFO_ULIB_VER,
    110 	IWPM_NLA_MAPINFO_REQ_MAX
    111 };
    112 
    113 enum {
    114 	IWPM_NLA_MAPINFO_UNSPEC = 0,
    115 	IWPM_NLA_MAPINFO_LOCAL_ADDR,
    116 	IWPM_NLA_MAPINFO_MAPPED_ADDR,
    117 	IWPM_NLA_MAPINFO_MAX
    118 };
    119 
    120 enum {
    121 	IWPM_NLA_MAPINFO_NUM_UNSPEC = 0,
    122 	IWPM_NLA_MAPINFO_SEQ,
    123 	IWPM_NLA_MAPINFO_SEND_NUM,
    124 	IWPM_NLA_MAPINFO_ACK_NUM,
    125 	IWPM_NLA_MAPINFO_NUM_MAX
    126 };
    127 
    128 enum {
    129 	IWPM_NLA_ERR_UNSPEC = 0,
    130 	IWPM_NLA_ERR_SEQ,
    131 	IWPM_NLA_ERR_CODE,
    132 	IWPM_NLA_ERR_MAX
    133 };
    134 
    135 /*
    136  * Local service operations:
    137  *   RESOLVE - The client requests the local service to resolve a path.
    138  *   SET_TIMEOUT - The local service requests the client to set the timeout.
    139  *   IP_RESOLVE - The client requests the local service to resolve an IP to GID.
    140  */
    141 enum {
    142 	RDMA_NL_LS_OP_RESOLVE = 0,
    143 	RDMA_NL_LS_OP_SET_TIMEOUT,
    144 	RDMA_NL_LS_OP_IP_RESOLVE,
    145 	RDMA_NL_LS_NUM_OPS
    146 };
    147 
    148 /* Local service netlink message flags */
    149 #define RDMA_NL_LS_F_ERR	0x0100	/* Failed response */
    150 
    151 /*
    152  * Local service resolve operation family header.
    153  * The layout for the resolve operation:
    154  *    nlmsg header
    155  *    family header
    156  *    attributes
    157  */
    158 
    159 /*
    160  * Local service path use:
    161  * Specify how the path(s) will be used.
    162  *   ALL - For connected CM operation (6 pathrecords)
    163  *   UNIDIRECTIONAL - For unidirectional UD (1 pathrecord)
    164  *   GMP - For miscellaneous GMP like operation (at least 1 reversible
    165  *         pathrecord)
    166  */
    167 enum {
    168 	LS_RESOLVE_PATH_USE_ALL = 0,
    169 	LS_RESOLVE_PATH_USE_UNIDIRECTIONAL,
    170 	LS_RESOLVE_PATH_USE_GMP,
    171 	LS_RESOLVE_PATH_USE_MAX
    172 };
    173 
    174 #define LS_DEVICE_NAME_MAX 64
    175 
    176 struct rdma_ls_resolve_header {
    177 	__u8 device_name[LS_DEVICE_NAME_MAX];
    178 	__u8 port_num;
    179 	__u8 path_use;
    180 };
    181 
    182 struct rdma_ls_ip_resolve_header {
    183 	__u32 ifindex;
    184 };
    185 
    186 /* Local service attribute type */
    187 #define RDMA_NLA_F_MANDATORY	(1 << 13)
    188 #define RDMA_NLA_TYPE_MASK	(~(NLA_F_NESTED | NLA_F_NET_BYTEORDER | \
    189 				  RDMA_NLA_F_MANDATORY))
    190 
    191 /*
    192  * Local service attributes:
    193  *   Attr Name       Size                       Byte order
    194  *   -----------------------------------------------------
    195  *   PATH_RECORD     struct ib_path_rec_data
    196  *   TIMEOUT         u32                        cpu
    197  *   SERVICE_ID      u64                        cpu
    198  *   DGID            u8[16]                     BE
    199  *   SGID            u8[16]                     BE
    200  *   TCLASS          u8
    201  *   PKEY            u16                        cpu
    202  *   QOS_CLASS       u16                        cpu
    203  *   IPV4            u32                        BE
    204  *   IPV6            u8[16]                     BE
    205  */
    206 enum {
    207 	LS_NLA_TYPE_UNSPEC = 0,
    208 	LS_NLA_TYPE_PATH_RECORD,
    209 	LS_NLA_TYPE_TIMEOUT,
    210 	LS_NLA_TYPE_SERVICE_ID,
    211 	LS_NLA_TYPE_DGID,
    212 	LS_NLA_TYPE_SGID,
    213 	LS_NLA_TYPE_TCLASS,
    214 	LS_NLA_TYPE_PKEY,
    215 	LS_NLA_TYPE_QOS_CLASS,
    216 	LS_NLA_TYPE_IPV4,
    217 	LS_NLA_TYPE_IPV6,
    218 	LS_NLA_TYPE_MAX
    219 };
    220 
    221 /* Local service DGID/SGID attribute: big endian */
    222 struct rdma_nla_ls_gid {
    223 	__u8		gid[16];
    224 };
    225 
    226 enum rdma_nldev_command {
    227 	RDMA_NLDEV_CMD_UNSPEC,
    228 
    229 	RDMA_NLDEV_CMD_GET, /* can dump */
    230 	RDMA_NLDEV_CMD_SET,
    231 	RDMA_NLDEV_CMD_NEW,
    232 	RDMA_NLDEV_CMD_DEL,
    233 
    234 	RDMA_NLDEV_CMD_PORT_GET, /* can dump */
    235 	RDMA_NLDEV_CMD_PORT_SET,
    236 	RDMA_NLDEV_CMD_PORT_NEW,
    237 	RDMA_NLDEV_CMD_PORT_DEL,
    238 
    239 	RDMA_NLDEV_NUM_OPS
    240 };
    241 
    242 enum rdma_nldev_attr {
    243 	/* don't change the order or add anything between, this is ABI! */
    244 	RDMA_NLDEV_ATTR_UNSPEC,
    245 
    246 	/* Identifier for ib_device */
    247 	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
    248 
    249 	RDMA_NLDEV_ATTR_DEV_NAME,		/* string */
    250 	/*
    251 	 * Device index together with port index are identifiers
    252 	 * for port/link properties.
    253 	 *
    254 	 * For RDMA_NLDEV_CMD_GET commamnd, port index will return number
    255 	 * of available ports in ib_device, while for port specific operations,
    256 	 * it will be real port index as it appears in sysfs. Port index follows
    257 	 * sysfs notation and starts from 1 for the first port.
    258 	 */
    259 	RDMA_NLDEV_ATTR_PORT_INDEX,		/* u32 */
    260 
    261 	/*
    262 	 * Device and port capabilities
    263 	 */
    264 	RDMA_NLDEV_ATTR_CAP_FLAGS,		/* u64 */
    265 
    266 	/*
    267 	 * FW version
    268 	 */
    269 	RDMA_NLDEV_ATTR_FW_VERSION,		/* string */
    270 
    271 	/*
    272 	 * Node GUID (in host byte order) associated with the RDMA device.
    273 	 */
    274 	RDMA_NLDEV_ATTR_NODE_GUID,			/* u64 */
    275 
    276 	/*
    277 	 * System image GUID (in host byte order) associated with
    278 	 * this RDMA device and other devices which are part of a
    279 	 * single system.
    280 	 */
    281 	RDMA_NLDEV_ATTR_SYS_IMAGE_GUID,		/* u64 */
    282 
    283 	/*
    284 	 * Subnet prefix (in host byte order)
    285 	 */
    286 	RDMA_NLDEV_ATTR_SUBNET_PREFIX,		/* u64 */
    287 
    288 	/*
    289 	 * Local Identifier (LID),
    290 	 * According to IB specification, It is 16-bit address assigned
    291 	 * by the Subnet Manager. Extended to be 32-bit for OmniPath users.
    292 	 */
    293 	RDMA_NLDEV_ATTR_LID,			/* u32 */
    294 	RDMA_NLDEV_ATTR_SM_LID,			/* u32 */
    295 
    296 	/*
    297 	 * LID mask control (LMC)
    298 	 */
    299 	RDMA_NLDEV_ATTR_LMC,			/* u8 */
    300 
    301 	RDMA_NLDEV_ATTR_PORT_STATE,		/* u8 */
    302 	RDMA_NLDEV_ATTR_PORT_PHYS_STATE,	/* u8 */
    303 
    304 	RDMA_NLDEV_ATTR_DEV_NODE_TYPE,		/* u8 */
    305 
    306 	RDMA_NLDEV_ATTR_MAX
    307 };
    308 #endif /* _UAPI_RDMA_NETLINK_H */
    309