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

Function fill_blackholeinfo

freebsd/net/rtsock.c:567–613  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

565}
566
567static int
568fill_blackholeinfo(struct rt_addrinfo *info, union sockaddr_union *saun)
569{
570 struct ifaddr *ifa;
571 sa_family_t saf;
572
573 if (V_loif == NULL) {
574 printf("Unable to add blackhole/reject nhop without loopback");
575 return (ENOTSUP);
576 }
577 info->rti_ifp = V_loif;
578
579 saf = info->rti_info[RTAX_DST]->sa_family;
580
581 CK_STAILQ_FOREACH(ifa, &info->rti_ifp->if_addrhead, ifa_link) {
582 if (ifa->ifa_addr->sa_family == saf) {
583 info->rti_ifa = ifa;
584 break;
585 }
586 }
587 if (info->rti_ifa == NULL)
588 return (ENOTSUP);
589
590 bzero(saun, sizeof(union sockaddr_union));
591 switch (saf) {
592#ifdef INET
593 case AF_INET:
594 saun->sin.sin_family = AF_INET;
595 saun->sin.sin_len = sizeof(struct sockaddr_in);
596 saun->sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
597 break;
598#endif
599#ifdef INET6
600 case AF_INET6:
601 saun->sin6.sin6_family = AF_INET6;
602 saun->sin6.sin6_len = sizeof(struct sockaddr_in6);
603 saun->sin6.sin6_addr = in6addr_loopback;
604 break;
605#endif
606 default:
607 return (ENOTSUP);
608 }
609 info->rti_info[RTAX_GATEWAY] = &saun->sa;
610 info->rti_flags |= RTF_GATEWAY;
611
612 return (0);
613}
614
615/*
616 * Fills in @info based on userland-provided @rtm message.

Callers 1

route_outputFunction · 0.70

Calls 2

bzeroFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected