From owner-svn-src-user@FreeBSD.ORG  Sun Jan 26 01:27:55 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
 (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 0419B423;
 Sun, 26 Jan 2014 01:27:55 +0000 (UTC)
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 E3BAF1949;
 Sun, 26 Jan 2014 01:27:54 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0Q1RsFj026025;
 Sun, 26 Jan 2014 01:27:54 GMT (envelope-from gjb@svn.freebsd.org)
Received: (from gjb@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0Q1Rs39026021;
 Sun, 26 Jan 2014 01:27:54 GMT (envelope-from gjb@svn.freebsd.org)
Message-Id: <201401260127.s0Q1Rs39026021@svn.freebsd.org>
From: Glen Barber <gjb@FreeBSD.org>
Date: Sun, 26 Jan 2014 01:27:54 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261176 - in user/gjb/hacking/release-embedded/release: .
 arm
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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 26 Jan 2014 01:27:55 -0000

Author: gjb
Date: Sun Jan 26 01:27:53 2014
New Revision: 261176
URL: http://svnweb.freebsd.org/changeset/base/261176

Log:
  Remove EMBEDDED_WORLD_FLAGS from release.sh, and move the gcc(1)
  build to arm/release.sh.
  
  This prevents needing to build a separate chroot environment for
  the arm/armv6 builds when it is not absolutely necessary.  This
  is useful for situations where a single userland build is used
  to populate more than one chroot.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  user/gjb/hacking/release-embedded/release/arm/BEAGLEBONE.conf
  user/gjb/hacking/release-embedded/release/arm/RPI-B.conf
  user/gjb/hacking/release-embedded/release/arm/release.sh
  user/gjb/hacking/release-embedded/release/release.sh

Modified: user/gjb/hacking/release-embedded/release/arm/BEAGLEBONE.conf
==============================================================================
--- user/gjb/hacking/release-embedded/release/arm/BEAGLEBONE.conf	Sun Jan 26 00:37:21 2014	(r261175)
+++ user/gjb/hacking/release-embedded/release/arm/BEAGLEBONE.conf	Sun Jan 26 01:27:53 2014	(r261176)
@@ -17,7 +17,6 @@ SVNROOT="svn://svn.FreeBSD.org"
 SRCBRANCH="base/head@rHEAD"
 DOCBRANCH="doc/head@rHEAD"
 PORTBRANCH="ports/head@rHEAD"
-EMBEDDED_WORLD_FLAGS="WITH_GCC=1"
 NODOC=yes
 
 # Build target configuration

Modified: user/gjb/hacking/release-embedded/release/arm/RPI-B.conf
==============================================================================
--- user/gjb/hacking/release-embedded/release/arm/RPI-B.conf	Sun Jan 26 00:37:21 2014	(r261175)
+++ user/gjb/hacking/release-embedded/release/arm/RPI-B.conf	Sun Jan 26 01:27:53 2014	(r261176)
@@ -17,7 +17,6 @@ SVNROOT="svn://svn.FreeBSD.org"
 SRCBRANCH="base/head@rHEAD"
 DOCBRANCH="doc/head@rHEAD"
 PORTBRANCH="ports/head@rHEAD"
-EMBEDDED_WORLD_FLAGS="WITH_GCC=1"
 NODOC=yes
 
 # Build target configuration

Modified: user/gjb/hacking/release-embedded/release/arm/release.sh
==============================================================================
--- user/gjb/hacking/release-embedded/release/arm/release.sh	Sun Jan 26 00:37:21 2014	(r261175)
+++ user/gjb/hacking/release-embedded/release/arm/release.sh	Sun Jan 26 01:27:53 2014	(r261176)
@@ -48,6 +48,9 @@ install_uboot() {
 }
 
 main() {
+	# Build gcc for use in the chroot for arm builds.
+	eval chroot ${CHROOTDIR} make -C /usr/src/gnu/usr.bin/cc \
+		WITH_GCC=1 obj depend all install
 	# Build the 'xdev' target for crochet.
 	eval chroot ${CHROOTDIR} make -C /usr/src \
 		XDEV=${XDEV} XDEV_ARCH=${XDEV_ARCH} WITH_GCC=1 xdev

Modified: user/gjb/hacking/release-embedded/release/release.sh
==============================================================================
--- user/gjb/hacking/release-embedded/release/release.sh	Sun Jan 26 00:37:21 2014	(r261175)
+++ user/gjb/hacking/release-embedded/release/release.sh	Sun Jan 26 01:27:53 2014	(r261176)
@@ -48,7 +48,6 @@ PORTBRANCH="ports/head@rHEAD"
 
 # Set for embedded device builds.
 EMBEDDEDBUILD=
-EMBEDDED_WORLD_FLAGS=
 
 # Sometimes one needs to checkout src with --force svn option.
 # If custom kernel configs copied to src tree before checkout, e.g.
@@ -137,9 +136,9 @@ else
 	ARCH_FLAGS=
 fi
 CHROOT_MAKEENV="MAKEOBJDIRPREFIX=${CHROOTDIR}/tmp/obj"
-CHROOT_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${CONF_FILES} ${EMBEDDED_WORLD_FLAGS}"
-CHROOT_IMAKEFLAGS="${CONF_FILES} ${EMBEDDED_WORLD_FLAGS}"
-CHROOT_DMAKEFLAGS="${CONF_FILES} ${EMBEDDED_WORLD_FLAGS}"
+CHROOT_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${CONF_FILES}"
+CHROOT_IMAKEFLAGS="${CONF_FILES}"
+CHROOT_DMAKEFLAGS="${CONF_FILES}"
 RELEASE_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${ARCH_FLAGS} ${CONF_FILES}"
 RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} KERNCONF=\"${KERNEL}\" ${ARCH_FLAGS} ${CONF_FILES}"
 RELEASE_RMAKEFLAGS="${ARCH_FLAGS} KERNCONF=\"${KERNEL}\" ${CONF_FILES} \

From owner-svn-src-user@FreeBSD.ORG  Sun Jan 26 10:36:21 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
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 ESMTPS id 5D658635;
 Sun, 26 Jan 2014 10:36:21 +0000 (UTC)
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 2EEB71B0D;
 Sun, 26 Jan 2014 10:36:21 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0QAaL3o080714;
 Sun, 26 Jan 2014 10:36:21 GMT (envelope-from ae@svn.freebsd.org)
Received: (from ae@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0QAaKVd080707;
 Sun, 26 Jan 2014 10:36:20 GMT (envelope-from ae@svn.freebsd.org)
Message-Id: <201401261036.s0QAaKVd080707@svn.freebsd.org>
From: "Andrey V. Elsukov" <ae@FreeBSD.org>
Date: Sun, 26 Jan 2014 10:36:20 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261184 - in user/ae/inet6/sys: conf net 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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 26 Jan 2014 10:36:21 -0000

Author: ae
Date: Sun Jan 26 10:36:19 2014
New Revision: 261184
URL: http://svnweb.freebsd.org/changeset/base/261184

Log:
  Implement IPv6 fast forwarding.

Added:
  user/ae/inet6/sys/netinet6/ip6_fastfwd.c   (contents, props changed)
Modified:
  user/ae/inet6/sys/conf/files
  user/ae/inet6/sys/net/if_ethersubr.c
  user/ae/inet6/sys/netinet6/ip6_input.c
  user/ae/inet6/sys/netinet6/ip6_var.h

Modified: user/ae/inet6/sys/conf/files
==============================================================================
--- user/ae/inet6/sys/conf/files	Sun Jan 26 07:40:56 2014	(r261183)
+++ user/ae/inet6/sys/conf/files	Sun Jan 26 10:36:19 2014	(r261184)
@@ -3301,6 +3301,7 @@ netinet6/in6_pcbgroup.c		optional inet6 
 netinet6/in6_proto.c		optional inet6
 netinet6/in6_rmx.c		optional inet6
 netinet6/in6_src.c		optional inet6
+netinet6/ip6_fastfwd.c		optional inet6
 netinet6/ip6_forward.c		optional inet6
 netinet6/ip6_id.c		optional inet6
 netinet6/ip6_input.c		optional inet6

Modified: user/ae/inet6/sys/net/if_ethersubr.c
==============================================================================
--- user/ae/inet6/sys/net/if_ethersubr.c	Sun Jan 26 07:40:56 2014	(r261183)
+++ user/ae/inet6/sys/net/if_ethersubr.c	Sun Jan 26 10:36:19 2014	(r261184)
@@ -76,6 +76,7 @@
 #include <netinet/ip_var.h>
 #endif
 #ifdef INET6
+#include <netinet6/ip6_var.h>
 #include <netinet6/nd6.h>
 #endif
 
@@ -820,6 +821,8 @@ ether_demux(struct ifnet *ifp, struct mb
 #endif
 #ifdef INET6
 	case ETHERTYPE_IPV6:
+		if ((m = ip6_fastforward(m)) == NULL)
+			return;
 		isr = NETISR_IPV6;
 		break;
 #endif

Added: user/ae/inet6/sys/netinet6/ip6_fastfwd.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/ae/inet6/sys/netinet6/ip6_fastfwd.c	Sun Jan 26 10:36:19 2014	(r261184)
@@ -0,0 +1,377 @@
+/*-
+ * Copyright (c) 2014 Andrey V. Elsukov <ae@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_inet6.h"
+#include "opt_ipstealth.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/mbuf.h>
+#include <sys/socket.h>
+#include <sys/kernel.h>
+#include <sys/sysctl.h>
+
+#include <net/if.h>
+#include <net/route.h>
+#include <net/pfil.h>
+#include <net/vnet.h>
+
+#include <netinet/in.h>
+#include <netinet/ip_var.h>
+#include <netinet/ip6.h>
+#include <netinet/icmp6.h>
+#include <netinet6/in6_var.h>
+#include <netinet6/ip6_var.h>
+#include <netinet6/nd6.h>
+
+static VNET_DEFINE(int, ip6_fastforward_active);
+#define	V_ip6_fastforward_active	VNET(ip6_fastforward_active)
+
+SYSCTL_DECL(_net_inet6);
+SYSCTL_DECL(_net_inet6_ip6);
+SYSCTL_VNET_INT(_net_inet6_ip6, OID_AUTO, fastforwarding, CTLFLAG_RW,
+    &VNET_NAME(ip6_fastforward_active), 0, "Enable fast IPv6 forwarding");
+
+struct mbuf*
+ip6_fastforward(struct mbuf *m)
+{
+	struct route_in6 ro;
+	struct m_tag *fwd_tag;
+	struct ip6_hdr *ip6;
+	struct ifnet *rcvif, *oif;
+	struct mbuf *mcopy;
+	uint32_t plen;
+	int mflags, mnext;
+
+	/*
+	 * Save these variables for statistics accounting.
+	 * For correct accounting we use `goto drop;', when we are
+	 * going to exit, even if there are already nothing to free.
+	 * And we use `return (m)', when we want leave statistics
+	 * accounting for ip6_input.
+	 * XXX: there is one path inside IP6_EXTHDR_CHECK(),  where we
+	 * can lost some accounting.
+	 */
+	mflags = m->m_flags;
+	mnext = (m->m_next != NULL);
+	rcvif = m->m_pkthdr.rcvif;
+	mcopy = NULL;
+	/*
+	 * Drop the packet if IPv6 operation is disabled on the interface.
+	 */
+	if ((ND_IFINFO(rcvif)->flags & ND6_IFF_IFDISABLED))
+		goto dropin;
+
+	if (!V_ip6_fastforward_active || !V_ip6_forwarding)
+		return (m);
+#ifndef PULLDOWN_TEST
+	/*
+	 * L2 bridge code and some other code can return mbuf chain
+	 * that does not conform to KAME requirement.  too bad.
+	 * XXX: fails to join if interface MTU > MCLBYTES.  jumbogram?
+	 */
+	if (m && m->m_next != NULL && m->m_pkthdr.len < MCLBYTES) {
+		struct mbuf *n;
+
+		MGETHDR(n, M_DONTWAIT, MT_HEADER);
+		if (n)
+			M_MOVE_PKTHDR(n, m);
+		if (n && n->m_pkthdr.len > MHLEN) {
+			MCLGET(n, M_DONTWAIT);
+			if ((n->m_flags & M_EXT) == 0) {
+				m_freem(n);
+				n = NULL;
+			}
+		}
+		if (n == NULL)
+			goto dropin;
+
+		m_copydata(m, 0, n->m_pkthdr.len, mtod(n, caddr_t));
+		n->m_len = n->m_pkthdr.len;
+		m_freem(m);
+		m = n;
+	}
+	IP6_EXTHDR_CHECK(m, 0, sizeof(struct ip6_hdr), NULL);
+#else
+	/*
+	 * Check for packet drop condition and do sanity checks.
+	 */
+	if (m->m_len < sizeof(struct ip6_hdr)) {
+		if ((m = m_pullup(m, sizeof(struct ip6_hdr))) == NULL) {
+			IP6STAT_INC(ip6s_tooshort);
+			in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
+			goto dropin;
+		}
+	}
+#endif
+	ip6 = mtod(m, struct ip6_hdr *);
+	if ((ip6->ip6_vfc & IPV6_VERSION_MASK) != IPV6_VERSION) {
+		IP6STAT_INC(ip6s_badvers);
+		in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
+		goto dropin;
+	}
+	/*
+	 *  Check against address spoofing/corruption.
+	 */
+	if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_src) ||
+	    IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_dst) ||
+	    IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||
+	    IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {
+		IP6STAT_INC(ip6s_badscope);
+		in6_ifstat_inc(rcvif, ifs6_in_addrerr);
+		goto dropin;
+	}
+	/*
+	 * Fallback conditions to ip6_input for slow path processing.
+	 */
+	if (ip6->ip6_nxt == IPPROTO_HOPOPTS ||
+	    IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst) ||
+	    IN6_IS_ADDR_LINKLOCAL(&ip6->ip6_dst) ||
+	    IN6_IS_ADDR_LINKLOCAL(&ip6->ip6_src) ||
+	    IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src) ||
+	    in6_localip(&ip6->ip6_dst))
+		return (m);
+	/*
+	 * Check that the amount of data in the buffers
+	 * is as at least much as the IPv6 header would have us expect.
+	 * Trim mbufs if longer than we expect.
+	 * Drop packet if shorter than we expect.
+	 */
+	plen = ntohs(ip6->ip6_plen);
+	if (plen == 0) {
+		/*
+		 * Jumbograms must have hop-by-hop header and go via
+		 * slow path.
+		 */
+		IP6STAT_INC(ip6s_badoptions);
+		goto dropin;
+	}
+	if (m->m_pkthdr.len - sizeof(struct ip6_hdr) < plen) {
+		IP6STAT_INC(ip6s_tooshort);
+		in6_ifstat_inc(rcvif, ifs6_in_truncated);
+		goto dropin;
+	}
+	if (m->m_pkthdr.len > sizeof(struct ip6_hdr) + plen) {
+		if (m->m_len == m->m_pkthdr.len) {
+			m->m_len = sizeof(struct ip6_hdr) + plen;
+			m->m_pkthdr.len = sizeof(struct ip6_hdr) + plen;
+		} else
+			m_adj(m, sizeof(struct ip6_hdr) + plen -
+			    m->m_pkthdr.len);
+	}
+	IP6STAT_INC(ip6s_nxthist[ip6->ip6_nxt]);
+#ifdef ALTQ
+	if (altq_input != NULL && (*altq_input)(m, AF_INET6) == 0) {
+		/* packet is dropped by traffic conditioner */
+		m = NULL;
+		goto dropin;
+	}
+#endif
+	/*
+	 * Hop limit.
+	 */
+#ifdef IPSTEALTH
+	if (!V_ip6stealth)
+#endif
+	if (ip6->ip6_hlim <= IPV6_HLIMDEC) {
+		icmp6_error(m, ICMP6_TIME_EXCEEDED,
+		    ICMP6_TIME_EXCEED_TRANSIT, 0);
+		m = NULL;
+		goto dropin;
+	}
+	/*
+	 * Save at most ICMPV6_PLD_MAXLEN (= the min IPv6 MTU -
+	 * size of IPv6 + ICMPv6 headers) bytes of the packet in case
+	 * we need to generate an ICMP6 message to the src.
+	 * Thanks to M_EXT, in most cases copy will not occur.
+	 */
+	mcopy = m_copy(m, 0, imin(m->m_pkthdr.len, ICMPV6_PLD_MAXLEN));
+	/*
+	 * Initialize route.
+	 * First we plan to find route to ip6_dst.
+	 */
+	bzero(&ro, sizeof(ro));
+	ro.ro_dst.sin6_len = sizeof(struct sockaddr_in6);
+	ro.ro_dst.sin6_family = AF_INET6;
+	ro.ro_dst.sin6_addr = ip6->ip6_dst;
+	/*
+	 * Incoming packet firewall processing.
+	 */
+	if (!PFIL_HOOKED(&V_inet6_pfil_hook))
+		goto passin;
+	if (pfil_run_hooks(&V_inet6_pfil_hook, &m, rcvif, PFIL_IN,
+	    NULL) != 0 || m == NULL)
+		goto dropin;
+	/*
+	 * A packet filter could change the destination address.
+	 * XXX: Currently we don't have IPv6 NAT - skip these checks.
+	 *
+	 * If packet filter sets the M_FASTFWD_OURS flag, this means
+	 * that new destination or next hop is our local address.
+	 * So, we can just go back to netisr.
+	 * XXX: should we decrement ip6_hlim in such case?
+	 *
+	 * Also it can forward packet to another destination, e.g.
+	 * M_IP6_NEXTHOP flag is set and fwd_tag is attached to mbuf.
+	 */
+	if (m->m_flags & M_FASTFWD_OURS)
+		goto freecopy;
+	if ((m->m_flags & M_IP6_NEXTHOP) &&
+	    (fwd_tag = m_tag_find(m, PACKET_TAG_IPFORWARD, NULL)) != NULL) {
+		/*
+		 * Now we will find route to forwarded by pfil destination.
+		 * XXX: Address shouldn't be LLA.
+		 */
+		bcopy((fwd_tag + 1), &ro.ro_dst, sizeof(struct sockaddr_in6));
+		m->m_flags &= ~M_IP6_NEXTHOP;
+		m_tag_delete(m, fwd_tag);
+	}
+passin:
+#ifdef IPSTEALTH
+	if (!V_ip6stealth)
+#endif
+	ip6->ip6_hlim -= IPV6_HLIMDEC;
+again:
+	/*
+	 * Find route to destination.
+	 */
+	in6_rtalloc(&ro, M_GETFIB(m));
+	if (ro.ro_rt == NULL || (ro.ro_rt->rt_flags & RTF_REJECT)) {
+		IP6STAT_INC(ip6s_noroute);
+		in6_ifstat_inc(rcvif, ifs6_in_noroute);
+		icmp6_error(mcopy, ICMP6_DST_UNREACH,
+		    ICMP6_DST_UNREACH_NOROUTE, 0);
+		RO_RTFREE(&ro);
+		mcopy = NULL;
+		goto dropin;
+	}
+	if (!(ro.ro_rt->rt_flags & RTF_UP)) {
+		IP6STAT_INC(ip6s_noroute);
+		in6_ifstat_inc(rcvif, ifs6_in_noroute);
+		icmp6_error(mcopy, ICMP6_DST_UNREACH,
+		    ICMP6_DST_UNREACH_ADDR, 0);
+		RO_RTFREE(&ro);
+		mcopy = NULL;
+		goto dropin;
+	}
+	oif = ro.ro_rt->rt_ifp;
+	/*
+	 * We use slow path processing for packets with scoped addresses.
+	 * So, scope checks aren't needed here.
+	 */
+	if (m->m_pkthdr.len > IN6_LINKMTU(oif)) {
+		in6_ifstat_inc(oif, ifs6_in_toobig);
+		icmp6_error(mcopy, ICMP6_PACKET_TOO_BIG, 0, IN6_LINKMTU(oif));
+		RO_RTFREE(&ro);
+		mcopy = NULL;
+		goto dropout;
+	}
+	/*
+	 * Save gateway's address in the ro_dst and free route.
+	 */
+	if (ro.ro_rt->rt_flags & RTF_GATEWAY)
+		ro.ro_dst = *(struct sockaddr_in6 *)ro.ro_rt->rt_gateway;
+	RO_RTFREE(&ro);
+	/*
+	 * Outgoing packet firewall processing.
+	 */
+	if (!PFIL_HOOKED(&V_inet6_pfil_hook))
+		goto passout;
+	if (pfil_run_hooks(&V_inet6_pfil_hook, &m, oif, PFIL_OUT,
+	    NULL) != 0 || m == NULL)
+		goto dropout;
+	/*
+	 * Again. A packet filter could change the destination address.
+	 * XXX: Currently we don't have IPv6 NAT - skip these checks.
+	 *
+	 * If packet filter sets the M_FASTFWD_OURS flag, this means
+	 * that new destination or next hop is our local address.
+	 * So, we can just go back to netisr.
+	 * XXX: Should we do something with checksums?
+	 *
+	 * Also it can forward packet to another destination, e.g.
+	 * M_IP6_NEXTHOP flag is set and fwd_tag is attached to mbuf.
+	 */
+	if (m->m_flags & M_FASTFWD_OURS)
+		goto freecopy;
+	if ((m->m_flags & M_IP6_NEXTHOP) &&
+	    (fwd_tag = m_tag_find(m, PACKET_TAG_IPFORWARD, NULL)) != NULL) {
+		bcopy((fwd_tag + 1), &ro.ro_dst, sizeof(struct sockaddr_in6));
+		m->m_flags |= M_SKIP_FIREWALL;
+		m->m_flags &= ~M_IP6_NEXTHOP;
+		m_tag_delete(m, fwd_tag);
+		goto again;
+	}
+passout:
+	if (nd6_output(oif, rcvif, m, &ro.ro_dst, NULL) != 0) {
+		in6_ifstat_inc(oif, ifs6_out_discard);
+		IP6STAT_INC(ip6s_cantforward);
+	} else {
+		in6_ifstat_inc(oif, ifs6_out_forward);
+		IP6STAT_INC(ip6s_forward);
+	}
+	m = NULL;
+	goto freecopy;
+dropin:
+	in6_ifstat_inc(rcvif, ifs6_in_discard);
+	goto drop;
+dropout:
+	in6_ifstat_inc(oif, ifs6_out_discard);
+drop:
+	if (m != NULL) {
+		m_freem(m);
+		m = NULL;
+	}
+freecopy:
+	if (mcopy != NULL)
+		m_freem(mcopy);
+	/*
+	 * Update statistics.
+	 */
+	if (mflags & M_EXT) {
+		if (mnext)
+			IP6STAT_INC(ip6s_mext2m);
+		else
+			IP6STAT_INC(ip6s_mext1);
+	} else {
+		if (mnext) {
+			if (mflags & M_LOOP) {
+				IP6STAT_INC(ip6s_m2m[V_loif->if_index]);
+			} else if (rcvif->if_index < IP6S_M2MMAX)
+				IP6STAT_INC(ip6s_m2m[rcvif->if_index]);
+			else
+				IP6STAT_INC(ip6s_m2m[0]);
+		} else
+			IP6STAT_INC(ip6s_m1);
+	}
+	in6_ifstat_inc(rcvif, ifs6_in_receive);
+	IP6STAT_INC(ip6s_total);
+	return (m);
+}
+

