From owner-svn-src-user@FreeBSD.ORG Sun Jan 26 01:27:55 2014 Return-Path: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #endif #ifdef INET6 +#include #include #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 + * 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 +__FBSDID("$FreeBSD$"); + +#include "opt_inet6.h" +#include "opt_ipstealth.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +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: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +#include +#include +#include +#include +#include + +#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); +}