diff options
Diffstat (limited to 'include/rdma')
| -rw-r--r-- | include/rdma/ib_verbs.h | 11 | ||||
| -rw-r--r-- | include/rdma/iw_portmap.h | 199 | ||||
| -rw-r--r-- | include/rdma/rdma_netlink.h | 23 |
3 files changed, 227 insertions, 6 deletions
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index acd825182977..7ccef342f724 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
| @@ -80,8 +80,8 @@ enum rdma_transport_type { | |||
| 80 | RDMA_TRANSPORT_USNIC_UDP | 80 | RDMA_TRANSPORT_USNIC_UDP |
| 81 | }; | 81 | }; |
| 82 | 82 | ||
| 83 | enum rdma_transport_type | 83 | __attribute_const__ enum rdma_transport_type |
| 84 | rdma_node_get_transport(enum rdma_node_type node_type) __attribute_const__; | 84 | rdma_node_get_transport(enum rdma_node_type node_type); |
| 85 | 85 | ||
| 86 | enum rdma_link_layer { | 86 | enum rdma_link_layer { |
| 87 | IB_LINK_LAYER_UNSPECIFIED, | 87 | IB_LINK_LAYER_UNSPECIFIED, |
| @@ -466,14 +466,14 @@ enum ib_rate { | |||
| 466 | * converted to 2, since 5 Gbit/sec is 2 * 2.5 Gbit/sec. | 466 | * converted to 2, since 5 Gbit/sec is 2 * 2.5 Gbit/sec. |
| 467 | * @rate: rate to convert. | 467 | * @rate: rate to convert. |
| 468 | */ | 468 | */ |
| 469 | int ib_rate_to_mult(enum ib_rate rate) __attribute_const__; | 469 | __attribute_const__ int ib_rate_to_mult(enum ib_rate rate); |
| 470 | 470 | ||
| 471 | /** | 471 | /** |
| 472 | * ib_rate_to_mbps - Convert the IB rate enum to Mbps. | 472 | * ib_rate_to_mbps - Convert the IB rate enum to Mbps. |
| 473 | * For example, IB_RATE_2_5_GBPS will be converted to 2500. | 473 | * For example, IB_RATE_2_5_GBPS will be converted to 2500. |
| 474 | * @rate: rate to convert. | 474 | * @rate: rate to convert. |
| 475 | */ | 475 | */ |
| 476 | int ib_rate_to_mbps(enum ib_rate rate) __attribute_const__; | 476 | __attribute_const__ int ib_rate_to_mbps(enum ib_rate rate); |
| 477 | 477 | ||
| 478 | enum ib_mr_create_flags { | 478 | enum ib_mr_create_flags { |
| 479 | IB_MR_SIGNATURE_EN = 1, | 479 | IB_MR_SIGNATURE_EN = 1, |
| @@ -604,7 +604,7 @@ struct ib_mr_status { | |||
| 604 | * enum. | 604 | * enum. |
| 605 | * @mult: multiple to convert. | 605 | * @mult: multiple to convert. |
| 606 | */ | 606 | */ |
| 607 | enum ib_rate mult_to_ib_rate(int mult) __attribute_const__; | 607 | __attribute_const__ enum ib_rate mult_to_ib_rate(int mult); |
| 608 | 608 | ||
| 609 | struct ib_ah_attr { | 609 | struct ib_ah_attr { |
| 610 | struct ib_global_route grh; | 610 | struct ib_global_route grh; |
| @@ -783,6 +783,7 @@ enum ib_qp_create_flags { | |||
| 783 | IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, | 783 | IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, |
| 784 | IB_QP_CREATE_NETIF_QP = 1 << 5, | 784 | IB_QP_CREATE_NETIF_QP = 1 << 5, |
| 785 | IB_QP_CREATE_SIGNATURE_EN = 1 << 6, | 785 | IB_QP_CREATE_SIGNATURE_EN = 1 << 6, |
| 786 | IB_QP_CREATE_USE_GFP_NOIO = 1 << 7, | ||
| 786 | /* reserve bits 26-31 for low level drivers' internal use */ | 787 | /* reserve bits 26-31 for low level drivers' internal use */ |
| 787 | IB_QP_CREATE_RESERVED_START = 1 << 26, | 788 | IB_QP_CREATE_RESERVED_START = 1 << 26, |
| 788 | IB_QP_CREATE_RESERVED_END = 1 << 31, | 789 | IB_QP_CREATE_RESERVED_END = 1 << 31, |
diff --git a/include/rdma/iw_portmap.h b/include/rdma/iw_portmap.h new file mode 100644 index 000000000000..928b2775e992 --- /dev/null +++ b/include/rdma/iw_portmap.h | |||
| @@ -0,0 +1,199 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2014 Intel Corporation. All rights reserved. | ||
| 3 | * Copyright (c) 2014 Chelsio, Inc. All rights reserved. | ||
| 4 | * | ||
| 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 | ||
| 7 | * General Public License (GPL) Version 2, available from the file | ||
| 8 | * COPYING in the main directory of this source tree, or the | ||
| 9 | * OpenIB.org BSD license below: | ||
| 10 | * | ||
| 11 | * Redistribution and use in source and binary forms, with or | ||
| 12 | * without modification, are permitted provided that the following | ||
| 13 | * conditions are met: | ||
| 14 | * | ||
| 15 | * - Redistributions of source code must retain the above | ||
| 16 | * copyright notice, this list of conditions and the following | ||
| 17 | * disclaimer. | ||
| 18 | * | ||
| 19 | * - Redistributions in binary form must reproduce the above | ||
| 20 | * copyright notice, this list of conditions and the following | ||
| 21 | * disclaimer in the documentation and/or other materials | ||
| 22 | * provided with the distribution. | ||
| 23 | * | ||
| 24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
| 25 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
| 26 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
| 27 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
| 28 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
| 29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
| 30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| 31 | * SOFTWARE. | ||
| 32 | */ | ||
| 33 | #ifndef _IW_PORTMAP_H | ||
| 34 | #define _IW_PORTMAP_H | ||
| 35 | |||
| 36 | #define IWPM_ULIBNAME_SIZE 32 | ||
| 37 | #define IWPM_DEVNAME_SIZE 32 | ||
| 38 | #define IWPM_IFNAME_SIZE 16 | ||
| 39 | #define IWPM_IPADDR_SIZE 16 | ||
| 40 | |||
| 41 | enum { | ||
| 42 | IWPM_INVALID_NLMSG_ERR = 10, | ||
| 43 | IWPM_CREATE_MAPPING_ERR, | ||
| 44 | IWPM_DUPLICATE_MAPPING_ERR, | ||
| 45 | IWPM_UNKNOWN_MAPPING_ERR, | ||
| 46 | IWPM_CLIENT_DEV_INFO_ERR, | ||
| 47 | IWPM_USER_LIB_INFO_ERR, | ||
| 48 | IWPM_REMOTE_QUERY_REJECT | ||
| 49 | }; | ||
| 50 | |||
| 51 | struct iwpm_dev_data { | ||
| 52 | char dev_name[IWPM_DEVNAME_SIZE]; | ||
| 53 | char if_name[IWPM_IFNAME_SIZE]; | ||
| 54 | }; | ||
| 55 | |||
| 56 | struct iwpm_sa_data { | ||
| 57 | struct sockaddr_storage loc_addr; | ||
| 58 | struct sockaddr_storage mapped_loc_addr; | ||
| 59 | struct sockaddr_storage rem_addr; | ||
| 60 | struct sockaddr_storage mapped_rem_addr; | ||
| 61 | }; | ||
| 62 | |||
| 63 | /** | ||
| 64 | * iwpm_init - Allocate resources for the iwarp port mapper | ||
| 65 | * | ||
| 66 | * Should be called when network interface goes up. | ||
| 67 | */ | ||
| 68 | int iwpm_init(u8); | ||
| 69 | |||
| 70 | /** | ||
| 71 | * iwpm_exit - Deallocate resources for the iwarp port mapper | ||
| 72 | * | ||
| 73 | * Should be called when network interface goes down. | ||
| 74 | */ | ||
| 75 | int iwpm_exit(u8); | ||
| 76 | |||
| 77 | /** | ||
| 78 | * iwpm_valid_pid - Check if the userspace iwarp port mapper pid is valid | ||
| 79 | * | ||
| 80 | * Returns true if the pid is greater than zero, otherwise returns false | ||
| 81 | */ | ||
| 82 | int iwpm_valid_pid(void); | ||
| 83 | |||
| 84 | /** | ||
| 85 | * iwpm_register_pid - Send a netlink query to userspace | ||
| 86 | * to get the iwarp port mapper pid | ||
| 87 | * @pm_msg: Contains driver info to send to the userspace port mapper | ||
| 88 | * @nl_client: The index of the netlink client | ||
| 89 | */ | ||
| 90 | int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client); | ||
| 91 | |||
| 92 | /** | ||
| 93 | * iwpm_add_mapping - Send a netlink add mapping request to | ||
| 94 | * the userspace port mapper | ||
| 95 | * @pm_msg: Contains the local ip/tcp address info to send | ||
| 96 | * @nl_client: The index of the netlink client | ||
| 97 | * | ||
| 98 | * If the request is successful, the pm_msg stores | ||
| 99 | * the port mapper response (mapped address info) | ||
| 100 | */ | ||
| 101 | int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client); | ||
| 102 | |||
| 103 | /** | ||
| 104 | * iwpm_add_and_query_mapping - Send a netlink add and query mapping request | ||
| 105 | * to the userspace port mapper | ||
| 106 | * @pm_msg: Contains the local and remote ip/tcp address info to send | ||
| 107 | * @nl_client: The index of the netlink client | ||
| 108 | * | ||
| 109 | * If the request is successful, the pm_msg stores the | ||
| 110 | * port mapper response (mapped local and remote address info) | ||
| 111 | */ | ||
| 112 | int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client); | ||
| 113 | |||
| 114 | /** | ||
| 115 | * iwpm_remove_mapping - Send a netlink remove mapping request | ||
| 116 | * to the userspace port mapper | ||
| 117 | * | ||
| 118 | * @local_addr: Local ip/tcp address to remove | ||
| 119 | * @nl_client: The index of the netlink client | ||
| 120 | */ | ||
| 121 | int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client); | ||
| 122 | |||
| 123 | /** | ||
| 124 | * iwpm_register_pid_cb - Process the port mapper response to | ||
| 125 | * iwpm_register_pid query | ||
| 126 | * @skb: | ||
| 127 | * @cb: Contains the received message (payload and netlink header) | ||
| 128 | * | ||
| 129 | * If successful, the function receives the userspace port mapper pid | ||
| 130 | * which is used in future communication with the port mapper | ||
| 131 | */ | ||
| 132 | int iwpm_register_pid_cb(struct sk_buff *, struct netlink_callback *); | ||
| 133 | |||
| 134 | /** | ||
| 135 | * iwpm_add_mapping_cb - Process the port mapper response to | ||
| 136 | * iwpm_add_mapping request | ||
| 137 | * @skb: | ||
| 138 | * @cb: Contains the received message (payload and netlink header) | ||
| 139 | */ | ||
| 140 | int iwpm_add_mapping_cb(struct sk_buff *, struct netlink_callback *); | ||
| 141 | |||
| 142 | /** | ||
| 143 | * iwpm_add_and_query_mapping_cb - Process the port mapper response to | ||
| 144 | * iwpm_add_and_query_mapping request | ||
| 145 | * @skb: | ||
| 146 | * @cb: Contains the received message (payload and netlink header) | ||
| 147 | */ | ||
| 148 | int iwpm_add_and_query_mapping_cb(struct sk_buff *, struct netlink_callback *); | ||
| 149 | |||
| 150 | /** | ||
| 151 | * iwpm_mapping_error_cb - Process port mapper notification for error | ||
| 152 | * | ||
| 153 | * @skb: | ||
| 154 | * @cb: Contains the received message (payload and netlink header) | ||
| 155 | */ | ||
| 156 | int iwpm_mapping_error_cb(struct sk_buff *, struct netlink_callback *); | ||
| 157 | |||
| 158 | /** | ||
| 159 | * iwpm_mapping_info_cb - Process a notification that the userspace | ||
| 160 | * port mapper daemon is started | ||
| 161 | * @skb: | ||
| 162 | * @cb: Contains the received message (payload and netlink header) | ||
| 163 | * | ||
| 164 | * Using the received port mapper pid, send all the local mapping | ||
| 165 | * info records to the userspace port mapper | ||
| 166 | */ | ||
| 167 | int iwpm_mapping_info_cb(struct sk_buff *, struct netlink_callback *); | ||
| 168 | |||
| 169 | /** | ||
| 170 | * iwpm_ack_mapping_info_cb - Process the port mapper ack for | ||
| 171 | * the provided local mapping info records | ||
| 172 | * @skb: | ||
| 173 | * @cb: Contains the received message (payload and netlink header) | ||
| 174 | */ | ||
| 175 | int iwpm_ack_mapping_info_cb(struct sk_buff *, struct netlink_callback *); | ||
| 176 | |||
| 177 | /** | ||
| 178 | * iwpm_create_mapinfo - Store local and mapped IPv4/IPv6 address | ||
| 179 | * info in a hash table | ||
| 180 | * @local_addr: Local ip/tcp address | ||
| 181 | * @mapped_addr: Mapped local ip/tcp address | ||
| 182 | * @nl_client: The index of the netlink client | ||
| 183 | */ | ||
| 184 | int iwpm_create_mapinfo(struct sockaddr_storage *local_addr, | ||
| 185 | struct sockaddr_storage *mapped_addr, u8 nl_client); | ||
| 186 | |||
| 187 | /** | ||
| 188 | * iwpm_remove_mapinfo - Remove local and mapped IPv4/IPv6 address | ||
| 189 | * info from the hash table | ||
| 190 | * @local_addr: Local ip/tcp address | ||
| 191 | * @mapped_addr: Mapped local ip/tcp address | ||
| 192 | * | ||
| 193 | * Returns err code if mapping info is not found in the hash table, | ||
| 194 | * otherwise returns 0 | ||
| 195 | */ | ||
| 196 | int iwpm_remove_mapinfo(struct sockaddr_storage *local_addr, | ||
| 197 | struct sockaddr_storage *mapped_addr); | ||
| 198 | |||
| 199 | #endif /* _IW_PORTMAP_H */ | ||
diff --git a/include/rdma/rdma_netlink.h b/include/rdma/rdma_netlink.h index e38de79eeb48..0790882e0c9b 100644 --- a/include/rdma/rdma_netlink.h +++ b/include/rdma/rdma_netlink.h | |||
| @@ -43,7 +43,7 @@ int ibnl_remove_client(int index); | |||
| 43 | * Returns the allocated buffer on success and NULL on failure. | 43 | * Returns the allocated buffer on success and NULL on failure. |
| 44 | */ | 44 | */ |
| 45 | void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq, | 45 | void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq, |
| 46 | int len, int client, int op); | 46 | int len, int client, int op, int flags); |
| 47 | /** | 47 | /** |
| 48 | * Put a new attribute in a supplied skb. | 48 | * Put a new attribute in a supplied skb. |
| 49 | * @skb: The netlink skb. | 49 | * @skb: The netlink skb. |
| @@ -56,4 +56,25 @@ void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq, | |||
| 56 | int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh, | 56 | int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh, |
| 57 | int len, void *data, int type); | 57 | int len, void *data, int type); |
| 58 | 58 | ||
| 59 | /** | ||
| 60 | * Send the supplied skb to a specific userspace PID. | ||
| 61 | * @skb: The netlink skb | ||
| 62 | * @nlh: Header of the netlink message to send | ||
| 63 | * @pid: Userspace netlink process ID | ||
| 64 | * Returns 0 on success or a negative error code. | ||
| 65 | */ | ||
| 66 | int ibnl_unicast(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
| 67 | __u32 pid); | ||
| 68 | |||
| 69 | /** | ||
| 70 | * Send the supplied skb to a netlink group. | ||
| 71 | * @skb: The netlink skb | ||
| 72 | * @nlh: Header of the netlink message to send | ||
| 73 | * @group: Netlink group ID | ||
| 74 | * @flags: allocation flags | ||
| 75 | * Returns 0 on success or a negative error code. | ||
| 76 | */ | ||
| 77 | int ibnl_multicast(struct sk_buff *skb, struct nlmsghdr *nlh, | ||
| 78 | unsigned int group, gfp_t flags); | ||
| 79 | |||
| 59 | #endif /* _RDMA_NETLINK_H */ | 80 | #endif /* _RDMA_NETLINK_H */ |
