aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux/rds.h
diff options
context:
space:
mode:
authorKa-Cheong Poon <ka-cheong.poon@oracle.com>2018-07-23 23:51:23 -0400
committerDavid S. Miller <davem@davemloft.net>2018-07-24 00:17:44 -0400
commitb7ff8b1036f0b0df1390ba6b5e9bc7ec458e857a (patch)
tree398bab1a171b7da3be14fe9f7f1d5936032b7f74 /include/uapi/linux/rds.h
parent1e2b44e78eead7bcadfbf96f70d95773191541c9 (diff)
rds: Extend RDS API for IPv6 support
There are many data structures (RDS socket options) used by RDS apps which use a 32 bit integer to store IP address. To support IPv6, struct in6_addr needs to be used. To ensure backward compatibility, a new data structure is introduced for each of those data structures which use a 32 bit integer to represent an IP address. And new socket options are introduced to use those new structures. This means that existing apps should work without a problem with the new RDS module. For apps which want to use IPv6, those new data structures and socket options can be used. IPv4 mapped address is used to represent IPv4 address in the new data structures. v4: Revert changes to SO_RDS_TRANSPORT Signed-off-by: Ka-Cheong Poon <ka-cheong.poon@oracle.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/uapi/linux/rds.h')
-rw-r--r--include/uapi/linux/rds.h69
1 files changed, 67 insertions, 2 deletions
diff --git a/include/uapi/linux/rds.h b/include/uapi/linux/rds.h
index 20c6bd0b0007..dc520e1a4123 100644
--- a/include/uapi/linux/rds.h
+++ b/include/uapi/linux/rds.h
@@ -1,6 +1,6 @@
1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */ 1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
2/* 2/*
3 * Copyright (c) 2008 Oracle. All rights reserved. 3 * Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
4 * 4 *
5 * This software is available to you under a choice of one of two 5 * This software is available to you under a choice of one of two
6 * licenses. You may choose to be licensed under the terms of the GNU 6 * licenses. You may choose to be licensed under the terms of the GNU
@@ -118,7 +118,17 @@
118#define RDS_INFO_IB_CONNECTIONS 10008 118#define RDS_INFO_IB_CONNECTIONS 10008
119#define RDS_INFO_CONNECTION_STATS 10009 119#define RDS_INFO_CONNECTION_STATS 10009
120#define RDS_INFO_IWARP_CONNECTIONS 10010 120#define RDS_INFO_IWARP_CONNECTIONS 10010
121#define RDS_INFO_LAST 10010 121
122/* PF_RDS6 options */
123#define RDS6_INFO_CONNECTIONS 10011
124#define RDS6_INFO_SEND_MESSAGES 10012
125#define RDS6_INFO_RETRANS_MESSAGES 10013
126#define RDS6_INFO_RECV_MESSAGES 10014
127#define RDS6_INFO_SOCKETS 10015
128#define RDS6_INFO_TCP_SOCKETS 10016
129#define RDS6_INFO_IB_CONNECTIONS 10017
130
131#define RDS_INFO_LAST 10017
122 132
123struct rds_info_counter { 133struct rds_info_counter {
124 __u8 name[32]; 134 __u8 name[32];
@@ -140,6 +150,15 @@ struct rds_info_connection {
140 __u8 flags; 150 __u8 flags;
141} __attribute__((packed)); 151} __attribute__((packed));
142 152
153struct rds6_info_connection {
154 __u64 next_tx_seq;
155 __u64 next_rx_seq;
156 struct in6_addr laddr;
157 struct in6_addr faddr;
158 __u8 transport[TRANSNAMSIZ]; /* null term ascii */
159 __u8 flags;
160} __attribute__((packed));
161
143#define RDS_INFO_MESSAGE_FLAG_ACK 0x01 162#define RDS_INFO_MESSAGE_FLAG_ACK 0x01
144#define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02 163#define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02
145 164
@@ -153,6 +172,17 @@ struct rds_info_message {
153 __u8 flags; 172 __u8 flags;
154} __attribute__((packed)); 173} __attribute__((packed));
155 174
175struct rds6_info_message {
176 __u64 seq;
177 __u32 len;
178 struct in6_addr laddr;
179 struct in6_addr faddr;
180 __be16 lport;
181 __be16 fport;
182 __u8 flags;
183 __u8 tos;
184} __attribute__((packed));
185
156struct rds_info_socket { 186struct rds_info_socket {
157 __u32 sndbuf; 187 __u32 sndbuf;
158 __be32 bound_addr; 188 __be32 bound_addr;
@@ -163,6 +193,16 @@ struct rds_info_socket {
163 __u64 inum; 193 __u64 inum;
164} __attribute__((packed)); 194} __attribute__((packed));
165 195
196struct rds6_info_socket {
197 __u32 sndbuf;
198 struct in6_addr bound_addr;
199 struct in6_addr connected_addr;
200 __be16 bound_port;
201 __be16 connected_port;
202 __u32 rcvbuf;
203 __u64 inum;
204} __attribute__((packed));
205
166struct rds_info_tcp_socket { 206struct rds_info_tcp_socket {
167 __be32 local_addr; 207 __be32 local_addr;
168 __be16 local_port; 208 __be16 local_port;
@@ -175,6 +215,18 @@ struct rds_info_tcp_socket {
175 __u32 last_seen_una; 215 __u32 last_seen_una;
176} __attribute__((packed)); 216} __attribute__((packed));
177 217
218struct rds6_info_tcp_socket {
219 struct in6_addr local_addr;
220 __be16 local_port;
221 struct in6_addr peer_addr;
222 __be16 peer_port;
223 __u64 hdr_rem;
224 __u64 data_rem;
225 __u32 last_sent_nxt;
226 __u32 last_expected_una;
227 __u32 last_seen_una;
228} __attribute__((packed));
229
178#define RDS_IB_GID_LEN 16 230#define RDS_IB_GID_LEN 16
179struct rds_info_rdma_connection { 231struct rds_info_rdma_connection {
180 __be32 src_addr; 232 __be32 src_addr;
@@ -189,6 +241,19 @@ struct rds_info_rdma_connection {
189 __u32 rdma_mr_size; 241 __u32 rdma_mr_size;
190}; 242};
191 243
244struct rds6_info_rdma_connection {
245 struct in6_addr src_addr;
246 struct in6_addr dst_addr;
247 __u8 src_gid[RDS_IB_GID_LEN];
248 __u8 dst_gid[RDS_IB_GID_LEN];
249
250 __u32 max_send_wr;
251 __u32 max_recv_wr;
252 __u32 max_send_sge;
253 __u32 rdma_mr_max;
254 __u32 rdma_mr_size;
255};
256
192/* RDS message Receive Path Latency points */ 257/* RDS message Receive Path Latency points */
193enum rds_message_rxpath_latency { 258enum rds_message_rxpath_latency {
194 RDS_MSG_RX_HDR_TO_DGRAM_START = 0, 259 RDS_MSG_RX_HDR_TO_DGRAM_START = 0,