1*c0dd49bdSEiji Ota /* 2*c0dd49bdSEiji Ota * CDDL HEADER START 3*c0dd49bdSEiji Ota * 4*c0dd49bdSEiji Ota * The contents of this file are subject to the terms of the 5*c0dd49bdSEiji Ota * Common Development and Distribution License (the "License"). 6*c0dd49bdSEiji Ota * You may not use this file except in compliance with the License. 7*c0dd49bdSEiji Ota * 8*c0dd49bdSEiji Ota * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*c0dd49bdSEiji Ota * or http://www.opensolaris.org/os/licensing. 10*c0dd49bdSEiji Ota * See the License for the specific language governing permissions 11*c0dd49bdSEiji Ota * and limitations under the License. 12*c0dd49bdSEiji Ota * 13*c0dd49bdSEiji Ota * When distributing Covered Code, include this CDDL HEADER in each 14*c0dd49bdSEiji Ota * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*c0dd49bdSEiji Ota * If applicable, add the following below this CDDL HEADER, with the 16*c0dd49bdSEiji Ota * fields enclosed by brackets "[]" replaced with your own identifying 17*c0dd49bdSEiji Ota * information: Portions Copyright [yyyy] [name of copyright owner] 18*c0dd49bdSEiji Ota * 19*c0dd49bdSEiji Ota * CDDL HEADER END 20*c0dd49bdSEiji Ota */ 21*c0dd49bdSEiji Ota /* 22*c0dd49bdSEiji Ota * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 23*c0dd49bdSEiji Ota */ 24*c0dd49bdSEiji Ota 25*c0dd49bdSEiji Ota /* 26*c0dd49bdSEiji Ota * Copyright (c) 2008 Oracle. All rights reserved. 27*c0dd49bdSEiji Ota * 28*c0dd49bdSEiji Ota * This software is available to you under a choice of one of two 29*c0dd49bdSEiji Ota * licenses. You may choose to be licensed under the terms of the GNU 30*c0dd49bdSEiji Ota * General Public License (GPL) Version 2, available from the file 31*c0dd49bdSEiji Ota * COPYING in the main directory of this source tree, or the 32*c0dd49bdSEiji Ota * OpenIB.org BSD license below: 33*c0dd49bdSEiji Ota * 34*c0dd49bdSEiji Ota * Redistribution and use in source and binary forms, with or 35*c0dd49bdSEiji Ota * without modification, are permitted provided that the following 36*c0dd49bdSEiji Ota * conditions are met: 37*c0dd49bdSEiji Ota * 38*c0dd49bdSEiji Ota * - Redistributions of source code must retain the above 39*c0dd49bdSEiji Ota * copyright notice, this list of conditions and the following 40*c0dd49bdSEiji Ota * disclaimer. 41*c0dd49bdSEiji Ota * 42*c0dd49bdSEiji Ota * - Redistributions in binary form must reproduce the above 43*c0dd49bdSEiji Ota * copyright notice, this list of conditions and the following 44*c0dd49bdSEiji Ota * disclaimer in the documentation and/or other materials 45*c0dd49bdSEiji Ota * provided with the distribution. 46*c0dd49bdSEiji Ota * 47*c0dd49bdSEiji Ota * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 48*c0dd49bdSEiji Ota * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 49*c0dd49bdSEiji Ota * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 50*c0dd49bdSEiji Ota * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 51*c0dd49bdSEiji Ota * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 52*c0dd49bdSEiji Ota * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 53*c0dd49bdSEiji Ota * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 54*c0dd49bdSEiji Ota * SOFTWARE. 55*c0dd49bdSEiji Ota * 56*c0dd49bdSEiji Ota */ 57*c0dd49bdSEiji Ota 58*c0dd49bdSEiji Ota /* 59*c0dd49bdSEiji Ota * Include this file if the application uses rdsv3 sockets. 60*c0dd49bdSEiji Ota */ 61*c0dd49bdSEiji Ota 62*c0dd49bdSEiji Ota /* 63*c0dd49bdSEiji Ota * This file contains definitions from the ofed rds.h and rds_rdma.h 64*c0dd49bdSEiji Ota * header file. 65*c0dd49bdSEiji Ota */ 66*c0dd49bdSEiji Ota #ifndef _RDSV3_RDS_H 67*c0dd49bdSEiji Ota #define _RDSV3_RDS_H 68*c0dd49bdSEiji Ota 69*c0dd49bdSEiji Ota #include <sys/types.h> 70*c0dd49bdSEiji Ota 71*c0dd49bdSEiji Ota #ifdef __cplusplus 72*c0dd49bdSEiji Ota extern "C" { 73*c0dd49bdSEiji Ota #endif 74*c0dd49bdSEiji Ota 75*c0dd49bdSEiji Ota #define RDS_IB_ABI_VERSION 0x301 76*c0dd49bdSEiji Ota 77*c0dd49bdSEiji Ota #define AF_RDS AF_INET_OFFLOAD 78*c0dd49bdSEiji Ota #define PF_RDS AF_INET_OFFLOAD 79*c0dd49bdSEiji Ota 80*c0dd49bdSEiji Ota #define SOL_RDS 272 81*c0dd49bdSEiji Ota 82*c0dd49bdSEiji Ota /* 83*c0dd49bdSEiji Ota * setsockopt/getsockopt for SOL_RDS 84*c0dd49bdSEiji Ota */ 85*c0dd49bdSEiji Ota #define RDSV3_CANCEL_SENT_TO 1 86*c0dd49bdSEiji Ota #define RDSV3_GET_MR 2 87*c0dd49bdSEiji Ota #define RDSV3_FREE_MR 3 88*c0dd49bdSEiji Ota /* deprecated: RDS_BARRIER 4 */ 89*c0dd49bdSEiji Ota #define RDSV3_RECVERR 5 90*c0dd49bdSEiji Ota #define RDSV3_CONG_MONITOR 6 91*c0dd49bdSEiji Ota 92*c0dd49bdSEiji Ota /* 93*c0dd49bdSEiji Ota * Control message types for SOL_RDS. 94*c0dd49bdSEiji Ota * 95*c0dd49bdSEiji Ota * RDS_CMSG_RDMA_ARGS (sendmsg) 96*c0dd49bdSEiji Ota * Request a RDMA transfer to/from the specified 97*c0dd49bdSEiji Ota * memory ranges. 98*c0dd49bdSEiji Ota * The cmsg_data is a struct rdsv3_rdma_args. 99*c0dd49bdSEiji Ota * RDS_CMSG_RDMA_DEST (recvmsg, sendmsg) 100*c0dd49bdSEiji Ota * Kernel informs application about intended 101*c0dd49bdSEiji Ota * source/destination of a RDMA transfer 102*c0dd49bdSEiji Ota * RDS_CMSG_RDMA_MAP (sendmsg) 103*c0dd49bdSEiji Ota * Application asks kernel to map the given 104*c0dd49bdSEiji Ota * memory range into a IB MR, and send the 105*c0dd49bdSEiji Ota * R_Key along in an RDS extension header. 106*c0dd49bdSEiji Ota * The cmsg_data is a struct rdsv3_get_mr_args, 107*c0dd49bdSEiji Ota * the same as for the GET_MR setsockopt. 108*c0dd49bdSEiji Ota * RDS_CMSG_RDMA_STATUS (recvmsg) 109*c0dd49bdSEiji Ota * Returns the status of a completed RDMA operation. 110*c0dd49bdSEiji Ota */ 111*c0dd49bdSEiji Ota #define RDSV3_CMSG_RDMA_ARGS 1 112*c0dd49bdSEiji Ota #define RDSV3_CMSG_RDMA_DEST 2 113*c0dd49bdSEiji Ota #define RDSV3_CMSG_RDMA_MAP 3 114*c0dd49bdSEiji Ota #define RDSV3_CMSG_RDMA_STATUS 4 115*c0dd49bdSEiji Ota #define RDSV3_CMSG_CONG_UPDATE 5 116*c0dd49bdSEiji Ota 117*c0dd49bdSEiji Ota /* 118*c0dd49bdSEiji Ota * RDMA related types 119*c0dd49bdSEiji Ota */ 120*c0dd49bdSEiji Ota 121*c0dd49bdSEiji Ota /* 122*c0dd49bdSEiji Ota * This encapsulates a remote memory location. 123*c0dd49bdSEiji Ota * In the current implementation, it contains the R_Key 124*c0dd49bdSEiji Ota * of the remote memory region, and the offset into it 125*c0dd49bdSEiji Ota * (so that the application does not have to worry about 126*c0dd49bdSEiji Ota * alignment). 127*c0dd49bdSEiji Ota */ 128*c0dd49bdSEiji Ota typedef uint64_t rdsv3_rdma_cookie_t; 129*c0dd49bdSEiji Ota 130*c0dd49bdSEiji Ota struct rdsv3_iovec { 131*c0dd49bdSEiji Ota uint64_t addr; 132*c0dd49bdSEiji Ota uint64_t bytes; 133*c0dd49bdSEiji Ota }; 134*c0dd49bdSEiji Ota 135*c0dd49bdSEiji Ota struct rdsv3_get_mr_args { 136*c0dd49bdSEiji Ota struct rdsv3_iovec vec; 137*c0dd49bdSEiji Ota uint64_t cookie_addr; 138*c0dd49bdSEiji Ota uint64_t flags; 139*c0dd49bdSEiji Ota }; 140*c0dd49bdSEiji Ota 141*c0dd49bdSEiji Ota struct rdsv3_free_mr_args { 142*c0dd49bdSEiji Ota rdsv3_rdma_cookie_t cookie; 143*c0dd49bdSEiji Ota uint64_t flags; 144*c0dd49bdSEiji Ota }; 145*c0dd49bdSEiji Ota 146*c0dd49bdSEiji Ota struct rdsv3_rdma_args { 147*c0dd49bdSEiji Ota rdsv3_rdma_cookie_t cookie; 148*c0dd49bdSEiji Ota struct rdsv3_iovec remote_vec; 149*c0dd49bdSEiji Ota uint64_t local_vec_addr; 150*c0dd49bdSEiji Ota uint64_t nr_local; 151*c0dd49bdSEiji Ota uint64_t flags; 152*c0dd49bdSEiji Ota uint64_t user_token; 153*c0dd49bdSEiji Ota }; 154*c0dd49bdSEiji Ota 155*c0dd49bdSEiji Ota struct rdsv3_rdma_notify { 156*c0dd49bdSEiji Ota uint64_t user_token; 157*c0dd49bdSEiji Ota int32_t status; 158*c0dd49bdSEiji Ota }; 159*c0dd49bdSEiji Ota 160*c0dd49bdSEiji Ota #define RDSV3_RDMA_SUCCESS 0 161*c0dd49bdSEiji Ota #define RDSV3_RDMA_REMOTE_ERROR 1 162*c0dd49bdSEiji Ota #define RDSV3_RDMA_CANCELED 2 163*c0dd49bdSEiji Ota #define RDSV3_RDMA_DROPPED 3 164*c0dd49bdSEiji Ota #define RDSV3_RDMA_OTHER_ERROR 4 165*c0dd49bdSEiji Ota 166*c0dd49bdSEiji Ota /* 167*c0dd49bdSEiji Ota * Common set of flags for all RDMA related structs 168*c0dd49bdSEiji Ota */ 169*c0dd49bdSEiji Ota #define RDSV3_RDMA_READWRITE 0x0001 170*c0dd49bdSEiji Ota #define RDSV3_RDMA_FENCE 0x0002 /* use FENCE for immediate send */ 171*c0dd49bdSEiji Ota #define RDSV3_RDMA_INVALIDATE 0x0004 /* invalidate R_Key after freeing MR */ 172*c0dd49bdSEiji Ota #define RDSV3_RDMA_USE_ONCE 0x0008 /* free MR after use */ 173*c0dd49bdSEiji Ota #define RDSV3_RDMA_DONTWAIT 0x0010 /* Don't wait in SET_BARRIER */ 174*c0dd49bdSEiji Ota #define RDSV3_RDMA_NOTIFY_ME 0x0020 /* Notify when operation completes */ 175*c0dd49bdSEiji Ota 176*c0dd49bdSEiji Ota /* 177*c0dd49bdSEiji Ota * Congestion monitoring. 178*c0dd49bdSEiji Ota * Congestion control in RDS happens at the host connection 179*c0dd49bdSEiji Ota * level by exchanging a bitmap marking congested ports. 180*c0dd49bdSEiji Ota * By default, a process sleeping in poll() is always woken 181*c0dd49bdSEiji Ota * up when the congestion map is updated. 182*c0dd49bdSEiji Ota * With explicit monitoring, an application can have more 183*c0dd49bdSEiji Ota * fine-grained control. 184*c0dd49bdSEiji Ota * The application installs a 64bit mask value in the socket, 185*c0dd49bdSEiji Ota * where each bit corresponds to a group of ports. 186*c0dd49bdSEiji Ota * When a congestion update arrives, RDS checks the set of 187*c0dd49bdSEiji Ota * ports that are now uncongested against the list bit mask 188*c0dd49bdSEiji Ota * installed in the socket, and if they overlap, we queue a 189*c0dd49bdSEiji Ota * cong_notification on the socket. 190*c0dd49bdSEiji Ota * 191*c0dd49bdSEiji Ota * To install the congestion monitor bitmask, use RDS_CONG_MONITOR 192*c0dd49bdSEiji Ota * with the 64bit mask. 193*c0dd49bdSEiji Ota * Congestion updates are received via RDS_CMSG_CONG_UPDATE 194*c0dd49bdSEiji Ota * control messages. 195*c0dd49bdSEiji Ota * 196*c0dd49bdSEiji Ota * The correspondence between bits and ports is 197*c0dd49bdSEiji Ota * 1 << (portnum % 64) 198*c0dd49bdSEiji Ota */ 199*c0dd49bdSEiji Ota #define RDSV3_CONG_MONITOR_SIZE 64 200*c0dd49bdSEiji Ota #define RDSV3_CONG_MONITOR_BIT(port) \ 201*c0dd49bdSEiji Ota (((unsigned int) port) % RDSV3_CONG_MONITOR_SIZE) 202*c0dd49bdSEiji Ota #define RDSV3_CONG_MONITOR_MASK(port) (1ULL << RDSV3_CONG_MONITOR_BIT(port)) 203*c0dd49bdSEiji Ota 204*c0dd49bdSEiji Ota /* rds-info related */ 205*c0dd49bdSEiji Ota 206*c0dd49bdSEiji Ota #define RDSV3_INFO_FIRST 10000 207*c0dd49bdSEiji Ota #define RDSV3_INFO_COUNTERS 10000 208*c0dd49bdSEiji Ota #define RDSV3_INFO_CONNECTIONS 10001 209*c0dd49bdSEiji Ota /* 10002 aka RDS_INFO_FLOWS is deprecated */ 210*c0dd49bdSEiji Ota #define RDSV3_INFO_SEND_MESSAGES 10003 211*c0dd49bdSEiji Ota #define RDSV3_INFO_RETRANS_MESSAGES 10004 212*c0dd49bdSEiji Ota #define RDSV3_INFO_RECV_MESSAGES 10005 213*c0dd49bdSEiji Ota #define RDSV3_INFO_SOCKETS 10006 214*c0dd49bdSEiji Ota #define RDSV3_INFO_TCP_SOCKETS 10007 215*c0dd49bdSEiji Ota #define RDSV3_INFO_IB_CONNECTIONS 10008 216*c0dd49bdSEiji Ota #define RDSV3_INFO_CONNECTION_STATS 10009 217*c0dd49bdSEiji Ota #define RDSV3_INFO_IWARP_CONNECTIONS 10010 218*c0dd49bdSEiji Ota #define RDSV3_INFO_LAST 10010 219*c0dd49bdSEiji Ota 220*c0dd49bdSEiji Ota #ifndef __lock_lint 221*c0dd49bdSEiji Ota #pragma pack(1) 222*c0dd49bdSEiji Ota struct rdsv3_info_counter { 223*c0dd49bdSEiji Ota uint8_t name[32]; 224*c0dd49bdSEiji Ota uint64_t value; 225*c0dd49bdSEiji Ota } __attribute__((packed)); 226*c0dd49bdSEiji Ota #pragma pack() 227*c0dd49bdSEiji Ota #else 228*c0dd49bdSEiji Ota struct rdsv3_info_counter { 229*c0dd49bdSEiji Ota uint8_t name[32]; 230*c0dd49bdSEiji Ota uint64_t value; 231*c0dd49bdSEiji Ota }; 232*c0dd49bdSEiji Ota #endif 233*c0dd49bdSEiji Ota 234*c0dd49bdSEiji Ota #define RDSV3_INFO_CONNECTION_FLAG_SENDING 0x01 235*c0dd49bdSEiji Ota #define RDSV3_INFO_CONNECTION_FLAG_CONNECTING 0x02 236*c0dd49bdSEiji Ota #define RDSV3_INFO_CONNECTION_FLAG_CONNECTED 0x04 237*c0dd49bdSEiji Ota 238*c0dd49bdSEiji Ota #ifndef __lock_lint 239*c0dd49bdSEiji Ota #pragma pack(1) 240*c0dd49bdSEiji Ota struct rdsv3_info_connection { 241*c0dd49bdSEiji Ota uint64_t next_tx_seq; 242*c0dd49bdSEiji Ota uint64_t next_rx_seq; 243*c0dd49bdSEiji Ota uint32_t laddr; /* network order */ 244*c0dd49bdSEiji Ota uint32_t faddr; /* network order */ 245*c0dd49bdSEiji Ota uint8_t transport[15]; /* null term ascii */ 246*c0dd49bdSEiji Ota uint8_t flags; 247*c0dd49bdSEiji Ota } __attribute__((packed)); 248*c0dd49bdSEiji Ota #pragma pack() 249*c0dd49bdSEiji Ota #else 250*c0dd49bdSEiji Ota struct rdsv3_info_connection { 251*c0dd49bdSEiji Ota uint64_t next_tx_seq; 252*c0dd49bdSEiji Ota uint64_t next_rx_seq; 253*c0dd49bdSEiji Ota uint32_t laddr; /* network order */ 254*c0dd49bdSEiji Ota uint32_t faddr; /* network order */ 255*c0dd49bdSEiji Ota uint8_t transport[15]; /* null term ascii */ 256*c0dd49bdSEiji Ota uint8_t flags; 257*c0dd49bdSEiji Ota }; 258*c0dd49bdSEiji Ota #endif 259*c0dd49bdSEiji Ota 260*c0dd49bdSEiji Ota #ifndef __lock_lint 261*c0dd49bdSEiji Ota #pragma pack(1) 262*c0dd49bdSEiji Ota struct rdsv3_info_flow { 263*c0dd49bdSEiji Ota uint32_t laddr; /* network order */ 264*c0dd49bdSEiji Ota uint32_t faddr; /* network order */ 265*c0dd49bdSEiji Ota uint32_t bytes; 266*c0dd49bdSEiji Ota uint16_t lport; /* network order */ 267*c0dd49bdSEiji Ota uint16_t fport; /* network order */ 268*c0dd49bdSEiji Ota } __attribute__((packed)); 269*c0dd49bdSEiji Ota #pragma pack() 270*c0dd49bdSEiji Ota #else 271*c0dd49bdSEiji Ota struct rdsv3_info_flow { 272*c0dd49bdSEiji Ota uint32_t laddr; /* network order */ 273*c0dd49bdSEiji Ota uint32_t faddr; /* network order */ 274*c0dd49bdSEiji Ota uint32_t bytes; 275*c0dd49bdSEiji Ota uint16_t lport; /* network order */ 276*c0dd49bdSEiji Ota uint16_t fport; /* network order */ 277*c0dd49bdSEiji Ota }; 278*c0dd49bdSEiji Ota #endif 279*c0dd49bdSEiji Ota 280*c0dd49bdSEiji Ota #define RDSV3_INFO_MESSAGE_FLAG_ACK 0x01 281*c0dd49bdSEiji Ota #define RDSV3_INFO_MESSAGE_FLAG_FAST_ACK 0x02 282*c0dd49bdSEiji Ota 283*c0dd49bdSEiji Ota #ifndef __lock_lint 284*c0dd49bdSEiji Ota #pragma pack(1) 285*c0dd49bdSEiji Ota struct rdsv3_info_message { 286*c0dd49bdSEiji Ota uint64_t seq; 287*c0dd49bdSEiji Ota uint32_t len; 288*c0dd49bdSEiji Ota uint32_t laddr; /* network order */ 289*c0dd49bdSEiji Ota uint32_t faddr; /* network order */ 290*c0dd49bdSEiji Ota uint16_t lport; /* network order */ 291*c0dd49bdSEiji Ota uint16_t fport; /* network order */ 292*c0dd49bdSEiji Ota uint8_t flags; 293*c0dd49bdSEiji Ota } __attribute__((packed)); 294*c0dd49bdSEiji Ota #pragma pack() 295*c0dd49bdSEiji Ota #else 296*c0dd49bdSEiji Ota struct rdsv3_info_message { 297*c0dd49bdSEiji Ota uint64_t seq; 298*c0dd49bdSEiji Ota uint32_t len; 299*c0dd49bdSEiji Ota uint32_t laddr; /* network order */ 300*c0dd49bdSEiji Ota uint32_t faddr; /* network order */ 301*c0dd49bdSEiji Ota uint16_t lport; /* network order */ 302*c0dd49bdSEiji Ota uint16_t fport; /* network order */ 303*c0dd49bdSEiji Ota uint8_t flags; 304*c0dd49bdSEiji Ota }; 305*c0dd49bdSEiji Ota #endif 306*c0dd49bdSEiji Ota 307*c0dd49bdSEiji Ota #ifndef __lock_lint 308*c0dd49bdSEiji Ota #pragma pack(1) 309*c0dd49bdSEiji Ota struct rdsv3_info_socket { 310*c0dd49bdSEiji Ota uint32_t sndbuf; 311*c0dd49bdSEiji Ota uint32_t bound_addr; /* network order */ 312*c0dd49bdSEiji Ota uint32_t connected_addr; /* network order */ 313*c0dd49bdSEiji Ota uint16_t bound_port; /* network order */ 314*c0dd49bdSEiji Ota uint16_t connected_port; /* network order */ 315*c0dd49bdSEiji Ota uint32_t rcvbuf; 316*c0dd49bdSEiji Ota uint64_t inum; 317*c0dd49bdSEiji Ota } __attribute__((packed)); 318*c0dd49bdSEiji Ota #pragma pack() 319*c0dd49bdSEiji Ota #else 320*c0dd49bdSEiji Ota struct rdsv3_info_socket { 321*c0dd49bdSEiji Ota uint32_t sndbuf; 322*c0dd49bdSEiji Ota uint32_t bound_addr; /* network order */ 323*c0dd49bdSEiji Ota uint32_t connected_addr; /* network order */ 324*c0dd49bdSEiji Ota uint16_t bound_port; /* network order */ 325*c0dd49bdSEiji Ota uint16_t connected_port; /* network order */ 326*c0dd49bdSEiji Ota uint32_t rcvbuf; 327*c0dd49bdSEiji Ota uint64_t inum; 328*c0dd49bdSEiji Ota }; 329*c0dd49bdSEiji Ota #endif 330*c0dd49bdSEiji Ota 331*c0dd49bdSEiji Ota #ifndef __lock_lint 332*c0dd49bdSEiji Ota #pragma pack(1) 333*c0dd49bdSEiji Ota struct rdsv3_info_socket_v1 { 334*c0dd49bdSEiji Ota uint32_t sndbuf; 335*c0dd49bdSEiji Ota uint32_t bound_addr; /* network order */ 336*c0dd49bdSEiji Ota uint32_t connected_addr; /* network order */ 337*c0dd49bdSEiji Ota uint16_t bound_port; /* network order */ 338*c0dd49bdSEiji Ota uint16_t connected_port; /* network order */ 339*c0dd49bdSEiji Ota uint32_t rcvbuf; 340*c0dd49bdSEiji Ota } __attribute__((packed)); 341*c0dd49bdSEiji Ota #pragma pack() 342*c0dd49bdSEiji Ota #else 343*c0dd49bdSEiji Ota struct rdsv3_info_socket_v1 { 344*c0dd49bdSEiji Ota uint32_t sndbuf; 345*c0dd49bdSEiji Ota uint32_t bound_addr; /* network order */ 346*c0dd49bdSEiji Ota uint32_t connected_addr; /* network order */ 347*c0dd49bdSEiji Ota uint16_t bound_port; /* network order */ 348*c0dd49bdSEiji Ota uint16_t connected_port; /* network order */ 349*c0dd49bdSEiji Ota uint32_t rcvbuf; 350*c0dd49bdSEiji Ota }; 351*c0dd49bdSEiji Ota #endif 352*c0dd49bdSEiji Ota 353*c0dd49bdSEiji Ota #define RDS_IB_GID_LEN 16 354*c0dd49bdSEiji Ota struct rdsv3_info_rdma_connection { 355*c0dd49bdSEiji Ota uint32_t src_addr; /* network order */ 356*c0dd49bdSEiji Ota uint32_t dst_addr; /* network order */ 357*c0dd49bdSEiji Ota uint8_t src_gid[RDS_IB_GID_LEN]; 358*c0dd49bdSEiji Ota uint8_t dst_gid[RDS_IB_GID_LEN]; 359*c0dd49bdSEiji Ota 360*c0dd49bdSEiji Ota uint32_t max_send_wr; 361*c0dd49bdSEiji Ota uint32_t max_recv_wr; 362*c0dd49bdSEiji Ota uint32_t max_send_sge; 363*c0dd49bdSEiji Ota uint32_t rdma_mr_max; 364*c0dd49bdSEiji Ota uint32_t rdma_mr_size; 365*c0dd49bdSEiji Ota }; 366*c0dd49bdSEiji Ota 367*c0dd49bdSEiji Ota #define rdsv3_info_ib_connection rdsv3_info_rdma_connection 368*c0dd49bdSEiji Ota #define rdma_fmr_max rdma_mr_max 369*c0dd49bdSEiji Ota #define rdma_fmr_size rdma_mr_size 370*c0dd49bdSEiji Ota 371*c0dd49bdSEiji Ota #ifdef __cplusplus 372*c0dd49bdSEiji Ota } 373*c0dd49bdSEiji Ota #endif 374*c0dd49bdSEiji Ota 375*c0dd49bdSEiji Ota #endif /* _RDSV3_RDS_H */ 376