version 1.94, 2007/02/10 09:43:05 |
version 1.95, 2007/02/17 22:34:13 |
|
|
* Unicast check |
* Unicast check |
*/ |
*/ |
if (!IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst, |
if (!IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst, |
&((struct sockaddr_in6 *)(&ip6_forward_rt.ro_dst))->sin6_addr)) |
&((const struct sockaddr_in6 *)rtcache_getdst((const struct route *)&ip6_forward_rt))->sin6_addr)) |
rtcache_free((struct route *)&ip6_forward_rt); |
rtcache_free((struct route *)&ip6_forward_rt); |
else |
else |
rtcache_check((struct route *)&ip6_forward_rt); |
rtcache_check((struct route *)&ip6_forward_rt); |
|
|
|
|
ip6stat.ip6s_forward_cachemiss++; |
ip6stat.ip6s_forward_cachemiss++; |
|
|
bzero(&ip6_forward_rt.ro_dst, sizeof(struct sockaddr_in6)); |
dst6 = &ip6_forward_rt.ro_dst; |
dst6 = (struct sockaddr_in6 *)&ip6_forward_rt.ro_dst; |
memset(dst6, 0, sizeof(*dst6)); |
dst6->sin6_len = sizeof(struct sockaddr_in6); |
dst6->sin6_len = sizeof(struct sockaddr_in6); |
dst6->sin6_family = AF_INET6; |
dst6->sin6_family = AF_INET6; |
dst6->sin6_addr = ip6->ip6_dst; |
dst6->sin6_addr = ip6->ip6_dst; |
Line 1298 ip6_savecontrol(in6p, mp, ip6, m) |
|
Line 1298 ip6_savecontrol(in6p, mp, ip6, m) |
|
|
|
|
|
void |
void |
ip6_notify_pmtu(struct in6pcb *in6p, struct sockaddr_in6 *dst, uint32_t *mtu) |
ip6_notify_pmtu(struct in6pcb *in6p, const struct sockaddr_in6 *dst, |
|
uint32_t *mtu) |
{ |
{ |
struct socket *so; |
struct socket *so; |
struct mbuf *m_mtu; |
struct mbuf *m_mtu; |
Line 1324 ip6_notify_pmtu(struct in6pcb *in6p, str |
|
Line 1325 ip6_notify_pmtu(struct in6pcb *in6p, str |
|
IPV6_PATHMTU, IPPROTO_IPV6)) == NULL) |
IPV6_PATHMTU, IPPROTO_IPV6)) == NULL) |
return; |
return; |
|
|
if (sbappendaddr(&so->so_rcv, (struct sockaddr *)dst, NULL, m_mtu) |
if (sbappendaddr(&so->so_rcv, (const struct sockaddr *)dst, NULL, m_mtu) |
== 0) { |
== 0) { |
m_freem(m_mtu); |
m_freem(m_mtu); |
/* XXX: should count statistics */ |
/* XXX: should count statistics */ |