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

Function sctp_v6src_match_nexthop

freebsd/netinet/sctp_output.c:13759–13809  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13757
13758#ifdef INET6
13759int
13760sctp_v6src_match_nexthop(struct sockaddr_in6 *src6, sctp_route_t *ro)
13761{
13762 struct nd_prefix *pfx = NULL;
13763 struct nd_pfxrouter *pfxrtr = NULL;
13764 struct sockaddr_in6 gw6;
13765
13766 if (ro == NULL || ro->ro_nh == NULL || src6->sin6_family != AF_INET6)
13767 return (0);
13768
13769 /* get prefix entry of address */
13770 ND6_RLOCK();
13771 LIST_FOREACH(pfx, &MODULE_GLOBAL(nd_prefix), ndpr_entry) {
13772 if (pfx->ndpr_stateflags & NDPRF_DETACHED)
13773 continue;
13774 if (IN6_ARE_MASKED_ADDR_EQUAL(&pfx->ndpr_prefix.sin6_addr,
13775 &src6->sin6_addr, &pfx->ndpr_mask))
13776 break;
13777 }
13778 /* no prefix entry in the prefix list */
13779 if (pfx == NULL) {
13780 ND6_RUNLOCK();
13781 SCTPDBG(SCTP_DEBUG_OUTPUT2, "No prefix entry for ");
13782 SCTPDBG_ADDR(SCTP_DEBUG_OUTPUT2, (struct sockaddr *)src6);
13783 return (0);
13784 }
13785
13786 SCTPDBG(SCTP_DEBUG_OUTPUT2, "v6src_match_nexthop(), Prefix entry is ");
13787 SCTPDBG_ADDR(SCTP_DEBUG_OUTPUT2, (struct sockaddr *)src6);
13788
13789 /* search installed gateway from prefix entry */
13790 LIST_FOREACH(pfxrtr, &pfx->ndpr_advrtrs, pfr_entry) {
13791 memset(&gw6, 0, sizeof(struct sockaddr_in6));
13792 gw6.sin6_family = AF_INET6;
13793 gw6.sin6_len = sizeof(struct sockaddr_in6);
13794 memcpy(&gw6.sin6_addr, &pfxrtr->router->rtaddr,
13795 sizeof(struct in6_addr));
13796 SCTPDBG(SCTP_DEBUG_OUTPUT2, "prefix router is ");
13797 SCTPDBG_ADDR(SCTP_DEBUG_OUTPUT2, (struct sockaddr *)&gw6);
13798 SCTPDBG(SCTP_DEBUG_OUTPUT2, "installed router is ");
13799 SCTPDBG_ADDR(SCTP_DEBUG_OUTPUT2, &ro->ro_nh->gw_sa);
13800 if (sctp_cmpaddr((struct sockaddr *)&gw6, &ro->ro_nh->gw_sa)) {
13801 ND6_RUNLOCK();
13802 SCTPDBG(SCTP_DEBUG_OUTPUT2, "pfxrouter is installed\n");
13803 return (1);
13804 }
13805 }
13806 ND6_RUNLOCK();
13807 SCTPDBG(SCTP_DEBUG_OUTPUT2, "pfxrouter is not installed\n");
13808 return (0);
13809}
13810#endif
13811
13812int

Calls 3

memsetFunction · 0.85
sctp_cmpaddrFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected