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

Function fill_blackholeinfo

lib/ff_route.c:454–498  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

452}
453
454static int
455fill_blackholeinfo(struct rt_addrinfo *info, union sockaddr_union *saun)
456{
457 struct ifaddr *ifa;
458 sa_family_t saf;
459
460 if (V_loif == NULL) {
461 printf("Unable to add blackhole/reject nhop without loopback");
462 return (ENOTSUP);
463 }
464 info->rti_ifp = V_loif;
465
466 saf = info->rti_info[RTAX_DST]->sa_family;
467
468 CK_STAILQ_FOREACH(ifa, &info->rti_ifp->if_addrhead, ifa_link) {
469 if (ifa->ifa_addr->sa_family == saf) {
470 info->rti_ifa = ifa;
471 break;
472 }
473 }
474 if (info->rti_ifa == NULL)
475 return (ENOTSUP);
476
477 bzero(saun, sizeof(union sockaddr_union));
478 switch (saf) {
479 case AF_INET:
480 saun->sin.sin_family = AF_INET;
481 saun->sin.sin_len = sizeof(struct sockaddr_in);
482 saun->sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
483 break;
484#ifdef INET6
485 case AF_INET6:
486 saun->sin6.sin6_family = AF_INET6;
487 saun->sin6.sin6_len = sizeof(struct sockaddr_in6);
488 saun->sin6.sin6_addr = in6addr_loopback;
489 break;
490#endif
491 default:
492 return (ENOTSUP);
493 }
494 info->rti_info[RTAX_GATEWAY] = &saun->sa;
495 info->rti_flags |= RTF_GATEWAY;
496
497 return (0);
498}
499
500/*
501 * Fills in @info based on userland-provided @rtm message.

Callers 1

ff_rtioctlFunction · 0.70

Calls 2

bzeroFunction · 0.85
printfFunction · 0.70

Tested by

no test coverage detected