From owner-svn-src-user@FreeBSD.ORG Tue Oct 15 10:37:51 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 569AC5D8; Tue, 15 Oct 2013 10:37:51 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 435DF23C4; Tue, 15 Oct 2013 10:37:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9FAbpW0010476; Tue, 15 Oct 2013 10:37:51 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9FAboTS010471; Tue, 15 Oct 2013 10:37:50 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201310151037.r9FAboTS010471@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Tue, 15 Oct 2013 10:37:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r256520 - in user/ae/inet6/sys: netinet netinet6 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Oct 2013 10:37:51 -0000 Author: ae Date: Tue Oct 15 10:37:50 2013 New Revision: 256520 URL: http://svnweb.freebsd.org/changeset/base/256520 Log: Add zoneid argument to the in6_sockaddr() function. Modified: user/ae/inet6/sys/netinet/tcp_usrreq.c user/ae/inet6/sys/netinet6/in6_pcb.c user/ae/inet6/sys/netinet6/in6_pcb.h Modified: user/ae/inet6/sys/netinet/tcp_usrreq.c ============================================================================== --- user/ae/inet6/sys/netinet/tcp_usrreq.c Tue Oct 15 10:31:42 2013 (r256519) +++ user/ae/inet6/sys/netinet/tcp_usrreq.c Tue Oct 15 10:37:50 2013 (r256520) @@ -663,12 +663,13 @@ out: static int tcp6_usr_accept(struct socket *so, struct sockaddr **nam) { + struct in6_addr addr6; + struct in_addr addr; struct inpcb *inp = NULL; - int error = 0; struct tcpcb *tp = NULL; - struct in_addr addr; - struct in6_addr addr6; + uint32_t zoneid = 0; in_port_t port = 0; + int error = 0; int v4 = 0; TCPDEBUG0; @@ -698,6 +699,7 @@ tcp6_usr_accept(struct socket *so, struc } else { port = inp->inp_fport; addr6 = inp->in6p_faddr; + zoneid = inp->in6p_zoneid; } out: @@ -708,9 +710,9 @@ out: if (v4) *nam = in6_v4mapsin6_sockaddr(port, &addr); else - *nam = in6_sockaddr(port, &addr6); + *nam = in6_sockaddr(port, &addr6, zoneid); } - return error; + return (error); } #endif /* INET6 */ Modified: user/ae/inet6/sys/netinet6/in6_pcb.c ============================================================================== --- user/ae/inet6/sys/netinet6/in6_pcb.c Tue Oct 15 10:31:42 2013 (r256519) +++ user/ae/inet6/sys/netinet6/in6_pcb.c Tue Oct 15 10:37:50 2013 (r256520) @@ -445,19 +445,19 @@ in6_pcbdisconnect(struct inpcb *inp) } struct sockaddr * -in6_sockaddr(in_port_t port, struct in6_addr *addr_p) +in6_sockaddr(in_port_t port, const struct in6_addr *addr_p, uint32_t zoneid) { struct sockaddr_in6 *sin6; - sin6 = malloc(sizeof *sin6, M_SONAME, M_WAITOK); - bzero(sin6, sizeof *sin6); + sin6 = malloc(sizeof *sin6, M_SONAME, M_WAITOK | M_ZERO); sin6->sin6_family = AF_INET6; sin6->sin6_len = sizeof(*sin6); sin6->sin6_port = port; sin6->sin6_addr = *addr_p; - (void)sa6_recoverscope(sin6); /* XXX: should catch errors */ - - return (struct sockaddr *)sin6; + if (IN6_IS_ADDR_LINKLOCAL(addr_p) || + IN6_IS_ADDR_MULTICAST(addr_p)) + sin6->sin6_scope_id = zoneid; + return ((struct sockaddr *)sin6); } struct sockaddr * @@ -482,8 +482,9 @@ in6_v4mapsin6_sockaddr(in_port_t port, s int in6_getsockaddr(struct socket *so, struct sockaddr **nam) { - register struct inpcb *inp; struct in6_addr addr; + struct inpcb *inp; + uint32_t zoneid; in_port_t port; inp = sotoinpcb(so); @@ -492,17 +493,19 @@ in6_getsockaddr(struct socket *so, struc INP_RLOCK(inp); port = inp->inp_lport; addr = inp->in6p_laddr; + zoneid = inp->in6p_zoneid; INP_RUNLOCK(inp); - *nam = in6_sockaddr(port, &addr); - return 0; + *nam = in6_sockaddr(port, &addr, zoneid); + return (0); } int in6_getpeeraddr(struct socket *so, struct sockaddr **nam) { - struct inpcb *inp; struct in6_addr addr; + struct inpcb *inp; + uint32_t zoneid; in_port_t port; inp = sotoinpcb(so); @@ -511,10 +514,11 @@ in6_getpeeraddr(struct socket *so, struc INP_RLOCK(inp); port = inp->inp_fport; addr = inp->in6p_faddr; + zoneid = inp->in6p_zoneid; INP_RUNLOCK(inp); - *nam = in6_sockaddr(port, &addr); - return 0; + *nam = in6_sockaddr(port, &addr, zoneid); + return (0); } int Modified: user/ae/inet6/sys/netinet6/in6_pcb.h ============================================================================== --- user/ae/inet6/sys/netinet6/in6_pcb.h Tue Oct 15 10:31:42 2013 (r256519) +++ user/ae/inet6/sys/netinet6/in6_pcb.h Tue Oct 15 10:37:50 2013 (r256520) @@ -104,7 +104,7 @@ void in6_pcbnotify(struct inpcbinfo *, s struct inpcb * in6_rtchange(struct inpcb *, int); struct sockaddr * - in6_sockaddr(in_port_t port, struct in6_addr *addr_p); + in6_sockaddr(in_port_t, const struct in6_addr *, uint32_t); struct sockaddr * in6_v4mapsin6_sockaddr(in_port_t port, struct in_addr *addr_p); int in6_getpeeraddr(struct socket *so, struct sockaddr **nam);