Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet6/icmp6.c
Show First 20 Lines • Show All 2,369 Lines • ▼ Show 20 Lines | */ | ||||
u_int fibnum; | u_int fibnum; | ||||
bzero(&sdst, sizeof(sdst)); | bzero(&sdst, sizeof(sdst)); | ||||
bzero(&ssrc, sizeof(ssrc)); | bzero(&ssrc, sizeof(ssrc)); | ||||
sdst.sin6_family = ssrc.sin6_family = AF_INET6; | sdst.sin6_family = ssrc.sin6_family = AF_INET6; | ||||
sdst.sin6_len = ssrc.sin6_len = sizeof(struct sockaddr_in6); | sdst.sin6_len = ssrc.sin6_len = sizeof(struct sockaddr_in6); | ||||
bcopy(&reddst6, &sdst.sin6_addr, sizeof(struct in6_addr)); | bcopy(&reddst6, &sdst.sin6_addr, sizeof(struct in6_addr)); | ||||
bcopy(&src6, &ssrc.sin6_addr, sizeof(struct in6_addr)); | bcopy(&src6, &ssrc.sin6_addr, sizeof(struct in6_addr)); | ||||
rt_flags = RTF_HOST; | rt_flags = 0; | ||||
if (is_router) { | if (is_router) { | ||||
bzero(&sgw, sizeof(sgw)); | bzero(&sgw, sizeof(sgw)); | ||||
sgw.sin6_family = AF_INET6; | sgw.sin6_family = AF_INET6; | ||||
sgw.sin6_len = sizeof(struct sockaddr_in6); | sgw.sin6_len = sizeof(struct sockaddr_in6); | ||||
bcopy(&redtgt6, &sgw.sin6_addr, | bcopy(&redtgt6, &sgw.sin6_addr, | ||||
sizeof(struct in6_addr)); | sizeof(struct in6_addr)); | ||||
gw = (struct sockaddr *)&sgw; | gw = (struct sockaddr *)&sgw; | ||||
rt_flags |= RTF_GATEWAY; | rt_flags |= RTF_GATEWAY; | ||||
} else | } else | ||||
gw = ifp->if_addr->ifa_addr; | gw = ifp->if_addr->ifa_addr; | ||||
for (fibnum = 0; fibnum < rt_numfibs; fibnum++) | for (fibnum = 0; fibnum < rt_numfibs; fibnum++) | ||||
in6_rtredirect((struct sockaddr *)&sdst, gw, | rib_add_redirect(fibnum, (struct sockaddr *)&sdst, gw, | ||||
(struct sockaddr *)NULL, rt_flags, | (struct sockaddr *)&ssrc, ifp, rt_flags, | ||||
(struct sockaddr *)&ssrc, fibnum); | V_icmp6_redirtimeout); | ||||
} | } | ||||
/* finally update cached route in each socket via pfctlinput */ | /* finally update cached route in each socket via pfctlinput */ | ||||
{ | { | ||||
struct sockaddr_in6 sdst; | struct sockaddr_in6 sdst; | ||||
bzero(&sdst, sizeof(sdst)); | bzero(&sdst, sizeof(sdst)); | ||||
sdst.sin6_family = AF_INET6; | sdst.sin6_family = AF_INET6; | ||||
sdst.sin6_len = sizeof(struct sockaddr_in6); | sdst.sin6_len = sizeof(struct sockaddr_in6); | ||||
▲ Show 20 Lines • Show All 403 Lines • Show Last 20 Lines |