Changeset View
Changeset View
Standalone View
Standalone View
sys/ofed/drivers/infiniband/core/ib_addr.c
Show First 20 Lines • Show All 390 Lines • ▼ Show 20 Lines | if (dst_tmp.sin_addr.s_addr == INADDR_BROADCAST) { | ||||
else if (is_gw) | else if (is_gw) | ||||
addr->network = RDMA_NETWORK_IPV4; | addr->network = RDMA_NETWORK_IPV4; | ||||
} else if (ifp->if_flags & IFF_LOOPBACK) { | } else if (ifp->if_flags & IFF_LOOPBACK) { | ||||
memset(edst, 0, MAX_ADDR_LEN); | memset(edst, 0, MAX_ADDR_LEN); | ||||
error = 0; | error = 0; | ||||
} else { | } else { | ||||
bool is_gw = (nh->nh_flags & NHF_GATEWAY) != 0; | bool is_gw = (nh->nh_flags & NHF_GATEWAY) != 0; | ||||
memset(edst, 0, MAX_ADDR_LEN); | memset(edst, 0, MAX_ADDR_LEN); | ||||
/* FIXME should check nh->gw_sa.sa_family */ | |||||
error = arpresolve(ifp, is_gw, NULL, is_gw ? | error = arpresolve(ifp, is_gw, NULL, is_gw ? | ||||
&nh->gw_sa : (const struct sockaddr *)&dst_tmp, | &nh->gw_sa : (const struct sockaddr *)&dst_tmp, | ||||
edst, NULL, NULL); | edst, NULL, NULL); | ||||
if (error != 0) | if (error != 0) | ||||
goto error_put_ifp; | goto error_put_ifp; | ||||
else if (is_gw) | else if (is_gw) | ||||
addr->network = RDMA_NETWORK_IPV4; | addr->network = RDMA_NETWORK_IPV4; | ||||
} | } | ||||
/* | /* | ||||
zlei: Might be better if `nd6_resolve()` return with correct ether type ? | |||||
Done Inline ActionsThis is in D31379 IIUC. zlei: This is in D31379 IIUC. | |||||
* Step 4 - update source address, if any | * Step 4 - update source address, if any | ||||
*/ | */ | ||||
if (saddr != NULL) { | if (saddr != NULL) { | ||||
src_port = src_in->sin_port; | src_port = src_in->sin_port; | ||||
memcpy(src_in, saddr, rdma_addr_size(saddr)); | memcpy(src_in, saddr, rdma_addr_size(saddr)); | ||||
src_in->sin_port = src_port; /* preserve port number */ | src_in->sin_port = src_port; /* preserve port number */ | ||||
} | } | ||||
▲ Show 20 Lines • Show All 491 Lines • Show Last 20 Lines |
Might be better if nd6_resolve() return with correct ether type ?