summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authoritojun <itojun@openbsd.org>2004-06-21 20:44:54 +0000
committeritojun <itojun@openbsd.org>2004-06-21 20:44:54 +0000
commit5695809171bf03b928ee29025575e84c45a5410c (patch)
tree6ca69d41ac48dae971187baf5d8ddf2e07994443 /sys/netinet
parentRecognize cats as an arm machine. Dunno how this was missed before. (diff)
downloadwireguard-openbsd-5695809171bf03b928ee29025575e84c45a5410c.tar.xz
wireguard-openbsd-5695809171bf03b928ee29025575e84c45a5410c.zip
make it possble to use IPsec over link-local address (policy table uses
sin6_scope_id, IPsec porion uses embedded form). beck ok
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/ip_ipip.c6
-rw-r--r--sys/netinet/ip_spd.c6
-rw-r--r--sys/netinet/ipsec_input.c4
3 files changed, 9 insertions, 7 deletions
diff --git a/sys/netinet/ip_ipip.c b/sys/netinet/ip_ipip.c
index 4b3631a4333..5772e6e8ec7 100644
--- a/sys/netinet/ip_ipip.c
+++ b/sys/netinet/ip_ipip.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_ipip.c,v 1.30 2003/12/10 07:22:43 itojun Exp $ */
+/* $OpenBSD: ip_ipip.c,v 1.31 2004/06/21 20:44:54 itojun Exp $ */
/*
* The authors of this code are John Ioannidis (ji@tla.org),
* Angelos D. Keromytis (kermit@csd.uch.gr) and
@@ -542,8 +542,8 @@ ipip_output(struct mbuf *m, struct tdb *tdb, struct mbuf **mp, int skip,
ip6o->ip6_vfc |= IPV6_VERSION;
ip6o->ip6_plen = htons(m->m_pkthdr.len);
ip6o->ip6_hlim = ip_defttl;
- ip6o->ip6_dst = tdb->tdb_dst.sin6.sin6_addr;
- ip6o->ip6_src = tdb->tdb_src.sin6.sin6_addr;
+ in6_embedscope(&ip6o->ip6_src, &tdb->tdb_src.sin6, NULL, NULL);
+ in6_embedscope(&ip6o->ip6_dst, &tdb->tdb_dst.sin6, NULL, NULL);
#ifdef INET
if (tp == IPVERSION) {
diff --git a/sys/netinet/ip_spd.c b/sys/netinet/ip_spd.c
index 4928b0d9bb4..a8099ead19a 100644
--- a/sys/netinet/ip_spd.c
+++ b/sys/netinet/ip_spd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_spd.c,v 1.48 2004/04/14 20:10:04 markus Exp $ */
+/* $OpenBSD: ip_spd.c,v 1.49 2004/06/21 20:44:54 itojun Exp $ */
/*
* The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
*
@@ -190,8 +190,8 @@ ipsp_spd_lookup(struct mbuf *m, int af, int hlen, int *error, int direction,
sdst.sin6.sin6_family = ssrc.sin6.sin6_family = AF_INET6;
sdst.sin6.sin6_len = ssrc.sin6.sin6_family =
sizeof(struct sockaddr_in6);
- ssrc.sin6.sin6_addr = ddst->sen_ip6_src;
- sdst.sin6.sin6_addr = ddst->sen_ip6_dst;
+ in6_recoverscope(&ssrc.sin6, &ddst->sen_ip6_src, NULL);
+ in6_recoverscope(&sdst.sin6, &ddst->sen_ip6_dst, NULL);
/*
* If TCP/UDP, extract the port numbers to use in the lookup.
diff --git a/sys/netinet/ipsec_input.c b/sys/netinet/ipsec_input.c
index e2b1538ea08..0765dac25cd 100644
--- a/sys/netinet/ipsec_input.c
+++ b/sys/netinet/ipsec_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ipsec_input.c,v 1.72 2004/04/18 16:41:40 markus Exp $ */
+/* $OpenBSD: ipsec_input.c,v 1.73 2004/06/21 20:44:54 itojun Exp $ */
/*
* The authors of this code are John Ioannidis (ji@tla.org),
* Angelos D. Keromytis (kermit@csd.uch.gr) and
@@ -178,6 +178,8 @@ ipsec_common_input(struct mbuf *m, int skip, int protoff, int af, int sproto,
m_copydata(m, offsetof(struct ip6_hdr, ip6_dst),
sizeof(struct in6_addr),
(caddr_t) &(dst_address.sin6.sin6_addr));
+ in6_recoverscope(&dst_address.sin6, &dst_address.sin6.sin6_addr,
+ NULL);
break;
#endif /* INET6 */