Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Oct 2013 23:19:29 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r256564 - user/ae/inet6/sys/netinet
Message-ID:  <201310152319.r9FNJTJ0084575@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Tue Oct 15 23:19:28 2013
New Revision: 256564
URL: http://svnweb.freebsd.org/changeset/base/256564

Log:
  Initialize zoneid if src or dst address is from link-local scope.

Modified:
  user/ae/inet6/sys/netinet/tcp_input.c
  user/ae/inet6/sys/netinet/tcp_subr.c

Modified: user/ae/inet6/sys/netinet/tcp_input.c
==============================================================================
--- user/ae/inet6/sys/netinet/tcp_input.c	Tue Oct 15 21:28:51 2013	(r256563)
+++ user/ae/inet6/sys/netinet/tcp_input.c	Tue Oct 15 23:19:28 2013	(r256564)
@@ -98,6 +98,7 @@ __FBSDID("$FreeBSD$");
 #include <netinet6/in6_pcb.h>
 #include <netinet6/ip6_var.h>
 #include <netinet6/nd6.h>
+#include <netinet6/scope6_var.h>
 #include <netinet/tcp_fsm.h>
 #include <netinet/tcp_seq.h>
 #include <netinet/tcp_timer.h>
@@ -1060,6 +1061,11 @@ relocked:
 			inc.inc_flags |= INC_ISIPV6;
 			inc.inc6_faddr = ip6->ip6_src;
 			inc.inc6_laddr = ip6->ip6_dst;
+			if (IN6_IS_ADDR_LINKLOCAL(&ip6->ip6_src) ||
+			    IN6_IS_ADDR_LINKLOCAL(&ip6->ip6_dst))
+				inc.inc6_zoneid = in6_getscopezone(
+				    m->m_pkthdr.rcvif,
+				    IPV6_ADDR_SCOPE_LINKLOCAL);
 		} else
 #endif
 		{

Modified: user/ae/inet6/sys/netinet/tcp_subr.c
==============================================================================
--- user/ae/inet6/sys/netinet/tcp_subr.c	Tue Oct 15 21:28:51 2013	(r256563)
+++ user/ae/inet6/sys/netinet/tcp_subr.c	Tue Oct 15 23:19:28 2013	(r256564)
@@ -1569,6 +1569,10 @@ tcp6_ctlinput(int cmd, struct sockaddr *
 		inc.inc6_faddr = ((struct sockaddr_in6 *)sa)->sin6_addr;
 		inc.inc6_laddr = ip6cp->ip6c_src->sin6_addr;
 		inc.inc_flags |= INC_ISIPV6;
+		if (IN6_IS_ADDR_LINKLOCAL(&inc.inc6_laddr) ||
+		    IN6_IS_ADDR_LINKLOCAL(&inc.inc6_faddr))
+			inc.inc6_zoneid = in6_getscopezone(m->m_pkthdr.rcvif,
+			    IPV6_ADDR_SCOPE_LINKLOCAL);
 		INP_INFO_WLOCK(&V_tcbinfo);
 		syncache_unreach(&inc, &th);
 		INP_INFO_WUNLOCK(&V_tcbinfo);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310152319.r9FNJTJ0084575>