Modified: user/ae/inet6/sys/netinet6/ip6_input.c
==============================================================================
--- user/ae/inet6/sys/netinet6/ip6_input.c	Sun Jan 26 07:40:56 2014	(r261183)
+++ user/ae/inet6/sys/netinet6/ip6_input.c	Sun Jan 26 10:36:19 2014	(r261184)
@@ -476,12 +476,6 @@ ip6_input(struct mbuf *m)
 			IP6STAT_INC(ip6s_m1);
 	}
 
-	/* drop the packet if IPv6 operation is disabled on the IF */
-	if ((ND_IFINFO(m->m_pkthdr.rcvif)->flags & ND6_IFF_IFDISABLED)) {
-		m_freem(m);
-		return;
-	}
-
 	in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_receive);
 	IP6STAT_INC(ip6s_total);
 

Modified: user/ae/inet6/sys/netinet6/ip6_var.h
==============================================================================
--- user/ae/inet6/sys/netinet6/ip6_var.h	Sun Jan 26 07:40:56 2014	(r261183)
+++ user/ae/inet6/sys/netinet6/ip6_var.h	Sun Jan 26 10:36:19 2014	(r261184)
@@ -383,6 +383,7 @@ void	ip6_notify_pmtu(struct inpcb *, str
 int	ip6_sysctl(int *, u_int, void *, size_t *, void *, size_t);
 
 void	ip6_forward(struct mbuf *, int);
+struct mbuf *ip6_fastforward(struct mbuf *);
 
 void	ip6_mloopback(struct ifnet *, struct mbuf *, struct sockaddr_in6 *);
 int	ip6_output(struct mbuf *, struct ip6_pktopts *,

From owner-svn-src-user@FreeBSD.ORG  Mon Jan 27 13:28:56 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
 (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 387DA8B5;
 Mon, 27 Jan 2014 13:28:56 +0000 (UTC)
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 254471836;
 Mon, 27 Jan 2014 13:28:56 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0RDSuff018560;
 Mon, 27 Jan 2014 13:28:56 GMT (envelope-from gjb@svn.freebsd.org)
Received: (from gjb@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0RDSuul018559;
 Mon, 27 Jan 2014 13:28:56 GMT (envelope-from gjb@svn.freebsd.org)
Message-Id: <201401271328.s0RDSuul018559@svn.freebsd.org>
From: Glen Barber <gjb@FreeBSD.org>
Date: Mon, 27 Jan 2014 13:28:55 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261210 - user/gjb/hacking/release-embedded/release/arm
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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 27 Jan 2014 13:28:56 -0000

Author: gjb
Date: Mon Jan 27 13:28:55 2014
New Revision: 261210
URL: http://svnweb.freebsd.org/changeset/base/261210

Log:
  Copy resulting images to top level /R directory of the chroot
  to match behavior of 'make install' target of src/release/.
  Generate sha256 and md5 checksums while here.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  user/gjb/hacking/release-embedded/release/arm/release.sh

Modified: user/gjb/hacking/release-embedded/release/arm/release.sh
==============================================================================
--- user/gjb/hacking/release-embedded/release/arm/release.sh	Mon Jan 27 11:10:06 2014	(r261209)
+++ user/gjb/hacking/release-embedded/release/arm/release.sh	Mon Jan 27 13:28:55 2014	(r261210)
@@ -75,6 +75,10 @@ main() {
 	install_uboot
 	eval chroot ${CHROOTDIR} /bin/sh /tmp/crochet/crochet.sh \
 		-c /tmp/external/${XDEV}/crochet-${KERNEL}.conf
+	mkdir -p ${CHROOTDIR}/R/
+	cp -p ${CHROOTDIR}/usr/obj/*.img ${CHROOTDIR}/R/
+	cd ${CHROOTDIR}/R/ && sha256 FreeBSD*.img > CHECKSUM.SHA256
+	cd ${CHROOTDIR}/R/ && md5 FreeBSD*.img > CHECKSUM.MD5
 }
 
 main "$@"

From owner-svn-src-user@FreeBSD.ORG  Tue Jan 28 03:09:58 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
 (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 77C9580A;
 Tue, 28 Jan 2014 03:09:58 +0000 (UTC)
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 63C401F3B;
 Tue, 28 Jan 2014 03:09:58 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0S39wmO049206;
 Tue, 28 Jan 2014 03:09:58 GMT (envelope-from gjb@svn.freebsd.org)
Received: (from gjb@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0S39vWw049198;
 Tue, 28 Jan 2014 03:09:57 GMT (envelope-from gjb@svn.freebsd.org)
Message-Id: <201401280309.s0S39vWw049198@svn.freebsd.org>
From: Glen Barber <gjb@FreeBSD.org>
Date: Tue, 28 Jan 2014 03:09:57 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261221 - in user/gjb/hacking/release-embedded/release:
 arm tools/arm
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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 28 Jan 2014 03:09:58 -0000

Author: gjb
Date: Tue Jan 28 03:09:57 2014
New Revision: 261221
URL: http://svnweb.freebsd.org/changeset/base/261221

Log:
  Add initial support for the PANDABOARD.
  
  Sponsored by:	The FreeBSD Foundation

Added:
  user/gjb/hacking/release-embedded/release/arm/PANDABOARD.conf   (contents, props changed)
  user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf   (contents, props changed)
Modified:
  user/gjb/hacking/release-embedded/release/arm/release.sh

Added: user/gjb/hacking/release-embedded/release/arm/PANDABOARD.conf
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/release/arm/PANDABOARD.conf	Tue Jan 28 03:09:57 2014	(r261221)
@@ -0,0 +1,35 @@
+#
+# $FreeBSD$
+#
+
+# This is only supported on amd64 right now.  It may work on
+# i386, but I do not have the hardware to test, so until I get
+# a VM set up to make sure, be cautious and assume it will not.
+if [ "$(uname -p)" != "amd64" ] || [ "$(uname -m)" != "amd64" ]; then
+    echo "This is only supported on amd64 right now."
+    exit 0
+fi
+
+# Build chroot configuration
+TARGET="amd64"
+TARGET_ARCH="amd64"
+SVNROOT="svn://svn.FreeBSD.org"
+SRCBRANCH="base/head@rHEAD"
+DOCBRANCH="doc/head@rHEAD"
+PORTBRANCH="ports/head@rHEAD"
+NODOC=yes
+
+# Build target configuration
+# Since this file is sourced by a script that runs another
+# script, these must be exported.
+set -a
+CHROOTDIR="/scratch"
+EMBEDDEDBUILD=1
+EMBEDDEDPORTS="lang/python textproc/gsed"
+XDEV="arm"
+XDEV_ARCH="armv6"
+KERNEL="PANDABOARD"
+CROCHETSRC="https://github.com/kientzle/crochet-freebsd"
+CROCHETBRANCH="trunk"
+set +a
+

Modified: user/gjb/hacking/release-embedded/release/arm/release.sh
==============================================================================
--- user/gjb/hacking/release-embedded/release/arm/release.sh	Tue Jan 28 01:49:49 2014	(r261220)
+++ user/gjb/hacking/release-embedded/release/arm/release.sh	Tue Jan 28 03:09:57 2014	(r261221)
@@ -24,6 +24,18 @@ before_build() {
 			chroot ${CHROOTDIR} tar xf /tmp/crochet/u-boot-2013.04.tar.bz2 \
 				-C /tmp/crochet/ 
 			;;
+		PANDABOARD)
+			KNOWNHASH="e08e20a6979bfca6eebb9a2b0e42aa4416af3d796332fd63a3470495a089d496"
+			chroot ${CHROOTDIR} fetch -o /tmp/crochet/u-boot-2012.07.tar.bz2 \
+				http://people.freebsd.org/~gjb/u-boot-2012.07.tar.bz2
+			UBOOT_HASH="$(sha256 -q ${CHROOTDIR}/tmp/crochet/u-boot-2012.07.tar.bz2)"
+			if [ "${UBOOT_HASH}" != "${KNOWNHASH}" ]; then
+				echo "Checksum mismatch!  Exiting now."
+				exit 1
+			fi
+			chroot ${CHROOTDIR} tar xf /tmp/crochet/u-boot-2012.07.tar.bz2 \
+				-C /tmp/crochet/ 
+			;;
 		*)
 			# Fallthrough.
 			;;

Added: user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf	Tue Jan 28 03:09:57 2014	(r261221)
@@ -0,0 +1,29 @@
+#
+# $FreeBSD$
+#
+
+# This is the configuration file for use with crochet to produce
+# FreeBSD PandaBoard images.
+
+board_setup PandaBoard
+option ImageSize 1gb
+option AutoSize
+
+export MAKEOBJDIRPREFIX=/usr/obj
+FREEBSD_SRC=/usr/src
+__MAKE_CONF=/dev/null
+SRCCONF=/dev/null
+WORKDIR=/usr/obj
+_BRANCH=$(make -C ${FREEBSD_SRC}/release -V BRANCH)
+_REVISION=$(make -C ${FREEBSD_SRC}/release -V REVISION)
+KERNCONF=PANDABOARD
+TARGET=arm
+TARGET_ARCH=armv6
+FREEBSD_BUILDWORLD_EXTRA_ARGS=""
+FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
+FREEBSD_BUILDKERNEL_EXTRA_ARGS=""
+FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
+FREEBSD_WORLD_EXTRA_ARGS=""
+FREEBSD_KERNEL_EXTRA_ARGS=""
+FREEBSD_EXTRA_ARGS=""
+IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${KERNCONF}.img

From owner-svn-src-user@FreeBSD.ORG  Tue Jan 28 17:23:45 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
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 ESMTPS id 5261414D;
 Tue, 28 Jan 2014 17:23:45 +0000 (UTC)
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 3EA5B1395;
 Tue, 28 Jan 2014 17:23:45 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0SHNj2D087770;
 Tue, 28 Jan 2014 17:23:45 GMT (envelope-from gjb@svn.freebsd.org)
Received: (from gjb@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0SHNjvb087769;
 Tue, 28 Jan 2014 17:23:45 GMT (envelope-from gjb@svn.freebsd.org)
Message-Id: <201401281723.s0SHNjvb087769@svn.freebsd.org>
From: Glen Barber <gjb@FreeBSD.org>
Date: Tue, 28 Jan 2014 17:23:45 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261237 - user/gjb/hacking/release-embedded/release/arm
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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 28 Jan 2014 17:23:45 -0000

Author: gjb
Date: Tue Jan 28 17:23:44 2014
New Revision: 261237
URL: http://svnweb.freebsd.org/changeset/base/261237

Log:
  Compress arm/armv6 images before generating checksums to reduce
  image size for download.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  user/gjb/hacking/release-embedded/release/arm/release.sh

Modified: user/gjb/hacking/release-embedded/release/arm/release.sh
==============================================================================
--- user/gjb/hacking/release-embedded/release/arm/release.sh	Tue Jan 28 15:15:13 2014	(r261236)
+++ user/gjb/hacking/release-embedded/release/arm/release.sh	Tue Jan 28 17:23:44 2014	(r261237)
@@ -89,8 +89,9 @@ main() {
 		-c /tmp/external/${XDEV}/crochet-${KERNEL}.conf
 	mkdir -p ${CHROOTDIR}/R/
 	cp -p ${CHROOTDIR}/usr/obj/*.img ${CHROOTDIR}/R/
-	cd ${CHROOTDIR}/R/ && sha256 FreeBSD*.img > CHECKSUM.SHA256
-	cd ${CHROOTDIR}/R/ && md5 FreeBSD*.img > CHECKSUM.MD5
+	bzip2 ${CHROOTDIR}/R/FreeBSD*.img
+	cd ${CHROOTDIR}/R/ && sha256 FreeBSD*.img.bz2 > CHECKSUM.SHA256
+	cd ${CHROOTDIR}/R/ && md5 FreeBSD*.img.bz2 > CHECKSUM.MD5
 }
 
 main "$@"

From owner-svn-src-user@FreeBSD.ORG  Tue Jan 28 17:27:57 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
 (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 2784228C;
 Tue, 28 Jan 2014 17:27:57 +0000 (UTC)
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 EDCFA13C4;
 Tue, 28 Jan 2014 17:27:56 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0SHRuhZ088282;
 Tue, 28 Jan 2014 17:27:56 GMT (envelope-from gjb@svn.freebsd.org)
Received: (from gjb@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0SHRudS088279;
 Tue, 28 Jan 2014 17:27:56 GMT (envelope-from gjb@svn.freebsd.org)
Message-Id: <201401281727.s0SHRudS088279@svn.freebsd.org>
From: Glen Barber <gjb@FreeBSD.org>
Date: Tue, 28 Jan 2014 17:27:56 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261239 -
 user/gjb/hacking/release-embedded/release/tools/arm
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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 28 Jan 2014 17:27:57 -0000

Author: gjb
Date: Tue Jan 28 17:27:56 2014
New Revision: 261239
URL: http://svnweb.freebsd.org/changeset/base/261239

Log:
  Include 'TARGET-TARGET_ARCH' in the resulting image name similar
  to 'make -V OSRELEASE' output.
  
  This probably should use 'make -V OSRELEASE' directly, but for
  now, this keeps the line length reasonable for readability.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  user/gjb/hacking/release-embedded/release/tools/arm/crochet-BEAGLEBONE.conf
  user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf
  user/gjb/hacking/release-embedded/release/tools/arm/crochet-RPI-B.conf

Modified: user/gjb/hacking/release-embedded/release/tools/arm/crochet-BEAGLEBONE.conf
==============================================================================
--- user/gjb/hacking/release-embedded/release/tools/arm/crochet-BEAGLEBONE.conf	Tue Jan 28 17:27:54 2014	(r261238)
+++ user/gjb/hacking/release-embedded/release/tools/arm/crochet-BEAGLEBONE.conf	Tue Jan 28 17:27:56 2014	(r261239)
@@ -26,4 +26,4 @@ FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
 FREEBSD_WORLD_EXTRA_ARGS=""
 FREEBSD_KERNEL_EXTRA_ARGS=""
 FREEBSD_EXTRA_ARGS=""
-IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${KERNCONF}.img
+IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

Modified: user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf
==============================================================================
--- user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf	Tue Jan 28 17:27:54 2014	(r261238)
+++ user/gjb/hacking/release-embedded/release/tools/arm/crochet-PANDABOARD.conf	Tue Jan 28 17:27:56 2014	(r261239)
@@ -26,4 +26,4 @@ FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
 FREEBSD_WORLD_EXTRA_ARGS=""
 FREEBSD_KERNEL_EXTRA_ARGS=""
 FREEBSD_EXTRA_ARGS=""
-IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${KERNCONF}.img
+IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

Modified: user/gjb/hacking/release-embedded/release/tools/arm/crochet-RPI-B.conf
==============================================================================
--- user/gjb/hacking/release-embedded/release/tools/arm/crochet-RPI-B.conf	Tue Jan 28 17:27:54 2014	(r261238)
+++ user/gjb/hacking/release-embedded/release/tools/arm/crochet-RPI-B.conf	Tue Jan 28 17:27:56 2014	(r261239)
@@ -26,4 +26,4 @@ FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
 FREEBSD_WORLD_EXTRA_ARGS=""
 FREEBSD_KERNEL_EXTRA_ARGS=""
 FREEBSD_EXTRA_ARGS=""
-IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${KERNCONF}.img
+IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

From owner-svn-src-user@FreeBSD.ORG  Thu Jan 30 11:35:20 2014
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
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 ESMTPS id 119AD353;
 Thu, 30 Jan 2014 11:35:20 +0000 (UTC)
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 F20EE1228;
 Thu, 30 Jan 2014 11:35:19 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0UBZJd3011936;
 Thu, 30 Jan 2014 11:35:19 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
 by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0UBZJM9011935;
 Thu, 30 Jan 2014 11:35:19 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <201401301135.s0UBZJM9011935@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 30 Jan 2014 11:35:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r261289 - user/pho/stress2/misc
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.17
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 30 Jan 2014 11:35:20 -0000

Author: pho
Date: Thu Jan 30 11:35:19 2014
New Revision: 261289
URL: http://svnweb.freebsd.org/changeset/base/261289

Log:
  Added a test scenario for swapoff(8).
  
  Sponsored by:	EMC / Isilon storage division

Added:
  user/pho/stress2/misc/stealer.sh   (contents, props changed)

Added: user/pho/stress2/misc/stealer.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/pho/stress2/misc/stealer.sh	Thu Jan 30 11:35:19 2014	(r261289)
@@ -0,0 +1,130 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2014 EMC Corp.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# Process stuck in objtrm wait state
+# http://people.freebsd.org/~pho/stress/log/stealer.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > stealer.c
+cc -o stealer -Wall -Wextra stealer.c || exit 1
+rm -f stealer.c
+cd $here
+swapoff -a > /dev/null
+
+dd if=/dev/zero of=$diskimage bs=1m count=1k 2>&1 |
+    egrep -v 'records|transferred'
+mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+swapon /dev/md$mdstart
+
+hw=`sysctl hw.pagesize | sed 's/.*: //'`
+pages=`sysctl hw.usermem  | sed 's/.*: //'`
+pages=$((pages / hw))
+echo "`date '+%T'` Test with $pages pages."
+su $testuser -c "sh -c \"/tmp/stealer $pages\"" &
+sleep 30
+while ! swapoff /dev/md$mdstart 2>&1 |
+    grep -v "Cannot allocate memory"; do
+	sleep 2
+done
+wait
+
+swapon -a > /dev/null
+
+mdconfig -d -u $mdstart
+rm -rf /tmp/stealer $diskimage
+exit 0
+EOF
+#include <err.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+#define N 200
+
+void
+handler(int i __unused)
+{
+	_exit(0);
+}
+
+void
+stealer(int pages)
+{
+	char *c;
+	int i, page, size;
+
+	page = getpagesize();
+	size = pages * page;
+	if ((c = malloc(size)) == 0)
+		err(1, "malloc(%d pages)", pages);
+
+	signal(SIGALRM, handler);
+	alarm(3 * 60);
+	for (;;) {
+		i = 0;
+		while (i < size) {
+			c[i] = 0;
+			i += page;
+		}
+	}
+}
+
+int
+main(int argc __unused, char **argv)
+{
+	int i, j, n, pages, status;
+
+	pages = atoi(argv[1]);
+	n = pages / N;
+
+	j = 0;
+	for ( i = 0; i < N; i++, j++) {
+		if (fork() == 0)
+			stealer(n);
+		pages = pages - n;
+	}
+	if (pages > 0) {
+		j++;
+		if (fork() == 0)
+			stealer(pages);
+	}
+	while (j-- > 0)
+		if (wait(&status) == -1)
+			err(1, "wait()");
+	return (0);
+}