Module Name: src
Committed By: kre
Date: Thu Feb 9 11:43:32 UTC 2017
Modified Files:
src/sys/net: if_srt.c
Log Message:
PR kern/51280
This allows srt devices to work for IPv6. srt still needs work
(particularly #ifdef INET6 but also general effeciency and similar.)
To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/net/if_srt.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/net/if_srt.c
diff -u src/sys/net/if_srt.c:1.24 src/sys/net/if_srt.c:1.25
--- src/sys/net/if_srt.c:1.24 Sat Jan 14 16:34:44 2017
+++ src/sys/net/if_srt.c Thu Feb 9 11:43:32 2017
@@ -1,8 +1,8 @@
-/* $NetBSD: if_srt.c,v 1.24 2017/01/14 16:34:44 maya Exp $ */
+/* $NetBSD: if_srt.c,v 1.25 2017/02/09 11:43:32 kre Exp $ */
/* This file is in the public domain. */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_srt.c,v 1.24 2017/01/14 16:34:44 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_srt.c,v 1.25 2017/02/09 11:43:32 kre Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -35,6 +35,9 @@ __KERNEL_RCSID(0, "$NetBSD: if_srt.c,v 1
#include <sys/device.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
+#include <netinet6/in6_var.h>
+#include <netinet6/nd6.h>
+#include <netinet6/scope6_var.h>
#include <net/if_types.h>
#include "if_srt.h"
@@ -236,6 +239,8 @@ srt_if_output(
return 0; /* XXX ENETDOWN? */
}
/* XXX is 0 the right last arg here? */
+ if (to->sa_family == AF_INET6)
+ return nd6_output(r->u.dstifp, r->u.dstifp, m, &r->dst.sin6, 0);
return if_output_lock(r->u.dstifp, r->u.dstifp, m, &r->dst.sa, 0);
}
@@ -466,6 +471,8 @@ srt_ioctl(dev_t dev, u_long cmd, void *d
scr->srcmask = dr->srcmask;
scr->u.dstifp = ifp;
memcpy(&scr->dst,&dr->dst,dr->dst.sa.sa_len);
+ if (dr->af == AF_INET6)
+ in6_setzoneid(&scr->dst.sin6.sin6_addr, ifp->if_index);
update_mtu(sc);
return 0;
case SRT_DELRT: