MCPcopy Create free account
hub / github.com/F-Stack/f-stack / infiniband_resolve_addr

Function infiniband_resolve_addr

freebsd/net/if_infiniband.c:221–286  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

219}
220
221static int
222infiniband_resolve_addr(struct ifnet *ifp, struct mbuf *m,
223 const struct sockaddr *dst, struct route *ro, uint8_t *phdr,
224 uint32_t *pflags, struct llentry **plle)
225{
226 struct infiniband_header *ih;
227 uint32_t lleflags = 0;
228 int error = 0;
229
230 if (plle)
231 *plle = NULL;
232 ih = (struct infiniband_header *)phdr;
233
234 switch (dst->sa_family) {
235#ifdef INET
236 case AF_INET:
237 if ((m->m_flags & (M_BCAST | M_MCAST)) == 0) {
238 error = arpresolve(ifp, 0, m, dst, phdr, &lleflags, plle);
239 } else {
240 if (m->m_flags & M_BCAST) {
241 memcpy(ih->ib_hwaddr, ifp->if_broadcastaddr,
242 INFINIBAND_ADDR_LEN);
243 } else {
244 infiniband_ipv4_multicast_map(
245 ((const struct sockaddr_in *)dst)->sin_addr.s_addr,
246 ifp->if_broadcastaddr, ih->ib_hwaddr);
247 }
248 ih->ib_protocol = htons(ETHERTYPE_IP);
249 ih->ib_reserved = 0;
250 }
251 break;
252#endif
253#ifdef INET6
254 case AF_INET6:
255 if ((m->m_flags & M_MCAST) == 0) {
256 error = nd6_resolve(ifp, 0, m, dst, phdr, &lleflags, plle);
257 } else {
258 infiniband_ipv6_multicast_map(
259 &((const struct sockaddr_in6 *)dst)->sin6_addr,
260 ifp->if_broadcastaddr, ih->ib_hwaddr);
261 ih->ib_protocol = htons(ETHERTYPE_IPV6);
262 ih->ib_reserved = 0;
263 }
264 break;
265#endif
266 default:
267 if_printf(ifp, "can't handle af%d\n", dst->sa_family);
268 if (m != NULL)
269 m_freem(m);
270 return (EAFNOSUPPORT);
271 }
272
273 if (error == EHOSTDOWN) {
274 if (ro != NULL && (ro->ro_flags & RT_HAS_GW) != 0)
275 error = EHOSTUNREACH;
276 }
277
278 if (error != 0)

Callers 1

infiniband_outputFunction · 0.85

Calls 7

arpresolveFunction · 0.85
nd6_resolveFunction · 0.85
if_printfFunction · 0.85
memcpyFunction · 0.50
m_freemFunction · 0.50

Tested by

no test coverage detected