aboutsummaryrefslogtreecommitdiffstats
path: root/include/rdma/ib_addr.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/rdma/ib_addr.h')
-rw-r--r--include/rdma/ib_addr.h38
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 */
96int rdma_translate_ip(const struct sockaddr *addr, 96int 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
132int rdma_addr_size(struct sockaddr *addr); 132int rdma_addr_size(struct sockaddr *addr);
133 133
134int rdma_addr_find_smac_by_sgid(union ib_gid *sgid, u8 *smac, u16 *vlan_id);
135int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid, 134int 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
140static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr) 139static 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
201static 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
221static inline void rdma_addr_get_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid) 205static 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
231static inline void rdma_addr_set_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid) 211static inline void rdma_addr_set_sgid(struct rdma_dev_addr *dev_addr, union ib_gid *gid)