Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/netinet6/ip6_input.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/netinet6/ip6_input.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.109.4.2 retrieving revision 1.114 diff -u -p -r1.109.4.2 -r1.114 --- src/sys/netinet6/ip6_input.c 2007/10/26 15:49:08 1.109.4.2 +++ src/sys/netinet6/ip6_input.c 2008/02/27 19:40:56 1.114 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_input.c,v 1.109.4.2 2007/10/26 15:49:08 joerg Exp $ */ +/* $NetBSD: ip6_input.c,v 1.114 2008/02/27 19:40:56 matt Exp $ */ /* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.109.4.2 2007/10/26 15:49:08 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.114 2008/02/27 19:40:56 matt Exp $"); #include "opt_inet.h" #include "opt_inet6.h" @@ -149,7 +149,7 @@ struct pfil_head inet6_pfil_hook; struct ip6stat ip6stat; static void ip6_init2(void *); -static struct m_tag *ip6_setdstifaddr __P((struct mbuf *, struct in6_ifaddr *)); +static struct m_tag *ip6_setdstifaddr(struct mbuf *, const struct in6_ifaddr *); static int ip6_hopopts_input(u_int32_t *, u_int32_t *, struct mbuf **, int *); static struct mbuf *ip6_pullexthdr(struct mbuf *, size_t, int); @@ -159,7 +159,7 @@ static struct mbuf *ip6_pullexthdr(struc * All protocols not implemented in kernel go to raw IP6 protocol handler. */ void -ip6_init() +ip6_init(void) { const struct ip6protosw *pr; int i; @@ -217,7 +217,7 @@ ip6_init2(void *dummy) * IP6 input interrupt handling. Just pass the packet to ip6_input. */ void -ip6intr() +ip6intr(void) { int s; struct mbuf *m; @@ -559,7 +559,7 @@ ip6_input(struct mbuf *m) * working right. */ struct ifaddr *ifa; - TAILQ_FOREACH(ifa, &m->m_pkthdr.rcvif->if_addrlist, ifa_list) { + IFADDR_FOREACH(ifa, m->m_pkthdr.rcvif) { if (ifa->ifa_addr == NULL) continue; /* just for safety */ if (ifa->ifa_addr->sa_family != AF_INET6) @@ -827,24 +827,30 @@ ip6_input(struct mbuf *m) * set/grab in6_ifaddr correspond to IPv6 destination address. */ static struct m_tag * -ip6_setdstifaddr(struct mbuf *m, struct in6_ifaddr *ia6) +ip6_setdstifaddr(struct mbuf *m, const struct in6_ifaddr *ia) { struct m_tag *mtag; mtag = ip6_addaux(m); - if (mtag) - ((struct ip6aux *)(mtag + 1))->ip6a_dstia6 = ia6; + if (mtag != NULL) { + struct ip6aux *ip6a; + + ip6a = (struct ip6aux *)(mtag + 1); + in6_setscope(&ip6a->ip6a_src, ia->ia_ifp, &ip6a->ip6a_scope_id); + ip6a->ip6a_src = ia->ia_addr.sin6_addr; + ip6a->ip6a_flags = ia->ia6_flags; + } return mtag; /* NULL if failed to set */ } -struct in6_ifaddr * +const struct ip6aux * ip6_getdstifaddr(struct mbuf *m) { struct m_tag *mtag; mtag = ip6_findaux(m); - if (mtag) - return ((struct ip6aux *)(mtag + 1))->ip6a_dstia6; + if (mtag != NULL) + return (struct ip6aux *)(mtag + 1); else return NULL; }