Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Dec 2013 14:45:03 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r259553 - user/ae/inet6/sys/net
Message-ID:  <201312181445.rBIEj3TE034145@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Wed Dec 18 14:45:03 2013
New Revision: 259553
URL: http://svnweb.freebsd.org/changeset/base/259553

Log:
  Update rtsock code to use sockaddr_in6 with jail's functions.

Modified:
  user/ae/inet6/sys/net/rtsock.c

Modified: user/ae/inet6/sys/net/rtsock.c
==============================================================================
--- user/ae/inet6/sys/net/rtsock.c	Wed Dec 18 14:40:32 2013	(r259552)
+++ user/ae/inet6/sys/net/rtsock.c	Wed Dec 18 14:45:03 2013	(r259553)
@@ -508,7 +508,6 @@ rtm_get_jailed(struct rt_addrinfo *info,
 #ifdef INET6
 	case AF_INET6:
 	{
-		struct in6_addr ia6;
 		struct ifaddr *ifa;
 		int found;
 
@@ -519,35 +518,30 @@ rtm_get_jailed(struct rt_addrinfo *info,
 		 */
 		IF_ADDR_RLOCK(ifp);
 		TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
-			struct sockaddr *sa;
-			sa = ifa->ifa_addr;
-			if (sa->sa_family != AF_INET6)
+			if (ifa->ifa_addr->sa_family != AF_INET6)
 				continue;
-			bcopy(&((struct sockaddr_in6 *)sa)->sin6_addr,
-			    &ia6, sizeof(struct in6_addr));
-			if (prison_check_ip6(cred, &ia6) == 0) {
+			if (prison_if(cred, ifa->ifa_addr) == 0) {
 				found = 1;
 				break;
 			}
 		}
 		IF_ADDR_RUNLOCK(ifp);
+		bzero(&saun->sin6, sizeof(struct sockaddr_in6));
+		saun->sin6.sin6_len = sizeof(struct sockaddr_in6);
+		saun->sin6.sin6_family = AF_INET6;
 		if (!found) {
 			/*
 			 * As a last resort return the 'default' jail address.
 			 */
-			ia6 = ((struct sockaddr_in6 *)rt->rt_ifa->ifa_addr)->
-			    sin6_addr;
-			if (prison_get_ip6(cred, &ia6) != 0)
+			if (prison_get_ip6(cred, &saun->sin6) != 0)
 				return (ESRCH);
+		} else {
+			struct sockaddr_in6 *sin6;
+
+			sin6 = (struct sockaddr_in6 *)ifa->ifa_addr;
+			saun->sin6.sin6_addr = sin6->sin6_addr;
+			saun->sin6.sin6_scope_id = sin6->sin6_scope_id;
 		}
-		bzero(&saun->sin6, sizeof(struct sockaddr_in6));
-		saun->sin6.sin6_len = sizeof(struct sockaddr_in6);
-		saun->sin6.sin6_family = AF_INET6;
-		bcopy(&ia6, &saun->sin6.sin6_addr, sizeof(struct in6_addr));
-		/*
-		saun->sin6.sin6_sin6_scope_id = in6_getscopezone(ifp,
-		    in6_addrscope(&ia6));
-		*/
 		info->rti_info[RTAX_IFA] = (struct sockaddr *)&saun->sin6;
 		break;
 	}



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