/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * Copyright (c) 2005 SilverStorm Technologies, Inc. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ /* * Sun elects to include this software in Sun product * under the OpenIB BSD license. * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _RDSIB_PROTOCOL_H #define _RDSIB_PROTOCOL_H #ifdef __cplusplus extern "C" { #endif #include #define RDS_VERSION 4 /* * RDS Well known service id * Format: 0x1h00144Fhhhhhhhh * "00144F" is the Sun OUI * 'h' can be any hex-decimal digit. */ #define RDS_SERVICE_ID 0x1000144F00000001ULL /* Max number of nodes supported with the default configuration */ #define RDS_MAX_NODES 8 /* packet size */ #define RDS_USER_DATA_BUFFER_SIZE 4096 /* 4K */ /* per session */ #define RDS_MAX_DATA_RECV_BUFFERS 3000 #define RDS_MAX_DATA_SEND_BUFFERS 2000 #define RDS_MAX_CTRL_RECV_BUFFERS 100 #define RDS_MAX_CTRL_SEND_BUFFERS 50 /* RQ low water mark in percentage. More RWR have to be posted */ #define RDS_DATA_RECV_BUFFER_LWM 90 #define RDS_CTRL_RECV_BUFFER_LWM 50 /* * High water mark in percentage of pkts pending on sockets. * Incoming traffic should be controlled or stopped for all sockets * or some sockets that are above their quota */ #define RDS_PENDING_RX_PKTS_HWM 75 /* * Only interoperate with homogeneous Solaris (x32, x64, sparcv9). */ #if defined(__sparcv9) #define RDS_THIS_ARCH 1 #elif defined(__amd64) #define RDS_THIS_ARCH 2 #elif defined(__i386) #define RDS_THIS_ARCH 3 #else #error "ISA not supported" #endif /* * CM Private Data * * This data is sent with the CM REQ message by the initiater of the * RC channel. * * cm_ip_pvt - ibt_ip_cm_info_t * version - RDS version * arch - only interoperate with homogeneous Solaris (x32, x64, sparcv9). * eptype - RDS_EP_TYPE_CTRL or RDS_EP_TYPE_DATA * failover - flag to indicate failover. * last_bufid - used during failover, indicates the last buffer the remote * received. * user_buffer_size - Packet size on the sending node. This is also the size * of the SGL buffer used in the send and receive WRs. This should be * same size on the both active and passive nodes. * ack_rkey - RKEY for the RDMA acknowledgement buffer. * ack_addr - Registered MR address to receive RDMA acknowledgement. */ typedef struct rds_cm_private_data_s { uint8_t cmp_ip_pvt[IBT_IP_HDR_PRIV_DATA_SZ]; uint8_t cmp_version; uint8_t cmp_arch; uint8_t cmp_eptype; uint8_t cmp_failover; uintptr_t cmp_last_bufid; uint32_t cmp_user_buffer_size; ibt_rkey_t cmp_ack_rkey; uintptr_t cmp_ack_addr; } rds_cm_private_data_t; /* * Data Header * This header is transmitted with every WR. * * bufid - Ponter to the send buffer that is used to send this packet. * datalen - Number of bytes of data (not including the header) * npkts - number of remaining pkts(including this one) for the message. * It is set to 1 for single packet messages. * psn - Packet sequence number(starts at 0). Zero for single packet messages. * sendport - Port number of the sending socket * recvport - Port number of the receiving socket */ typedef struct rds_data_hdr_s { uintptr_t dh_bufid; uint32_t dh_datalen; uint32_t dh_npkts; uint32_t dh_psn; in_port_t dh_sendport; in_port_t dh_recvport; } rds_data_hdr_t; #define RDS_DATA_HDR_SZ sizeof (rds_data_hdr_t) /* * List of control commands sent on a session: * * STALL: This command is sent to inform remote RDS that a port is stalled. * Always sent on all existing sessions. * UNSTALL: This command is sent to inform remote RDS that a port is unstalled. * Always sent on all existing sessions. * STALL_PORTS: Inform remote RDS that all local ports are stalled. * UNSTALL_PORTS: Inform remote RDS that all local ports are unstalled. * HEARTBEAT: Sent to check if the connection is still alive */ #define RDS_CTRL_CODE_STALL 1 #define RDS_CTRL_CODE_UNSTALL 2 #define RDS_CTRL_CODE_STALL_PORTS 3 #define RDS_CTRL_CODE_UNSTALL_PORTS 4 #define RDS_CTRL_CODE_HEARTBEAT 5 #define RDS_CTRL_CODE_CLOSE_SESSION 6 /* * RDS ctrl packet * * port - Socket to be stalled/unstalled * code - STALL/UNSTALL (other codes are currently not used) */ typedef struct rds_ctrl_pkt_s { uint16_t rcp_port; uint8_t rcp_code; } rds_ctrl_pkt_t; #define RDS_CTRLPKT_SIZE sizeof (rds_ctrl_pkt_t) #ifdef __cplusplus } #endif #endif /* _RDSIB_PROTOCOL_H */