diff options
Diffstat (limited to 'include/rdma/ib_addr.h')
-rw-r--r-- | include/rdma/ib_addr.h | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h index 18c564f60e93..d656809f1217 100644 --- a/include/rdma/ib_addr.h +++ b/include/rdma/ib_addr.h | |||
@@ -94,7 +94,7 @@ struct rdma_dev_addr { | |||
94 | * The dev_addr->net field must be initialized. | 94 | * The dev_addr->net field must be initialized. |
95 | */ | 95 | */ |
96 | int rdma_translate_ip(const struct sockaddr *addr, | 96 | int rdma_translate_ip(const struct sockaddr *addr, |
97 | struct rdma_dev_addr *dev_addr, u16 *vlan_id); | 97 | struct rdma_dev_addr *dev_addr); |
98 | 98 | ||
99 | /** | 99 | /** |
100 | * rdma_resolve_ip - Resolve source and destination IP addresses to | 100 | * rdma_resolve_ip - Resolve source and destination IP addresses to |
@@ -131,10 +131,9 @@ void rdma_copy_addr(struct rdma_dev_addr *dev_addr, | |||
131 | 131 | ||
132 | int rdma_addr_size(struct sockaddr *addr); | 132 | int rdma_addr_size(struct sockaddr *addr); |
133 | 133 | ||
134 | int rdma_addr_find_smac_by_sgid(union ib_gid *sgid, u8 *smac, u16 *vlan_id); | ||
135 | int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid, | 134 | int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid, |
136 | const union ib_gid *dgid, | 135 | const union ib_gid *dgid, |
137 | u8 *smac, u16 *vlan_id, int *if_index, | 136 | u8 *dmac, const struct net_device *ndev, |
138 | int *hoplimit); | 137 | int *hoplimit); |
139 | 138 | ||
140 | static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr) | 139 | static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr) |
@@ -198,34 +197,15 @@ static inline void rdma_gid2ip(struct sockaddr *out, const union ib_gid *gid) | |||
198 | } | 197 | } |
199 | } | 198 | } |
200 | 199 | ||
201 | static inline void iboe_addr_get_sgid(struct rdma_dev_addr *dev_addr, | 200 | /* |
202 | union ib_gid *gid) | 201 | * rdma_get/set_sgid/dgid() APIs are applicable to IB, and iWarp. |
203 | { | 202 | * They are not applicable to RoCE. |
204 | struct net_device *dev; | 203 | * RoCE GIDs are derived from the IP addresses. |
205 | struct in_device *ip4; | 204 | */ |
206 | |||
207 | dev = dev_get_by_index(&init_net, dev_addr->bound_dev_if); | ||
208 | if (dev) { | ||
209 | ip4 = in_dev_get(dev); | ||
210 | if (ip4 && ip4->ifa_list && ip4->ifa_list->ifa_address) | ||
211 | ipv6_addr_set_v4mapped(ip4->ifa_list->ifa_address, | ||
212 | (struct in6_addr *)gid); | ||
213 | |||
214 | if (ip4) | ||
215 | in_dev_put(ip4); | ||
216 | |||
217 | dev_put(dev); | ||
218 | } | ||
219 | } | ||
220 | |||
221 | static inline void rdma_addr_get_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid) | 205 | static inline void rdma_addr_get_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid) |
222 | { | 206 | { |
223 | if (dev_addr->transport == RDMA_TRANSPORT_IB && | 207 | memcpy(gid, dev_addr->src_dev_addr + rdma_addr_gid_offset(dev_addr), |
224 | dev_addr->dev_type != ARPHRD_INFINIBAND) | 208 | sizeof(*gid)); |
225 | iboe_addr_get_sgid(dev_addr, gid); | ||
226 | else | ||
227 | memcpy(gid, dev_addr->src_dev_addr + | ||
228 | rdma_addr_gid_offset(dev_addr), sizeof *gid); | ||
229 | } | 209 | } |
230 | 210 | ||
231 | static inline void rdma_addr_set_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid) | 211 | static inline void rdma_addr_set_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid) |