Lines Matching +full:data +full:- +full:path

2  * Copyright (c) 2010-2012 Intel Corporation.  All rights reserved.
14 * - Redistributions of source code must retain the above
18 * - Redistributions in binary form must reproduce the above
74 uint8_t data[3]; member
87 struct ibv_path_record path; member
102 struct acm_ep_addr_data data[0]; member
108 uint8_t data[ACM_MSG_DATA_LENGTH]; member
114 static int sock = -1;
156 sock = -1; in ucma_ib_init()
176 struct ibv_path_record *path; in ucma_ib_set_addr() local
188 path = &((struct ibv_path_data *) ib_rai->ai_route)->path; in ucma_ib_set_addr()
190 src->sib_family = AF_IB; in ucma_ib_set_addr()
191 src->sib_pkey = path->pkey; in ucma_ib_set_addr()
192 src->sib_flowinfo = htobe32(be32toh(path->flowlabel_hoplimit) >> 8); in ucma_ib_set_addr()
193 memcpy(&src->sib_addr, &path->sgid, 16); in ucma_ib_set_addr()
194 ucma_set_sid(ib_rai->ai_port_space, rai->ai_src_addr, src); in ucma_ib_set_addr()
196 dst->sib_family = AF_IB; in ucma_ib_set_addr()
197 dst->sib_pkey = path->pkey; in ucma_ib_set_addr()
198 dst->sib_flowinfo = htobe32(be32toh(path->flowlabel_hoplimit) >> 8); in ucma_ib_set_addr()
199 memcpy(&dst->sib_addr, &path->dgid, 16); in ucma_ib_set_addr()
200 ucma_set_sid(ib_rai->ai_port_space, rai->ai_dst_addr, dst); in ucma_ib_set_addr()
202 ib_rai->ai_src_addr = (struct sockaddr *) src; in ucma_ib_set_addr()
203 ib_rai->ai_src_len = sizeof(*src); in ucma_ib_set_addr()
205 ib_rai->ai_dst_addr = (struct sockaddr *) dst; in ucma_ib_set_addr()
206 ib_rai->ai_dst_len = sizeof(*dst); in ucma_ib_set_addr()
216 if (rai->ai_family == AF_IB) in ucma_ib_set_connect()
223 if (rai->ai_family == AF_INET) { in ucma_ib_set_connect()
224 hdr->ip_version = 4 << 4; in ucma_ib_set_connect()
225 memcpy(&hdr->cma_src_ip4, in ucma_ib_set_connect()
226 &((struct sockaddr_in *) rai->ai_src_addr)->sin_addr, 4); in ucma_ib_set_connect()
227 memcpy(&hdr->cma_dst_ip4, in ucma_ib_set_connect()
228 &((struct sockaddr_in *) rai->ai_dst_addr)->sin_addr, 4); in ucma_ib_set_connect()
230 hdr->ip_version = 6 << 4; in ucma_ib_set_connect()
231 memcpy(&hdr->cma_src_ip6, in ucma_ib_set_connect()
232 &((struct sockaddr_in6 *) rai->ai_src_addr)->sin6_addr, 16); in ucma_ib_set_connect()
233 memcpy(&hdr->cma_dst_ip6, in ucma_ib_set_connect()
234 &((struct sockaddr_in6 *) rai->ai_dst_addr)->sin6_addr, 16); in ucma_ib_set_connect()
237 ib_rai->ai_connect = hdr; in ucma_ib_set_connect()
238 ib_rai->ai_connect_len = sizeof(*hdr); in ucma_ib_set_connect()
250 ib_rai->ai_flags = (*rai)->ai_flags; in ucma_resolve_af_ib()
251 ib_rai->ai_family = AF_IB; in ucma_resolve_af_ib()
252 ib_rai->ai_qp_type = (*rai)->ai_qp_type; in ucma_resolve_af_ib()
253 ib_rai->ai_port_space = (*rai)->ai_port_space; in ucma_resolve_af_ib()
255 ib_rai->ai_route = calloc(1, (*rai)->ai_route_len); in ucma_resolve_af_ib()
256 if (!ib_rai->ai_route) in ucma_resolve_af_ib()
259 memcpy(ib_rai->ai_route, (*rai)->ai_route, (*rai)->ai_route_len); in ucma_resolve_af_ib()
260 ib_rai->ai_route_len = (*rai)->ai_route_len; in ucma_resolve_af_ib()
262 if ((*rai)->ai_src_canonname) { in ucma_resolve_af_ib()
263 ib_rai->ai_src_canonname = strdup((*rai)->ai_src_canonname); in ucma_resolve_af_ib()
264 if (!ib_rai->ai_src_canonname) in ucma_resolve_af_ib()
268 if ((*rai)->ai_dst_canonname) { in ucma_resolve_af_ib()
269 ib_rai->ai_dst_canonname = strdup((*rai)->ai_dst_canonname); in ucma_resolve_af_ib()
270 if (!ib_rai->ai_dst_canonname) in ucma_resolve_af_ib()
280 ib_rai->ai_next = *rai; in ucma_resolve_af_ib()
296 cnt = (msg->hdr.length - ACM_MSG_HDR_LENGTH) / ACM_MSG_EP_LENGTH; in ucma_ib_save_resp()
298 ep_data = &msg->resolve_data[i]; in ucma_ib_save_resp()
299 switch (ep_data->type) { in ucma_ib_save_resp()
301 ep_data->type = 0; in ucma_ib_save_resp()
307 if (!(ep_data->flags & ACM_EP_FLAG_SOURCE) || rai->ai_src_len) in ucma_ib_save_resp()
314 sin->sin_family = AF_INET; in ucma_ib_save_resp()
315 memcpy(&sin->sin_addr, &ep_data->info.addr, 4); in ucma_ib_save_resp()
316 rai->ai_src_len = sizeof(*sin); in ucma_ib_save_resp()
317 rai->ai_src_addr = (struct sockaddr *) sin; in ucma_ib_save_resp()
320 if (!(ep_data->flags & ACM_EP_FLAG_SOURCE) || rai->ai_src_len) in ucma_ib_save_resp()
327 sin6->sin6_family = AF_INET6; in ucma_ib_save_resp()
328 memcpy(&sin6->sin6_addr, &ep_data->info.addr, 16); in ucma_ib_save_resp()
329 rai->ai_src_len = sizeof(*sin6); in ucma_ib_save_resp()
330 rai->ai_src_addr = (struct sockaddr *) sin6; in ucma_ib_save_resp()
337 rai->ai_route = calloc(path_cnt, sizeof(*path_data)); in ucma_ib_save_resp()
338 if (rai->ai_route) { in ucma_ib_save_resp()
339 memcpy(rai->ai_route, path_data, path_cnt * sizeof(*path_data)); in ucma_ib_save_resp()
340 rai->ai_route_len = path_cnt * sizeof(*path_data); in ucma_ib_save_resp()
344 static void ucma_set_ep_addr(struct acm_ep_addr_data *data, struct sockaddr *addr) in ucma_set_ep_addr() argument
346 if (addr->sa_family == AF_INET) { in ucma_set_ep_addr()
347 data->type = ACM_EP_INFO_ADDRESS_IP; in ucma_set_ep_addr()
348 memcpy(data->info.addr, &((struct sockaddr_in *) addr)->sin_addr, 4); in ucma_set_ep_addr()
350 data->type = ACM_EP_INFO_ADDRESS_IP6; in ucma_set_ep_addr()
351 memcpy(data->info.addr, &((struct sockaddr_in6 *) addr)->sin6_addr, 16); in ucma_set_ep_addr()
357 return len && addr && (addr->sa_family == AF_INET || in ucma_inet_addr()
358 addr->sa_family == AF_INET6); in ucma_inet_addr()
363 return len && addr && (addr->sa_family == AF_IB); in ucma_ib_addr()
370 struct acm_ep_addr_data *data; in ucma_ib_resolve() local
382 data = &msg.resolve_data[0]; in ucma_ib_resolve()
383 if (ucma_inet_addr((*rai)->ai_src_addr, (*rai)->ai_src_len)) { in ucma_ib_resolve()
384 data->flags = ACM_EP_FLAG_SOURCE; in ucma_ib_resolve()
385 ucma_set_ep_addr(data, (*rai)->ai_src_addr); in ucma_ib_resolve()
386 data++; in ucma_ib_resolve()
390 if (ucma_inet_addr((*rai)->ai_dst_addr, (*rai)->ai_dst_len)) { in ucma_ib_resolve()
391 data->flags = ACM_EP_FLAG_DEST; in ucma_ib_resolve()
392 if (hints->ai_flags & (RAI_NUMERICHOST | RAI_NOROUTE)) in ucma_ib_resolve()
393 data->flags |= ACM_FLAGS_NODELAY; in ucma_ib_resolve()
394 ucma_set_ep_addr(data, (*rai)->ai_dst_addr); in ucma_ib_resolve()
395 data++; in ucma_ib_resolve()
399 if (hints->ai_route_len || in ucma_ib_resolve()
400 ucma_ib_addr((*rai)->ai_src_addr, (*rai)->ai_src_len) || in ucma_ib_resolve()
401 ucma_ib_addr((*rai)->ai_dst_addr, (*rai)->ai_dst_len)) { in ucma_ib_resolve()
402 struct ibv_path_record *path; in ucma_ib_resolve() local
404 if (hints->ai_route_len == sizeof(struct ibv_path_record)) in ucma_ib_resolve()
405 path = (struct ibv_path_record *) hints->ai_route; in ucma_ib_resolve()
406 else if (hints->ai_route_len == sizeof(struct ibv_path_data)) in ucma_ib_resolve()
407 path = &((struct ibv_path_data *) hints->ai_route)->path; in ucma_ib_resolve()
409 path = NULL; in ucma_ib_resolve()
411 if (path) in ucma_ib_resolve()
412 memcpy(&data->info.path, path, sizeof(*path)); in ucma_ib_resolve()
414 if (ucma_ib_addr((*rai)->ai_src_addr, (*rai)->ai_src_len)) { in ucma_ib_resolve()
415 memcpy(&data->info.path.sgid, in ucma_ib_resolve()
416 &((struct sockaddr_ib *) (*rai)->ai_src_addr)->sib_addr, 16); in ucma_ib_resolve()
418 if (ucma_ib_addr((*rai)->ai_dst_addr, (*rai)->ai_dst_len)) { in ucma_ib_resolve()
419 memcpy(&data->info.path.dgid, in ucma_ib_resolve()
420 &((struct sockaddr_ib *) (*rai)->ai_dst_addr)->sib_addr, 16); in ucma_ib_resolve()
422 data->type = ACM_EP_INFO_PATH; in ucma_ib_resolve()
423 data++; in ucma_ib_resolve()
441 if (af_ib_support && !(hints->ai_flags & RAI_ROUTEONLY) && (*rai)->ai_route_len) in ucma_ib_resolve()