| 2057 | } |
| 2058 | |
| 2059 | static int |
| 2060 | nd6_prefix_onlink_rtrequest(struct nd_prefix *pr, struct ifaddr *ifa) |
| 2061 | { |
| 2062 | int error; |
| 2063 | |
| 2064 | struct sockaddr_in6 mask6 = { |
| 2065 | .sin6_family = AF_INET6, |
| 2066 | .sin6_len = sizeof(struct sockaddr_in6), |
| 2067 | .sin6_addr = pr->ndpr_mask, |
| 2068 | }; |
| 2069 | struct sockaddr_in6 *pmask6 = (pr->ndpr_plen != 128) ? &mask6 : NULL; |
| 2070 | |
| 2071 | error = nd6_prefix_rtrequest(pr->ndpr_ifp->if_fib, RTM_ADD, |
| 2072 | &pr->ndpr_prefix, pmask6, pr->ndpr_ifp, ifa); |
| 2073 | if (error == 0) |
| 2074 | pr->ndpr_stateflags |= NDPRF_ONLINK; |
| 2075 | |
| 2076 | return (error); |
| 2077 | } |
| 2078 | |
| 2079 | static int |
| 2080 | nd6_prefix_onlink(struct nd_prefix *pr) |
no test coverage detected