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

Function in6_handle_dstaddr_rtrequest

freebsd/netinet6/in6.c:1259–1295  ·  view source on GitHub ↗

* Adds or deletes interface route for p2p ifa. * Returns 0 on success or errno. */

Source from the content-addressed store, hash-verified

1257 * Returns 0 on success or errno.
1258 */
1259static int
1260in6_handle_dstaddr_rtrequest(int cmd, struct in6_ifaddr *ia)
1261{
1262 struct epoch_tracker et;
1263 struct ifaddr *ifa = &ia->ia_ifa;
1264 int error;
1265
1266 /* Prepare gateway */
1267 struct sockaddr_dl_short sdl = {
1268 .sdl_family = AF_LINK,
1269 .sdl_len = sizeof(struct sockaddr_dl_short),
1270 .sdl_type = ifa->ifa_ifp->if_type,
1271 .sdl_index = ifa->ifa_ifp->if_index,
1272 };
1273
1274 struct sockaddr_in6 dst = {
1275 .sin6_family = AF_INET6,
1276 .sin6_len = sizeof(struct sockaddr_in6),
1277 .sin6_addr = ia->ia_dstaddr.sin6_addr,
1278 };
1279
1280 struct rt_addrinfo info = {
1281 .rti_ifa = ifa,
1282 .rti_flags = RTF_PINNED | RTF_HOST,
1283 .rti_info = {
1284 [RTAX_DST] = (struct sockaddr *)&dst,
1285 [RTAX_GATEWAY] = (struct sockaddr *)&sdl,
1286 },
1287 };
1288 /* Don't set additional per-gw filters on removal */
1289
1290 NET_EPOCH_ENTER(et);
1291 error = rib_handle_ifaddr_info(ifa->ifa_ifp->if_fib, cmd, &info);
1292 NET_EPOCH_EXIT(et);
1293
1294 return (error);
1295}
1296
1297static bool
1298ifa_is_p2p(struct in6_ifaddr *ia)

Callers 2

in6_purgeaddrFunction · 0.85
in6_notify_ifaFunction · 0.85

Calls 1

rib_handle_ifaddr_infoFunction · 0.85

Tested by

no test coverage detected