125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2008 Oracle. All rights reserved. 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This software is available to you under a choice of one of two 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * licenses. You may choose to be licensed under the terms of the GNU 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * General Public License (GPL) Version 2, available from the file 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * COPYING in the main directory of this source tree, or the 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * OpenIB.org BSD license below: 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Redistribution and use in source and binary forms, with or 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * without modification, are permitted provided that the following 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * conditions are met: 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - Redistributions of source code must retain the above 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * copyright notice, this list of conditions and the following 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * disclaimer. 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - Redistributions in binary form must reproduce the above 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * copyright notice, this list of conditions and the following 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * disclaimer in the documentation and/or other materials 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * provided with the distribution. 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * SOFTWARE. 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _LINUX_RDS_H 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _LINUX_RDS_H 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 390543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#include <linux/socket.h> /* For __kernel_sockaddr_storage. */ 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_IB_ABI_VERSION 0x301 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define SOL_RDS 276 4412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * setsockopt/getsockopt for SOL_RDS 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CANCEL_SENT_TO 1 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_GET_MR 2 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_FREE_MR 3 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* deprecated: RDS_BARRIER 4 */ 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RECVERR 5 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CONG_MONITOR 6 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_GET_MR_FOR_DEST 7 5512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define SO_RDS_TRANSPORT 8 5612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris 570543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris/* Socket option to tap receive path latency 580543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * SO_RDS: SO_RDS_MSG_RXPATH_LATENCY 590543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * Format used struct rds_rx_trace_so 600543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris */ 610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define SO_RDS_MSG_RXPATH_LATENCY 10 620543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 630543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 6412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* supported values for SO_RDS_TRANSPORT */ 6512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RDS_TRANS_IB 0 6612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RDS_TRANS_IWARP 1 6712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RDS_TRANS_TCP 2 6812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RDS_TRANS_COUNT 3 6912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RDS_TRANS_NONE (~0) 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Control message types for SOL_RDS. 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * CMSG_RDMA_ARGS (sendmsg) 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Request a RDMA transfer to/from the specified 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * memory ranges. 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The cmsg_data is a struct rds_rdma_args. 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RDS_CMSG_RDMA_DEST (recvmsg, sendmsg) 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Kernel informs application about intended 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * source/destination of a RDMA transfer 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RDS_CMSG_RDMA_MAP (sendmsg) 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Application asks kernel to map the given 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * memory range into a IB MR, and send the 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * R_Key along in an RDS extension header. 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The cmsg_data is a struct rds_get_mr_args, 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the same as for the GET_MR setsockopt. 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RDS_CMSG_RDMA_STATUS (recvmsg) 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Returns the status of a completed RDMA operation. 890543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * RDS_CMSG_RXPATH_LATENCY(recvmsg) 900543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * Returns rds message latencies in various stages of receive 910543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * path in nS. Its set per socket using SO_RDS_MSG_RXPATH_LATENCY 920543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * socket option. Legitimate points are defined in 930543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * enum rds_message_rxpath_latency. More points can be added in 940543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * future. CSMG format is struct rds_cmsg_rx_trace. 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_RDMA_ARGS 1 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_RDMA_DEST 2 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_RDMA_MAP 3 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_RDMA_STATUS 4 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_CONG_UPDATE 5 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_ATOMIC_FADD 6 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_ATOMIC_CSWP 7 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_MASKED_ATOMIC_FADD 8 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CMSG_MASKED_ATOMIC_CSWP 9 1050543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RDS_CMSG_RXPATH_LATENCY 11 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_FIRST 10000 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_COUNTERS 10000 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_CONNECTIONS 10001 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 10002 aka RDS_INFO_FLOWS is deprecated */ 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_SEND_MESSAGES 10003 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_RETRANS_MESSAGES 10004 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_RECV_MESSAGES 10005 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_SOCKETS 10006 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_TCP_SOCKETS 10007 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_IB_CONNECTIONS 10008 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_CONNECTION_STATS 10009 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_IWARP_CONNECTIONS 10010 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_LAST 10010 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_info_counter { 1220543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 name[32]; 1230543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 value; 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_CONNECTION_FLAG_SENDING 0x01 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_CONNECTION_FLAG_CONNECTING 0x02 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_CONNECTION_FLAG_CONNECTED 0x04 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define TRANSNAMSIZ 16 13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_info_connection { 1330543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 next_tx_seq; 1340543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 next_rx_seq; 13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 laddr; 13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 faddr; 1370543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 transport[TRANSNAMSIZ]; /* null term ascii */ 1380543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 flags; 13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_MESSAGE_FLAG_ACK 0x01 14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02 14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 14430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_info_message { 1450543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 seq; 1460543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 len; 14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 laddr; 14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 faddr; 14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 lport; 15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 fport; 1510543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 flags; 15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 15430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_info_socket { 1550543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 sndbuf; 15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 bound_addr; 15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 connected_addr; 15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 bound_port; 15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 connected_port; 1600543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 rcvbuf; 1610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 inum; 16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 16430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_info_tcp_socket { 16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 local_addr; 16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 local_port; 16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 peer_addr; 16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 peer_port; 1690543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 hdr_rem; 1700543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 data_rem; 1710543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 last_sent_nxt; 1720543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 last_expected_una; 1730543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 last_seen_una; 17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_IB_GID_LEN 16 17730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_info_rdma_connection { 17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 src_addr; 17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 dst_addr; 1800543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 src_gid[RDS_IB_GID_LEN]; 1810543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 dst_gid[RDS_IB_GID_LEN]; 1820543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 1830543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 max_send_wr; 1840543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 max_recv_wr; 1850543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 max_send_sge; 1860543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 rdma_mr_max; 1870543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u32 rdma_mr_size; 1880543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris}; 1890543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 1900543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris/* RDS message Receive Path Latency points */ 1910543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferrisenum rds_message_rxpath_latency { 1920543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RDS_MSG_RX_HDR_TO_DGRAM_START = 0, 1930543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RDS_MSG_RX_DGRAM_REASSEMBLE, 1940543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RDS_MSG_RX_DGRAM_DELIVERED, 1950543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris RDS_MSG_RX_DGRAM_TRACE_MAX 1960543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris}; 1970543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 1980543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferrisstruct rds_rx_trace_so { 1990543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 rx_traces; 2000543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 rx_trace_pos[RDS_MSG_RX_DGRAM_TRACE_MAX]; 2010543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris}; 2020543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris 2030543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferrisstruct rds_cmsg_rx_trace { 2040543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 rx_traces; 2050543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u8 rx_trace_pos[RDS_MSG_RX_DGRAM_TRACE_MAX]; 2060543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 rx_trace[RDS_MSG_RX_DGRAM_TRACE_MAX]; 20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Congestion monitoring. 21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Congestion control in RDS happens at the host connection 21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * level by exchanging a bitmap marking congested ports. 21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * By default, a process sleeping in poll() is always woken 21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * up when the congestion map is updated. 21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * With explicit monitoring, an application can have more 21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * fine-grained control. 21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The application installs a 64bit mask value in the socket, 21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * where each bit corresponds to a group of ports. 21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * When a congestion update arrives, RDS checks the set of 22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ports that are now uncongested against the list bit mask 22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * installed in the socket, and if they overlap, we queue a 22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * cong_notification on the socket. 22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * To install the congestion monitor bitmask, use RDS_CONG_MONITOR 22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * with the 64bit mask. 22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Congestion updates are received via RDS_CMSG_CONG_UPDATE 22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * control messages. 22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The correspondence between bits and ports is 23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1 << (portnum % 64) 23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CONG_MONITOR_SIZE 64 23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CONG_MONITOR_BIT(port) (((unsigned int) port) % RDS_CONG_MONITOR_SIZE) 23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_CONG_MONITOR_MASK(port) (1ULL << RDS_CONG_MONITOR_BIT(port)) 23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RDMA related types 23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This encapsulates a remote memory location. 24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * In the current implementation, it contains the R_Key 24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * of the remote memory region, and the offset into it 24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (so that the application does not have to worry about 24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * alignment). 24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2470543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferristypedef __u64 rds_rdma_cookie_t; 24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_iovec { 2500543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 addr; 2510543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 bytes; 25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_get_mr_args { 25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct rds_iovec vec; 2560543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 cookie_addr; 2570543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 flags; 25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 26030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_get_mr_for_dest_args { 2610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris struct __kernel_sockaddr_storage dest_addr; 26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct rds_iovec vec; 2630543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 cookie_addr; 2640543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 flags; 26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 26730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_free_mr_args { 26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng rds_rdma_cookie_t cookie; 2690543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 flags; 27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_rdma_args { 27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng rds_rdma_cookie_t cookie; 27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct rds_iovec remote_vec; 2750543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 local_vec_addr; 2760543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 nr_local; 2770543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 flags; 2780543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 user_token; 27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 28130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_atomic_args { 28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng rds_rdma_cookie_t cookie; 2830543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 local_addr; 2840543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 remote_addr; 28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 2870543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 compare; 2880543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 swap; 28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } cswp; 29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 2910543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 add; 29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } fadd; 29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 2940543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 compare; 2950543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 swap; 2960543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 compare_mask; 2970543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 swap_mask; 29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } m_cswp; 29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 3000543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 add; 3010543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 nocarry_mask; 30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } m_fadd; 30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng }; 3040543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 flags; 3050543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 user_token; 30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 30830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rds_rdma_notify { 3090543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __u64 user_token; 3100543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris __s32 status; 31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_SUCCESS 0 31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_REMOTE_ERROR 1 31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_CANCELED 2 31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_DROPPED 3 31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_OTHER_ERROR 4 31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Common set of flags for all RDMA related structs 32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_READWRITE 0x0001 32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_FENCE 0x0002 /* use FENCE for immediate send */ 32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_INVALIDATE 0x0004 /* invalidate R_Key after freeing MR */ 32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_USE_ONCE 0x0008 /* free MR after use */ 32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_DONTWAIT 0x0010 /* Don't wait in SET_BARRIER */ 32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_NOTIFY_ME 0x0020 /* Notify when operation completes */ 32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RDS_RDMA_SILENT 0x0040 /* Do not interrupt remote */ 32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* IB_RDS_H */ 331