summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netinet/icmp6.h4
-rw-r--r--sys/netinet/tcp_subr.c17
-rw-r--r--sys/netinet/tcp_var.h4
-rw-r--r--sys/netinet6/icmp6.c18
-rw-r--r--sys/netinet6/in6_src.c4
5 files changed, 23 insertions, 24 deletions
diff --git a/sys/netinet/icmp6.h b/sys/netinet/icmp6.h
index 5bd1943fe98..00d6a84078c 100644
--- a/sys/netinet/icmp6.h
+++ b/sys/netinet/icmp6.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: icmp6.h,v 1.36 2013/06/01 01:30:53 brad Exp $ */
+/* $OpenBSD: icmp6.h,v 1.37 2013/10/21 08:42:24 phessler Exp $ */
/* $KAME: icmp6.h,v 1.84 2003/04/23 10:26:51 itojun Exp $ */
/*
@@ -702,7 +702,7 @@ int icmp6_sysctl(int *, u_int, void *, size_t *, void *, size_t);
struct ip6ctlparam;
void icmp6_mtudisc_update(struct ip6ctlparam *, int);
-void icmp6_mtudisc_callback_register(void (*)(struct in6_addr *));
+void icmp6_mtudisc_callback_register(void (*)(struct sockaddr_in6 *, u_int));
/* XXX: is this the right place for these macros? */
#define icmp6_ifstat_inc(ifp, tag) \
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index 3bb7f08f688..c2143fb161b 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcp_subr.c,v 1.122 2013/10/20 11:03:01 phessler Exp $ */
+/* $OpenBSD: tcp_subr.c,v 1.123 2013/10/21 08:42:24 phessler Exp $ */
/* $NetBSD: tcp_subr.c,v 1.22 1996/02/13 23:44:00 christos Exp $ */
/*
@@ -891,17 +891,12 @@ tcp_ctlinput(int cmd, struct sockaddr *sa, u_int rdomain, void *v)
* Path MTU Discovery handlers.
*/
void
-tcp6_mtudisc_callback(faddr)
- struct in6_addr *faddr;
+tcp6_mtudisc_callback(sin6, rdomain)
+ struct sockaddr_in6 *sin6;
+ u_int rdomain;
{
- struct sockaddr_in6 sin6;
-
- bzero(&sin6, sizeof(sin6));
- sin6.sin6_family = AF_INET6;
- sin6.sin6_len = sizeof(struct sockaddr_in6);
- sin6.sin6_addr = *faddr;
- (void) in6_pcbnotify(&tcbtable, &sin6, 0,
- &sa6_any, 0, /* XXX rdomain */ 0, PRC_MSGSIZE, NULL, tcp_mtudisc);
+ (void) in6_pcbnotify(&tcbtable, sin6, 0,
+ &sa6_any, 0, rdomain, PRC_MSGSIZE, NULL, tcp_mtudisc);
}
#endif /* INET6 */
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index acded92556b..1d4885aa86d 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcp_var.h,v 1.102 2013/08/12 21:57:16 bluhm Exp $ */
+/* $OpenBSD: tcp_var.h,v 1.103 2013/10/21 08:42:24 phessler Exp $ */
/* $NetBSD: tcp_var.h,v 1.17 1996/02/13 23:44:24 christos Exp $ */
/*
@@ -590,7 +590,7 @@ void tcp_mtudisc(struct inpcb *, int);
void tcp_mtudisc_increase(struct inpcb *, int);
#ifdef INET6
void tcp6_mtudisc(struct inpcb *, int);
-void tcp6_mtudisc_callback(struct in6_addr *);
+void tcp6_mtudisc_callback(struct sockaddr_in6 *, u_int);
#endif
struct tcpcb *
tcp_newtcpcb(struct inpcb *);
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c
index ce399c92a08..03434510f91 100644
--- a/sys/netinet6/icmp6.c
+++ b/sys/netinet6/icmp6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: icmp6.c,v 1.131 2013/10/17 16:27:45 bluhm Exp $ */
+/* $OpenBSD: icmp6.c,v 1.132 2013/10/21 08:42:25 phessler Exp $ */
/* $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */
/*
@@ -142,7 +142,7 @@ extern int icmp6_nodeinfo;
*/
struct icmp6_mtudisc_callback {
LIST_ENTRY(icmp6_mtudisc_callback) mc_list;
- void (*mc_func)(struct in6_addr *);
+ void (*mc_func)(struct sockaddr_in6 *, u_int);
};
LIST_HEAD(, icmp6_mtudisc_callback) icmp6_mtudisc_callbacks =
@@ -248,7 +248,7 @@ icmp6_errcount(struct icmp6errstat *stat, int type, int code)
* Register a Path MTU Discovery callback.
*/
void
-icmp6_mtudisc_callback_register(void (*func)(struct in6_addr *))
+icmp6_mtudisc_callback_register(void (*func)(struct sockaddr_in6 *, u_int))
{
struct icmp6_mtudisc_callback *mc;
@@ -1142,7 +1142,9 @@ icmp6_mtudisc_update(struct ip6ctlparam *ip6cp, int validated)
sin6.sin6_addr.s6_addr16[1] =
htons(m->m_pkthdr.rcvif->if_index);
}
- /* sin6.sin6_scope_id = XXX: should be set if DST is a scoped addr */
+ sin6.sin6_scope_id = in6_addr2scopeid(m->m_pkthdr.rcvif,
+ &sin6.sin6_addr);
+
rt = icmp6_mtudisc_clone(sin6tosa(&sin6), m->m_pkthdr.rdomain);
if (rt && (rt->rt_flags & RTF_HOST) &&
@@ -1163,7 +1165,7 @@ icmp6_mtudisc_update(struct ip6ctlparam *ip6cp, int validated)
*/
for (mc = LIST_FIRST(&icmp6_mtudisc_callbacks); mc != NULL;
mc = LIST_NEXT(mc, mc_list))
- (*mc->mc_func)(&sin6.sin6_addr);
+ (*mc->mc_func)(&sin6, m->m_pkthdr.rdomain);
}
/*
@@ -2349,11 +2351,11 @@ icmp6_redirect_input(struct mbuf *m, int off)
bcopy(&src6, &ssrc.sin6_addr, sizeof(struct in6_addr));
rtredirect(sin6tosa(&sdst), sin6tosa(&sgw), NULL,
RTF_GATEWAY | RTF_HOST, sin6tosa(&ssrc),
- &newrt, /* XXX */ 0);
+ &newrt, m->m_pkthdr.rdomain);
if (newrt) {
(void)rt_timer_add(newrt, icmp6_redirect_timeout,
- icmp6_redirect_timeout_q, /* XXX */ 0);
+ icmp6_redirect_timeout_q, m->m_pkthdr.rdomain);
rtfree(newrt);
}
}
@@ -2786,7 +2788,7 @@ icmp6_mtudisc_clone(struct sockaddr *dst, u_int rdomain)
rt = nrt;
}
error = rt_timer_add(rt, icmp6_mtudisc_timeout,
- icmp6_mtudisc_timeout_q, /* XXX */ 0);
+ icmp6_mtudisc_timeout_q, rdomain);
if (error) {
rtfree(rt);
return NULL;
diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c
index 346eb8819ea..49d334a3d6e 100644
--- a/sys/netinet6/in6_src.c
+++ b/sys/netinet6/in6_src.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in6_src.c,v 1.33 2013/10/17 16:27:46 bluhm Exp $ */
+/* $OpenBSD: in6_src.c,v 1.34 2013/10/21 08:42:25 phessler Exp $ */
/* $KAME: in6_src.c,v 1.36 2001/02/06 04:08:17 itojun Exp $ */
/*
@@ -259,6 +259,7 @@ in6_selectsrc(struct sockaddr_in6 *dstsock, struct ip6_pktopts *opts,
/* No route yet, so try to acquire one */
bzero(&ro->ro_dst, sizeof(struct sockaddr_in6));
+ ro->ro_tableid = rtableid;
sa6 = &ro->ro_dst;
sa6->sin6_family = AF_INET6;
sa6->sin6_len = sizeof(struct sockaddr_in6);
@@ -445,6 +446,7 @@ selectroute(struct sockaddr_in6 *dstsock, struct ip6_pktopts *opts,
/* No route yet, so try to acquire one */
bzero(&ro->ro_dst, sizeof(struct sockaddr_in6));
+ ro->ro_tableid = rtableid;
sa6 = &ro->ro_dst;
*sa6 = *dstsock;
sa6->sin6_scope_id = 0;