From owner-svn-src-projects@FreeBSD.ORG  Sun Aug 10 00:03:41 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 22611207
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 00:03:41 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id ECC5A298F
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 00:03:40 +0000 (UTC)
Received: from bryanv (uid 1304) (envelope-from bryanv@FreeBSD.org) id 2dfe
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Sun, 10 Aug 2014 00:03:40 +0000
From: Bryan Venteicher <bryanv@FreeBSD.org>
Date: Sun, 10 Aug 2014 00:03:40 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269768 - projects/vxlan/sys/net
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e6b6dc.2dfe.795510cd@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 Aug 2014 00:03:41 -0000

Author: bryanv
Date: Sun Aug 10 00:03:40 2014
New Revision: 269768
URL: http://svnweb.freebsd.org/changeset/base/269768

Log:
  Improve the random source port selection
  
  VXLAN uses a random source port to ensure a reasonable distribution of
  the encapsulated packet flows. If available, use the RSS hash of the
  inner packet. Otherwise, use a constant hash based on the inner frame
  Ethernet header. The previous code would select a different source port
  for each frame, potentially causing out of order processing on the
  destination.

Modified:
  projects/vxlan/sys/net/if_vxlan.c

Modified: projects/vxlan/sys/net/if_vxlan.c
==============================================================================
--- projects/vxlan/sys/net/if_vxlan.c	Sat Aug  9 22:51:26 2014	(r269767)
+++ projects/vxlan/sys/net/if_vxlan.c	Sun Aug 10 00:03:40 2014	(r269768)
@@ -150,7 +150,7 @@ struct vxlan_softc {
 #define VXLAN_FLAG_TEARDOWN	0x0002
 #define VXLAN_FLAG_LEARN	0x0004
 
-	uint32_t			 vxl_last_port_hash;
+	uint32_t			 vxl_port_hash_key;
 	uint16_t			 vxl_min_port;
 	uint16_t			 vxl_max_port;
 	uint8_t				 vxl_ttl;
@@ -310,8 +310,7 @@ static int	vxlan_ioctl_drvspec(struct vx
 static int	vxlan_ioctl_ifflags(struct vxlan_softc *);
 static int	vxlan_ioctl(struct ifnet *, u_long, caddr_t);
 
-static uint16_t vxlan_pick_source_port(struct vxlan_softc *,
-		    const struct ether_header *);
+static uint16_t vxlan_pick_source_port(struct vxlan_softc *, struct mbuf *);
 static void	vxlan_encap_header(struct vxlan_softc *, struct mbuf *,
 		    int, uint16_t, uint16_t);
 static int	vxlan_encap4(struct vxlan_softc *,
@@ -2218,19 +2217,19 @@ vxlan_ioctl(struct ifnet *ifp, u_long cm
 }
 
 static uint16_t
-vxlan_pick_source_port(struct vxlan_softc *sc, const struct ether_header *eh)
+vxlan_pick_source_port(struct vxlan_softc *sc, struct mbuf *m)
 {
-	uint32_t hash;
 	int range;
+	uint32_t hash;
 
 	range = sc->vxl_max_port - sc->vxl_min_port + 1;
 
-	/*
-	 * The specification recommends the source port be based on a hash
-	 * of the inner frame's Ethernet header.
-	 */
-	hash = jenkins_hash(eh, ETHER_HDR_LEN, sc->vxl_last_port_hash);
-	sc->vxl_last_port_hash = hash;
+	if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE &&
+	    M_HASHTYPE_GET(m) != M_HASHTYPE_OPAQUE)
+		hash = m->m_pkthdr.flowid;
+	else
+		hash = jenkins_hash(m->m_data, ETHER_HDR_LEN,
+		    sc->vxl_port_hash_key);
 
 	return (sc->vxl_min_port + (hash % range));
 }
@@ -2272,7 +2271,7 @@ vxlan_encap4(struct vxlan_softc *sc, con
 
 	ifp = sc->vxl_ifp;
 	srcaddr = sc->vxl_src_addr.in4.sin_addr;
-	srcport = vxlan_pick_source_port(sc, mtod(m, struct ether_header *));
+	srcport = vxlan_pick_source_port(sc, m);
 	dstaddr = fvxlsa->in4.sin_addr;
 	dstport = fvxlsa->in4.sin_port;
 
@@ -2328,7 +2327,7 @@ vxlan_encap6(struct vxlan_softc *sc, con
 
 	ifp = sc->vxl_ifp;
 	srcaddr = &sc->vxl_src_addr.in6.sin6_addr;
-	srcport = vxlan_pick_source_port(sc, mtod(m, struct ether_header *));
+	srcport = vxlan_pick_source_port(sc, m);
 	dstaddr = &fvxlsa->in6.sin6_addr;
 	dstport = fvxlsa->in6.sin6_port;
 
@@ -2639,7 +2638,7 @@ vxlan_clone_create(struct if_clone *ifc,
 	sc->vxl_ifp = ifp;
 	rw_init(&sc->vxl_lock, "vxlanrw");
 	callout_init_rw(&sc->vxl_callout, &sc->vxl_lock, 0);
-	sc->vxl_last_port_hash = arc4random();
+	sc->vxl_port_hash_key = arc4random();
 	vxlan_ftable_init(sc);
 
 	vxlan_sysctl_setup(sc);

From owner-svn-src-projects@FreeBSD.ORG  Sun Aug 10 17:08:29 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 6A0CB982
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 17:08:29 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 404A62802
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 17:08:29 +0000 (UTC)
Received: from jceel (uid 1267) (envelope-from jceel@FreeBSD.org) id 2c25
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Sun, 10 Aug 2014 17:08:29 +0000
From: Jakub Wojciech Klama <jceel@FreeBSD.org>
Date: Sun, 10 Aug 2014 17:08:29 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269784 - projects/arm_intrng
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e7a70d.2c25.21053fd8@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 Aug 2014 17:08:29 -0000

Author: jceel
Date: Sun Aug 10 17:08:28 2014
New Revision: 269784
URL: http://svnweb.freebsd.org/changeset/base/269784

Log:
  Create a branch for working on new ARM interrupt controller interface.

Added:
  projects/arm_intrng/

From owner-svn-src-projects@FreeBSD.ORG  Sun Aug 10 18:11:18 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 453B0A1A
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 18:11:18 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 1C9B02EC1
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 18:11:18 +0000 (UTC)
Received: from jceel (uid 1267) (envelope-from jceel@FreeBSD.org) id 2468
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Sun, 10 Aug 2014 18:11:18 +0000
From: Jakub Wojciech Klama <jceel@FreeBSD.org>
Date: Sun, 10 Aug 2014 18:11:18 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269785 - projects/arm_intrng/head
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e7b5c6.2468.75e8592a@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 Aug 2014 18:11:18 -0000

Author: jceel
Date: Sun Aug 10 18:11:17 2014
New Revision: 269785
URL: http://svnweb.freebsd.org/changeset/base/269785

Log:
  Populate branch from head/ @r269784.

Added:
     - copied from r269784, head/
Directory Properties:
  projects/arm_intrng/head/   (props changed)

From owner-svn-src-projects@FreeBSD.ORG  Sun Aug 10 18:12:58 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 73B1BB17
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 18:12:58 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 492232ED8
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 18:12:58 +0000 (UTC)
Received: from jceel (uid 1267) (envelope-from jceel@FreeBSD.org) id 2a19
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Sun, 10 Aug 2014 18:12:58 +0000
From: Jakub Wojciech Klama <jceel@FreeBSD.org>
Date: Sun, 10 Aug 2014 18:12:58 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269786 - projects/arm_intrng
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e7b62a.2a19.73fe7ede@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 Aug 2014 18:12:58 -0000

Author: jceel
Date: Sun Aug 10 18:12:57 2014
New Revision: 269786
URL: http://svnweb.freebsd.org/changeset/base/269786

Log:
  Erm, let's start over again.

Deleted:
  projects/arm_intrng/

From owner-svn-src-projects@FreeBSD.ORG  Sun Aug 10 18:13:50 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 E64B5C8E
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 18:13:50 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id BBB0A2EE1
 for <svn-src-projects@freebsd.org>; Sun, 10 Aug 2014 18:13:50 +0000 (UTC)
Received: from jceel (uid 1267) (envelope-from jceel@FreeBSD.org) id 2a22
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Sun, 10 Aug 2014 18:13:50 +0000
From: Jakub Wojciech Klama <jceel@FreeBSD.org>
Date: Sun, 10 Aug 2014 18:13:50 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269787 - projects/arm_intrng
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e7b65e.2a22.1fad114e@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 Aug 2014 18:13:51 -0000

Author: jceel
Date: Sun Aug 10 18:13:50 2014
New Revision: 269787
URL: http://svnweb.freebsd.org/changeset/base/269787

Log:
  Create a branch for working on new ARM interrupt controller interface.

Added:
     - copied from r269786, head/
Directory Properties:
  projects/arm_intrng/   (props changed)

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 16:44:07 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 B1AF3115
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 16:44:07 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 9A3872266
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 16:44:07 +0000 (UTC)
Received: from jceel (uid 1267) (envelope-from jceel@FreeBSD.org) id 2f8f
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 16:44:06 +0000
From: Jakub Wojciech Klama <jceel@FreeBSD.org>
Date: Mon, 11 Aug 2014 16:44:06 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269817 - in projects/arm_intrng/sys: arm/arm
 arm/broadcom/bcm2835 arm/conf arm/include arm/lpc arm/ti arm/ti/omap4
 boot/fdt/dts/arm conf dev/fdt
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e8f2d6.2f8f.71f433d6@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 16:44:07 -0000

Author: jceel
Date: Mon Aug 11 16:44:06 2014
New Revision: 269817
URL: http://svnweb.freebsd.org/changeset/base/269817

Log:
  Initial version of refactored interrupt handling framework for
  FreeBSD ARM. Currently supports following interrupt controllers:
  * lpc_intc in lpc port
  * aintc in ti port
  * intc in bcm2835 port (Raspberry PI)
  * ARM GIC
  
  It's mainly based on 2012 Google Summer of Code project, adapted
  for current HEAD and with added SMP (IPI) support. It has been
  tested on LPC3250, Pandaboard and RPI (both with and without SMP
  support).
  
  Introduces hierarchical interrupt controllers in the system, allowing
  to easily utilize multiplexers such as GPIOs to serve as interrupt
  sources. nexus driver is a top-level interrupt controller, exposing
  single interruprt (IRQ) on ARM. The GIC or any other used interrupt
  controller setups handler on that interrupt, exposing new IRQs
  available for other peripherals. In an example SoC, interrupt
  hierarchy may look like that:
  
  nexus0 (1 interrupts)
  |
  \-- gic0 (160 interrupts, uses irq nexus0:0)
      |
      \-- gpio0 (8 interrupts, uses irq gic0:42)
      |   |
      |   \-- mmcsd0 (uses irqs gpio0:1, gpio0:2)
      |   \-- spi0 (uses irq gpio0:3)
      |   ...
      \-- gpio1 (8 interrupts, uses irq gic0:43)
      \-- ehci0 (uses irq gic0:109)
      ...
  
  That change should not break any existing ports in any way, except
  for need to add 'arm/arm/intr.c' to 'files.*' of existing ports,
  as it's no longer compiled-in by default.

Added:
  projects/arm_intrng/sys/arm/arm/intrng.c   (contents, props changed)
  projects/arm_intrng/sys/arm/arm/pic_if.m
Modified:
  projects/arm_intrng/sys/arm/arm/gic.c
  projects/arm_intrng/sys/arm/arm/intr.c
  projects/arm_intrng/sys/arm/arm/mp_machdep.c
  projects/arm_intrng/sys/arm/arm/nexus.c
  projects/arm_intrng/sys/arm/broadcom/bcm2835/bcm2835_intr.c
  projects/arm_intrng/sys/arm/broadcom/bcm2835/files.bcm2835
  projects/arm_intrng/sys/arm/conf/EA3250
  projects/arm_intrng/sys/arm/conf/PANDABOARD
  projects/arm_intrng/sys/arm/conf/RPI-B
  projects/arm_intrng/sys/arm/include/fdt.h
  projects/arm_intrng/sys/arm/include/intr.h
  projects/arm_intrng/sys/arm/include/smp.h
  projects/arm_intrng/sys/arm/lpc/files.lpc
  projects/arm_intrng/sys/arm/lpc/lpc_intc.c
  projects/arm_intrng/sys/arm/lpc/lpcreg.h
  projects/arm_intrng/sys/arm/ti/aintc.c
  projects/arm_intrng/sys/arm/ti/files.ti
  projects/arm_intrng/sys/arm/ti/omap4/omap4_mp.c
  projects/arm_intrng/sys/boot/fdt/dts/arm/bcm2835.dtsi
  projects/arm_intrng/sys/boot/fdt/dts/arm/ea3250.dts
  projects/arm_intrng/sys/boot/fdt/dts/arm/pandaboard.dts
  projects/arm_intrng/sys/conf/files.arm
  projects/arm_intrng/sys/conf/options.arm
  projects/arm_intrng/sys/dev/fdt/simplebus.c

Modified: projects/arm_intrng/sys/arm/arm/gic.c
==============================================================================
--- projects/arm_intrng/sys/arm/arm/gic.c	Mon Aug 11 16:31:28 2014	(r269816)
+++ projects/arm_intrng/sys/arm/arm/gic.c	Mon Aug 11 16:44:06 2014	(r269817)
@@ -55,6 +55,8 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
 
+#include "pic_if.h"
+
 /* We are using GICv2 register naming */
 
 /* Distributor Registers */
@@ -95,42 +97,49 @@ __FBSDID("$FreeBSD$");
 #define GICD_ICFGR_TRIG_MASK	0x2
 
 struct arm_gic_softc {
+	device_t		gic_dev;
 	struct resource *	gic_res[3];
 	bus_space_tag_t		gic_c_bst;
 	bus_space_tag_t		gic_d_bst;
 	bus_space_handle_t	gic_c_bsh;
 	bus_space_handle_t	gic_d_bsh;
+	void *			gic_intrhand;
 	uint8_t			ver;
-	device_t		dev;
 	struct mtx		mutex;
 	uint32_t		nirqs;
 };
-
 static struct resource_spec arm_gic_spec[] = {
 	{ SYS_RES_MEMORY,	0,	RF_ACTIVE },	/* Distributor registers */
 	{ SYS_RES_MEMORY,	1,	RF_ACTIVE },	/* CPU Interrupt Intf. registers */
+	{ SYS_RES_IRQ,		0,	RF_ACTIVE }, 	/* Parent interrupt */
 	{ -1, 0 }
 };
 
 static struct arm_gic_softc *arm_gic_sc = NULL;
 
-#define	gic_c_read_4(reg)		\
-    bus_space_read_4(arm_gic_sc->gic_c_bst, arm_gic_sc->gic_c_bsh, reg)
-#define	gic_c_write_4(reg, val)		\
-    bus_space_write_4(arm_gic_sc->gic_c_bst, arm_gic_sc->gic_c_bsh, reg, val)
-#define	gic_d_read_4(reg)		\
-    bus_space_read_4(arm_gic_sc->gic_d_bst, arm_gic_sc->gic_d_bsh, reg)
-#define	gic_d_write_4(reg, val)		\
-    bus_space_write_4(arm_gic_sc->gic_d_bst, arm_gic_sc->gic_d_bsh, reg, val)
-
-static int gic_config_irq(int irq, enum intr_trigger trig,
-    enum intr_polarity pol);
-static void gic_post_filter(void *);
+static int arm_gic_probe(device_t);
+static int arm_gic_attach(device_t);
+static void arm_gic_init_secondary(device_t);
+static int arm_gic_intr(void *);
+static int arm_gic_config(device_t, int, enum intr_trigger, enum intr_polarity);
+static void arm_gic_eoi(device_t, int);
+static void arm_gic_mask(device_t, int);
+static void arm_gic_unmask(device_t, int);
+static void arm_gic_ipi_send(device_t, cpuset_t, int);
+static void arm_gic_ipi_clear(device_t, int);
+
+#define	gic_c_read_4(_sc, _reg)		\
+    bus_space_read_4((_sc)->gic_c_bst, (_sc)->gic_c_bsh, (_reg))
+#define	gic_c_write_4(_sc, _reg, _val)		\
+    bus_space_write_4((_sc)->gic_c_bst, (_sc)->gic_c_bsh, (_reg), (_val))
+#define	gic_d_read_4(_sc, _reg)		\
+    bus_space_read_4((_sc)->gic_d_bst, (_sc)->gic_d_bsh, (_reg))
+#define	gic_d_write_4(_sc, _reg, _val)		\
+    bus_space_write_4((_sc)->gic_d_bst, (_sc)->gic_d_bsh, (_reg), (_val))
 
 static int
 arm_gic_probe(device_t dev)
 {
-
 	if (!ofw_bus_status_okay(dev))
 		return (ENXIO);
 
@@ -140,17 +149,13 @@ arm_gic_probe(device_t dev)
 	return (BUS_PROBE_DEFAULT);
 }
 
-void
-gic_init_secondary(void)
+static void
+arm_gic_init_secondary(device_t dev)
 {
-	int i, nirqs;
-
-  	/* Get the number of interrupts */
-	nirqs = gic_d_read_4(GICD_TYPER);
-	nirqs = 32 * ((nirqs & 0x1f) + 1);
-
-	for (i = 0; i < nirqs; i += 4)
-		gic_d_write_4(GICD_IPRIORITYR(i >> 2), 0);
+	struct arm_gic_softc *sc = device_get_softc(dev);
+	
+	for (int i = 0; i < sc->nirqs; i += 4)
+		gic_d_write_4(sc, GICD_IPRIORITYR(i >> 2), 0);
 
 	/* Set all the interrupts to be in Group 0 (secure) */
 	for (i = 0; i < nirqs; i += 32) {
@@ -158,14 +163,12 @@ gic_init_secondary(void)
 	}
 
 	/* Enable CPU interface */
-	gic_c_write_4(GICC_CTLR, 1);
-
-	/* Set priority mask register. */
-	gic_c_write_4(GICC_PMR, 0xff);
+	gic_c_write_4(sc, GICC_CTLR, 1);
 
 	/* Enable interrupt distribution */
-	gic_d_write_4(GICD_CTLR, 0x01);
-
+	gic_d_write_4(sc, GICD_CTLR, 0x01);
+		
+	/* Activate IRQ 29, ie private timer IRQ*/
 	/* Activate IRQ 29-30, ie private timer (secure & non-secure) IRQs */
 	gic_d_write_4(GICD_ISENABLER(29 >> 5), (1UL << (29 & 0x1F)));
 	gic_d_write_4(GICD_ISENABLER(30 >> 5), (1UL << (30 & 0x1F)));
@@ -174,21 +177,18 @@ gic_init_secondary(void)
 static int
 arm_gic_attach(device_t dev)
 {
-	struct		arm_gic_softc *sc;
+	struct		arm_gic_softc *sc = device_get_softc(dev);
 	int		i;
 	uint32_t	icciidr;
 
-	if (arm_gic_sc)
-		return (ENXIO);
-
-	sc = device_get_softc(dev);
-	sc->dev = dev;
-
 	if (bus_alloc_resources(dev, arm_gic_spec, sc->gic_res)) {
 		device_printf(dev, "could not allocate resources\n");
 		return (ENXIO);
 	}
 
+	sc->gic_dev = dev;
+	arm_gic_sc = sc;
+
 	/* Initialize mutex */
 	mtx_init(&sc->mutex, "GIC lock", "", MTX_SPIN);
 
@@ -200,32 +200,35 @@ arm_gic_attach(device_t dev)
 	sc->gic_c_bst = rman_get_bustag(sc->gic_res[1]);
 	sc->gic_c_bsh = rman_get_bushandle(sc->gic_res[1]);
 
-	arm_gic_sc = sc;
+	arm_register_pic(dev, PIC_FEATURE_IPI);
+
+	if (bus_setup_intr(dev, sc->gic_res[2], INTR_TYPE_MISC | INTR_CONTROLLER,
+	    arm_gic_intr, NULL, sc, &sc->gic_intrhand)) {
+		device_printf(dev, "could not setup interrupt handler\n");
+		bus_release_resources(dev, arm_gic_spec, sc->gic_res);
+		return (ENXIO);
+	}
 
 	/* Disable interrupt forwarding to the CPU interface */
-	gic_d_write_4(GICD_CTLR, 0x00);
+	gic_d_write_4(sc, GICD_CTLR, 0x00);
 
 	/* Get the number of interrupts */
-	sc->nirqs = gic_d_read_4(GICD_TYPER);
+	sc->nirqs = gic_d_read_4(sc, GICD_TYPER);
 	sc->nirqs = 32 * ((sc->nirqs & 0x1f) + 1);
 
-	/* Set up function pointers */
-	arm_post_filter = gic_post_filter;
-	arm_config_irq = gic_config_irq;
-
-	icciidr = gic_c_read_4(GICC_IIDR);
-	device_printf(dev,"pn 0x%x, arch 0x%x, rev 0x%x, implementer 0x%x sc->nirqs %u\n",
+	icciidr = gic_c_read_4(sc, GICC_IIDR);
+	device_printf(dev,"pn 0x%x, arch 0x%x, rev 0x%x, implementer 0x%x nirqs %u\n", 
 			icciidr>>20, (icciidr>>16) & 0xF, (icciidr>>12) & 0xf,
 			(icciidr & 0xfff), sc->nirqs);
 
 	/* Set all global interrupts to be level triggered, active low. */
 	for (i = 32; i < sc->nirqs; i += 16) {
-		gic_d_write_4(GICD_ICFGR(i >> 4), 0x00000000);
+		gic_d_write_4(sc, GICD_ICFGR(i >> 4), 0x00000000);
 	}
 
 	/* Disable all interrupts. */
 	for (i = 32; i < sc->nirqs; i += 32) {
-		gic_d_write_4(GICD_ICENABLER(i >> 5), 0xFFFFFFFF);
+		gic_d_write_4(sc, GICD_ICENABLER(i >> 5), 0xFFFFFFFF);
 	}
 
 	for (i = 0; i < sc->nirqs; i += 4) {
@@ -235,100 +238,61 @@ arm_gic_attach(device_t dev)
 
 	/* Set all the interrupts to be in Group 0 (secure) */
 	for (i = 0; i < sc->nirqs; i += 32) {
-		gic_d_write_4(GICD_IGROUPR(i >> 5), 0);
+		gic_d_write_4(sc, GICD_IGROUPR(i >> 5), 0);
 	}
 
 	/* Enable CPU interface */
-	gic_c_write_4(GICC_CTLR, 1);
+	gic_c_write_4(sc, GICC_CTLR, 1);
 
 	/* Set priority mask register. */
-	gic_c_write_4(GICC_PMR, 0xff);
+	gic_c_write_4(sc, GICC_PMR, 0xff);
 
 	/* Enable interrupt distribution */
-	gic_d_write_4(GICD_CTLR, 0x01);
+	gic_d_write_4(sc, GICD_CTLR, 0x01);
 
 	return (0);
 }
 
-static device_method_t arm_gic_methods[] = {
-	DEVMETHOD(device_probe,		arm_gic_probe),
-	DEVMETHOD(device_attach,	arm_gic_attach),
-	{ 0, 0 }
-};
-
-static driver_t arm_gic_driver = {
-	"gic",
-	arm_gic_methods,
-	sizeof(struct arm_gic_softc),
-};
-
-static devclass_t arm_gic_devclass;
-
-EARLY_DRIVER_MODULE(gic, simplebus, arm_gic_driver, arm_gic_devclass, 0, 0,
-    BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE);
-
-static void
-gic_post_filter(void *arg)
-{
-	uintptr_t irq = (uintptr_t) arg;
-
-	if (irq > GIC_LAST_IPI)
-		arm_irq_memory_barrier(irq);
-	gic_c_write_4(GICC_EOIR, irq);
-}
-
-int
-arm_get_next_irq(int last_irq)
+static int
+arm_gic_intr(void *arg)
 {
-	uint32_t active_irq;
+	struct arm_gic_softc *sc = (struct arm_gic_softc *)arg;
+	uint32_t active_irq, last_irq = 0;
 
-	active_irq = gic_c_read_4(GICC_IAR);
+	active_irq = gic_c_read_4(sc, GICC_IAR);
 
-	/*
+	/* 
 	 * Immediatly EOIR the SGIs, because doing so requires the other
 	 * bits (ie CPU number), not just the IRQ number, and we do not
 	 * have this information later.
 	 */
-
-	if ((active_irq & 0x3ff) <= GIC_LAST_IPI)
-		gic_c_write_4(GICC_EOIR, active_irq);
+	   
+	if ((active_irq & 0x3ff) < 1)
+		gic_c_write_4(sc, GICC_EOIR, active_irq);
 	active_irq &= 0x3FF;
 
 	if (active_irq == 0x3FF) {
 		if (last_irq == -1)
-			printf("Spurious interrupt detected\n");
-		return -1;
+			printf("Spurious interrupt detected [0x%08x]\n", active_irq);
+		return (FILTER_HANDLED);
 	}
+	
+	gic_c_write_4(sc, GICC_EOIR, active_irq);
+	arm_dispatch_irq(sc->gic_dev, NULL, active_irq);
 
-	return active_irq;
-}
-
-void
-arm_mask_irq(uintptr_t nb)
-{
-
-	gic_d_write_4(GICD_ICENABLER(nb >> 5), (1UL << (nb & 0x1F)));
-	gic_c_write_4(GICC_EOIR, nb);
-}
-
-void
-arm_unmask_irq(uintptr_t nb)
-{
-
-	if (nb > GIC_LAST_IPI)
-		arm_irq_memory_barrier(nb);
-	gic_d_write_4(GICD_ISENABLER(nb >> 5), (1UL << (nb & 0x1F)));
+	return (FILTER_HANDLED);
 }
 
 static int
-gic_config_irq(int irq, enum intr_trigger trig,
+arm_gic_config(device_t dev, int irq, enum intr_trigger trig,
     enum intr_polarity pol)
 {
+	struct arm_gic_softc *sc = device_get_softc(dev);
 	uint32_t reg;
 	uint32_t mask;
 
 	/* Function is public-accessible, so validate input arguments */
-	if ((irq < 0) || (irq >= arm_gic_sc->nirqs))
+	if ((irq < 0) || (irq >= sc->nirqs))
 		goto invalid_args;
 	if ((trig != INTR_TRIGGER_EDGE) && (trig != INTR_TRIGGER_LEVEL) &&
 	    (trig != INTR_TRIGGER_CONFORM))
@@ -337,9 +301,9 @@ gic_config_irq(int irq, enum intr_trigge
 	    (pol != INTR_POLARITY_CONFORM))
 		goto invalid_args;
 
-	mtx_lock_spin(&arm_gic_sc->mutex);
+	mtx_lock_spin(&sc->mutex);
 
-	reg = gic_d_read_4(GICD_ICFGR(irq >> 4));
+	reg = gic_d_read_4(sc, GICD_ICFGR(irq >> 4));
 	mask = (reg >> 2*(irq % 16)) & 0x3;
 
 	if (pol == INTR_POLARITY_LOW) {
@@ -361,32 +325,64 @@ gic_config_irq(int irq, enum intr_trigge
 	/* Set mask */
 	reg = reg & ~(0x3 << 2*(irq % 16));
 	reg = reg | (mask << 2*(irq % 16));
-	gic_d_write_4(GICD_ICFGR(irq >> 4), reg);
+	gic_d_write_4(sc, GICD_ICFGR(irq >> 4), reg);
 
-	mtx_unlock_spin(&arm_gic_sc->mutex);
+	mtx_unlock_spin(&sc->mutex);
 
 	return (0);
 
 invalid_args:
-	device_printf(arm_gic_sc->dev, "gic_config_irg, invalid parameters\n");
+	device_printf(dev, "gic_config_irg, invalid parameters\n");
 	return (EINVAL);
 }
 
-#ifdef SMP
-void
-pic_ipi_send(cpuset_t cpus, u_int ipi)
+static void
+arm_gic_eoi(device_t dev, int irq)
 {
+	struct arm_gic_softc *sc = device_get_softc(dev);
+
+	if (irq > GIC_LAST_IPI)
+		arm_irq_memory_barrier(irq);
+
+	gic_c_write_4(sc, GICC_EOIR, irq);
+}
+
+
+static void
+arm_gic_mask(device_t dev, int irq)
+{
+	struct arm_gic_softc *sc = device_get_softc(dev);
+
+	gic_d_write_4(sc, GICD_ICENABLER(irq >> 5), (1UL << (irq & 0x1F)));
+	gic_c_write_4(GICC_EOIR, nb);
+}
+
+static void
+arm_gic_unmask(device_t dev, int irq)
+{
+	struct arm_gic_softc *sc = device_get_softc(dev);
+
+	if (nb > GIC_LAST_IPI)
+		arm_irq_memory_barrier(nb);
+
+	gic_d_write_4(sc, GICD_ISENABLER(irq >> 5), (1UL << (irq & 0x1F)));
+}
+
+static void
+arm_gic_ipi_send(device_t dev, cpuset_t cpus, int ipi)
+{
+	struct arm_gic_softc *sc = device_get_softc(dev);
 	uint32_t val = 0, i;
 
 	for (i = 0; i < MAXCPU; i++)
 		if (CPU_ISSET(i, &cpus))
 			val |= 1 << (16 + i);
-	gic_d_write_4(GICD_SGIR(0), val | ipi);
 
+	gic_d_write_4(sc, GICD_SGIR(0), val | ipi);
 }
 
-int
-pic_ipi_get(int i)
+static int
+arm_gic_ipi_read(device_t dev, int i)
 {
 
 	if (i != -1) {
@@ -394,16 +390,44 @@ pic_ipi_get(int i)
 		 * The intr code will automagically give the frame pointer
 		 * if the interrupt argument is 0.
 		 */
-		if ((unsigned int)i > 16)
+		if ((unsigned int)i > 16) 
 			return (0);
 		return (i);
 	}
+
 	return (0x3ff);
 }
 
-void
-pic_ipi_clear(int ipi)
+static void
+arm_gic_ipi_clear(device_t dev, int ipi)
 {
+	/* no-op */
 }
-#endif
+
+static device_method_t arm_gic_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe,		arm_gic_probe),
+	DEVMETHOD(device_attach,	arm_gic_attach),
+
+	/* Interrupt controller interface */
+	DEVMETHOD(pic_config,		arm_gic_config),
+	DEVMETHOD(pic_mask,		arm_gic_mask),
+	DEVMETHOD(pic_unmask,		arm_gic_unmask),
+	DEVMETHOD(pic_eoi,		arm_gic_eoi),
+	DEVMETHOD(pic_init_secondary,	arm_gic_init_secondary),
+	DEVMETHOD(pic_ipi_send,		arm_gic_ipi_send),
+	DEVMETHOD(pic_ipi_clear,	arm_gic_ipi_clear),
+	DEVMETHOD(pic_ipi_read,		arm_gic_ipi_read),
+	{ 0, 0 }
+};
+
+static driver_t arm_gic_driver = {
+	"gic",
+	arm_gic_methods,
+	sizeof(struct arm_gic_softc),
+};
+
+static devclass_t arm_gic_devclass;
+
+DRIVER_MODULE(gic, simplebus, arm_gic_driver, arm_gic_devclass, 0, 0);
 

Modified: projects/arm_intrng/sys/arm/arm/intr.c
==============================================================================
--- projects/arm_intrng/sys/arm/arm/intr.c	Mon Aug 11 16:31:28 2014	(r269816)
+++ projects/arm_intrng/sys/arm/arm/intr.c	Mon Aug 11 16:44:06 2014	(r269817)
@@ -89,6 +89,15 @@ intr_init(void *unused)
 
 SYSINIT(intr_init, SI_SUB_INTR, SI_ORDER_FIRST, intr_init, NULL);
 
+const char *
+arm_describe_irq(int irq)
+{
+	static char buffer[8];
+
+	sprintf(buffer, "%d", irq);
+	return (buffer);
+}
+
 void
 arm_setup_irqhandler(const char *name, driver_filter_t *filt,
     void (*hand)(void*), void *arg, int irq, int flags, void **cookiep)

Added: projects/arm_intrng/sys/arm/arm/intrng.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm_intrng/sys/arm/arm/intrng.c	Mon Aug 11 16:44:06 2014	(r269817)
@@ -0,0 +1,444 @@
+/*-
+ * Copyright (c) 2012-2014 Jakub Wojciech Klama <jceel@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.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by Mark Brinicombe
+ *	for the NetBSD Project.
+ * 4. The name of the company nor the name of the author may be used to
+ *    endorse or promote products derived from this software without specific
+ *    prior written permission.
+ *
+ * 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 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/syslog.h> 
+#include <sys/malloc.h>
+#include <sys/proc.h>
+#include <sys/bus.h>
+#include <sys/interrupt.h>
+#include <sys/conf.h>
+#include <machine/atomic.h>
+#include <machine/intr.h>
+#include <machine/cpu.h>
+#include <machine/smp.h>
+
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include "pic_if.h"
+
+#define	INTRNAME_LEN	(MAXCOMLEN + 1)
+
+#define	IRQ_PIC_IDX(_irq)	((_irq >> 8) & 0xff)
+#define	IRQ_VECTOR_IDX(_irq)	((_irq) & 0xff)
+#define	IRQ_GEN(_pic, _irq)	(((_pic) << 8) | ((_irq) & 0xff))
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__);	\
+    printf(fmt,##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
+typedef void (*mask_fn)(void *);
+
+struct arm_intr_controller {
+	device_t		ic_dev;
+	phandle_t		ic_node;
+};
+
+struct arm_intr_handler {
+	device_t		ih_dev;
+	const char *		ih_ipi_name;
+	int			ih_intrcnt_idx;
+	int			ih_irq;
+	struct intr_event *	ih_event;
+	struct arm_intr_controller *ih_pic;
+};
+
+static void arm_mask_irq(void *);
+static void arm_unmask_irq(void *);
+static void arm_eoi(void *);
+
+static struct arm_intr_handler arm_intrs[NIRQ];
+static struct arm_intr_controller arm_pics[NPIC];
+static struct arm_intr_controller *arm_ipi_pic;
+
+static int intrcnt_index = 0;
+static int last_printed = 0;
+
+/* Data for statistics reporting. */
+u_long intrcnt[NIRQ];
+char intrnames[NIRQ * INTRNAME_LEN];
+size_t sintrcnt = sizeof(intrcnt);
+size_t sintrnames = sizeof(intrnames);
+int (*arm_config_irq)(int irq, enum intr_trigger trig,
+    enum intr_polarity pol) = NULL;
+
+void
+arm_intrnames_init(void)
+{
+	/* nothing... */
+}
+
+void
+arm_dispatch_irq(device_t dev, struct trapframe *tf, int irq)
+{
+	struct arm_intr_handler *ih = NULL;
+	int i;
+
+	debugf("pic %s, tf %p, irq %d\n", device_get_nameunit(dev), tf, irq);
+
+	/*
+	 * If we got null trapframe argument, that probably means
+	 * a call from non-root interrupt controller. In that case,
+	 * we'll just use the saved one.
+	 */
+	if (tf == NULL)
+		tf = PCPU_GET(curthread)->td_intr_frame;
+
+	for (i = 0; arm_intrs[i].ih_dev != NULL; i++) {
+		if (arm_intrs[i].ih_pic->ic_dev == dev &&
+		    arm_intrs[i].ih_irq == irq) {
+			ih = &arm_intrs[i];
+			break;
+		}
+	}
+
+	if (ih == NULL)
+		panic("arm_dispatch_irq: unknown irq");
+
+	debugf("requested by %s\n", ih->ih_ipi_name != NULL
+	    ? ih->ih_ipi_name
+	    : device_get_nameunit(ih->ih_dev));
+
+	intrcnt[ih->ih_intrcnt_idx]++;
+	if (intr_event_handle(ih->ih_event, tf) != 0) {
+		/* Stray IRQ */
+		arm_mask_irq(ih);
+	}
+
+	debugf("done\n");
+}
+
+static struct arm_intr_handler *
+arm_lookup_intr_handler(device_t pic, int irq)
+{
+	int i;
+
+	for (i = 0; i < NIRQ; i++) {
+		if (arm_intrs[i].ih_pic != NULL &&
+		    arm_intrs[i].ih_pic->ic_dev == pic &&
+		    arm_intrs[i].ih_irq == irq)
+			return (&arm_intrs[i]);
+
+		if (arm_intrs[i].ih_dev == NULL)
+			return (&arm_intrs[i]);
+	}
+
+	return NULL;
+}
+
+int
+arm_fdt_map_irq(phandle_t ic, int irq)
+{
+	int i;
+
+	ic = OF_xref_phandle(ic);
+
+	debugf("ic %08x irq %d\n", ic, irq);
+
+	if (ic == CORE_PIC_NODE)
+		return (IRQ_GEN(CORE_PIC_IDX, irq));
+
+	for (i = 0; arm_pics[i].ic_node != 0; i++) {
+		if (arm_pics[i].ic_node	== ic)
+			return (IRQ_GEN(i, irq));
+	}
+
+	/* 
+	 * Interrupt controller is not registered yet, so
+	 * we map a stub for it. 'i' is pointing to free
+	 * first slot in arm_pics table.
+	 */
+	arm_pics[i].ic_node = ic;
+	return (IRQ_GEN(i, irq));
+}
+
+const char *
+arm_describe_irq(int irq)
+{
+	struct arm_intr_controller *pic;
+	static char buffer[INTRNAME_LEN];
+	static char name[INTRNAME_LEN];
+
+	pic = &arm_pics[IRQ_PIC_IDX(irq)];
+
+	if (pic->ic_dev == NULL) {
+		/*
+		 * Interrupt controller not attached yet, so we'll use it's
+		 * FDT "name" property instead
+		 */
+		OF_getprop(pic->ic_node, "name", name, sizeof(name));
+		snprintf(buffer, sizeof(buffer), "%s.%d", name,
+		    IRQ_VECTOR_IDX(irq));
+		return (buffer);
+	}
+
+	snprintf(buffer, sizeof(buffer), "%s.%d",
+	    device_get_nameunit(pic->ic_dev), IRQ_VECTOR_IDX(irq));
+
+	return (buffer);
+}
+
+void
+arm_register_pic(device_t dev, int flags)
+{
+	struct arm_intr_controller *ic = NULL;
+	phandle_t node;
+	int i;
+
+	node = ofw_bus_get_node(dev);
+
+	/* Find room for IC */
+	for (i = 0; i < NPIC; i++) {
+		if (arm_pics[i].ic_dev != NULL)
+			continue;
+
+		if (arm_pics[i].ic_node == node) {
+			ic = &arm_pics[i];
+			break;
+		}
+
+		if (arm_pics[i].ic_node == 0) {
+			ic = &arm_pics[i];
+			break;
+		}
+	}
+
+	if (ic == NULL)
+		panic("not enough room to register interrupt controller");
+
+	ic->ic_dev = dev;
+	ic->ic_node = node;
+
+	debugf("device %s node %08x slot %d\n", device_get_nameunit(dev), ic->ic_node, i);
+
+	if (flags & PIC_FEATURE_IPI) {
+		if (arm_ipi_pic != NULL)
+			panic("there's already registered interrupt controller for serving IPIs");
+
+		arm_ipi_pic = ic;
+	}
+
+	device_printf(dev, "registered as interrupt controller\n");
+}
+
+void
+arm_setup_irqhandler(device_t dev, driver_filter_t *filt, 
+    void (*hand)(void*), void *arg, int irq, int flags, void **cookiep)
+{
+	struct arm_intr_controller *pic;
+	struct arm_intr_handler *ih;
+	const char *name;
+	int error;
+	int ipi;
+
+	if (irq < 0)
+		return;
+
+	ipi = (flags & INTR_IPI) != 0;
+	pic = ipi ? arm_ipi_pic : &arm_pics[IRQ_PIC_IDX(irq)];
+	ih = arm_lookup_intr_handler(pic->ic_dev, IRQ_VECTOR_IDX(irq));
+
+	if (ipi) {
+		name = (const char *)dev;
+		debugf("setup ipi %d\n", irq);
+	} else {
+		name = device_get_nameunit(dev);
+		debugf("setup irq %d on %s\n", IRQ_VECTOR_IDX(irq),
+		    device_get_nameunit(pic->ic_dev));
+	}
+
+	debugf("pic %p, ih %p\n", pic, ih);
+
+	if (ih->ih_event == NULL) {
+		error = intr_event_create(&ih->ih_event, (void *)ih, 0, irq,
+		    (mask_fn)arm_mask_irq, (mask_fn)arm_unmask_irq,
+		    arm_eoi, NULL, "intr%d:", irq);
+		
+		if (error)
+			return;
+
+		ih->ih_dev = dev;
+		ih->ih_ipi_name = ipi ? name : NULL;
+		ih->ih_irq = IRQ_VECTOR_IDX(irq);
+		ih->ih_pic = pic;
+
+		arm_unmask_irq(ih);
+
+		last_printed += 
+		    snprintf(intrnames + last_printed,
+		    INTRNAME_LEN, "%s:%d: %s",
+		    device_get_nameunit(pic->ic_dev),
+		    ih->ih_irq, name);
+		
+		last_printed++;
+		ih->ih_intrcnt_idx = intrcnt_index;
+		intrcnt_index++;
+		
+	}
+
+	intr_event_add_handler(ih->ih_event, name, filt, hand, arg,
+	    intr_priority(flags), flags, cookiep);
+
+	/* Unmask IPIs immediately */
+	if (ipi)
+		arm_unmask_irq(ih);
+}
+
+int
+arm_remove_irqhandler(int irq, void *cookie)
+{
+	struct arm_intr_controller *pic;
+	struct arm_intr_handler *ih;
+	int error;
+
+	if (irq < 0)
+		return (ENXIO);
+
+	pic = &arm_pics[IRQ_PIC_IDX(irq)];
+	ih = arm_lookup_intr_handler(pic->ic_dev, IRQ_VECTOR_IDX(irq));
+
+	if (ih->ih_event == NULL)
+		return (ENXIO);
+
+	arm_mask_irq(ih);
+	error = intr_event_remove_handler(cookie);
+
+	if (!TAILQ_EMPTY(&ih->ih_event->ie_handlers))
+		arm_unmask_irq(ih);
+
+	return (error);
+}
+
+static void
+arm_mask_irq(void *arg)
+{
+	struct arm_intr_handler *ih = (struct arm_intr_handler *)arg;
+
+	PIC_MASK(ih->ih_pic->ic_dev, ih->ih_irq);
+}
+
+static void
+arm_unmask_irq(void *arg)
+{
+	struct arm_intr_handler *ih = (struct arm_intr_handler *)arg;
+
+	PIC_UNMASK(ih->ih_pic->ic_dev, ih->ih_irq);
+}
+
+static void
+arm_eoi(void *arg)
+{
+	struct arm_intr_handler *ih = (struct arm_intr_handler *)arg;
+
+	PIC_EOI(ih->ih_pic->ic_dev, ih->ih_irq);
+}
+
+int
+arm_intrng_config_irq(int irq, enum intr_trigger trig, enum intr_polarity pol)
+{
+	struct arm_intr_controller *pic;
+	struct arm_intr_handler *ih;
+
+	pic = &arm_pics[IRQ_PIC_IDX(irq)];
+	ih = arm_lookup_intr_handler(pic->ic_dev, IRQ_VECTOR_IDX(irq));
+
+	if (ih == NULL)
+		return (ENXIO);
+
+	return PIC_CONFIG(pic->ic_dev, ih->ih_irq, trig, pol);
+}
+
+#ifdef SMP
+void
+arm_init_secondary_ic(void)
+{
+
+	KASSERT(arm_ipi_pic != NULL, ("no IPI PIC attached"));
+	PIC_INIT_SECONDARY(arm_ipi_pic->ic_dev);
+}
+
+void
+pic_ipi_send(cpuset_t cpus, u_int ipi)
+{
+
+	KASSERT(arm_ipi_pic != NULL, ("no IPI PIC attached"));
+	PIC_IPI_SEND(arm_ipi_pic->ic_dev, cpus, ipi);
+}
+
+void
+pic_ipi_clear(int ipi)
+{
+	
+	KASSERT(arm_ipi_pic != NULL, ("no IPI PIC attached"));
+	PIC_IPI_CLEAR(arm_ipi_pic->ic_dev, ipi);
+}
+
+int
+pic_ipi_read(int ipi)
+{
+
+	KASSERT(arm_ipi_pic != NULL, ("no IPI PIC attached"));
+	return (PIC_IPI_READ(arm_ipi_pic->ic_dev, ipi));
+}
+
+void
+arm_unmask_ipi(int ipi)
+{
+
+	KASSERT(arm_ipi_pic != NULL, ("no IPI PIC attached"));
+	PIC_UNMASK(arm_ipi_pic->ic_dev, ipi);
+}
+
+void
+arm_mask_ipi(int ipi)
+{
+
+	KASSERT(arm_ipi_pic != NULL, ("no IPI PIC attached"));
+	PIC_MASK(arm_ipi_pic->ic_dev, ipi);
+}
+#endif
+
+void dosoftints(void);
+void
+dosoftints(void)
+{
+}
+

Modified: projects/arm_intrng/sys/arm/arm/mp_machdep.c
==============================================================================
--- projects/arm_intrng/sys/arm/arm/mp_machdep.c	Mon Aug 11 16:31:28 2014	(r269816)
+++ projects/arm_intrng/sys/arm/arm/mp_machdep.c	Mon Aug 11 16:44:06 2014	(r269817)
@@ -235,7 +235,7 @@ init_secondary(int cpu)
 #endif
 				
 	for (int i = start; i <= end; i++)
-		arm_unmask_irq(i);
+		arm_unmask_ipi(i);
 	enable_interrupts(I32_bit);
 
 	loop_counter = 0;
@@ -265,7 +265,7 @@ ipi_handler(void *arg)
 
 	cpu = PCPU_GET(cpuid);
 
-	ipi = pic_ipi_get((int)arg);
+	ipi = pic_ipi_read((int)arg);
 
 	while ((ipi != 0x3ff)) {
 		switch (ipi) {
@@ -328,7 +328,7 @@ ipi_handler(void *arg)
 		}
 
 		pic_ipi_clear(ipi);
-		ipi = pic_ipi_get(-1);
+		ipi = pic_ipi_read(-1);
 	}
 
 	return (FILTER_HANDLED);
@@ -360,11 +360,10 @@ release_aps(void *dummy __unused)
 		 * if we used 0, the intr code will give the trap frame
 		 * pointer instead.
 		 */
-		arm_setup_irqhandler("ipi", ipi_handler, NULL, (void *)i, i,
-		    INTR_TYPE_MISC | INTR_EXCL, NULL);
-
-		/* Enable ipi */
-		arm_unmask_irq(i);
+		arm_setup_irqhandler((device_t)"ipi", ipi_handler, NULL, (void *)i, i,
+		    INTR_TYPE_MISC | INTR_EXCL | INTR_IPI, NULL);
+	
+		arm_unmask_ipi(i);
 	}
 	atomic_store_rel_int(&aps_ready, 1);
 

Modified: projects/arm_intrng/sys/arm/arm/nexus.c
==============================================================================
--- projects/arm_intrng/sys/arm/arm/nexus.c	Mon Aug 11 16:31:28 2014	(r269816)
+++ projects/arm_intrng/sys/arm/arm/nexus.c	Mon Aug 11 16:44:06 2014	(r269817)
@@ -68,6 +68,8 @@ __FBSDID("$FreeBSD$");
 #include "ofw_bus_if.h"
 #endif
 
+#include "pic_if.h"
+
 static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device");
 
 struct nexus_device {
@@ -77,6 +79,9 @@ struct nexus_device {
 #define DEVTONX(dev)	((struct nexus_device *)device_get_ivars(dev))
 
 static struct rman mem_rman;
+#if defined(ARM_INTRNG)
+static device_t nexus_dev;
+#endif
 
 static	int nexus_probe(device_t);
 static	int nexus_attach(device_t);
@@ -94,6 +99,13 @@ static	int nexus_deactivate_resource(dev
 static int nexus_setup_intr(device_t dev, device_t child, struct resource *res,
     int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep);
 static int nexus_teardown_intr(device_t, device_t, struct resource *, void *);
+#if defined(ARM_INTRNG)
+static int nexus_pic_config(device_t, int, enum intr_trigger, enum intr_polarity);
+static void nexus_pic_mask(device_t, int);
+static void nexus_pic_unmask(device_t, int);
+static void nexus_pic_eoi(device_t, int);
+void arm_irq_handler(struct trapframe *tf, int irqnb);
+#endif
 
 #ifdef FDT
 static int nexus_ofw_map_intr(device_t dev, device_t child, phandle_t iparent,
@@ -104,6 +116,7 @@ static device_method_t nexus_methods[] =
 	/* Device interface */
 	DEVMETHOD(device_probe,		nexus_probe),
 	DEVMETHOD(device_attach,	nexus_attach),
+

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 16:57:42 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 BF7C559D
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 16:57:42 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 934132498
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 16:57:42 +0000 (UTC)
Received: from andrew (uid 1231) (envelope-from andrew@FreeBSD.org) id 23db
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 16:57:42 +0000
From: Andrew Turner <andrew@FreeBSD.org>
Date: Mon, 11 Aug 2014 16:57:42 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269818 - projects/arm64/sys/dev/fdt
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e8f606.23db.c1d4a@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 16:57:42 -0000

Author: andrew
Date: Mon Aug 11 16:57:42 2014
New Revision: 269818
URL: http://svnweb.freebsd.org/changeset/base/269818

Log:
  Hack to get the correct value for the interrupt from the vendor supplied
  device tree. The GIC used the format <type irq flags> where the type is
  0 for Shared Peripheral Interrupts (SPI), and 1 for Private Peripheral
  Interrupts. The SPIs start at 32 in the GIc so we need to adjust their
  values to match this.

Modified:
  projects/arm64/sys/dev/fdt/simplebus.c

Modified: projects/arm64/sys/dev/fdt/simplebus.c
==============================================================================
--- projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:44:06 2014	(r269817)
+++ projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:57:42 2014	(r269818)
@@ -310,10 +310,18 @@ simplebus_setup_dinfo(device_t dev, phan
 			icells = 1;
 		}
 		for (i = 0, k = 0; i < nintr; i += icells, k++) {
+			u_int irq;
+
+			if (icells == 3) {
+				irq = intr[i + 1];
+				if (intr[i] == 0)
+					irq += 32;
+			} else
+				irq = intr[i];
 			intr[i] = ofw_bus_map_intr(dev, iparent, icells,
 			    &intr[i]);
-			resource_list_add(&ndi->rl, SYS_RES_IRQ, k, intr[i],
-			    intr[i], 1);
+			resource_list_add(&ndi->rl, SYS_RES_IRQ, k, irq,
+			    irq, 1);
 		}
 		free(intr, M_OFWPROP);
 	}

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 16:57:48 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 C1CF3687
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 16:57:48 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id AFCCD249C
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 16:57:48 +0000 (UTC)
Received: from andrew (uid 1231) (envelope-from andrew@FreeBSD.org) id 23fc
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 16:57:47 +0000
From: Andrew Turner <andrew@FreeBSD.org>
Date: Mon, 11 Aug 2014 16:57:47 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269819 - in projects/arm64/sys: arm/arm arm64/arm64
 arm64/include
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e8f60c.23fc.37502c6a@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 16:57:48 -0000

Author: andrew
Date: Mon Aug 11 16:57:47 2014
New Revision: 269819
URL: http://svnweb.freebsd.org/changeset/base/269819

Log:
  Get interrupts working through the GICv2 driver.

Modified:
  projects/arm64/sys/arm/arm/gic.c
  projects/arm64/sys/arm64/arm64/exception.S
  projects/arm64/sys/arm64/arm64/intr_machdep.c
  projects/arm64/sys/arm64/arm64/pic_if.m
  projects/arm64/sys/arm64/include/intr.h

Modified: projects/arm64/sys/arm/arm/gic.c
==============================================================================
--- projects/arm64/sys/arm/arm/gic.c	Mon Aug 11 16:57:42 2014	(r269818)
+++ projects/arm64/sys/arm/arm/gic.c	Mon Aug 11 16:57:47 2014	(r269819)
@@ -135,10 +135,10 @@ static struct arm_gic_softc *arm_gic_sc 
 
 static int gic_config_irq(int irq, enum intr_trigger trig,
     enum intr_polarity pol);
-static void gic_pre_filter(device_t, u_int);
-static void gic_post_filter(device_t, u_int);
-void gic_mask_irq(device_t, u_int);
-void gic_unmask_irq(device_t, u_int);
+static pic_dispatch_t gic_dispatch;
+static pic_eoi_t gic_eoi;
+static pic_mask_t gic_mask_irq;
+static pic_unmask_t gic_unmask_irq;
 
 static int
 arm_gic_probe(device_t dev)
@@ -269,8 +269,8 @@ static device_method_t arm_gic_methods[]
 	DEVMETHOD(device_attach,	arm_gic_attach),
 
 	/* pic_if */
-	DEVMETHOD(pic_pre_filter,	gic_pre_filter),
-	DEVMETHOD(pic_post_filter,	gic_post_filter),
+	DEVMETHOD(pic_dispatch,		gic_dispatch),
+	DEVMETHOD(pic_eoi,		gic_eoi),
 	DEVMETHOD(pic_mask,		gic_mask_irq),
 	DEVMETHOD(pic_unmask,		gic_unmask_irq),
 
@@ -289,13 +289,37 @@ EARLY_DRIVER_MODULE(gic, simplebus, arm_
     BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE);
 DRIVER_MODULE(gic, ofwbus, arm_gic_driver, arm_gic_devclass, 0, 0);
 
-static void
-gic_pre_filter(device_t dev, u_int irq)
+static void gic_dispatch(device_t dev, struct trapframe *frame)
 {
+	uint32_t active_irq;
+	int first = 1;
+
+	while (1) {
+		active_irq = gic_c_read_4(GICC_IAR);
+
+		/*
+		 * Immediatly EOIR the SGIs, because doing so requires the other
+		 * bits (ie CPU number), not just the IRQ number, and we do not
+		 * have this information later.
+		 */
+
+		if ((active_irq & 0x3ff) <= GIC_LAST_IPI)
+			gic_c_write_4(GICC_EOIR, active_irq);
+		active_irq &= 0x3FF;
+
+		if (active_irq == 0x3FF) {
+			if (first)
+				printf("Spurious interrupt detected\n");
+			return;
+		}
+
+		cpu_dispatch_intr(active_irq, frame);
+		first = 0;
+	}
 }
 
 static void
-gic_post_filter(device_t dev, u_int irq)
+gic_eoi(device_t dev, u_int irq)
 {
 	/* TODO: Get working on arm64 */
 #if 0

Modified: projects/arm64/sys/arm64/arm64/exception.S
==============================================================================
--- projects/arm64/sys/arm64/arm64/exception.S	Mon Aug 11 16:57:42 2014	(r269818)
+++ projects/arm64/sys/arm64/arm64/exception.S	Mon Aug 11 16:57:47 2014	(r269819)
@@ -103,6 +103,13 @@ handle_el1h_sync:
 	restore_registers
 	eret
 
+handle_el1h_irq:
+	save_registers
+	mov	x0, sp
+	bl	cpu_intr
+	restore_registers
+	eret
+
 .macro	vempty
 	.align 7
 	EMIT('Z');
@@ -114,6 +121,11 @@ handle_el1h_sync:
 	b	handle_el1h_sync
 .endm
 
+.macro	el1h_irq
+	.align 7
+	b	handle_el1h_irq
+.endm
+
 .macro	el1h_error
 	.align 7
 	EMIT('C');
@@ -129,7 +141,7 @@ exception_vectors:
 	vempty		/* Error EL1t */
 
 	el1h_sync	/* Synchronous EL1h */
-	vempty		/* IRQ EL1h */
+	el1h_irq	/* IRQ EL1h */
 	vempty		/* FIQ EL1h */
 	el1h_error	/* Error EL1h */
 

Modified: projects/arm64/sys/arm64/arm64/intr_machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/intr_machdep.c	Mon Aug 11 16:57:42 2014	(r269818)
+++ projects/arm64/sys/arm64/arm64/intr_machdep.c	Mon Aug 11 16:57:47 2014	(r269819)
@@ -87,61 +87,26 @@ arm_unmask_irq(u_int irq)
 	PIC_UNMASK(root_pic, irq);
 }
 
-#if 0
 static void
-mips_mask_soft_irq(void *source)
-{
-	uintptr_t irq = (uintptr_t)source;
-
-	mips_wr_status(mips_rd_status() & ~((1 << irq) << 8));
-}
-
-static void
-mips_unmask_soft_irq(void *source)
-{
-	uintptr_t irq = (uintptr_t)source;
-
-	mips_wr_status(mips_rd_status() | ((1 << irq) << 8));
-}
-
-/*
- * Perform initialization of interrupts prior to setting 
- * handlings
- */
-void
-cpu_init_interrupts()
+intr_pre_ithread(void *arg)
 {
-	int i;
-	char name[MAXCOMLEN + 1];
-
-	/*
-	 * Initialize all available vectors so spare IRQ
-	 * would show up in systat output 
-	 */
-	for (i = 0; i < NSOFT_IRQS; i++) {
-		snprintf(name, MAXCOMLEN + 1, "sint%d:", i);
-		mips_intr_counters[i] = mips_intrcnt_create(name);
-	}
+	u_int irq = (uintptr_t)arg;
 
-	for (i = 0; i < NHARD_IRQS; i++) {
-		snprintf(name, MAXCOMLEN + 1, "int%d:", i);
-		mips_intr_counters[NSOFT_IRQS + i] = mips_intrcnt_create(name);
-	}
+	PIC_PRE_ITHREAD(root_pic, irq);
 }
-#endif
 
 static void
-intr_pre_ithread(void *arg)
+intr_post_ithread(void *arg)
 {
-	int irq = (uintptr_t)arg;
+	u_int irq = (uintptr_t)arg;
 
-	PIC_PRE_FILTER(root_pic, irq);
+	PIC_POST_ITHREAD(root_pic, irq);
 }
 
 static void
-intr_post_ithread(void *arg)
+intr_post_filter(void *arg)
 {
-	int irq = (uintptr_t)arg;
+	u_int irq = (uintptr_t)arg;
 
 	PIC_POST_FILTER(root_pic, irq);
 }
@@ -172,7 +137,7 @@ cpu_establish_intr(const char *name, dri
 	if (event == NULL) {
 		error = intr_event_create(&event, (void *)(uintptr_t)irq, 0,
 		    irq, intr_pre_ithread, intr_post_ithread,
-		    NULL, NULL, "int%d", irq);
+		    intr_post_filter, NULL, "int%d", irq);
 		if (error)
 			return;
 		intr_events[irq] = event;
@@ -188,65 +153,24 @@ cpu_establish_intr(const char *name, dri
 #endif
 }
 
-#if 0
 void
-cpu_intr(struct trapframe *tf)
+cpu_dispatch_intr(u_int irq, struct trapframe *tf)
 {
 	struct intr_event *event;
-	register_t cause, status;
-	int hard, i, intr;
 
-	critical_enter();
-
-	cause = mips_rd_cause();
-	status = mips_rd_status();
-	intr = (cause & MIPS_INT_MASK) >> 8;
-	/*
-	 * Do not handle masked interrupts. They were masked by 
-	 * pre_ithread function (mips_mask_XXX_intr) and will be 
-	 * unmasked once ithread is through with handler
-	 */
-	intr &= (status & MIPS_INT_MASK) >> 8;
-	while ((i = fls(intr)) != 0) {
-		intr &= ~(1 << (i - 1));
-		switch (i) {
-		case 1: case 2:
-			/* Software interrupt. */
-			i--; /* Get a 0-offset interrupt. */
-			hard = 0;
-			event = softintr_events[i];
-			mips_intrcnt_inc(mips_intr_counters[i]);
-			break;
-		default:
-			/* Hardware interrupt. */
-			i -= 2; /* Trim software interrupt bits. */
-			i--; /* Get a 0-offset interrupt. */
-			hard = 1;
-			event = hardintr_events[i];
-			mips_intrcnt_inc(mips_intr_counters[NSOFT_IRQS + i]);
-			break;
-		}
-
-		if (!event || TAILQ_EMPTY(&event->ie_handlers)) {
-			printf("stray %s interrupt %d\n",
-			    hard ? "hard" : "soft", i);
-			continue;
-		}
-
-		if (intr_event_handle(event, tf) != 0) {
-			printf("stray %s interrupt %d\n", 
-			    hard ? "hard" : "soft", i);
-		}
+	event = intr_events[irq];
+	if (intr_event_handle(event, tf) != 0) {
+		/* Stray irq */
+		printf("Stray IRQ %u\n", irq);
+		arm_mask_irq(irq);
 	}
+}
 
-	KASSERT(i == 0, ("all interrupts handled"));
-
+void
+cpu_intr(struct trapframe *tf)
+{
+	critical_enter();
+	PIC_DISPATCH(root_pic, tf);
 	critical_exit();
-
-#ifdef HWPMC_HOOKS
-	if (pmc_hook && (PCPU_GET(curthread)->td_pflags & TDP_CALLCHAIN))
-		pmc_hook(PCPU_GET(curthread), PMC_FN_USER_CALLCHAIN, tf);
-#endif
 }
-#endif
 

Modified: projects/arm64/sys/arm64/arm64/pic_if.m
==============================================================================
--- projects/arm64/sys/arm64/arm64/pic_if.m	Mon Aug 11 16:57:42 2014	(r269818)
+++ projects/arm64/sys/arm64/arm64/pic_if.m	Mon Aug 11 16:57:47 2014	(r269819)
@@ -43,14 +43,19 @@ CODE {
 		*pol = INTR_POLARITY_CONFORM;
 	}
 
-	static void pic_pre_filter(device_t dev, u_int irq)
+	static void pic_pre_ithread(device_t dev, u_int irq)
 	{
 		PIC_MASK(dev, irq);
+		PIC_EOI(dev, irq);
 	}
 
-	static void pic_post_filter(device_t dev, u_int irq)
+	static void pic_post_ithread(device_t dev, u_int irq)
 	{
 		PIC_UNMASK(dev, irq);
+	}
+
+	static void pic_post_filter(device_t dev, u_int irq)
+	{
 		PIC_EOI(dev, irq);
 	}
 };
@@ -87,10 +92,15 @@ METHOD void enable {
 	u_int		vector;
 };
 
-METHOD void pre_filter {
+METHOD void pre_ithread {
+	device_t	dev;
+	u_int		irq;
+} DEFAULT pic_pre_ithread;
+
+METHOD void post_ithread {
 	device_t	dev;
 	u_int		irq;
-} DEFAULT pic_pre_filter;
+} DEFAULT pic_post_ithread;
 
 METHOD void post_filter {
 	device_t	dev;

Modified: projects/arm64/sys/arm64/include/intr.h
==============================================================================
--- projects/arm64/sys/arm64/include/intr.h	Mon Aug 11 16:57:42 2014	(r269818)
+++ projects/arm64/sys/arm64/include/intr.h	Mon Aug 11 16:57:47 2014	(r269819)
@@ -32,6 +32,8 @@
 void cpu_set_pic(device_t, u_int);
 void cpu_establish_intr(const char *, driver_filter_t *, void (*)(void*),
     void *, int, int, void **);
+void cpu_dispatch_intr(u_int, struct trapframe *);
+void cpu_intr(struct trapframe *);
 void arm_mask_irq(u_int);
 void arm_unmask_irq(u_int);
 

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 17:24:53 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 018C5FF6;
 Mon, 11 Aug 2014 17:24:53 +0000 (UTC)
Received: from c.mail.sonic.net (c.mail.sonic.net [64.142.111.80])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id DBB922752;
 Mon, 11 Aug 2014 17:24:52 +0000 (UTC)
Received: from aurora.physics.berkeley.edu (aurora.Physics.Berkeley.EDU
 [128.32.117.67]) (authenticated bits=0)
 by c.mail.sonic.net (8.14.9/8.14.9) with ESMTP id s7BHOhc5018362
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT);
 Mon, 11 Aug 2014 10:24:44 -0700
Message-ID: <53E8FC5B.9070605@freebsd.org>
Date: Mon, 11 Aug 2014 10:24:43 -0700
From: Nathan Whitehorn <nwhitehorn@freebsd.org>
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64;
 rv:31.0) Gecko/20100101 Thunderbird/31.0
MIME-Version: 1.0
To: Andrew Turner <andrew@freebsd.org>, src-committers@freebsd.org,
 svn-src-projects@freebsd.org
Subject: Re: svn commit: r269818 - projects/arm64/sys/dev/fdt
References: <53e8f606.23db.c1d4a@svn.freebsd.org>
In-Reply-To: <53e8f606.23db.c1d4a@svn.freebsd.org>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Sonic-CAuth: UmFuZG9tSVZXjudQKwDFimbSObrx+U8dfC6vxTUctfShY7AqtzWFsZ8OBjzH9WBCsJZn8h10EIV4GBZamXS6sMpk9ZPkdJusuXdEu8AT2jg=
X-Sonic-ID: C;DrxyYnwh5BGzq+JAoK8kYw== M;6PTXYnwh5BGzq+JAoK8kYw==
X-Spam-Flag: No
X-Sonic-Spam-Details: 0.0/5.0 by cerberusd
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 17:24:53 -0000


On 08/11/14 09:57, Andrew Turner wrote:
> Author: andrew
> Date: Mon Aug 11 16:57:42 2014
> New Revision: 269818
> URL: http://svnweb.freebsd.org/changeset/base/269818
>
> Log:
>    Hack to get the correct value for the interrupt from the vendor supplied
>    device tree. The GIC used the format <type irq flags> where the type is
>    0 for Shared Peripheral Interrupts (SPI), and 1 for Private Peripheral
>    Interrupts. The SPIs start at 32 in the GIc so we need to adjust their
>    values to match this.
>
> Modified:
>    projects/arm64/sys/dev/fdt/simplebus.c
>
> Modified: projects/arm64/sys/dev/fdt/simplebus.c
> ==============================================================================
> --- projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:44:06 2014	(r269817)
> +++ projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:57:42 2014	(r269818)
> @@ -310,10 +310,18 @@ simplebus_setup_dinfo(device_t dev, phan
>   			icells = 1;
>   		}
>   		for (i = 0, k = 0; i < nintr; i += icells, k++) {
> +			u_int irq;
> +
> +			if (icells == 3) {
> +				irq = intr[i + 1];
> +				if (intr[i] == 0)
> +					irq += 32;
> +			} else
> +				irq = intr[i];
>   			intr[i] = ofw_bus_map_intr(dev, iparent, icells,
>   			    &intr[i]);
> -			resource_list_add(&ndi->rl, SYS_RES_IRQ, k, intr[i],
> -			    intr[i], 1);
> +			resource_list_add(&ndi->rl, SYS_RES_IRQ, k, irq,
> +			    irq, 1);
>   		}
>   		free(intr, M_OFWPROP);
>   	}
>

The much better place to do this kind of hack is in the ARM 
nexus_ofw_map_intr() routine. Ian's intrng branch will push this into 
the PIC driver, where it actually belongs, but putting it in nexus isn't 
so bad for now and will apply to all buses, not just simplebus.
-Nathan

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 17:34:27 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 53344373
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 17:34:27 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3E37A283F
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 17:34:27 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 296d
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 17:34:26 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Mon, 11 Aug 2014 17:34:26 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269821 - in projects/ipfw: sbin/ipfw sys/netinet
 sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e8fea2.296d.53afb556@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 17:34:27 -0000

Author: melifaro
Date: Mon Aug 11 17:34:25 2014
New Revision: 269821
URL: http://svnweb.freebsd.org/changeset/base/269821

Log:
  * Add support for batched add/delete for ipfw tables
  * Add support for atomic batches add (all or none).
  * Fix panic on deleting non-existing entry in radix algo.
  
  Examples:
  
  # si is empty
  # ipfw table si add 1.1.1.1/32 1111 2.2.2.2/32 2222
  added: 1.1.1.1/32 1111
  added: 2.2.2.2/32 2222
  # ipfw table si add 2.2.2.2/32 2200 4.4.4.4/32 4444
  exists: 2.2.2.2/32 2200
  added: 4.4.4.4/32 4444
  ipfw: Adding record failed: record already exists
  ^^^^^ Returns error but keeps inserted items
  # ipfw table si list
  +++ table(si), set(0) +++
  1.1.1.1/32 1111
  2.2.2.2/32 2222
  4.4.4.4/32 4444
  # ipfw table si atomic add 3.3.3.3/32 3333 4.4.4.4/32 4400 5.5.5.5/32 5555
  added(reverted): 3.3.3.3/32 3333
  exists: 4.4.4.4/32 4400
  ignored: 5.5.5.5/32 5555
  ipfw: Adding record failed: record already exists
  ^^^^^ Returns error and reverts added records
  # ipfw table si list
  +++ table(si), set(0) +++
  1.1.1.1/32 1111
  2.2.2.2/32 2222
  4.4.4.4/32 4444

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.h
  projects/ipfw/sbin/ipfw/tables.c
  projects/ipfw/sys/netinet/ip_fw.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.h
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.h	Mon Aug 11 17:04:04 2014	(r269820)
+++ projects/ipfw/sbin/ipfw/ipfw2.h	Mon Aug 11 17:34:25 2014	(r269821)
@@ -224,6 +224,7 @@ enum tokens {
 	TOK_ALGO,
 	TOK_TALIST,
 	TOK_FTYPE,
+	TOK_ATOMIC,
 };
 /*
  * the following macro returns an error message if we run out of

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Mon Aug 11 17:04:04 2014	(r269820)
+++ projects/ipfw/sbin/ipfw/tables.c	Mon Aug 11 17:34:25 2014	(r269821)
@@ -50,7 +50,7 @@
 
 static void table_list(ipfw_xtable_info *i, int need_header);
 static void table_modify_record(ipfw_obj_header *oh, int ac, char *av[],
-    int add, int update);
+    int add, int quiet, int update, int atomic);
 static int table_flush(ipfw_obj_header *oh);
 static int table_destroy(ipfw_obj_header *oh);
 static int table_do_create(ipfw_obj_header *oh, ipfw_xtable_info *i);
@@ -114,6 +114,7 @@ static struct _s_x tablecmds[] = {
       { "detail",	TOK_DETAIL },
       { "list",		TOK_LIST },
       { "lookup",	TOK_LOOKUP },
+      { "atomic",	TOK_ATOMIC },
       { NULL, 0 }
 };
 
@@ -144,7 +145,7 @@ void
 ipfw_table_handler(int ac, char *av[])
 {
 	int do_add, is_all;
-	int error, tcmd;
+	int atomic, error, tcmd;
 	ipfw_xtable_info i;
 	ipfw_obj_header oh;
 	char *tablename;
@@ -176,6 +177,21 @@ ipfw_table_handler(int ac, char *av[])
 
 	if ((tcmd = match_token(tablecmds, *av)) == -1)
 		errx(EX_USAGE, "invalid table command %s", *av);
+	/* Check if atomic operation was requested */
+	atomic = 0;
+	if (tcmd == TOK_ATOMIC) {
+		ac--; av++;
+		NEED1("atomic needs command");
+		if ((tcmd = match_token(tablecmds, *av)) == -1)
+			errx(EX_USAGE, "invalid table command %s", *av);
+		switch (tcmd) {
+		case TOK_ADD:
+			break;
+		default:
+			errx(EX_USAGE, "atomic is not compatible with %s", *av);
+		}
+		atomic = 1;
+	}
 
 	switch (tcmd) {
 	case TOK_LIST:
@@ -193,7 +209,8 @@ ipfw_table_handler(int ac, char *av[])
 	case TOK_DEL:
 		do_add = **av == 'a';
 		ac--; av++;
-		table_modify_record(&oh, ac, av, do_add, co.do_quiet);
+		table_modify_record(&oh, ac, av, do_add, co.do_quiet,
+		    co.do_quiet, atomic);
 		break;
 	case TOK_CREATE:
 		ac--; av++;
@@ -785,76 +802,195 @@ table_flush_one(ipfw_xtable_info *i, voi
 
 static int
 table_do_modify_record(int cmd, ipfw_obj_header *oh,
-    ipfw_obj_tentry *tent, int update)
+    ipfw_obj_tentry *tent, int count, int atomic)
 {
 	ipfw_obj_ctlv *ctlv;
+	ipfw_obj_tentry *tent_base;
+	caddr_t pbuf;
 	char xbuf[sizeof(*oh) + sizeof(ipfw_obj_ctlv) + sizeof(*tent)];
-	int error;
+	int error, i;
+	size_t sz;
 
-	memset(xbuf, 0, sizeof(xbuf));
-	memcpy(xbuf, oh, sizeof(*oh));
-	oh = (ipfw_obj_header *)xbuf;
+	sz = sizeof(*ctlv) + sizeof(*tent) * count;
+	if (count == 1) {
+		memset(xbuf, 0, sizeof(xbuf));
+		pbuf = xbuf;
+	} else {
+		if ((pbuf = calloc(1, sizeof(*oh) + sz)) == NULL)
+			return (ENOMEM);
+	}
+
+	memcpy(pbuf, oh, sizeof(*oh));
+	oh = (ipfw_obj_header *)pbuf;
 	oh->opheader.version = 1;
 
 	ctlv = (ipfw_obj_ctlv *)(oh + 1);
-	ctlv->count = 1;
-	ctlv->head.length = sizeof(*ctlv) + sizeof(*tent);
+	ctlv->count = count;
+	ctlv->head.length = sz;
+	if (atomic != 0)
+		ctlv->flags |= IPFW_CTF_ATOMIC;
+
+	tent_base = tent;
+	memcpy(ctlv + 1, tent, sizeof(*tent) * count);
+	tent = (ipfw_obj_tentry *)(ctlv + 1);
+	for (i = 0; i < count; i++, tent++) {
+		tent->head.length = sizeof(ipfw_obj_tentry);
+		tent->idx = oh->idx;
+	}
 
-	memcpy(ctlv + 1, tent, sizeof(*tent));
+	sz += sizeof(*oh);
+	error = do_get3(cmd, &oh->opheader, &sz);
 	tent = (ipfw_obj_tentry *)(ctlv + 1);
-	if (update != 0)
-		tent->head.flags |= IPFW_TF_UPDATE;
-	tent->head.length = sizeof(ipfw_obj_tentry);
+	/* Copy result back to provided buffer */
+	memcpy(tent_base, ctlv + 1, sizeof(*tent) * count);
 
-	error = do_set3(cmd, &oh->opheader, sizeof(xbuf));
+	if (pbuf != xbuf)
+		free(pbuf);
 
 	return (error);
 }
 
 static void
-table_modify_record(ipfw_obj_header *oh, int ac, char *av[], int add, int update)
+table_modify_record(ipfw_obj_header *oh, int ac, char *av[], int add,
+    int quiet, int update, int atomic)
 {
-	ipfw_obj_tentry tent;
+	ipfw_obj_tentry *ptent, tent, *tent_buf;
 	ipfw_xtable_info xi;
 	uint8_t type, vtype;
-	int cmd, error;
-	char *texterr, *etxt;
+	int cmd, count, error, i, ignored;
+	char *texterr, *etxt, *px;
 
 	if (ac == 0)
 		errx(EX_USAGE, "address required");
 	
-	memset(&tent, 0, sizeof(tent));
-	tent.head.length = sizeof(tent);
-	tent.idx = 1;
+	if (add != 0) {
+		cmd = IP_FW_TABLE_XADD;
+		texterr = "Adding record failed";
+	} else {
+		cmd = IP_FW_TABLE_XDEL;
+		texterr = "Deleting record failed";
+	}
+
+	/*
+	 * Calculate number of entries:
+	 * Assume [key val] x N for add
+	 * and
+	 * key x N for delete
+	 */
+	count = (add != 0) ? ac / 2 + 1 : ac;
+
+	if (count <= 1) {
+		/* Adding single entry with/without value */
+		memset(&tent, 0, sizeof(tent));
+		tent_buf = &tent;
+	} else {
+		
+		if ((tent_buf = calloc(count, sizeof(tent))) == NULL)
+			errx(EX_OSERR,
+			    "Unable to allocate memory for all entries");
+	}
+	ptent = tent_buf;
+
+	memset(&xi, 0, sizeof(xi));
+	count = 0;
+	while (ac > 0) {
+		tentry_fill_key(oh, ptent, *av, &type, &vtype, &xi);
+
+		/*
+		 * compability layer: auto-create table if not exists
+		 */
+		if (xi.tablename[0] == '\0') {
+			xi.type = type;
+			xi.vtype = vtype;
+			strlcpy(xi.tablename, oh->ntlv.name,
+			    sizeof(xi.tablename));
+			fprintf(stderr, "DEPRECATED: inserting data info "
+			    "non-existent table %s. (auto-created)\n",
+			    xi.tablename);
+			table_do_create(oh, &xi);
+		}
+	
+		oh->ntlv.type = type;
+		ac--; av++;
+	
+		if (add != 0 && ac > 0) {
+			tentry_fill_value(oh, ptent, *av, type, vtype);
+			ac--; av++;
+		}
 
-	tentry_fill_key(oh, &tent, *av, &type, &vtype, &xi);
+		if (update != 0)
+			ptent->head.flags |= IPFW_TF_UPDATE;
+
+		count++;
+		ptent++;
+	}
+
+	error = table_do_modify_record(cmd, oh, tent_buf, count, atomic);
 
 	/*
-	 * compability layer: auto-create table if not exists
+	 * Compatibility stuff: do not yell on duplicate keys or
+	 * failed deletions.
 	 */
-	if (xi.tablename[0] == '\0') {
-		xi.type = type;
-		xi.vtype = vtype;
-		strlcpy(xi.tablename, oh->ntlv.name, sizeof(xi.tablename));
-		fprintf(stderr, "DEPRECATED: inserting data info non-existent "
-		    "table %s. (auto-created)\n", xi.tablename);
-		table_do_create(oh, &xi);
+	if (error == 0 || (error == EEXIST && add != 0) ||
+	    (error == ENOENT && add == 0)) {
+		if (quiet != 0) {
+			if (tent_buf != &tent)
+				free(tent_buf);
+			return;
+		}
 	}
 
-	oh->ntlv.type = type;
-	ac--; av++;
+	/* Report results back */
+	ptent = tent_buf;
+	for (i = 0; i < count; ptent++, i++) {
+		ignored = 0;
+		switch (ptent->result) {
+		case IPFW_TR_ADDED:
+			px = "added";
+			break;
+		case IPFW_TR_DELETED:
+			px = "deleted";
+			break;
+		case IPFW_TR_UPDATED:
+			px = "updated";
+			break;
+		case IPFW_TR_LIMIT:
+			px = "limit";
+			ignored = 1;
+			break;
+		case IPFW_TR_ERROR:
+			px = "error";
+			ignored = 1;
+			break;
+		case IPFW_TR_NOTFOUND:
+			px = "notfound";
+			ignored = 1;
+			break;
+		case IPFW_TR_EXISTS:
+			px = "exists";
+			ignored = 1;
+			break;
+		case IPFW_TR_IGNORED:
+			px = "ignored";
+			ignored = 1;
+			break;
+		default:
+			px = "unknown";
+			ignored = 1;
+		}
 
-	if (add != 0) {
-		if (ac > 0)
-			tentry_fill_value(oh, &tent, *av, type, vtype);
-		cmd = IP_FW_TABLE_XADD;
-		texterr = "Adding record failed";
-	} else {
-		cmd = IP_FW_TABLE_XDEL;
-		texterr = "Deleting record failed";
+		if (error != 0 && atomic != 0 && ignored == 0)
+			printf("%s(reverted): ", px);
+		else
+			printf("%s: ", px);
+
+		table_show_entry(&xi, ptent);
 	}
 
-	if ((error = table_do_modify_record(cmd, oh, &tent, update)) == 0)
+	if (tent_buf != &tent)
+		free(tent_buf);
+
+	if (error == 0)
 		return;
 
 	/* Try to provide more human-readable error */
@@ -924,6 +1060,7 @@ table_lookup(ipfw_obj_header *oh, int ac
 
 	strlcpy(key, *av, sizeof(key));
 
+	memset(&xi, 0, sizeof(xi));
 	error = table_do_lookup(oh, key, &xi, &xtent);
 
 	switch (error) {
@@ -1144,7 +1281,10 @@ tentry_fill_key(ipfw_obj_header *oh, ipf
 	tflags = 0;
 	vtype = 0;
 
-	error = table_get_info(oh, xi);
+	if (xi->tablename[0] == '\0')
+		error = table_get_info(oh, xi);
+	else
+		error = 0;
 
 	if (error == 0) {
 		/* Table found. */

Modified: projects/ipfw/sys/netinet/ip_fw.h
==============================================================================
--- projects/ipfw/sys/netinet/ip_fw.h	Mon Aug 11 17:04:04 2014	(r269820)
+++ projects/ipfw/sys/netinet/ip_fw.h	Mon Aug 11 17:34:25 2014	(r269821)
@@ -587,7 +587,7 @@ struct ip_fw {
 	uint16_t	act_ofs;	/* offset of action in 32-bit units */
 	uint16_t	cmd_len;	/* # of 32-bit words in cmd	*/
 	uint16_t	rulenum;	/* rule number			*/
-	uint8_t	set;		/* rule set (0..31)		*/
+	uint8_t		set;		/* rule set (0..31)		*/
 	uint8_t		_pad;		/* padding			*/
 	uint32_t	id;		/* rule id */
 
@@ -784,7 +784,10 @@ typedef struct	_ipfw_obj_tentry {
 	uint8_t		masklen;	/* mask length			*/
 	uint16_t	idx;		/* Table name index		*/
 	uint32_t	value;		/* value			*/
-	uint64_t	spare;
+	uint8_t		result;		/* request result		*/
+	uint8_t		spare0;
+	uint16_t	spare1;
+	uint32_t	spare2;
 	union {
 		/* Longest field needs to be aligned by 8-byte boundary	*/
 		struct in_addr		addr;	/* IPv4 address		*/
@@ -795,6 +798,17 @@ typedef struct	_ipfw_obj_tentry {
 	} k;
 } ipfw_obj_tentry;
 #define	IPFW_TF_UPDATE	0x01		/* Update record if exists	*/
+/* Container TLV */
+#define	IPFW_CTF_ATOMIC	0x01		/* Perform atomic operation	*/
+/* Operation results */
+#define	IPFW_TR_IGNORED		0	/* Entry was ignored (rollback)	*/
+#define	IPFW_TR_ADDED		1	/* Entry was succesfully added	*/
+#define	IPFW_TR_UPDATED		2	/* Entry was succesfully updated*/
+#define	IPFW_TR_DELETED		3	/* Entry was succesfully deleted*/
+#define	IPFW_TR_LIMIT		4	/* Entry was ignored (limit)	*/
+#define	IPFW_TR_NOTFOUND	5	/* Entry was not found		*/
+#define	IPFW_TR_EXISTS		6	/* Entry already exists		*/
+#define	IPFW_TR_ERROR		7	/* Request has failed (unknown)	*/
 
 typedef struct _ipfw_obj_dyntlv {
 	ipfw_obj_tlv	head;
@@ -808,7 +822,7 @@ typedef struct _ipfw_obj_ctlv {
 	uint32_t	count;		/* Number of sub-TLVs		*/
 	uint16_t	objsize;	/* Single object size		*/
 	uint8_t		version;	/* TLV version			*/
-	uint8_t		spare;
+	uint8_t		flags;		/* TLV-specific flags		*/
 } ipfw_obj_ctlv;
 
 /* Range TLV */

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Mon Aug 11 17:04:04 2014	(r269820)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Mon Aug 11 17:34:25 2014	(r269821)
@@ -427,15 +427,18 @@ struct obj_idx {
 };
 
 struct rule_check_info {
+	uint16_t	flags;		/* rule-specific check flags */
 	uint16_t	table_opcodes;	/* count of opcodes referencing table */
-	uint16_t	new_tables;	/* count of opcodes referencing table */
 	uint16_t	urule_numoff;	/* offset of rulenum in bytes */
 	uint8_t		version;	/* rule version */
+	uint8_t		spare;
 	ipfw_obj_ctlv	*ctlv;		/* name TLV containter */
 	struct ip_fw	*krule;		/* resulting rule pointer */
 	caddr_t		urule;		/* original rule pointer */
 	struct obj_idx	obuf[8];	/* table references storage */
 };
+#define	IPFW_RCF_TABLES		0x01	/* Has table-referencing opcode */
+
 
 /* Legacy interface support */
 /*

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Mon Aug 11 17:04:04 2014	(r269820)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Mon Aug 11 17:34:25 2014	(r269821)
@@ -2267,7 +2267,7 @@ ipfw_get_sopt_header(struct sockopt_data
 int
 ipfw_ctl3(struct sockopt *sopt)
 {
-	int error;
+	int error, ctype;
 	size_t bsize_max, size, valsize;
 	struct ip_fw_chain *chain;
 	uint32_t opt;
@@ -2297,27 +2297,35 @@ ipfw_ctl3(struct sockopt *sopt)
 	sopt->sopt_valsize = valsize;
 
 	/*
+	 * Determine opcode type/buffer size:
+	 * use on-stack xbuf for short request,
+	 * allocate sliding-window buf for data export or
+	 * contigious buffer for special ops.
+	 */
+	ctype = (sopt->sopt_dir == SOPT_GET) ? SOPT_GET : SOPT_SET;
+	switch (opt) {
+	case IP_FW_XADD:
+	case IP_FW_XDEL:
+	case IP_FW_TABLE_XADD:
+	case IP_FW_TABLE_XDEL:
+		ctype = SOPT_SET;
+		bsize_max = IP_FW3_READBUF;
+		break;
+	default:
+		bsize_max = IP_FW3_WRITEBUF;
+	}
+
+	/*
 	 * Disallow modifications in really-really secure mode, but still allow
 	 * the logging counters to be reset.
 	 */
-	if (opt == IP_FW_XADD || opt == IP_FW_XDEL ||
-	    (sopt->sopt_dir == SOPT_SET && opt != IP_FW_XRESETLOG)) {
+	if (ctype == SOPT_SET && opt != IP_FW_XRESETLOG) {
 		error = securelevel_ge(sopt->sopt_td->td_ucred, 3);
 		if (error != 0)
 			return (error);
 	}
 
 	/*
-	 * Determine buffer size:
-	 * use on-stack xbuf for short request,
-	 * allocate sliding-window buf for data export or
-	 * contigious buffer for special ops.
-	 */
-	bsize_max = IP_FW3_WRITEBUF;
-	if (opt == IP_FW_ADD)
-		bsize_max = IP_FW3_READBUF;
-
-	/*
 	 * Fill in sockopt_data structure that may be useful for
 	 * IP_FW3 get requests.
 	 */
@@ -2664,8 +2672,8 @@ ipfw_ctl(struct sockopt *sopt)
 			ti.type = IPFW_TABLE_CIDR;
 
 			error = (opt == IP_FW_TABLE_ADD) ?
-			    add_table_entry(chain, &ti, &tei, 1) :
-			    del_table_entry(chain, &ti, &tei, 1);
+			    add_table_entry(chain, &ti, &tei, 0, 1) :
+			    del_table_entry(chain, &ti, &tei, 0, 1);
 		}
 		break;
 

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 17:04:04 2014	(r269820)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 17:34:25 2014	(r269821)
@@ -143,19 +143,58 @@ static int classify_table_opcode(ipfw_in
 
 #define	TA_BUF_SZ	128	/* On-stack buffer for add/delete state */
 
+/*
+ * Checks if we're able to insert/update entry @tei into table
+ * w.r.t @tc limits.
+ * May alter @tei to indicate insertion error / insert
+ * options.
+ *
+ * Returns 0 if operation can be performed/
+ */
+static int
+check_table_limit(struct table_config *tc, struct tentry_info *tei)
+{
 
+	if (tc->limit == 0 || tc->count < tc->limit)
+		return (0);
+
+	if ((tei->flags & TEI_FLAGS_UPDATE) == 0) {
+		/* Notify userland on error cause */
+		tei->flags |= TEI_FLAGS_LIMIT;
+		return (EFBIG);
+	}
+
+	/*
+	 * We have UPDATE flag set.
+	 * Permit updating record (if found),
+	 * but restrict adding new one since we've
+	 * already hit the limit.
+	 */
+	tei->flags |= TEI_FLAGS_DONTADD;
+
+	return (0);
+}
+
+/*
+ * Adds/updates one or more entries in table @ti.
+ *
+ * Returns 0 on success.
+ */
 int
 add_table_entry(struct ip_fw_chain *ch, struct tid_info *ti,
-    struct tentry_info *tei, uint32_t count)
+    struct tentry_info *tei, uint8_t flags, uint32_t count)
 {
 	struct table_config *tc;
 	struct table_algo *ta;
 	struct namedobj_instance *ni;
 	uint16_t kidx;
-	int error;
-	uint32_t num;
+	int error, first_error, i, j, rerror, rollback;
+	uint32_t num, numadd;
 	ipfw_xtable_info *xi;
+	struct tentry_info *ptei;
 	char ta_buf[TA_BUF_SZ];
+	size_t ta_buf_sz;
+	caddr_t ta_buf_m, v, vv;
 
 	IPFW_UH_WLOCK(ch);
 	ni = CHAIN_TO_NI(ch);
@@ -172,8 +211,7 @@ add_table_entry(struct ip_fw_chain *ch, 
 		}
 
 		/* Try to exit early on limit hit */
-		if (tc->limit != 0 && tc->count >= tc->limit &&
-		    (tei->flags & TEI_FLAGS_UPDATE) == 0) {
+		if ((error = check_table_limit(tc, tei)) != 0 && count == 1) {
 				IPFW_UH_WUNLOCK(ch);
 				return (EFBIG);
 		}
@@ -218,10 +256,34 @@ add_table_entry(struct ip_fw_chain *ch, 
 	}
 
 	/* Prepare record (allocate memory) */
-	memset(&ta_buf, 0, sizeof(ta_buf));
-	error = ta->prepare_add(ch, tei, &ta_buf);
-	if (error != 0)
-		return (error);
+	ta_buf_sz = ta->ta_buf_size;
+	rollback = 0;
+	if (count == 1) {
+		memset(&ta_buf, 0, sizeof(ta_buf));
+		ta_buf_m = ta_buf;
+	} else {
+
+		/*
+		 * Multiple adds, allocate larger buffer
+		 * sufficient to hold both ADD state
+		 * and DELETE state (this may be needed
+		 * if we need to rollback all changes)
+		 */
+		ta_buf_m = malloc(2 * count * ta_buf_sz, M_TEMP,
+		    M_WAITOK | M_ZERO);
+	}
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz) {
+		error = ta->prepare_add(ch, &tei[i], v);
+
+		/*
+		 * Some syntax error (incorrect mask, or address, or
+		 * anything). Return error regardless of atomicity
+		 * settings.
+		 */
+		if (error != 0)
+			goto cleanup;
+	}
 
 	IPFW_UH_WLOCK(ch);
 
@@ -233,67 +295,142 @@ add_table_entry(struct ip_fw_chain *ch, 
 	error = check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), count);
 	if (error != 0) {
 		IPFW_UH_WUNLOCK(ch);
-		ta->flush_entry(ch, tei, &ta_buf);
-		return (error);
+		goto cleanup;
 	}
 
 	ni = CHAIN_TO_NI(ch);
 
 	/* Drop reference we've used in first search */
 	tc->no.refcnt--;
-	
-	/* Check limit before adding */
-	if (tc->limit != 0 && tc->count >= tc->limit) {
-		if ((tei->flags & TEI_FLAGS_UPDATE) == 0) {
-			IPFW_UH_WUNLOCK(ch);
-			ta->flush_entry(ch, tei, &ta_buf);
-			return (EFBIG);
+	/* We've got valid table in @tc. Let's try to add data */
+	kidx = tc->no.kidx;
+	ta = tc->ta;
+	numadd = 0;
+	first_error = 0;
+
+	IPFW_WLOCK(ch);
+
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz) {
+		ptei = &tei[i];
+		num = 0;
+		/* check limit before adding */
+		if ((error = check_table_limit(tc, ptei)) == 0) {
+			error = ta->add(tc->astate, KIDX_TO_TI(ch, kidx),
+			    ptei, v, &num);
+			/* Set status flag to inform userland */
+			if (error == 0 && num != 0)
+				ptei->flags |= TEI_FLAGS_ADDED;
+			else if (error == ENOENT)
+				ptei->flags |= TEI_FLAGS_NOTFOUND;
+			else if (error == EEXIST)
+				ptei->flags |= TEI_FLAGS_EXISTS;
+			else
+				ptei->flags |= TEI_FLAGS_ERROR;
+		}
+		if (error == 0) {
+			/* Update number of records to ease limit checking */
+			tc->count += num;
+			numadd += num;
+			continue;
 		}
 
+		if (first_error == 0)
+			first_error = error;
+
 		/*
-		 * We have UPDATE flag set.
-		 * Permit updating record (if found),
-		 * but restrict adding new one since we've
-		 * already hit the limit.
+		 * Some error have happened. Check our atomicity
+		 * settings: continue if atomicity is not required,
+		 * rollback changes otherwise.
 		 */
-		tei->flags |= TEI_FLAGS_DONTADD;
-	}
+		if ((flags & IPFW_CTF_ATOMIC) == 0)
+			continue;
 
-	/* We've got valid table in @tc. Let's add data */
-	kidx = tc->no.kidx;
-	ta = tc->ta;
-	num = 0;
+		/*
+		 * We need to rollback changes.
+		 * This is tricky since some entries may have been
+		 * updated, so  we need to change their value back
+		 * instead of deletion.
+		 */
+		rollback = 1;
+		v = ta_buf_m;
+		vv = v + count * ta_buf_sz;
+		for (j = 0; j < i; j++, v += ta_buf_sz, vv += ta_buf_sz) {
+			ptei = &tei[j];
+			if ((ptei->flags & TEI_FLAGS_UPDATED) != 0) {
 
-	IPFW_WLOCK(ch);
-	error = ta->add(tc->astate, KIDX_TO_TI(ch, kidx), tei, &ta_buf, &num);
-	IPFW_WUNLOCK(ch);
+				/*
+				 * We have old value stored by previous
+				 * call in @ptei->value. Do add once again
+				 * to restore it.
+				 */
+				rerror = ta->add(tc->astate,
+				    KIDX_TO_TI(ch, kidx), ptei, v, &num);
+				KASSERT(rerror == 0, ("rollback UPDATE fail"));
+				KASSERT(num == 0, ("rollback UPDATE fail2"));
+				continue;
+			}
 
-	/* Update number of records. */
-	if (error == 0) {
-		tc->count += num;
-		/* Permit post-add algorithm grow/rehash. */
-		error = check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), 0);
+			rerror = ta->prepare_del(ch, ptei, vv);
+			KASSERT(rerror == 0, ("pre-rollback INSERT failed"));
+			rerror = ta->del(tc->astate, KIDX_TO_TI(ch, kidx), ptei,
+			    vv, &num);
+			KASSERT(rerror == 0, ("rollback INSERT failed"));
+			tc->count -= num;
+		}
+
+		break;
 	}
 
+	IPFW_WUNLOCK(ch);
+
+	/* Permit post-add algorithm grow/rehash. */
+	if (numadd != 0)
+		check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), 0);
+
 	IPFW_UH_WUNLOCK(ch);
 
+	/* Return first error to user, if any */
+	error = first_error;
+
+cleanup:
 	/* Run cleaning callback anyway */
-	ta->flush_entry(ch, tei, &ta_buf);
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz)
+		ta->flush_entry(ch, &tei[i], v);
+
+	/* Clean up "deleted" state in case of rollback */
+	if (rollback != 0) {
+		vv = ta_buf_m + count * ta_buf_sz;
+		for (i = 0; i < count; i++, vv += ta_buf_sz)
+			ta->flush_entry(ch, &tei[i], vv);
+	}
+
+	if (ta_buf_m != ta_buf)
+		free(ta_buf_m, M_TEMP);
 
 	return (error);
 }
 
+/*
+ * Deletes one or more entries in table @ti.
+ *
+ * Returns 0 on success.
+ */
 int
 del_table_entry(struct ip_fw_chain *ch, struct tid_info *ti,
-    struct tentry_info *tei, uint32_t count)
+    struct tentry_info *tei, uint8_t flags, uint32_t count)
 {
 	struct table_config *tc;
 	struct table_algo *ta;
 	struct namedobj_instance *ni;
+	struct tentry_info *ptei;
 	uint16_t kidx;
-	int error;
-	uint32_t num;
+	int error, first_error, i;
+	uint32_t num, numdel;
 	char ta_buf[TA_BUF_SZ];
+	size_t ta_buf_sz;
+	caddr_t ta_buf_m, v;
 
 	IPFW_UH_WLOCK(ch);
 	ni = CHAIN_TO_NI(ch);
@@ -307,8 +444,6 @@ del_table_entry(struct ip_fw_chain *ch, 
 		return (EINVAL);
 	}
 
-	ta = tc->ta;
-
 	/*
 	 * Give a chance for algorithm to shrink.
 	 * May release/reacquire UH_WLOCK.
@@ -317,36 +452,89 @@ del_table_entry(struct ip_fw_chain *ch, 
 	error = check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), 0);
 	if (error != 0) {
 		IPFW_UH_WUNLOCK(ch);
-		ta->flush_entry(ch, tei, &ta_buf);
 		return (error);
 	}
 
-	/*
-	 * We assume ta_buf size is enough for storing
-	 * prepare_del() key, so we're running under UH_WLOCK here.
-	 */
-	memset(&ta_buf, 0, sizeof(ta_buf));
-	if ((error = ta->prepare_del(ch, tei, &ta_buf)) != 0) {
-		IPFW_UH_WUNLOCK(ch);
-		return (error);
+	/* Reference and unlock */
+	tc->no.refcnt++;
+	ta = tc->ta;
+
+	IPFW_UH_WUNLOCK(ch);
+
+	/* Prepare record (allocate memory) */
+	ta_buf_sz = ta->ta_buf_size;
+	if (count == 1) {
+		memset(&ta_buf, 0, sizeof(ta_buf));
+		ta_buf_m = ta_buf;
+	} else {
+
+		/*
+		 * Multiple deletes, allocate larger buffer
+		 * sufficient to hold delete state.
+		 */
+		ta_buf_m = malloc(count * ta_buf_sz, M_TEMP,
+		    M_WAITOK | M_ZERO);
+	}
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz) {
+		error = ta->prepare_del(ch, &tei[i], v);
+
+		/*
+		 * Some syntax error (incorrect mask, or address, or
+		 * anything). Return error immediately.
+		 */
+		if (error != 0)
+			goto cleanup;
 	}
 
+	IPFW_UH_WLOCK(ch);
+
+	/* Drop reference we've used in first search */
+	tc->no.refcnt--;
+
 	kidx = tc->no.kidx;
-	num = 0;
+	numdel = 0;
+	first_error = 0;
 
 	IPFW_WLOCK(ch);
-	error = ta->del(tc->astate, KIDX_TO_TI(ch, kidx), tei, &ta_buf, &num);
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz) {
+		ptei = &tei[i];
+		num = 0;
+		error = ta->del(tc->astate, KIDX_TO_TI(ch, kidx), ptei, v,
+		    &num);
+		/* Save state for userland */
+		if (error == 0)
+			ptei->flags |= TEI_FLAGS_DELETED;
+		else if (error == ENOENT)
+			ptei->flags |= TEI_FLAGS_NOTFOUND;
+		else
+			ptei->flags |= TEI_FLAGS_ERROR;
+		if (error != 0 && first_error == 0)
+			first_error = error;
+		tc->count -= num;
+		numdel += num;
+	}
 	IPFW_WUNLOCK(ch);
 
-	if (error == 0) {
-		tc->count -= num;
+	if (numdel != 0) {
 		/* Run post-del hook to permit shrinking */
 		error = check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), 0);
 	}
 
 	IPFW_UH_WUNLOCK(ch);
 
-	ta->flush_entry(ch, tei, &ta_buf);
+	/* Return first error to user, if any */
+	error = first_error;
+
+cleanup:
+	/* Run cleaning callback anyway */
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz)
+		ta->flush_entry(ch, &tei[i], v);
+
+	if (ta_buf_m != ta_buf)
+		free(ta_buf_m, M_TEMP);
 
 	return (error);
 }
@@ -432,8 +620,10 @@ check_table_space(struct ip_fw_chain *ch
 	return (error);
 }
 
-
-
+/*
+ * Selects appropriate table operation handler
+ * depending on opcode version.
+ */
 int
 ipfw_manage_table_ent(struct ip_fw_chain *ch, ip_fw3_opheader *op3,
     struct sockopt_data *sd)
@@ -501,8 +691,8 @@ ipfw_manage_table_ent_v0(struct ip_fw_ch
 	ti.type = xent->type;
 
 	error = (op3->opcode == IP_FW_TABLE_XADD) ?
-	    add_table_entry(ch, &ti, &tei, 1) :
-	    del_table_entry(ch, &ti, &tei, 1);
+	    add_table_entry(ch, &ti, &tei, 0, 1) :
+	    del_table_entry(ch, &ti, &tei, 0, 1);
 
 	return (error);
 }
@@ -520,12 +710,12 @@ static int
 ipfw_manage_table_ent_v1(struct ip_fw_chain *ch, ip_fw3_opheader *op3,
     struct sockopt_data *sd)
 {
-	ipfw_obj_tentry *tent;
+	ipfw_obj_tentry *tent, *ptent;
 	ipfw_obj_ctlv *ctlv;
 	ipfw_obj_header *oh;
-	struct tentry_info tei;
+	struct tentry_info *ptei, tei, *tei_buf;
 	struct tid_info ti;
-	int error, read;
+	int error, i, kidx, read;
 
 	/* Check minimum header size */
 	if (sd->valsize < (sizeof(*oh) + sizeof(*ctlv)))
@@ -547,37 +737,81 @@ ipfw_manage_table_ent_v1(struct ip_fw_ch
 	if (ctlv->head.length + read != sd->valsize)
 		return (EINVAL);
 
-	/*
-	 * TODO: permit adding multiple entries for given table
-	 * at once
-	 */
-	if (ctlv->count != 1)
-		return (EOPNOTSUPP);
-
 	read += sizeof(*ctlv);
-
-	/* Assume tentry may grow to support larger keys */
 	tent = (ipfw_obj_tentry *)(ctlv + 1);
-	if (tent->head.length < sizeof(*tent) ||
-	    tent->head.length + read > sd->valsize)
+	if (ctlv->count * sizeof(*tent) + read != sd->valsize)
 		return (EINVAL);
 
-	/* Convert data into kernel request objects */
-	memset(&tei, 0, sizeof(tei));
-	tei.paddr = &tent->k;
-	tei.subtype = tent->subtype;
-	tei.masklen = tent->masklen;
-	if (tent->head.flags & IPFW_TF_UPDATE)
-		tei.flags |= TEI_FLAGS_UPDATE;
-	tei.value = tent->value;
+	if (ctlv->count == 0)
+		return (0);
+
+	/*
+	 * Mark entire buffer as "read".
+	 * This makes sopt api write it back
+	 * after function return.
+	 */
+	ipfw_get_sopt_header(sd, sd->valsize);
+
+	/* Perform basic checks for each entry */
+	ptent = tent;
+	kidx = tent->idx;
+	for (i = 0; i < ctlv->count; i++, ptent++) {
+		if (ptent->head.length != sizeof(*ptent))
+			return (EINVAL);
+		if (ptent->idx != kidx)
+			return (ENOTSUP);
+	}
 
+	/* Convert data into kernel request objects */
 	objheader_to_ti(oh, &ti);
 	ti.type = oh->ntlv.type;
-	ti.uidx = tent->idx;
+	ti.uidx = kidx;
+
+	/* Use on-stack buffer for single add/del */
+	if (ctlv->count == 1) {
+		memset(&tei, 0, sizeof(tei));
+		tei_buf = &tei;
+	} else
+		tei_buf = malloc(ctlv->count * sizeof(tei), M_TEMP,
+		    M_WAITOK | M_ZERO);
+
+	ptei = tei_buf;
+	ptent = tent;
+	for (i = 0; i < ctlv->count; i++, ptent++, ptei++) {
+		ptei->paddr = &ptent->k;
+		ptei->subtype = ptent->subtype;
+		ptei->masklen = ptent->masklen;
+		if (ptent->head.flags & IPFW_TF_UPDATE)
+			ptei->flags |= TEI_FLAGS_UPDATE;
+		ptei->value = ptent->value;
+	}
 
 	error = (oh->opheader.opcode == IP_FW_TABLE_XADD) ?
-	    add_table_entry(ch, &ti, &tei, 1) :
-	    del_table_entry(ch, &ti, &tei, 1);
+	    add_table_entry(ch, &ti, tei_buf, ctlv->flags, ctlv->count) :
+	    del_table_entry(ch, &ti, tei_buf, ctlv->flags, ctlv->count);
+
+	/* Translate result back to userland */
+	ptei = tei_buf;
+	ptent = tent;
+	for (i = 0; i < ctlv->count; i++, ptent++, ptei++) {
+		if (ptei->flags & TEI_FLAGS_ADDED)
+			ptent->result = IPFW_TR_ADDED;
+		else if (ptei->flags & TEI_FLAGS_DELETED)
+			ptent->result = IPFW_TR_DELETED;
+		else if (ptei->flags & TEI_FLAGS_UPDATED)
+			ptent->result = IPFW_TR_UPDATED;
+		else if (ptei->flags & TEI_FLAGS_LIMIT)
+			ptent->result = IPFW_TR_LIMIT;
+		else if (ptei->flags & TEI_FLAGS_ERROR)
+			ptent->result = IPFW_TR_ERROR;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 17:44:14 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 485EB9C8;
 Mon, 11 Aug 2014 17:44:14 +0000 (UTC)
Received: from nibbler.fubar.geek.nz (nibbler.fubar.geek.nz [199.48.134.198])
 by mx1.freebsd.org (Postfix) with ESMTP id 2B58C29AB;
 Mon, 11 Aug 2014 17:44:13 +0000 (UTC)
Received: from bender.lan (97e07ab1.skybroadband.com [151.224.122.177])
 by nibbler.fubar.geek.nz (Postfix) with ESMTPSA id C5FBB5DEC1;
 Mon, 11 Aug 2014 17:44:06 +0000 (UTC)
Date: Mon, 11 Aug 2014 18:43:56 +0100
From: Andrew Turner <andrew@fubar.geek.nz>
To: Nathan Whitehorn <nwhitehorn@freebsd.org>
Subject: Re: svn commit: r269818 - projects/arm64/sys/dev/fdt
Message-ID: <20140811184356.52954d03@bender.lan>
In-Reply-To: <53E8FC5B.9070605@freebsd.org>
References: <53e8f606.23db.c1d4a@svn.freebsd.org>
 <53E8FC5B.9070605@freebsd.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 17:44:14 -0000

On Mon, 11 Aug 2014 10:24:43 -0700
Nathan Whitehorn <nwhitehorn@freebsd.org> wrote:

> 
> On 08/11/14 09:57, Andrew Turner wrote:
> > Author: andrew
> > Date: Mon Aug 11 16:57:42 2014
> > New Revision: 269818
> > URL: http://svnweb.freebsd.org/changeset/base/269818
> >
> > Log:
> >    Hack to get the correct value for the interrupt from the vendor
> > supplied device tree. The GIC used the format <type irq flags>
> > where the type is 0 for Shared Peripheral Interrupts (SPI), and 1
> > for Private Peripheral Interrupts. The SPIs start at 32 in the GIc
> > so we need to adjust their values to match this.
> >
> > Modified:
> >    projects/arm64/sys/dev/fdt/simplebus.c
> >
> > Modified: projects/arm64/sys/dev/fdt/simplebus.c
> > ==============================================================================
> > --- projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11
> > 16:44:06 2014	(r269817) +++
> > projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:57:42
> > 2014	(r269818) @@ -310,10 +310,18 @@
> > simplebus_setup_dinfo(device_t dev, phan icells = 1; }
> >   		for (i = 0, k = 0; i < nintr; i += icells, k++) {
> > +			u_int irq;
> > +
> > +			if (icells == 3) {
> > +				irq = intr[i + 1];
> > +				if (intr[i] == 0)
> > +					irq += 32;
> > +			} else
> > +				irq = intr[i];
> >   			intr[i] = ofw_bus_map_intr(dev, iparent,
> > icells, &intr[i]);
> > -			resource_list_add(&ndi->rl, SYS_RES_IRQ,
> > k, intr[i],
> > -			    intr[i], 1);
> > +			resource_list_add(&ndi->rl, SYS_RES_IRQ,
> > k, irq,
> > +			    irq, 1);
> >   		}
> >   		free(intr, M_OFWPROP);
> >   	}
> >
> 
> The much better place to do this kind of hack is in the ARM 
> nexus_ofw_map_intr() routine. Ian's intrng branch will push this into 
> the PIC driver, where it actually belongs, but putting it in nexus
> isn't so bad for now and will apply to all buses, not just simplebus.
> -Nathan

I know, this is a hack to get interrupts working. It will be fixed
before merging into head.

Andrew 

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 17:46:20 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 40E04C2B;
 Mon, 11 Aug 2014 17:46:20 +0000 (UTC)
Received: from c.mail.sonic.net (c.mail.sonic.net [64.142.111.80])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 0C12429C9;
 Mon, 11 Aug 2014 17:46:19 +0000 (UTC)
Received: from aurora.physics.berkeley.edu (aurora.Physics.Berkeley.EDU
 [128.32.117.67]) (authenticated bits=0)
 by c.mail.sonic.net (8.14.9/8.14.9) with ESMTP id s7BHkGFS012116
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT);
 Mon, 11 Aug 2014 10:46:16 -0700
Message-ID: <53E90168.1030403@freebsd.org>
Date: Mon, 11 Aug 2014 10:46:16 -0700
From: Nathan Whitehorn <nwhitehorn@freebsd.org>
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64;
 rv:31.0) Gecko/20100101 Thunderbird/31.0
MIME-Version: 1.0
To: Andrew Turner <andrew@fubar.geek.nz>
Subject: Re: svn commit: r269818 - projects/arm64/sys/dev/fdt
References: <53e8f606.23db.c1d4a@svn.freebsd.org>	<53E8FC5B.9070605@freebsd.org>
 <20140811184356.52954d03@bender.lan>
In-Reply-To: <20140811184356.52954d03@bender.lan>
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit
X-Sonic-CAuth: UmFuZG9tSVY1HyZZwQGEKH9zaxM39svXMlEhGB7EdMnZDMp4vU/B9PGS98s9n+jdbWrwlhtF5Yn6FaHb1TT/pWrnY33LdrvzqURVLPEbqDY=
X-Sonic-ID: C;7FmhZH8h5BGrGOJAoK8kYw== M;pjPMZH8h5BGrGOJAoK8kYw==
X-Spam-Flag: No
X-Sonic-Spam-Details: 0.0/5.0 by cerberusd
Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 17:46:20 -0000


On 08/11/14 10:43, Andrew Turner wrote:
> On Mon, 11 Aug 2014 10:24:43 -0700
> Nathan Whitehorn <nwhitehorn@freebsd.org> wrote:
>
>> On 08/11/14 09:57, Andrew Turner wrote:
>>> Author: andrew
>>> Date: Mon Aug 11 16:57:42 2014
>>> New Revision: 269818
>>> URL: http://svnweb.freebsd.org/changeset/base/269818
>>>
>>> Log:
>>>     Hack to get the correct value for the interrupt from the vendor
>>> supplied device tree. The GIC used the format <type irq flags>
>>> where the type is 0 for Shared Peripheral Interrupts (SPI), and 1
>>> for Private Peripheral Interrupts. The SPIs start at 32 in the GIc
>>> so we need to adjust their values to match this.
>>>
>>> Modified:
>>>     projects/arm64/sys/dev/fdt/simplebus.c
>>>
>>> Modified: projects/arm64/sys/dev/fdt/simplebus.c
>>> ==============================================================================
>>> --- projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11
>>> 16:44:06 2014	(r269817) +++
>>> projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:57:42
>>> 2014	(r269818) @@ -310,10 +310,18 @@
>>> simplebus_setup_dinfo(device_t dev, phan icells = 1; }
>>>    		for (i = 0, k = 0; i < nintr; i += icells, k++) {
>>> +			u_int irq;
>>> +
>>> +			if (icells == 3) {
>>> +				irq = intr[i + 1];
>>> +				if (intr[i] == 0)
>>> +					irq += 32;
>>> +			} else
>>> +				irq = intr[i];
>>>    			intr[i] = ofw_bus_map_intr(dev, iparent,
>>> icells, &intr[i]);
>>> -			resource_list_add(&ndi->rl, SYS_RES_IRQ,
>>> k, intr[i],
>>> -			    intr[i], 1);
>>> +			resource_list_add(&ndi->rl, SYS_RES_IRQ,
>>> k, irq,
>>> +			    irq, 1);
>>>    		}
>>>    		free(intr, M_OFWPROP);
>>>    	}
>>>
>> The much better place to do this kind of hack is in the ARM
>> nexus_ofw_map_intr() routine. Ian's intrng branch will push this into
>> the PIC driver, where it actually belongs, but putting it in nexus
>> isn't so bad for now and will apply to all buses, not just simplebus.
>> -Nathan
> I know, this is a hack to get interrupts working. It will be fixed
> before merging into head.
>
> Andrew
>

That's clear :) I just was trying to point there's an easier place to do 
the hack.
-Nathan

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 18:09:38 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 CD605261
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 18:09:38 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id BB11F2C8E
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 18:09:38 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 2564
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 18:09:37 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Mon, 11 Aug 2014 18:09:37 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269823 - in projects/ipfw: sbin/ipfw sys/netinet
 sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e906e2.2564.1de9f0da@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 18:09:38 -0000

Author: melifaro
Date: Mon Aug 11 18:09:37 2014
New Revision: 269823
URL: http://svnweb.freebsd.org/changeset/base/269823

Log:
  * Add the abilify to lock/unlock given table from changes.
  
  Example:
  
  # ipfw table si lock
  # ipfw table si info
  +++ table(si), set(0) +++
   kindex: 0, type: cidr, locked
   valtype: number, references: 0
   algorithm: cidr:radix
   items: 0, size: 288
  # ipfw table si add 4.5.6.7
  ignored: 4.5.6.7/32 0
  ipfw: Adding record failed: table is locked
  # ipfw table si unlock
  # ipfw table si add 4.5.6.7
  added: 4.5.6.7/32 0
  # ipfw table si lock
  # ipfw table si delete 4.5.6.7
  ignored: 4.5.6.7/32 0
  ipfw: Deleting record failed: table is locked
  # ipfw table si unlock
  # ipfw table si delete 4.5.6.7
  deleted: 4.5.6.7/32 0

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.h
  projects/ipfw/sbin/ipfw/tables.c
  projects/ipfw/sys/netinet/ip_fw.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.h
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.h	Mon Aug 11 17:45:41 2014	(r269822)
+++ projects/ipfw/sbin/ipfw/ipfw2.h	Mon Aug 11 18:09:37 2014	(r269823)
@@ -225,6 +225,8 @@ enum tokens {
 	TOK_TALIST,
 	TOK_FTYPE,
 	TOK_ATOMIC,
+	TOK_LOCK,
+	TOK_UNLOCK,
 };
 /*
  * the following macro returns an error message if we run out of

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Mon Aug 11 17:45:41 2014	(r269822)
+++ projects/ipfw/sbin/ipfw/tables.c	Mon Aug 11 18:09:37 2014	(r269823)
@@ -59,6 +59,7 @@ static int table_do_swap(ipfw_obj_header
 static void table_create(ipfw_obj_header *oh, int ac, char *av[]);
 static void table_modify(ipfw_obj_header *oh, int ac, char *av[]);
 static void table_lookup(ipfw_obj_header *oh, int ac, char *av[]);
+static void table_lock(ipfw_obj_header *oh, int lock);
 static int table_swap(ipfw_obj_header *oh, char *second);
 static int table_get_info(ipfw_obj_header *oh, ipfw_xtable_info *i);
 static int table_show_info(ipfw_xtable_info *i, void *arg);
@@ -115,6 +116,8 @@ static struct _s_x tablecmds[] = {
       { "list",		TOK_LIST },
       { "lookup",	TOK_LOOKUP },
       { "atomic",	TOK_ATOMIC },
+      { "lock",		TOK_LOCK },
+      { "unlock",	TOK_UNLOCK },
       { NULL, 0 }
 };
 
@@ -240,6 +243,10 @@ ipfw_table_handler(int ac, char *av[])
 		NEED1("second table name required");
 		table_swap(&oh, *av);
 		break;
+	case TOK_LOCK:
+	case TOK_UNLOCK:
+		table_lock(&oh, (tcmd == TOK_LOCK));
+		break;
 	case TOK_DETAIL:
 	case TOK_INFO:
 		arg = (tcmd == TOK_DETAIL) ? (void *)1 : NULL;
@@ -297,6 +304,7 @@ static struct _s_x tablenewcmds[] = {
       { "valtype",	TOK_VALTYPE },
       { "algo",		TOK_ALGO },
       { "limit",	TOK_LIMIT },
+      { "locked",	TOK_LOCK },
       { NULL, 0 }
 };
 
@@ -440,6 +448,9 @@ table_create(ipfw_obj_header *oh, int ac
 			strlcpy(xi.algoname, *av, sizeof(xi.algoname));
 			ac--; av++;
 			break;
+		case TOK_LOCK:
+			xi.flags |= IPFW_TGFLAGS_LOCKED;
+			break;
 		}
 	}
 
@@ -485,10 +496,6 @@ table_modify(ipfw_obj_header *oh, int ac
 	sz = sizeof(tbuf);
 	memset(&xi, 0, sizeof(xi));
 
-	/* Set some defaults to preserve compability */
-	xi.type = IPFW_TABLE_CIDR;
-	xi.vtype = IPFW_VTYPE_U32;
-
 	while (ac > 0) {
 		if ((tcmd = match_token(tablenewcmds, *av)) == -1)
 			errx(EX_USAGE, "unknown option: %s", *av);
@@ -542,6 +549,25 @@ table_do_modify(ipfw_obj_header *oh, ipf
 
 	return (error);
 }
+
+/*
+ * Locks or unlocks given table
+ */
+static void
+table_lock(ipfw_obj_header *oh, int lock)
+{
+	ipfw_xtable_info xi;
+	int error;
+
+	memset(&xi, 0, sizeof(xi));
+
+	xi.mflags |= IPFW_TMFLAGS_LOCK;
+	xi.flags |= (lock != 0) ? IPFW_TGFLAGS_LOCKED : 0;
+
+	if ((error = table_do_modify(oh, &xi)) != 0)
+		err(EX_OSERR, "Table %s failed", lock != 0 ? "lock" : "unlock");
+}
+
 /*
  * Destroys given table specified by @oh->ntlv.
  * Returns 0 on success.
@@ -713,7 +739,10 @@ table_show_info(ipfw_xtable_info *i, voi
 		snprintf(tvtype, sizeof(tvtype), "%s", vtype);
 
 	printf("--- table(%s), set(%u) ---\n", i->tablename, i->set);
-	printf(" kindex: %d, type: %s\n", i->kidx, ttype);
+	if ((i->flags & IPFW_TGFLAGS_LOCKED) != 0)
+		printf(" kindex: %d, type: %s, locked\n", i->kidx, ttype);
+	else
+		printf(" kindex: %d, type: %s\n", i->kidx, ttype);
 	printf(" valtype: %s, references: %u\n", tvtype, i->refcnt);
 	printf(" algorithm: %s\n", i->algoname);
 	printf(" items: %u, size: %u\n", i->count, i->size);
@@ -1007,6 +1036,9 @@ table_modify_record(ipfw_obj_header *oh,
 	case ENOENT:
 		etxt = "record not found";
 		break;
+	case EACCES:
+		etxt = "table is locked";
+		break;
 	default:
 		etxt = strerror(error);
 	}

Modified: projects/ipfw/sys/netinet/ip_fw.h
==============================================================================
--- projects/ipfw/sys/netinet/ip_fw.h	Mon Aug 11 17:45:41 2014	(r269822)
+++ projects/ipfw/sys/netinet/ip_fw.h	Mon Aug 11 18:09:37 2014	(r269823)
@@ -866,7 +866,7 @@ typedef struct _ipfw_xtable_info {
 	uint8_t		vtype;		/* value type (u32)		*/
 	uint8_t		vftype;		/* value format type (ip,number)*/
 	uint16_t	mflags;		/* modification flags		*/
-	uint16_t	spare;
+	uint16_t	flags;		/* generic table flags		*/
 	uint32_t	set;		/* set table is in		*/
 	uint32_t	kidx;		/* kernel index			*/
 	uint32_t	refcnt;		/* number of references		*/
@@ -877,13 +877,18 @@ typedef struct _ipfw_xtable_info {
 	char		algoname[64];	/* algorithm name		*/
 	ipfw_ta_tinfo	ta_info;	/* additional algo stats	*/
 } ipfw_xtable_info;
+/* Generic table flags */
+#define	IPFW_TGFLAGS_LOCKED	0x01	/* Tables is locked from changes*/
+/* Table type-specific flags */
 #define	IPFW_TFFLAG_SRCIP	0x01
 #define	IPFW_TFFLAG_DSTIP	0x02
 #define	IPFW_TFFLAG_SRCPORT	0x04
 #define	IPFW_TFFLAG_DSTPORT	0x08
 #define	IPFW_TFFLAG_PROTO	0x10
-#define	IPFW_TMFLAGS_FTYPE	0x01	/* Change ftype field		*/
-#define	IPFW_TMFLAGS_LIMIT	0x02	/* Change limit value		*/
+/* Table modification flags */
+#define	IPFW_TMFLAGS_FTYPE	0x0001	/* Change ftype field		*/
+#define	IPFW_TMFLAGS_LIMIT	0x0002	/* Change limit value		*/
+#define	IPFW_TMFLAGS_LOCK	0x0004	/* Change table lock state	*/
 
 typedef struct _ipfw_iface_info {
 	char		ifname[64];	/* interface name		*/

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 17:45:41 2014	(r269822)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 18:09:37 2014	(r269823)
@@ -76,7 +76,7 @@ struct table_config {
 	uint8_t		vtype;		/* value type */
 	uint8_t		vftype;		/* value format type */
 	uint8_t		tflags;		/* type flags */
-	uint8_t		spare0;	
+	uint8_t		locked;		/* 1 if locked from changes */
 	uint32_t	count;		/* Number of records */
 	uint32_t	limit;		/* Max number of records */
 	uint8_t		linked;		/* 1 if already linked */
@@ -210,6 +210,11 @@ add_table_entry(struct ip_fw_chain *ch, 
 			return (EINVAL);
 		}
 
+		if (tc->locked != 0) {
+			IPFW_UH_WUNLOCK(ch);
+			return (EACCES);
+		}
+
 		/* Try to exit early on limit hit */
 		if ((error = check_table_limit(tc, tei)) != 0 && count == 1) {
 				IPFW_UH_WUNLOCK(ch);
@@ -439,6 +444,11 @@ del_table_entry(struct ip_fw_chain *ch, 
 		return (ESRCH);
 	}
 
+	if (tc->locked != 0) {
+		IPFW_UH_WUNLOCK(ch);
+		return (EACCES);
+	}
+
 	if (tc->no.type != ti->type) {
 		IPFW_UH_WUNLOCK(ch);
 		return (EINVAL);
@@ -1616,6 +1626,8 @@ ipfw_modify_table(struct ip_fw_chain *ch
 		tc->vftype = i->vftype;
 	if ((i->mflags & IPFW_TMFLAGS_LIMIT) != 0)
 		tc->limit = i->limit;
+	if ((i->mflags & IPFW_TMFLAGS_LOCK) != 0)
+		tc->locked = ((i->flags & IPFW_TGFLAGS_LOCKED) != 0);
 	IPFW_UH_WUNLOCK(ch);
 
 	return (0);
@@ -1704,6 +1716,7 @@ create_table_internal(struct ip_fw_chain
 
 	tc->vftype = i->vftype;
 	tc->limit = i->limit;
+	tc->locked = (i->flags & IPFW_TGFLAGS_LOCKED) != 0;
 
 	IPFW_UH_WLOCK(ch);
 
@@ -1792,6 +1805,7 @@ export_table_info(struct ip_fw_chain *ch
 	i->refcnt = tc->no.refcnt;
 	i->count = tc->count;
 	i->limit = tc->limit;
+	i->flags |= (tc->locked != 0) ? IPFW_TGFLAGS_LOCKED : 0;
 	i->size = tc->count * sizeof(ipfw_obj_tentry);
 	i->size += sizeof(ipfw_obj_header) + sizeof(ipfw_xtable_info);
 	strlcpy(i->tablename, tc->tablename, sizeof(i->tablename));

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 18:57:19 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 735141D4
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 18:57:19 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 4682024A0
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 18:57:19 +0000 (UTC)
Received: from andrew (uid 1231) (envelope-from andrew@FreeBSD.org) id 2c1b
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 18:57:19 +0000
From: Andrew Turner <andrew@FreeBSD.org>
Date: Mon, 11 Aug 2014 18:57:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269826 - projects/arm64/sys/boot/arm64/efi
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e9120f.2c1b.29394e69@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 18:57:19 -0000

Author: andrew
Date: Mon Aug 11 18:57:18 2014
New Revision: 269826
URL: http://svnweb.freebsd.org/changeset/base/269826

Log:
  Fix EFI build breakage: interact() was missing a parameter.
  
  Submitted by: Robin Randhawa <robin.randhawa AT arm.com>

Modified:
  projects/arm64/sys/boot/arm64/efi/main.c

Modified: projects/arm64/sys/boot/arm64/efi/main.c
==============================================================================
--- projects/arm64/sys/boot/arm64/efi/main.c	Mon Aug 11 18:42:20 2014	(r269825)
+++ projects/arm64/sys/boot/arm64/efi/main.c	Mon Aug 11 18:57:18 2014	(r269826)
@@ -129,7 +129,7 @@ main(int argc, CHAR16 *argv[])
 	archsw.arch_copyout = arm64_efi_copyout;
 	archsw.arch_readin = arm64_efi_readin;
 
-	interact();			/* doesn't return */
+	interact(NULL);			/* doesn't return */
 
 	return (EFI_SUCCESS);		/* keep compiler happy */
 }

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 18:57:22 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D4AE92BE
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 18:57:22 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id AA1FF24A3
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 18:57:22 +0000 (UTC)
Received: from andrew (uid 1231) (envelope-from andrew@FreeBSD.org) id 2c2b
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 18:57:22 +0000
From: Andrew Turner <andrew@FreeBSD.org>
Date: Mon, 11 Aug 2014 18:57:22 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269827 - projects/arm64/sys/boot/efi/libefi
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e91212.2c2b.45ba917b@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 18:57:22 -0000

Author: andrew
Date: Mon Aug 11 18:57:22 2014
New Revision: 269827
URL: http://svnweb.freebsd.org/changeset/base/269827

Log:
  Fix EFI build breakage: efi_register_handles was missing a parameter.
  
  Submitted by: Robin Randhawa <robin.randhawa AT arm.com>

Modified:
  projects/arm64/sys/boot/efi/libefi/efisimplefs.c

Modified: projects/arm64/sys/boot/efi/libefi/efisimplefs.c
==============================================================================
--- projects/arm64/sys/boot/efi/libefi/efisimplefs.c	Mon Aug 11 18:57:18 2014	(r269826)
+++ projects/arm64/sys/boot/efi/libefi/efisimplefs.c	Mon Aug 11 18:57:22 2014	(r269827)
@@ -356,7 +356,7 @@ efisfs_init(void)
 		nout++;
 	}
 
-	err = efi_register_handles(&efisfs_dev, hout, nout);
+	err = efi_register_handles(&efisfs_dev, hout, NULL, nout);
 	free(hin);
 	return (err);
 }

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 20:00:52 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 6320B495
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 20:00:52 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 4CC502BBA
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 20:00:52 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 2c48
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 20:00:52 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Mon, 11 Aug 2014 20:00:52 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269834 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e920f4.2c48.2645b543@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 20:00:52 -0000

Author: melifaro
Date: Mon Aug 11 20:00:51 2014
New Revision: 269834
URL: http://svnweb.freebsd.org/changeset/base/269834

Log:
  Update functions descriptions.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c	Mon Aug 11 19:41:01 2014	(r269833)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c	Mon Aug 11 20:00:51 2014	(r269834)
@@ -69,7 +69,6 @@ static void handle_ifattach(struct ip_fw
 /*
  * FreeBSD Kernel interface.
  */
-
 static void ipfw_kifhandler(void *arg, struct ifnet *ifp);
 static int ipfw_kiflookup(char *name);
 static void iface_khandler_register(void);
@@ -189,8 +188,6 @@ ipfw_kiflookup(char *name)
 	return (ifindex);
 }
 
-
-
 /*
  * Global ipfw startup hook.
  * Since we perform lazy initialization, do nothing except

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 19:41:01 2014	(r269833)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 20:00:51 2014	(r269834)
@@ -58,14 +58,11 @@ __FBSDID("$FreeBSD$");
 #include <netpfil/ipfw/ip_fw_private.h>
 #include <netpfil/ipfw/ip_fw_table.h>
 
-
  /*
  * Table has the following `type` concepts:
  *
  * `no.type` represents lookup key type (cidr, ifp, uid, etc..)
- * `ta->atype` represents exact lookup algorithm.
- *     For example, we can use more efficient search schemes if we plan
- *     to use some specific table for storing host-routes only.
+ * `vtype` represents table value type (currently U32)
  * `ftype` (at the moment )is pure userland field helping to properly
  *     format value data e.g. "value is IPv4 nexthop" or "value is DSCP"
  *     or "value is port".
@@ -260,7 +257,7 @@ add_table_entry(struct ip_fw_chain *ch, 
 		IPFW_UH_WUNLOCK(ch);
 	}
 
-	/* Prepare record (allocate memory) */
+	/* Allocate memory and prepare record(s) */
 	ta_buf_sz = ta->ta_buf_size;
 	rollback = 0;
 	if (count == 1) {
@@ -471,7 +468,7 @@ del_table_entry(struct ip_fw_chain *ch, 
 
 	IPFW_UH_WUNLOCK(ch);
 
-	/* Prepare record (allocate memory) */
+	/* Allocate memory and prepare record(s) */
 	ta_buf_sz = ta->ta_buf_size;
 	if (count == 1) {
 		memset(&ta_buf, 0, sizeof(ta_buf));
@@ -587,8 +584,8 @@ check_table_space(struct ip_fw_chain *ch
 	while (true) {
 		pflags = 0;
 		if (ta->has_space(tc->astate, ti, count, &pflags) != 0) {
-			tc->no.refcnt--;
-			return (0);
+			error = 0;
+			break;
 		}
 
 		/* We have to shrink/grow table */
@@ -607,8 +604,8 @@ check_table_space(struct ip_fw_chain *ch
 		if (ta->has_space(tc->astate, ti, count, &pflags) != 0) {
 
 			/*
-			 * Other threads has already performed resize.
-			 * Flush our state and return/
+			 * Other thread has already performed resize.
+			 * Flush our state and return.
 			 */
 			ta->flush_mod(ta_buf);
 			break;
@@ -757,7 +754,7 @@ ipfw_manage_table_ent_v1(struct ip_fw_ch
 
 	/*
 	 * Mark entire buffer as "read".
-	 * This makes sopt api write it back
+	 * This instructs sopt api write it back
 	 * after function return.
 	 */
 	ipfw_get_sopt_header(sd, sd->valsize);
@@ -926,6 +923,15 @@ ipfw_flush_table(struct ip_fw_chain *ch,
 	return (error);
 }
 
+/*
+ * Flushes given table.
+ *
+ * Function create new table instance with the same
+ * parameters, swaps it with old one and
+ * flushes state without holding any locks.
+ *
+ * Returns 0 on success.
+ */
 int
 flush_table(struct ip_fw_chain *ch, struct tid_info *ti)
 {
@@ -951,7 +957,7 @@ flush_table(struct ip_fw_chain *ch, stru
 	}
 	ta = tc->ta;
 	tc->no.refcnt++;
-	/* Save statup algo parameters */
+	/* Save startup algo parameters */
 	if (ta->print_config != NULL) {
 		ta->print_config(tc->astate, KIDX_TO_TI(ch, tc->no.kidx),
 		    algostate, sizeof(algostate));
@@ -1030,6 +1036,21 @@ ipfw_swap_table(struct ip_fw_chain *ch, 
 	return (error);
 }
 
+/*
+ * Swaps two tables of the same type/valtype.
+ *
+ * Checks if tables are compatible and limits
+ * permits swap, than actually perform swap
+ * by switching
+ * 1) runtime data (ch->tablestate)
+ * 2) runtime cache in @tc
+ * 3) algo-specific data (tc->astate)
+ * 4) number of items
+ *
+ * Since @ti has changed for each table, calls notification callbacks.
+ *
+ * Returns 0 on success.
+ */
 static int
 swap_tables(struct ip_fw_chain *ch, struct tid_info *a,
     struct tid_info *b)
@@ -1043,7 +1064,7 @@ swap_tables(struct ip_fw_chain *ch, stru
 
 	/*
 	 * Stage 1: find both tables and ensure they are of
-	 * the same type and algo.
+	 * the same type.
 	 */
 	IPFW_UH_WLOCK(ch);
 	ni = CHAIN_TO_NI(ch);
@@ -1166,6 +1187,9 @@ destroy_table_locked(struct namedobj_ins
 	free_table_config(ni, (struct table_config *)no);
 }
 
+/*
+ * Shuts tables module down.
+ */
 void
 ipfw_destroy_tables(struct ip_fw_chain *ch)
 {
@@ -1186,6 +1210,9 @@ ipfw_destroy_tables(struct ip_fw_chain *
 	free(CHAIN_TO_TCFG(ch), M_IPFW);
 }
 
+/*
+ * Starts tables module.
+ */
 int
 ipfw_init_tables(struct ip_fw_chain *ch)
 {
@@ -1204,6 +1231,11 @@ ipfw_init_tables(struct ip_fw_chain *ch)
 	return (0);
 }
 
+/*
+ * Grow tables index.
+ *
+ * Returns 0 on success.
+ */
 int
 ipfw_resize_tables(struct ip_fw_chain *ch, unsigned int ntables)
 {
@@ -1277,7 +1309,7 @@ ipfw_resize_tables(struct ip_fw_chain *c
 }
 
 /*
- * Switch between "set 0" and "rule set" table binding,
+ * Switch between "set 0" and "rule's set" table binding,
  * Check all ruleset bindings and permits changing
  * IFF each binding has both rule AND table in default set (set 0).
  *
@@ -1303,6 +1335,9 @@ ipfw_switch_tables_namespace(struct ip_f
 
 	ni = CHAIN_TO_NI(ch);
 
+	/*
+	 * Scan all rules and examine tables opcodes.
+	 */
 	for (i = 0; i < ch->n_rules; i++) {
 		rule = ch->map[i];
 
@@ -1317,6 +1352,7 @@ ipfw_switch_tables_namespace(struct ip_f
 
 			no = ipfw_objhash_lookup_kidx(ni, kidx);
 
+			/* Check if both table object and rule has the set 0 */
 			if (no->set != 0 || rule->set != 0) {
 				IPFW_UH_WUNLOCK(ch);
 				return (EBUSY);
@@ -1764,6 +1800,13 @@ objheader_to_ti(struct _ipfw_obj_header 
 	ntlv_to_ti(&oh->ntlv, ti);
 }
 
+/*
+ * Exports basic table info as name TLV.
+ * Used inside dump_static_rules() to provide info
+ * about all tables referenced by current ruleset.
+ *
+ * Returns 0 on success.
+ */
 int
 ipfw_export_table_ntlv(struct ip_fw_chain *ch, uint16_t kidx,
     struct sockopt_data *sd)
@@ -1789,6 +1832,9 @@ ipfw_export_table_ntlv(struct ip_fw_chai
 	return (0);
 }
 
+/*
+ * Exports table @tc info into standard ipfw_xtable_info format.
+ */
 static void
 export_table_info(struct ip_fw_chain *ch, struct table_config *tc,
     ipfw_xtable_info *i)
@@ -1896,7 +1942,6 @@ ipfw_count_table(struct ip_fw_chain *ch,
 	return (0);
 }
 
-
 /*
  * Legacy IP_FW_TABLE_XGETSIZE handler
  */
@@ -2059,7 +2104,9 @@ dump_table_xentry(void *e, void *arg)
  */ 
 
 /*
- * Finds algoritm by index, table type or supplied name
+ * Finds algoritm by index, table type or supplied name.
+ *
+ * Returns pointer to algo or NULL.
  */
 static struct table_algo *
 find_table_algo(struct tables_config *tcfg, struct tid_info *ti, char *name)
@@ -2107,7 +2154,7 @@ find_table_algo(struct tables_config *tc
 
 /*
  * Register new table algo @ta.
- * Stores algo id iside @idx.<F2>
+ * Stores algo id inside @idx.
  *
  * Returns 0 on success.
  */
@@ -2129,6 +2176,7 @@ ipfw_add_table_algo(struct ip_fw_chain *
 
 	KASSERT(ta->type >= IPFW_TABLE_MAXTYPE,("Increase IPFW_TABLE_MAXTYPE"));
 
+	/* Copy algorithm data to stable storage. */
 	ta_new = malloc(sizeof(struct table_algo), M_IPFW, M_WAITOK | M_ZERO);
 	memcpy(ta_new, ta, size);
 
@@ -2433,6 +2481,12 @@ find_table(struct namedobj_instance *ni,
 	return ((struct table_config *)no);
 }
 
+/*
+ * Allocate new table config structure using
+ * specified @algo and @aname.
+ *
+ * Returns pointer to config or NULL.
+ */
 static struct table_config *
 alloc_table_config(struct ip_fw_chain *ch, struct tid_info *ti,
     struct table_algo *ta, char *aname, uint8_t tflags, uint8_t vtype)
@@ -2483,13 +2537,16 @@ alloc_table_config(struct ip_fw_chain *c
 	return (tc);
 }
 
+/*
+ * Destroys table state and config.
+ */
 static void
 free_table_config(struct namedobj_instance *ni, struct table_config *tc)
 {
 
-	if (tc->linked == 0)
-		tc->ta->destroy(tc->astate, &tc->ti);
+	KASSERT(tc->linked == 0, ("free() on linked config"));
 
+	tc->ta->destroy(tc->astate, &tc->ti);
 	free(tc, M_IPFW);
 }
 
@@ -2553,9 +2610,9 @@ unlink_table(struct ip_fw_chain *ch, str
 }
 
 /*
- * Finds named object by @uidx number.
- * Refs found object, allocate new index for non-existing object.
- * Fills in @oib with userland/kernel indexes.
+ * Finds and bumps refcount for tables referenced by given @rule.
+ * Allocates new indexes for non-existing tables.
+ * Fills in @oib array with userland/kernel indexes.
  * First free oidx pointer is saved back in @oib.
  *
  * Returns 0 on success.
@@ -2580,6 +2637,10 @@ bind_table_rule(struct ip_fw_chain *ch, 
 	IPFW_UH_WLOCK(ch);
 	ni = CHAIN_TO_NI(ch);
 
+	/*
+	 * Increase refcount on each referenced table.
+	 * Allocate table indexes for non-existing tables.
+	 */
 	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
 		cmdlen = F_LEN(cmd);
 
@@ -2832,11 +2893,10 @@ ipfw_move_tables_sets(struct ip_fw_chain
 /*
  * Compatibility function for old ipfw(8) binaries.
  * Rewrites table kernel indices with userland ones.
- * Works for \d+ talbes only (e.g. for tables, converted
- * from old numbered system calls).
+ * Convert tables matching '/^\d+$/' to their atoi() value.
+ * Use number 65535 for other tables.
  *
  * Returns 0 on success.
- * Raises error on any other tables.
  */
 int
 ipfw_rewrite_table_kidx(struct ip_fw_chain *chain, struct ip_fw_rule0 *rule)
@@ -2882,7 +2942,8 @@ ipfw_rewrite_table_kidx(struct ip_fw_cha
 }
 
 /*
- * Sets every table kidx in @bmask which is used in rule @rule.
+ * Marks every table kidx used in @rule with bit in @bmask.
+ * Used to generate bitmask of referenced tables for given ruleset.
  * 
  * Returns number of newly-referenced tables.
  */
@@ -2914,8 +2975,6 @@ ipfw_mark_table_kidx(struct ip_fw_chain 
 	return (count);
 }
 
-
-
 /*
  * Checks is opcode is referencing table of appropriate type.
  * Adds reference count for found table if true.
@@ -2941,7 +3000,7 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 
 	ni = CHAIN_TO_NI(chain);
 
-	/* Prepare queue to store configs */
+	/* Prepare queue to store newly-allocated configs */
 	TAILQ_INIT(&nh);
 
 	/*
@@ -2989,7 +3048,6 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 	/*
 	 * Stage 2: allocate table configs for every non-existent table
 	 */
-
 	if ((ci->flags & IPFW_RCF_TABLES) != 0) {
 		for (p = pidx_first; p < pidx_last; p++) {
 			if (p->new == 0)
@@ -3020,7 +3078,7 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 		}
 
 		/*
-		 * Stage 2.1: Check if we're going to create 2 tables
+		 * Stage 2.1: Check if we're going to create two tables
 		 * with the same name, but different table types.
 		 */
 		TAILQ_FOREACH(no, &nh, nn_next) {
@@ -3038,16 +3096,15 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 	IPFW_UH_WLOCK(chain);
 
 	if ((ci->flags & IPFW_RCF_TABLES) != 0) {
+
 		/*
 		 * Stage 3: link & reference new table configs
 		 */
 
-
 		/*
 		 * Step 3.1: Check if some tables we need to create have been
 		 * already created with different table type.
 		 */
-
 		error = 0;
 		TAILQ_FOREACH_SAFE(no, &nh, nn_next, no_tmp) {
 			no_n = ipfw_objhash_lookup_name(ni, no->set, no->name);
@@ -3181,4 +3238,3 @@ ipfw_unbind_table_rule(struct ip_fw_chai
 	}
 }
 
-/* end of file */

From owner-svn-src-projects@FreeBSD.ORG  Mon Aug 11 22:38:13 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D5104B36
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 22:38:13 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C3C272E5A
 for <svn-src-projects@freebsd.org>; Mon, 11 Aug 2014 22:38:13 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 2e9f
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Mon, 11 Aug 2014 22:38:13 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Mon, 11 Aug 2014 22:38:13 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269843 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e945d5.2e9f.260da81d@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 22:38:13 -0000

Author: melifaro
Date: Mon Aug 11 22:38:13 2014
New Revision: 269843
URL: http://svnweb.freebsd.org/changeset/base/269843

Log:
  Simplify add/del_table_entry() by making their common pieces
  common functions.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 21:42:06 2014	(r269842)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Mon Aug 11 22:38:13 2014	(r269843)
@@ -173,32 +173,59 @@ check_table_limit(struct table_config *t
 }
 
 /*
- * Adds/updates one or more entries in table @ti.
+ * Convert algorithm callback return code into
+ * one of pre-defined states known by userland.
+ */
+static void
+store_tei_result(struct tentry_info *tei, int do_add, int error, uint32_t num)
+{
+	int flag;
+
+	flag = 0;
+
+	switch (error) {
+	case 0:
+		if (do_add && num != 0)
+			flag = TEI_FLAGS_ADDED;
+		if (do_add == 0)
+			flag = TEI_FLAGS_DELETED;
+		break;
+	case ENOENT:
+		flag = TEI_FLAGS_NOTFOUND;
+		break;
+	case EEXIST:
+		flag = TEI_FLAGS_EXISTS;
+		break;
+	default:
+		flag = TEI_FLAGS_ERROR;
+	}
+
+	tei->flags |= flag;
+}
+
+/*
+ * Find and reference existing table optionally
+ * creating new one.
  *
- * Returns 0 on success.
+ * Saves found table config/table algo into @ptc / @pta.
+ * Returns 0 if table was found/created and referenced
+ * or non-zero return code.
  */
-int
-add_table_entry(struct ip_fw_chain *ch, struct tid_info *ti,
-    struct tentry_info *tei, uint8_t flags, uint32_t count)
+static int
+find_ref_table(struct ip_fw_chain *ch, struct tid_info *ti,
+    struct tentry_info *tei, uint32_t count, int do_add,
+    struct table_config **ptc, struct table_algo **pta)
 {
+	struct namedobj_instance *ni;
 	struct table_config *tc;
 	struct table_algo *ta;
-	struct namedobj_instance *ni;
-	uint16_t kidx;
-	int error, first_error, i, j, rerror, rollback;
-	uint32_t num, numadd;
 	ipfw_xtable_info *xi;
-	struct tentry_info *ptei;
-	char ta_buf[TA_BUF_SZ];
-	size_t ta_buf_sz;
-	caddr_t ta_buf_m, v, vv;
+	int error;
 
 	IPFW_UH_WLOCK(ch);
-	ni = CHAIN_TO_NI(ch);
 
-	/*
-	 * Find and reference existing table.
-	 */
+	ni = CHAIN_TO_NI(ch);
+	tc = NULL;
 	ta = NULL;
 	if ((tc = find_table(ni, ti)) != NULL) {
 		/* check table type */
@@ -213,9 +240,10 @@ add_table_entry(struct ip_fw_chain *ch, 
 		}
 
 		/* Try to exit early on limit hit */
-		if ((error = check_table_limit(tc, tei)) != 0 && count == 1) {
-				IPFW_UH_WUNLOCK(ch);
-				return (EFBIG);
+		if (do_add != 0 && count == 1 &&
+		    check_table_limit(tc, tei) != 0) {
+			IPFW_UH_WUNLOCK(ch);
+			return (EFBIG);
 		}
 
 		/* Reference and unlock */
@@ -225,6 +253,9 @@ add_table_entry(struct ip_fw_chain *ch, 
 	IPFW_UH_WUNLOCK(ch);
 
 	if (tc == NULL) {
+		if (do_add == 0)
+			return (ESRCH);
+
 		/* Compability mode: create new table for old clients */
 		if ((tei->flags & TEI_FLAGS_COMPAT) == 0)
 			return (ESRCH);
@@ -257,26 +288,101 @@ add_table_entry(struct ip_fw_chain *ch, 
 		IPFW_UH_WUNLOCK(ch);
 	}
 
-	/* Allocate memory and prepare record(s) */
+	*ptc = tc;
+	*pta = ta;
+	return (0);
+}
+
+/*
+ * Rolls back already @added to @tc entries using state arrat @ta_buf_m.
+ * Assume the following layout:
+ * 1) ADD state (ta_buf_m[0] ... t_buf_m[added - 1]) for handling update cases
+ * 2) DEL state (ta_buf_m[count[ ... t_buf_m[count + added - 1])
+ *   for storing deleted state
+ */
+static void
+rollback_added_entries(struct ip_fw_chain *ch, struct table_config *tc,
+    struct table_info *tinfo, struct tentry_info *tei, caddr_t ta_buf_m,
+    uint32_t count, uint32_t added)
+{
+	struct table_algo *ta;
+	struct tentry_info *ptei;
+	caddr_t v, vv;
+	size_t ta_buf_sz;
+	int error, i;
+	uint32_t num;
+
+	IPFW_UH_WLOCK_ASSERT(ch);
+
+	ta = tc->ta;
+	ta_buf_sz = ta->ta_buf_size;
+	v = ta_buf_m;
+	vv = v + count * ta_buf_sz;
+	for (i = 0; i < added; i++, v += ta_buf_sz, vv += ta_buf_sz) {
+		ptei = &tei[i];
+		if ((ptei->flags & TEI_FLAGS_UPDATED) != 0) {
+
+			/*
+			 * We have old value stored by previous
+			 * call in @ptei->value. Do add once again
+			 * to restore it.
+			 */
+			error = ta->add(tc->astate, tinfo, ptei, v, &num);
+			KASSERT(error == 0, ("rollback UPDATE fail"));
+			KASSERT(num == 0, ("rollback UPDATE fail2"));
+			continue;
+		}
+
+		error = ta->prepare_del(ch, ptei, vv);
+		KASSERT(error == 0, ("pre-rollback INSERT failed"));
+		error = ta->del(tc->astate, tinfo, ptei, vv, &num);
+		KASSERT(error == 0, ("rollback INSERT failed"));
+		tc->count -= num;
+	}
+}
+
+/*
+ * Prepares add/del state for all @count entries in @tei.
+ * Uses either stack buffer (@ta_buf) or allocates a new one.
+ * Stores pointer to allocated buffer back to @ta_buf.
+ *
+ * Returns 0 on success.
+ */
+static int
+prepare_batch_buffer(struct ip_fw_chain *ch, struct table_algo *ta,
+    struct tentry_info *tei, uint32_t count, int do_add, caddr_t *ta_buf)
+{
+	caddr_t ta_buf_m, v;
+	size_t ta_buf_sz, sz;
+	struct tentry_info *ptei;
+	int error, i;
+
+	error = 0;
 	ta_buf_sz = ta->ta_buf_size;
-	rollback = 0;
 	if (count == 1) {
-		memset(&ta_buf, 0, sizeof(ta_buf));
-		ta_buf_m = ta_buf;
+		/* Sigle add/delete, use on-stack buffer */
+		memset(*ta_buf, 0, TA_BUF_SZ);
+		ta_buf_m = *ta_buf;
 	} else {
 
 		/*
-		 * Multiple adds, allocate larger buffer
-		 * sufficient to hold both ADD state
+		 * Multiple adds/deletes, allocate larger buffer
+		 *
+		 * Note we need 2xcount buffer for add case:
+		 * we have hold both ADD state
 		 * and DELETE state (this may be needed
 		 * if we need to rollback all changes)
 		 */
-		ta_buf_m = malloc(2 * count * ta_buf_sz, M_TEMP,
+		sz = count * ta_buf_sz;
+		ta_buf_m = malloc((do_add != 0) ? sz * 2 : sz, M_TEMP,
 		    M_WAITOK | M_ZERO);
 	}
+
 	v = ta_buf_m;
 	for (i = 0; i < count; i++, v += ta_buf_sz) {
-		error = ta->prepare_add(ch, &tei[i], v);
+		ptei = &tei[i];
+		error = (do_add != 0) ?
+		    ta->prepare_add(ch, ptei, v) : ta->prepare_del(ch, ptei, v);
 
 		/*
 		 * Some syntax error (incorrect mask, or address, or
@@ -284,9 +390,76 @@ add_table_entry(struct ip_fw_chain *ch, 
 		 * settings.
 		 */
 		if (error != 0)
-			goto cleanup;
+			break;
+	}
+
+	*ta_buf = ta_buf_m;
+	return (error);
+}
+
+/*
+ * Flushes allocated state for each @count entries in @tei.
+ * Frees @ta_buf_m if differs from stack buffer @ta_buf.
+ */
+static void
+flush_batch_buffer(struct ip_fw_chain *ch, struct table_algo *ta,
+    struct tentry_info *tei, uint32_t count, int do_add, int rollback,
+    caddr_t ta_buf_m, caddr_t ta_buf)
+{
+	caddr_t v;
+	size_t ta_buf_sz;
+	int i;
+
+	ta_buf_sz = ta->ta_buf_size;
+
+	/* Run cleaning callback anyway */
+	v = ta_buf_m;
+	for (i = 0; i < count; i++, v += ta_buf_sz)
+		ta->flush_entry(ch, &tei[i], v);
+
+	/* Clean up "deleted" state in case of rollback */
+	if (rollback != 0) {
+		v = ta_buf_m + count * ta_buf_sz;
+		for (i = 0; i < count; i++, v += ta_buf_sz)
+			ta->flush_entry(ch, &tei[i], v);
 	}
 
+	if (ta_buf_m != ta_buf)
+		free(ta_buf_m, M_TEMP);
+}
+
+/*
+ * Adds/updates one or more entries in table @ti.
+ *
+ * Returns 0 on success.
+ */
+int
+add_table_entry(struct ip_fw_chain *ch, struct tid_info *ti,
+    struct tentry_info *tei, uint8_t flags, uint32_t count)
+{
+	struct table_config *tc;
+	struct table_algo *ta;
+	uint16_t kidx;
+	int error, first_error, i, rollback;
+	uint32_t num, numadd;
+	struct tentry_info *ptei;
+	char ta_buf[TA_BUF_SZ];
+	caddr_t ta_buf_m, v;
+
+	/*
+	 * Find and reference existing table.
+	 */
+	if ((error = find_ref_table(ch, ti, tei, count, 1, &tc, &ta)) != 0)
+		return (error);
+
+	/* Allocate memory and prepare record(s) */
+	rollback = 0;
+	/* Pass stack buffer by default */
+	ta_buf_m = ta_buf;
+	error = prepare_batch_buffer(ch, ta, tei, count, 1, &ta_buf_m);
+	if (error != 0)
+		goto cleanup;
+
 	IPFW_UH_WLOCK(ch);
 
 	/*
@@ -300,8 +473,6 @@ add_table_entry(struct ip_fw_chain *ch, 
 		goto cleanup;
 	}
 
-	ni = CHAIN_TO_NI(ch);
-
 	/* Drop reference we've used in first search */
 	tc->no.refcnt--;
 	/* We've got valid table in @tc. Let's try to add data */
@@ -313,7 +484,7 @@ add_table_entry(struct ip_fw_chain *ch, 
 	IPFW_WLOCK(ch);
 
 	v = ta_buf_m;
-	for (i = 0; i < count; i++, v += ta_buf_sz) {
+	for (i = 0; i < count; i++, v += ta->ta_buf_size) {
 		ptei = &tei[i];
 		num = 0;
 		/* check limit before adding */
@@ -321,14 +492,7 @@ add_table_entry(struct ip_fw_chain *ch, 
 			error = ta->add(tc->astate, KIDX_TO_TI(ch, kidx),
 			    ptei, v, &num);
 			/* Set status flag to inform userland */
-			if (error == 0 && num != 0)
-				ptei->flags |= TEI_FLAGS_ADDED;
-			else if (error == ENOENT)
-				ptei->flags |= TEI_FLAGS_NOTFOUND;
-			else if (error == EEXIST)
-				ptei->flags |= TEI_FLAGS_EXISTS;
-			else
-				ptei->flags |= TEI_FLAGS_ERROR;
+			store_tei_result(ptei, 1, error, num);
 		}
 		if (error == 0) {
 			/* Update number of records to ease limit checking */
@@ -348,39 +512,8 @@ add_table_entry(struct ip_fw_chain *ch, 
 		if ((flags & IPFW_CTF_ATOMIC) == 0)
 			continue;
 
-		/*
-		 * We need to rollback changes.
-		 * This is tricky since some entries may have been
-		 * updated, so  we need to change their value back
-		 * instead of deletion.
-		 */
-		rollback = 1;
-		v = ta_buf_m;
-		vv = v + count * ta_buf_sz;
-		for (j = 0; j < i; j++, v += ta_buf_sz, vv += ta_buf_sz) {
-			ptei = &tei[j];
-			if ((ptei->flags & TEI_FLAGS_UPDATED) != 0) {
-
-				/*
-				 * We have old value stored by previous
-				 * call in @ptei->value. Do add once again
-				 * to restore it.
-				 */
-				rerror = ta->add(tc->astate,
-				    KIDX_TO_TI(ch, kidx), ptei, v, &num);
-				KASSERT(rerror == 0, ("rollback UPDATE fail"));
-				KASSERT(num == 0, ("rollback UPDATE fail2"));
-				continue;
-			}
-
-			rerror = ta->prepare_del(ch, ptei, vv);
-			KASSERT(rerror == 0, ("pre-rollback INSERT failed"));
-			rerror = ta->del(tc->astate, KIDX_TO_TI(ch, kidx), ptei,
-			    vv, &num);
-			KASSERT(rerror == 0, ("rollback INSERT failed"));
-			tc->count -= num;
-		}
-
+		rollback_added_entries(ch, tc, KIDX_TO_TI(ch, kidx),
+		    tei, ta_buf_m, count, i);
 		break;
 	}
 
@@ -396,20 +529,7 @@ add_table_entry(struct ip_fw_chain *ch, 
 	error = first_error;
 
 cleanup:
-	/* Run cleaning callback anyway */
-	v = ta_buf_m;
-	for (i = 0; i < count; i++, v += ta_buf_sz)
-		ta->flush_entry(ch, &tei[i], v);
-
-	/* Clean up "deleted" state in case of rollback */
-	if (rollback != 0) {
-		vv = ta_buf_m + count * ta_buf_sz;
-		for (i = 0; i < count; i++, vv += ta_buf_sz)
-			ta->flush_entry(ch, &tei[i], vv);
-	}
-
-	if (ta_buf_m != ta_buf)
-		free(ta_buf_m, M_TEMP);
+	flush_batch_buffer(ch, ta, tei, count, 1, rollback, ta_buf_m, ta_buf);
 
 	return (error);
 }
@@ -425,74 +545,25 @@ del_table_entry(struct ip_fw_chain *ch, 
 {
 	struct table_config *tc;
 	struct table_algo *ta;
-	struct namedobj_instance *ni;
 	struct tentry_info *ptei;
 	uint16_t kidx;
 	int error, first_error, i;
 	uint32_t num, numdel;
 	char ta_buf[TA_BUF_SZ];
-	size_t ta_buf_sz;
 	caddr_t ta_buf_m, v;
 
-	IPFW_UH_WLOCK(ch);
-	ni = CHAIN_TO_NI(ch);
-	if ((tc = find_table(ni, ti)) == NULL) {
-		IPFW_UH_WUNLOCK(ch);
-		return (ESRCH);
-	}
-
-	if (tc->locked != 0) {
-		IPFW_UH_WUNLOCK(ch);
-		return (EACCES);
-	}
-
-	if (tc->no.type != ti->type) {
-		IPFW_UH_WUNLOCK(ch);
-		return (EINVAL);
-	}
-
 	/*
-	 * Give a chance for algorithm to shrink.
-	 * May release/reacquire UH_WLOCK.
+	 * Find and reference existing table.
 	 */
-	kidx = tc->no.kidx;
-	error = check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), 0);
-	if (error != 0) {
-		IPFW_UH_WUNLOCK(ch);
+	if ((error = find_ref_table(ch, ti, tei, count, 0, &tc, &ta)) != 0)
 		return (error);
-	}
-
-	/* Reference and unlock */
-	tc->no.refcnt++;
-	ta = tc->ta;
-
-	IPFW_UH_WUNLOCK(ch);
 
 	/* Allocate memory and prepare record(s) */
-	ta_buf_sz = ta->ta_buf_size;
-	if (count == 1) {
-		memset(&ta_buf, 0, sizeof(ta_buf));
-		ta_buf_m = ta_buf;
-	} else {
-
-		/*
-		 * Multiple deletes, allocate larger buffer
-		 * sufficient to hold delete state.
-		 */
-		ta_buf_m = malloc(count * ta_buf_sz, M_TEMP,
-		    M_WAITOK | M_ZERO);
-	}
-	v = ta_buf_m;
-	for (i = 0; i < count; i++, v += ta_buf_sz) {
-		error = ta->prepare_del(ch, &tei[i], v);
-
-		/*
-		 * Some syntax error (incorrect mask, or address, or
-		 * anything). Return error immediately.
-		 */
-		if (error != 0)
-			goto cleanup;
-	}
+	/* Pass stack buffer by default */
+	ta_buf_m = ta_buf;
+	error = prepare_batch_buffer(ch, ta, tei, count, 0, &ta_buf_m);
+	if (error != 0)
+		goto cleanup;
 
 	IPFW_UH_WLOCK(ch);
 
@@ -505,18 +576,13 @@ del_table_entry(struct ip_fw_chain *ch, 
 
 	IPFW_WLOCK(ch);
 	v = ta_buf_m;
-	for (i = 0; i < count; i++, v += ta_buf_sz) {
+	for (i = 0; i < count; i++, v += ta->ta_buf_size) {
 		ptei = &tei[i];
 		num = 0;
 		error = ta->del(tc->astate, KIDX_TO_TI(ch, kidx), ptei, v,
 		    &num);
 		/* Save state for userland */
-		if (error == 0)
-			ptei->flags |= TEI_FLAGS_DELETED;
-		else if (error == ENOENT)
-			ptei->flags |= TEI_FLAGS_NOTFOUND;
-		else
-			ptei->flags |= TEI_FLAGS_ERROR;
+		store_tei_result(ptei, 0, error, num);
 		if (error != 0 && first_error == 0)
 			first_error = error;
 		tc->count -= num;
@@ -535,13 +601,7 @@ del_table_entry(struct ip_fw_chain *ch, 
 	error = first_error;
 
 cleanup:
-	/* Run cleaning callback anyway */
-	v = ta_buf_m;
-	for (i = 0; i < count; i++, v += ta_buf_sz)
-		ta->flush_entry(ch, &tei[i], v);
-
-	if (ta_buf_m != ta_buf)
-		free(ta_buf_m, M_TEMP);
+	flush_batch_buffer(ch, ta, tei, count, 0, 0, ta_buf_m, ta_buf);
 
 	return (error);
 }

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 09:48:55 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 2B4F217A
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 09:48:55 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 19C882423
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 09:48:55 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6d45
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 09:48:54 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 09:48:54 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269855 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e9e307.6d45.70436c29@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 09:48:55 -0000

Author: melifaro
Date: Tue Aug 12 09:48:54 2014
New Revision: 269855
URL: http://svnweb.freebsd.org/changeset/base/269855

Log:
  Simplify table auto-creation for old userland users.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Tue Aug 12 09:34:53 2014	(r269854)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Tue Aug 12 09:48:54 2014	(r269855)
@@ -422,7 +422,7 @@ struct obj_idx {
 	uint16_t	uidx;	/* internal index supplied by userland */
 	uint16_t	kidx;	/* kernel object index */
 	uint16_t	off;	/* tlv offset from rule end in 4-byte words */
-	uint8_t		new;	/* index is newly-allocated */
+	uint8_t		spare;
 	uint8_t		type;	/* object type within its category */
 };
 
@@ -437,8 +437,6 @@ struct rule_check_info {
 	caddr_t		urule;		/* original rule pointer */
 	struct obj_idx	obuf[8];	/* table references storage */
 };
-#define	IPFW_RCF_TABLES		0x01	/* Has table-referencing opcode */
-
 
 /* Legacy interface support */
 /*

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 09:34:53 2014	(r269854)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 09:48:54 2014	(r269855)
@@ -103,9 +103,10 @@ static struct table_config *alloc_table_
 static void free_table_config(struct namedobj_instance *ni,
     struct table_config *tc);
 static int create_table_internal(struct ip_fw_chain *ch, struct tid_info *ti,
-    char *aname, ipfw_xtable_info *i);
-static void link_table(struct ip_fw_chain *chain, struct table_config *tc);
-static void unlink_table(struct ip_fw_chain *chain, struct table_config *tc);
+    char *aname, ipfw_xtable_info *i, struct table_config **ptc,
+    struct table_algo **pta, uint16_t *pkidx, int ref);
+static void link_table(struct ip_fw_chain *ch, struct table_config *tc);
+static void unlink_table(struct ip_fw_chain *ch, struct table_config *tc);
 static void free_table_state(void **state, void **xstate, uint8_t type);
 static int export_tables(struct ip_fw_chain *ch, ipfw_obj_lheader *olh,
     struct sockopt_data *sd);
@@ -203,6 +204,23 @@ store_tei_result(struct tentry_info *tei
 	tei->flags |= flag;
 }
 
+static int
+create_table_compat(struct ip_fw_chain *ch, struct tid_info *ti,
+    struct table_config **ptc, struct table_algo **pta, uint16_t *pkidx)
+{
+	ipfw_xtable_info xi;
+	int error;
+
+	memset(&xi, 0, sizeof(xi));
+	xi.vtype = IPFW_VTYPE_U32;
+
+	error = create_table_internal(ch, ti, NULL, &xi, ptc, pta, pkidx, 1);
+	if (error != 0)
+		return (error);
+
+	return (0);
+}
+
 /*
  * Find and reference existing table optionally
  * creating new one.
@@ -219,7 +237,6 @@ find_ref_table(struct ip_fw_chain *ch, s
 	struct namedobj_instance *ni;
 	struct table_config *tc;
 	struct table_algo *ta;
-	ipfw_xtable_info *xi;
 	int error;
 
 	IPFW_UH_WLOCK(ch);
@@ -260,32 +277,11 @@ find_ref_table(struct ip_fw_chain *ch, s
 		if ((tei->flags & TEI_FLAGS_COMPAT) == 0)
 			return (ESRCH);
 
-		xi = malloc(sizeof(ipfw_xtable_info), M_TEMP, M_WAITOK|M_ZERO);
-		xi->vtype = IPFW_VTYPE_U32;
-
-		error = create_table_internal(ch, ti, NULL, xi);
-		free(xi, M_TEMP);
-
+		error = create_table_compat(ch, ti, &tc, &ta, NULL);
 		if (error != 0)
 			return (error);
 
-		/* Let's try to find & reference another time */
-		IPFW_UH_WLOCK(ch);
-		if ((tc = find_table(ni, ti)) == NULL) {
-			IPFW_UH_WUNLOCK(ch);
-			return (EINVAL);
-		}
-
-		if (tc->no.type != ti->type) {
-			IPFW_UH_WUNLOCK(ch);
-			return (EINVAL);
-		}
-
-		/* Reference and unlock */
-		tc->no.refcnt++;
-		ta = tc->ta;
-
-		IPFW_UH_WUNLOCK(ch);
+		/* OK, now we've got referenced table. */
 	}
 
 	*ptc = tc;
@@ -430,6 +426,13 @@ flush_batch_buffer(struct ip_fw_chain *c
 
 /*
  * Adds/updates one or more entries in table @ti.
+ * Function references @ti first to ensure table won't
+ * disappear or change its type.
+ * After that, prepare_add callback is called for each @tei entry.
+ * Next, we try to add each entry under UH+WHLOCK
+ * using add() callback.
+ * Finally, we free all state by calling flush_entry callback
+ * for each @tei.
  *
  * Returns 0 on success.
  */
@@ -1780,7 +1783,7 @@ ipfw_create_table(struct ip_fw_chain *ch
 	}
 	IPFW_UH_RUNLOCK(ch);
 
-	return (create_table_internal(ch, &ti, aname, i));
+	return (create_table_internal(ch, &ti, aname, i, NULL, NULL, NULL, 0));
 }
 
 /*
@@ -1788,15 +1791,19 @@ ipfw_create_table(struct ip_fw_chain *ch
  *
  * Relies on table name checking inside find_name_tlv()
  * Assume @aname to be checked and valid.
+ * Stores allocated table config, used algo and kidx
+ * inside @ptc, @pta and @pkidx (if non-NULL).
+ * Reference created table if @compat is non-zero.
  *
  * Returns 0 on success.
  */
 static int
 create_table_internal(struct ip_fw_chain *ch, struct tid_info *ti,
-    char *aname, ipfw_xtable_info *i)
+    char *aname, ipfw_xtable_info *i, struct table_config **ptc,
+    struct table_algo **pta, uint16_t *pkidx, int compat)
 {
 	struct namedobj_instance *ni;
-	struct table_config *tc;
+	struct table_config *tc, *tc_new, *tmp;;
 	struct table_algo *ta;
 	uint16_t kidx;
 
@@ -1817,28 +1824,55 @@ create_table_internal(struct ip_fw_chain
 	IPFW_UH_WLOCK(ch);
 
 	/* Check if table has been already created */
-	if (find_table(ni, ti) != NULL) {
-		IPFW_UH_WUNLOCK(ch);
-		free_table_config(ni, tc);
-		return (EEXIST);
-	}
+	tc_new = find_table(ni, ti);
+	if (tc_new != NULL) {
 
-	if (ipfw_objhash_alloc_idx(ni, &kidx) != 0) {
-		IPFW_UH_WUNLOCK(ch);
-		printf("Unable to allocate table index."
-		    " Consider increasing net.inet.ip.fw.tables_max");
-		free_table_config(ni, tc);
-		return (EBUSY);
-	}
+		/*
+		 * Compat: do not fail if we're
+		 * requesting to create existing table
+		 * which has the same type / vtype
+		 */
+		if (compat == 0 || tc_new->no.type != tc->no.type ||
+		    tc_new->vtype != tc->vtype) {
+			IPFW_UH_WUNLOCK(ch);
+			free_table_config(ni, tc);
+			return (EEXIST);
+		}
+
+		/* Exchange tc and tc_new for proper refcounting & freeing */
+		tmp = tc;
+		tc = tc_new;
+		tc_new = tmp;
+	} else {
+		/* New table */
+		if (ipfw_objhash_alloc_idx(ni, &kidx) != 0) {
+			IPFW_UH_WUNLOCK(ch);
+			printf("Unable to allocate table index."
+			    " Consider increasing net.inet.ip.fw.tables_max");
+			free_table_config(ni, tc);
+			return (EBUSY);
+		}
+		tc->no.kidx = kidx;
 
-	tc->no.kidx = kidx;
+		IPFW_WLOCK(ch);
+		link_table(ch, tc);
+		IPFW_WUNLOCK(ch);
+	}
 
-	IPFW_WLOCK(ch);
-	link_table(ch, tc);
-	IPFW_WUNLOCK(ch);
+	if (compat != 0)
+		tc->no.refcnt++;
+	if (ptc != NULL)
+		*ptc = tc;
+	if (pta != NULL)
+		*pta = ta;
+	if (pkidx != NULL)
+		*pkidx = tc->no.kidx;
 
 	IPFW_UH_WUNLOCK(ch);
 
+	if (tc_new != NULL)
+		free_table_config(ni, tc_new);
+
 	return (0);
 }
 
@@ -2606,6 +2640,10 @@ free_table_config(struct namedobj_instan
 
 	KASSERT(tc->linked == 0, ("free() on linked config"));
 
+	/*
+	 * We're using ta without any locking/referencing.
+	 * TODO: fix this if we're going to use unloadable algos.
+	 */
 	tc->ta->destroy(tc->astate, &tc->ti);
 	free(tc, M_IPFW);
 }
@@ -2684,15 +2722,18 @@ bind_table_rule(struct ip_fw_chain *ch, 
 	struct table_config *tc;
 	struct namedobj_instance *ni;
 	struct named_object *no;
-	int error, l, cmdlen;
+	int cmdlen, error, l, numnew;
+	uint16_t kidx;
 	ipfw_insn *cmd;
-	struct obj_idx *pidx, *p;
+	struct obj_idx *pidx, *pidx_first, *p;
 
-	pidx = *oib;
+	pidx_first = *oib;
+	pidx = pidx_first;
 	l = rule->cmd_len;
 	cmd = rule->cmd;
 	cmdlen = 0;
 	error = 0;
+	numnew = 0;
 
 	IPFW_UH_WLOCK(ch);
 	ni = CHAIN_TO_NI(ch);
@@ -2724,27 +2765,19 @@ bind_table_rule(struct ip_fw_chain *ch, 
 			continue;
 		}
 
-		/* Table not found. Allocate new index and save for later */
-		if (ipfw_objhash_alloc_idx(ni, &pidx->kidx) != 0) {
-			printf("Unable to allocate table %s index in set %u."
-			    " Consider increasing net.inet.ip.fw.tables_max",
-			    "", ti->set);
-			error = EBUSY;
-			break;
-		}
-
-		ci->flags |= IPFW_RCF_TABLES;
-		pidx->new = 1;
+		/*
+		 * Compability stuff for old clients:
+		 * prepare to manually create non-existing tables.
+		 */
 		pidx++;
+		numnew++;
 	}
 
 	if (error != 0) {
 		/* Unref everything we have already done */
 		for (p = *oib; p < pidx; p++) {
-			if (p->new != 0) {
-				ipfw_objhash_free_idx(ni, p->kidx);
+			if (p->kidx == 0)
 				continue;
-			}
 
 			/* Find & unref by existing idx */
 			no = ipfw_objhash_lookup_kidx(ni, p->kidx);
@@ -2754,8 +2787,50 @@ bind_table_rule(struct ip_fw_chain *ch, 
 			no->refcnt--;
 		}
 	}
+
 	IPFW_UH_WUNLOCK(ch);
 
+	if (numnew == 0) {
+		*oib = pidx;
+		return (error);
+	}
+
+	/*
+	 * Compatibility stuff: do actual creation for non-existing,
+	 * but referenced tables.
+	 */
+	for (p = pidx_first; p < pidx; p++) {
+		if (p->kidx != 0)
+			continue;
+
+		ti->uidx = p->uidx;
+		ti->type = p->type;
+		ti->atype = 0;
+
+		error = create_table_compat(ch, ti, NULL, NULL, &kidx);
+		if (error == 0) {
+			p->kidx = kidx;
+			continue;
+		}
+
+		/* Error. We have to drop references */
+		IPFW_UH_WLOCK(ch);
+		for (p = pidx_first; p < pidx; p++) {
+			if (p->kidx == 0)
+				continue;
+
+			/* Find & unref by existing idx */
+			no = ipfw_objhash_lookup_kidx(ni, p->kidx);
+			KASSERT(no != NULL, ("Ref'd table %d disappeared",
+			    p->kidx));
+
+			no->refcnt--;
+		}
+		IPFW_UH_WUNLOCK(ch);
+
+		return (error);
+	}
+
 	*oib = pidx;
 
 	return (error);
@@ -3046,23 +3121,16 @@ int
 ipfw_rewrite_table_uidx(struct ip_fw_chain *chain,
     struct rule_check_info *ci)
 {
-	int cmdlen, error, ftype, l;
+	int cmdlen, error, l;
 	ipfw_insn *cmd;
 	uint16_t uidx;
 	uint8_t type;
-	struct table_config *tc;
-	struct table_algo *ta;
 	struct namedobj_instance *ni;
-	struct named_object *no, *no_n, *no_tmp;
 	struct obj_idx *p, *pidx_first, *pidx_last;
-	struct namedobjects_head nh;
 	struct tid_info ti;
 
 	ni = CHAIN_TO_NI(chain);
 
-	/* Prepare queue to store newly-allocated configs */
-	TAILQ_INIT(&nh);
-
 	/*
 	 * Prepare an array for storing opcode indices.
 	 * Use stack allocation by default.
@@ -3076,10 +3144,7 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 
 	pidx_last = pidx_first;
 	error = 0;
-
 	type = 0;
-	ftype = 0;
-
 	memset(&ti, 0, sizeof(ti));
 
 	/*
@@ -3092,135 +3157,13 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 		ti.tlen = ci->ctlv->head.length - sizeof(ipfw_obj_ctlv);
 	}
 
-	/*
-	 * Stage 1: reference existing tables, determine number
-	 * of tables we need to allocate and allocate indexes for each.
-	 */
+	/* Reference all used tables */
 	error = bind_table_rule(chain, ci->krule, ci, &pidx_last, &ti);
-
-	if (error != 0) {
-		if (pidx_first != ci->obuf)
-			free(pidx_first, M_IPFW);
-
-		return (error);
-	}
-
-	/*
-	 * Stage 2: allocate table configs for every non-existent table
-	 */
-	if ((ci->flags & IPFW_RCF_TABLES) != 0) {
-		for (p = pidx_first; p < pidx_last; p++) {
-			if (p->new == 0)
-				continue;
-
-			ti.uidx = p->uidx;
-			ti.type = p->type;
-			ti.atype = 0;
-
-			ta = find_table_algo(CHAIN_TO_TCFG(chain), &ti, NULL);
-			if (ta == NULL) {
-				error = ENOTSUP;
-				goto free;
-			}
-			tc = alloc_table_config(chain, &ti, ta, NULL, 0,
-			    IPFW_VTYPE_U32);
-
-			if (tc == NULL) {
-				error = ENOMEM;
-				goto free;
-			}
-
-			tc->no.kidx = p->kidx;
-			tc->no.refcnt = 1;
-
-			/* Add to list */
-			TAILQ_INSERT_TAIL(&nh, &tc->no, nn_next);
-		}
-
-		/*
-		 * Stage 2.1: Check if we're going to create two tables
-		 * with the same name, but different table types.
-		 */
-		TAILQ_FOREACH(no, &nh, nn_next) {
-			TAILQ_FOREACH(no_tmp, &nh, nn_next) {
-				if (ipfw_objhash_same_name(ni, no, no_tmp) == 0)
-					continue;
-				if (no->type != no_tmp->type) {
-					error = EINVAL;
-					goto free;
-				}
-			}
-		}
-	}
+	if (error != 0)
+		goto free;
 
 	IPFW_UH_WLOCK(chain);
 
-	if ((ci->flags & IPFW_RCF_TABLES) != 0) {
-
-		/*
-		 * Stage 3: link & reference new table configs
-		 */
-
-		/*
-		 * Step 3.1: Check if some tables we need to create have been
-		 * already created with different table type.
-		 */
-		error = 0;
-		TAILQ_FOREACH_SAFE(no, &nh, nn_next, no_tmp) {
-			no_n = ipfw_objhash_lookup_name(ni, no->set, no->name);
-			if (no_n == NULL)
-				continue;
-
-			if (no_n->type != no->type) {
-				error = EINVAL;
-				break;
-			}
-
-		}
-
-		if (error != 0) {
-			/*
-			 * Someone has allocated table with different table type.
-			 * We have to rollback everything.
-			 */
-			IPFW_UH_WUNLOCK(chain);
-			goto free;
-		}
-
-		/*
-		 * Attach new tables.
-		 * We need to set table pointers for each new table,
-		 * so we have to acquire main WLOCK.
-		 */
-		IPFW_WLOCK(chain);
-		TAILQ_FOREACH_SAFE(no, &nh, nn_next, no_tmp) {
-			no_n = ipfw_objhash_lookup_name(ni, no->set, no->name);
-
-			if (no_n == NULL) {
-				/* New table. Attach to runtime hash */
-				TAILQ_REMOVE(&nh, no, nn_next);
-				link_table(chain, (struct table_config *)no);
-				continue;
-			}
-
-			/*
-			 * Newly-allocated table with the same type.
-			 * Reference it and update out @pidx array
-			 * rewrite info.
-			 */
-			no_n->refcnt++;
-			/* Keep oib array in sync: update kidx */
-			for (p = pidx_first; p < pidx_last; p++) {
-				if (p->kidx != no->kidx)
-					continue;
-				/* Update kidx */
-				p->kidx = no_n->kidx;
-				break;
-			}
-		}
-		IPFW_WUNLOCK(chain);
-	}
-
 	/* Perform rule rewrite */
 	l = ci->krule->cmd_len;
 	cmd = ci->krule->cmd;
@@ -3228,7 +3171,6 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 	p = pidx_first;
 	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
 		cmdlen = F_LEN(cmd);
-
 		if (classify_table_opcode(cmd, &uidx, &type) != 0)
 			continue;
 		update_table_opcode(cmd, p->kidx);
@@ -3237,24 +3179,7 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 
 	IPFW_UH_WUNLOCK(chain);
 
-	error = 0;
-
-	/*
-	 * Stage 4: free resources
-	 */
 free:
-	if (!TAILQ_EMPTY(&nh)) {
-		/* Free indexes first */
-		IPFW_UH_WLOCK(chain);
-		TAILQ_FOREACH_SAFE(no, &nh, nn_next, no_tmp) {
-			ipfw_objhash_free_idx(ni, no->kidx);
-		}
-		IPFW_UH_WUNLOCK(chain);
-		/* Free configs */
-		TAILQ_FOREACH_SAFE(no, &nh, nn_next, no_tmp)
-			free_table_config(ni, tc);
-	}
-
 	if (pidx_first != ci->obuf)
 		free(pidx_first, M_IPFW);
 

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 10:22:46 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 7FAEE8A4
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 10:22:46 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 6CBF7279E
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 10:22:46 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6a2b
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 10:22:46 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 10:22:46 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269856 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53e9eaf6.6a2b.688c09fc@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 10:22:46 -0000

Author: melifaro
Date: Tue Aug 12 10:22:46 2014
New Revision: 269856
URL: http://svnweb.freebsd.org/changeset/base/269856

Log:
  No functional changes, do better functions grouping.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 09:48:54 2014	(r269855)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 10:22:46 2014	(r269856)
@@ -204,6 +204,14 @@ store_tei_result(struct tentry_info *tei
 	tei->flags |= flag;
 }
 
+/*
+ * Creates and references table with default parameters.
+ * Saves table config, algo and allocated kidx info @ptc, @pta and
+ * @pkidx if non-zero.
+ * Used for table auto-creation to support old binaries.
+ *
+ * Returns 0 on success.
+ */
 static int
 create_table_compat(struct ip_fw_chain *ch, struct tid_info *ti,
     struct table_config **ptc, struct table_algo **pta, uint16_t *pkidx)
@@ -212,6 +220,7 @@ create_table_compat(struct ip_fw_chain *
 	int error;
 
 	memset(&xi, 0, sizeof(xi));
+	/* Set u32 as default value type for legacy clients */
 	xi.vtype = IPFW_VTYPE_U32;
 
 	error = create_table_internal(ch, ti, NULL, &xi, ptc, pta, pkidx, 1);
@@ -1523,163 +1532,6 @@ ipfw_describe_table(struct ip_fw_chain *
 	return (0);
 }
 
-struct dump_args {
-	struct table_info *ti;
-	struct table_config *tc;
-	struct sockopt_data *sd;
-	uint32_t cnt;
-	uint16_t uidx;
-	int error;
-	ipfw_table_entry *ent;
-	uint32_t size;
-	ipfw_obj_tentry tent;
-};
-
-int
-ipfw_dump_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3,
-    struct sockopt_data *sd)
-{
-	int error;
-
-	switch (op3->version) {
-	case 0:
-		error = ipfw_dump_table_v0(ch, sd);
-		break;
-	case 1:
-		error = ipfw_dump_table_v1(ch, sd);
-		break;
-	default:
-		error = ENOTSUP;
-	}
-
-	return (error);
-}
-
-/*
- * Dumps all table data
- * Data layout (v1)(current):
- * Request: [ ipfw_obj_header ], size = ipfw_xtable_info.size
- * Reply: [ ipfw_obj_header ipfw_xtable_info ipfw_obj_tentry x N ]
- *
- * Returns 0 on success
- */
-static int
-ipfw_dump_table_v1(struct ip_fw_chain *ch, struct sockopt_data *sd)
-{
-	struct _ipfw_obj_header *oh;
-	ipfw_xtable_info *i;
-	struct tid_info ti;
-	struct table_config *tc;
-	struct table_algo *ta;
-	struct dump_args da;
-	uint32_t sz;
-
-	sz = sizeof(ipfw_obj_header) + sizeof(ipfw_xtable_info);
-	oh = (struct _ipfw_obj_header *)ipfw_get_sopt_header(sd, sz);
-	if (oh == NULL)
-		return (EINVAL);
-
-	i = (ipfw_xtable_info *)(oh + 1);
-	objheader_to_ti(oh, &ti);
-
-	IPFW_UH_RLOCK(ch);
-	if ((tc = find_table(CHAIN_TO_NI(ch), &ti)) == NULL) {
-		IPFW_UH_RUNLOCK(ch);
-		return (ESRCH);
-	}
-	export_table_info(ch, tc, i);
-
-	if (sd->valsize < i->size) {
-
-		/*
-		 * Submitted buffer size is not enough.
-		 * WE've already filled in @i structure with
-		 * relevant table info including size, so we
-		 * can return. Buffer will be flushed automatically.
-		 */
-		IPFW_UH_RUNLOCK(ch);
-		return (ENOMEM);
-	}
-
-	/*
-	 * Do the actual dump in eXtended format
-	 */
-	memset(&da, 0, sizeof(da));
-	da.ti = KIDX_TO_TI(ch, tc->no.kidx);
-	da.tc = tc;
-	da.sd = sd;
-
-	ta = tc->ta;
-
-	ta->foreach(tc->astate, da.ti, dump_table_tentry, &da);
-	IPFW_UH_RUNLOCK(ch);
-
-	return (da.error);
-}
-
-/*
- * Dumps all table data
- * Data layout (version 0)(legacy):
- * Request: [ ipfw_xtable ], size = IP_FW_TABLE_XGETSIZE()
- * Reply: [ ipfw_xtable ipfw_table_xentry x N ]
- *
- * Returns 0 on success
- */
-static int
-ipfw_dump_table_v0(struct ip_fw_chain *ch, struct sockopt_data *sd)
-{
-	ipfw_xtable *xtbl;
-	struct tid_info ti;
-	struct table_config *tc;
-	struct table_algo *ta;
-	struct dump_args da;
-	size_t sz;
-
-	xtbl = (ipfw_xtable *)ipfw_get_sopt_header(sd, sizeof(ipfw_xtable));
-	if (xtbl == NULL)
-		return (EINVAL);
-
-	memset(&ti, 0, sizeof(ti));
-	ti.uidx = xtbl->tbl;
-	
-	IPFW_UH_RLOCK(ch);
-	if ((tc = find_table(CHAIN_TO_NI(ch), &ti)) == NULL) {
-		IPFW_UH_RUNLOCK(ch);
-		return (0);
-	}
-	sz = tc->count * sizeof(ipfw_table_xentry) + sizeof(ipfw_xtable);
-
-	xtbl->cnt = tc->count;
-	xtbl->size = sz;
-	xtbl->type = tc->no.type;
-	xtbl->tbl = ti.uidx;
-
-	if (sd->valsize < sz) {
-
-		/*
-		 * Submitted buffer size is not enough.
-		 * WE've already filled in @i structure with
-		 * relevant table info including size, so we
-		 * can return. Buffer will be flushed automatically.
-		 */
-		IPFW_UH_RUNLOCK(ch);
-		return (ENOMEM);
-	}
-
-	/* Do the actual dump in eXtended format */
-	memset(&da, 0, sizeof(da));
-	da.ti = KIDX_TO_TI(ch, tc->no.kidx);
-	da.tc = tc;
-	da.sd = sd;
-
-	ta = tc->ta;
-
-	ta->foreach(tc->astate, da.ti, dump_table_xentry, &da);
-	IPFW_UH_RUNLOCK(ch);
-
-	return (0);
-}
-
 /*
  * Modifies existing table.
  * Data layout (v0)(current):
@@ -1927,6 +1779,41 @@ ipfw_export_table_ntlv(struct ip_fw_chai
 }
 
 /*
+ * Marks every table kidx used in @rule with bit in @bmask.
+ * Used to generate bitmask of referenced tables for given ruleset.
+ * 
+ * Returns number of newly-referenced tables.
+ */
+int
+ipfw_mark_table_kidx(struct ip_fw_chain *chain, struct ip_fw *rule,
+    uint32_t *bmask)
+{
+	int cmdlen, l, count;
+	ipfw_insn *cmd;
+	uint16_t kidx;
+	uint8_t type;
+
+	l = rule->cmd_len;
+	cmd = rule->cmd;
+	cmdlen = 0;
+	count = 0;
+	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
+		cmdlen = F_LEN(cmd);
+
+		if (classify_table_opcode(cmd, &kidx, &type) != 0)
+			continue;
+
+		if ((bmask[kidx / 32] & (1 << (kidx % 32))) == 0)
+			count++;
+
+		bmask[kidx / 32] |= 1 << (kidx % 32);
+	}
+
+	return (count);
+}
+
+
+/*
  * Exports table @tc info into standard ipfw_xtable_info format.
  */
 static void
@@ -2022,43 +1909,201 @@ export_tables(struct ip_fw_chain *ch, ip
 	return (0);
 }
 
-/*
- * Legacy IP_FW_TABLE_GETSIZE handler
- */
-int
-ipfw_count_table(struct ip_fw_chain *ch, struct tid_info *ti, uint32_t *cnt)
-{
+struct dump_args {
+	struct table_info *ti;
 	struct table_config *tc;
+	struct sockopt_data *sd;
+	uint32_t cnt;
+	uint16_t uidx;
+	int error;
+	ipfw_table_entry *ent;
+	uint32_t size;
+	ipfw_obj_tentry tent;
+};
 
-	if ((tc = find_table(CHAIN_TO_NI(ch), ti)) == NULL)
-		return (ESRCH);
-	*cnt = tc->count;
-	return (0);
-}
-
-/*
- * Legacy IP_FW_TABLE_XGETSIZE handler
- */
 int
-ipfw_count_xtable(struct ip_fw_chain *ch, struct tid_info *ti, uint32_t *cnt)
+ipfw_dump_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3,
+    struct sockopt_data *sd)
 {
-	struct table_config *tc;
+	int error;
 
-	if ((tc = find_table(CHAIN_TO_NI(ch), ti)) == NULL) {
-		*cnt = 0;
-		return (0); /* 'table all list' requires success */
+	switch (op3->version) {
+	case 0:
+		error = ipfw_dump_table_v0(ch, sd);
+		break;
+	case 1:
+		error = ipfw_dump_table_v1(ch, sd);
+		break;
+	default:
+		error = ENOTSUP;
 	}
-	*cnt = tc->count * sizeof(ipfw_table_xentry);
-	if (tc->count > 0)
-		*cnt += sizeof(ipfw_xtable);
-	return (0);
+
+	return (error);
 }
 
+/*
+ * Dumps all table data
+ * Data layout (v1)(current):
+ * Request: [ ipfw_obj_header ], size = ipfw_xtable_info.size
+ * Reply: [ ipfw_obj_header ipfw_xtable_info ipfw_obj_tentry x N ]
+ *
+ * Returns 0 on success
+ */
 static int
-dump_table_entry(void *e, void *arg)
+ipfw_dump_table_v1(struct ip_fw_chain *ch, struct sockopt_data *sd)
 {
-	struct dump_args *da;
-	struct table_config *tc;
+	struct _ipfw_obj_header *oh;
+	ipfw_xtable_info *i;
+	struct tid_info ti;
+	struct table_config *tc;
+	struct table_algo *ta;
+	struct dump_args da;
+	uint32_t sz;
+
+	sz = sizeof(ipfw_obj_header) + sizeof(ipfw_xtable_info);
+	oh = (struct _ipfw_obj_header *)ipfw_get_sopt_header(sd, sz);
+	if (oh == NULL)
+		return (EINVAL);
+
+	i = (ipfw_xtable_info *)(oh + 1);
+	objheader_to_ti(oh, &ti);
+
+	IPFW_UH_RLOCK(ch);
+	if ((tc = find_table(CHAIN_TO_NI(ch), &ti)) == NULL) {
+		IPFW_UH_RUNLOCK(ch);
+		return (ESRCH);
+	}
+	export_table_info(ch, tc, i);
+
+	if (sd->valsize < i->size) {
+
+		/*
+		 * Submitted buffer size is not enough.
+		 * WE've already filled in @i structure with
+		 * relevant table info including size, so we
+		 * can return. Buffer will be flushed automatically.
+		 */
+		IPFW_UH_RUNLOCK(ch);
+		return (ENOMEM);
+	}
+
+	/*
+	 * Do the actual dump in eXtended format
+	 */
+	memset(&da, 0, sizeof(da));
+	da.ti = KIDX_TO_TI(ch, tc->no.kidx);
+	da.tc = tc;
+	da.sd = sd;
+
+	ta = tc->ta;
+
+	ta->foreach(tc->astate, da.ti, dump_table_tentry, &da);
+	IPFW_UH_RUNLOCK(ch);
+
+	return (da.error);
+}
+
+/*
+ * Dumps all table data
+ * Data layout (version 0)(legacy):
+ * Request: [ ipfw_xtable ], size = IP_FW_TABLE_XGETSIZE()
+ * Reply: [ ipfw_xtable ipfw_table_xentry x N ]
+ *
+ * Returns 0 on success
+ */
+static int
+ipfw_dump_table_v0(struct ip_fw_chain *ch, struct sockopt_data *sd)
+{
+	ipfw_xtable *xtbl;
+	struct tid_info ti;
+	struct table_config *tc;
+	struct table_algo *ta;
+	struct dump_args da;
+	size_t sz;
+
+	xtbl = (ipfw_xtable *)ipfw_get_sopt_header(sd, sizeof(ipfw_xtable));
+	if (xtbl == NULL)
+		return (EINVAL);
+
+	memset(&ti, 0, sizeof(ti));
+	ti.uidx = xtbl->tbl;
+	
+	IPFW_UH_RLOCK(ch);
+	if ((tc = find_table(CHAIN_TO_NI(ch), &ti)) == NULL) {
+		IPFW_UH_RUNLOCK(ch);
+		return (0);
+	}
+	sz = tc->count * sizeof(ipfw_table_xentry) + sizeof(ipfw_xtable);
+
+	xtbl->cnt = tc->count;
+	xtbl->size = sz;
+	xtbl->type = tc->no.type;
+	xtbl->tbl = ti.uidx;
+
+	if (sd->valsize < sz) {
+
+		/*
+		 * Submitted buffer size is not enough.
+		 * WE've already filled in @i structure with
+		 * relevant table info including size, so we
+		 * can return. Buffer will be flushed automatically.
+		 */
+		IPFW_UH_RUNLOCK(ch);
+		return (ENOMEM);
+	}
+
+	/* Do the actual dump in eXtended format */
+	memset(&da, 0, sizeof(da));
+	da.ti = KIDX_TO_TI(ch, tc->no.kidx);
+	da.tc = tc;
+	da.sd = sd;
+
+	ta = tc->ta;
+
+	ta->foreach(tc->astate, da.ti, dump_table_xentry, &da);
+	IPFW_UH_RUNLOCK(ch);
+
+	return (0);
+}
+
+
+/*
+ * Legacy IP_FW_TABLE_GETSIZE handler
+ */
+int
+ipfw_count_table(struct ip_fw_chain *ch, struct tid_info *ti, uint32_t *cnt)
+{
+	struct table_config *tc;
+
+	if ((tc = find_table(CHAIN_TO_NI(ch), ti)) == NULL)
+		return (ESRCH);
+	*cnt = tc->count;
+	return (0);
+}
+
+/*
+ * Legacy IP_FW_TABLE_XGETSIZE handler
+ */
+int
+ipfw_count_xtable(struct ip_fw_chain *ch, struct tid_info *ti, uint32_t *cnt)
+{
+	struct table_config *tc;
+
+	if ((tc = find_table(CHAIN_TO_NI(ch), ti)) == NULL) {
+		*cnt = 0;
+		return (0); /* 'table all list' requires success */
+	}
+	*cnt = tc->count * sizeof(ipfw_table_xentry);
+	if (tc->count > 0)
+		*cnt += sizeof(ipfw_xtable);
+	return (0);
+}
+
+static int
+dump_table_entry(void *e, void *arg)
+{
+	struct dump_args *da;
+	struct table_config *tc;
 	struct table_algo *ta;
 	ipfw_table_entry *ent;
 	int error;
@@ -2610,11 +2655,7 @@ alloc_table_config(struct ip_fw_chain *c
 	tc->tflags = tflags;
 	tc->ta = ta;
 	strlcpy(tc->tablename, name, sizeof(tc->tablename));
-	/* Set default value type to u32 for compability reasons */
-	if (vtype == 0)
-		tc->vtype = IPFW_VTYPE_U32;
-	else
-		tc->vtype = vtype;
+	tc->vtype = vtype;
 
 	if (ti->tlvs == NULL) {
 		tc->no.compat = 1;
@@ -2707,196 +2748,67 @@ unlink_table(struct ip_fw_chain *ch, str
 		tc->ta->change_ti(tc->astate, NULL);
 }
 
+struct swap_table_args {
+	int set;
+	int new_set;
+	int mv;
+};
+
 /*
- * Finds and bumps refcount for tables referenced by given @rule.
- * Allocates new indexes for non-existing tables.
- * Fills in @oib array with userland/kernel indexes.
- * First free oidx pointer is saved back in @oib.
+ * Change set for each matching table.
  *
- * Returns 0 on success.
+ * Ensure we dispatch each table once by setting/checking ochange
+ * fields.
  */
-static int
-bind_table_rule(struct ip_fw_chain *ch, struct ip_fw *rule,
-    struct rule_check_info *ci, struct obj_idx **oib, struct tid_info *ti)
+static void
+swap_table_set(struct namedobj_instance *ni, struct named_object *no,
+    void *arg)
 {
 	struct table_config *tc;
-	struct namedobj_instance *ni;
-	struct named_object *no;
-	int cmdlen, error, l, numnew;
-	uint16_t kidx;
-	ipfw_insn *cmd;
-	struct obj_idx *pidx, *pidx_first, *p;
+	struct swap_table_args *sta;
 
-	pidx_first = *oib;
-	pidx = pidx_first;
-	l = rule->cmd_len;
-	cmd = rule->cmd;
-	cmdlen = 0;
-	error = 0;
-	numnew = 0;
+	tc = (struct table_config *)no;
+	sta = (struct swap_table_args *)arg;
 
-	IPFW_UH_WLOCK(ch);
-	ni = CHAIN_TO_NI(ch);
+	if (no->set != sta->set && (no->set != sta->new_set || sta->mv != 0))
+		return;
 
-	/*
-	 * Increase refcount on each referenced table.
-	 * Allocate table indexes for non-existing tables.
-	 */
-	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
-		cmdlen = F_LEN(cmd);
+	if (tc->ochanged != 0)
+		return;
 
-		if (classify_table_opcode(cmd, &ti->uidx, &ti->type) != 0)
-			continue;
+	tc->ochanged = 1;
+	ipfw_objhash_del(ni, no);
+	if (no->set == sta->set)
+		no->set = sta->new_set;
+	else
+		no->set = sta->set;
+	ipfw_objhash_add(ni, no);
+}
 
-		pidx->uidx = ti->uidx;
-		pidx->type = ti->type;
+/*
+ * Cleans up ochange field for all tables.
+ */
+static void
+clean_table_set_data(struct namedobj_instance *ni, struct named_object *no,
+    void *arg)
+{
+	struct table_config *tc;
+	struct swap_table_args *sta;
 
-		if ((tc = find_table(ni, ti)) != NULL) {
-			if (tc->no.type != ti->type) {
-				/* Incompatible types */
-				error = EINVAL;
-				break;
-			}
+	tc = (struct table_config *)no;
+	sta = (struct swap_table_args *)arg;
 
-			/* Reference found table and save kidx */
-			tc->no.refcnt++;
-			pidx->kidx = tc->no.kidx;
-			pidx++;
-			continue;
-		}
+	tc->ochanged = 0;
+}
 
-		/*
-		 * Compability stuff for old clients:
-		 * prepare to manually create non-existing tables.
-		 */
-		pidx++;
-		numnew++;
-	}
-
-	if (error != 0) {
-		/* Unref everything we have already done */
-		for (p = *oib; p < pidx; p++) {
-			if (p->kidx == 0)
-				continue;
-
-			/* Find & unref by existing idx */
-			no = ipfw_objhash_lookup_kidx(ni, p->kidx);
-			KASSERT(no != NULL, ("Ref'd table %d disappeared",
-			    p->kidx));
-
-			no->refcnt--;
-		}
-	}
-
-	IPFW_UH_WUNLOCK(ch);
-
-	if (numnew == 0) {
-		*oib = pidx;
-		return (error);
-	}
-
-	/*
-	 * Compatibility stuff: do actual creation for non-existing,
-	 * but referenced tables.
-	 */
-	for (p = pidx_first; p < pidx; p++) {
-		if (p->kidx != 0)
-			continue;
-
-		ti->uidx = p->uidx;
-		ti->type = p->type;
-		ti->atype = 0;
-
-		error = create_table_compat(ch, ti, NULL, NULL, &kidx);
-		if (error == 0) {
-			p->kidx = kidx;
-			continue;
-		}
-
-		/* Error. We have to drop references */
-		IPFW_UH_WLOCK(ch);
-		for (p = pidx_first; p < pidx; p++) {
-			if (p->kidx == 0)
-				continue;
-
-			/* Find & unref by existing idx */
-			no = ipfw_objhash_lookup_kidx(ni, p->kidx);
-			KASSERT(no != NULL, ("Ref'd table %d disappeared",
-			    p->kidx));
-
-			no->refcnt--;
-		}
-		IPFW_UH_WUNLOCK(ch);
-
-		return (error);
-	}
-
-	*oib = pidx;
-
-	return (error);
-}
-
-struct swap_table_args {
-	int set;
-	int new_set;
-	int mv;
-};
-
-/*
- * Change set for each matching table.
- *
- * Ensure we dispatch each table once by setting/checking ochange
- * fields.
- */
-static void
-swap_table_set(struct namedobj_instance *ni, struct named_object *no,
-    void *arg)
-{
-	struct table_config *tc;
-	struct swap_table_args *sta;
-
-	tc = (struct table_config *)no;
-	sta = (struct swap_table_args *)arg;
-
-	if (no->set != sta->set && (no->set != sta->new_set || sta->mv != 0))
-		return;
-
-	if (tc->ochanged != 0)
-		return;
-
-	tc->ochanged = 1;
-	ipfw_objhash_del(ni, no);
-	if (no->set == sta->set)
-		no->set = sta->new_set;
-	else
-		no->set = sta->set;
-	ipfw_objhash_add(ni, no);
-}
-
-/*
- * Cleans up ochange field for all tables.
- */
-static void
-clean_table_set_data(struct namedobj_instance *ni, struct named_object *no,
-    void *arg)
-{
-	struct table_config *tc;
-	struct swap_table_args *sta;
-
-	tc = (struct table_config *)no;
-	sta = (struct swap_table_args *)arg;
-
-	tc->ochanged = 0;
-}
-
-/*
- * Swaps tables within two sets.
- */
-void
-ipfw_swap_tables_sets(struct ip_fw_chain *ch, uint32_t set,
-    uint32_t new_set, int mv)
-{
-	struct swap_table_args sta;
+/*
+ * Swaps tables within two sets.
+ */
+void
+ipfw_swap_tables_sets(struct ip_fw_chain *ch, uint32_t set,
+    uint32_t new_set, int mv)
+{
+	struct swap_table_args sta;
 
 	IPFW_UH_WLOCK_ASSERT(ch);
 
@@ -3026,6 +2938,172 @@ ipfw_move_tables_sets(struct ip_fw_chain
 }
 
 /*
+ * Finds and bumps refcount for tables referenced by given @rule.
+ * Allocates new indexes for non-existing tables.
+ * Fills in @oib array with userland/kernel indexes.
+ * First free oidx pointer is saved back in @oib.
+ *
+ * Returns 0 on success.
+ */
+static int
+bind_table_rule(struct ip_fw_chain *ch, struct ip_fw *rule,
+    struct rule_check_info *ci, struct obj_idx **oib, struct tid_info *ti)
+{
+	struct table_config *tc;
+	struct namedobj_instance *ni;
+	struct named_object *no;
+	int cmdlen, error, l, numnew;
+	uint16_t kidx;
+	ipfw_insn *cmd;
+	struct obj_idx *pidx, *pidx_first, *p;
+
+	pidx_first = *oib;
+	pidx = pidx_first;
+	l = rule->cmd_len;
+	cmd = rule->cmd;
+	cmdlen = 0;
+	error = 0;
+	numnew = 0;
+
+	IPFW_UH_WLOCK(ch);
+	ni = CHAIN_TO_NI(ch);
+
+	/*
+	 * Increase refcount on each referenced table.
+	 * Allocate table indexes for non-existing tables.
+	 */
+	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
+		cmdlen = F_LEN(cmd);
+
+		if (classify_table_opcode(cmd, &ti->uidx, &ti->type) != 0)
+			continue;
+
+		pidx->uidx = ti->uidx;
+		pidx->type = ti->type;
+
+		if ((tc = find_table(ni, ti)) != NULL) {
+			if (tc->no.type != ti->type) {
+				/* Incompatible types */
+				error = EINVAL;
+				break;
+			}
+
+			/* Reference found table and save kidx */
+			tc->no.refcnt++;
+			pidx->kidx = tc->no.kidx;
+			pidx++;
+			continue;
+		}
+
+		/*
+		 * Compability stuff for old clients:
+		 * prepare to manually create non-existing tables.
+		 */
+		pidx++;
+		numnew++;
+	}
+
+	if (error != 0) {
+		/* Unref everything we have already done */
+		for (p = *oib; p < pidx; p++) {
+			if (p->kidx == 0)
+				continue;
+
+			/* Find & unref by existing idx */
+			no = ipfw_objhash_lookup_kidx(ni, p->kidx);
+			KASSERT(no != NULL, ("Ref'd table %d disappeared",
+			    p->kidx));
+
+			no->refcnt--;
+		}
+	}
+
+	IPFW_UH_WUNLOCK(ch);
+
+	if (numnew == 0) {
+		*oib = pidx;
+		return (error);
+	}
+
+	/*
+	 * Compatibility stuff: do actual creation for non-existing,
+	 * but referenced tables.
+	 */
+	for (p = pidx_first; p < pidx; p++) {
+		if (p->kidx != 0)
+			continue;
+
+		ti->uidx = p->uidx;
+		ti->type = p->type;
+		ti->atype = 0;
+
+		error = create_table_compat(ch, ti, NULL, NULL, &kidx);
+		if (error == 0) {
+			p->kidx = kidx;
+			continue;
+		}
+
+		/* Error. We have to drop references */
+		IPFW_UH_WLOCK(ch);
+		for (p = pidx_first; p < pidx; p++) {
+			if (p->kidx == 0)
+				continue;
+
+			/* Find & unref by existing idx */
+			no = ipfw_objhash_lookup_kidx(ni, p->kidx);
+			KASSERT(no != NULL, ("Ref'd table %d disappeared",
+			    p->kidx));
+
+			no->refcnt--;
+		}
+		IPFW_UH_WUNLOCK(ch);
+
+		return (error);
+	}
+
+	*oib = pidx;
+
+	return (error);
+}
+
+/*
+ * Remove references from every table used in @rule.
+ */
+void
+ipfw_unbind_table_rule(struct ip_fw_chain *chain, struct ip_fw *rule)
+{
+	int cmdlen, l;
+	ipfw_insn *cmd;
+	struct namedobj_instance *ni;
+	struct named_object *no;
+	uint16_t kidx;
+	uint8_t type;
+
+	IPFW_UH_WLOCK_ASSERT(chain);
+	ni = CHAIN_TO_NI(chain);
+
+	l = rule->cmd_len;
+	cmd = rule->cmd;
+	cmdlen = 0;
+	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
+		cmdlen = F_LEN(cmd);
+
+		if (classify_table_opcode(cmd, &kidx, &type) != 0)
+			continue;
+
+		no = ipfw_objhash_lookup_kidx(ni, kidx); 
+
+		KASSERT(no != NULL, ("table id %d not found", kidx));
+		KASSERT(no->type == type, ("wrong type %d (%d) for table id %d",
+		    no->type, type, kidx));
+		KASSERT(no->refcnt > 0, ("refcount for table %d is %d",
+		    kidx, no->refcnt));
+
+		no->refcnt--;
+	}
+}
+
+/*
  * Compatibility function for old ipfw(8) binaries.
  * Rewrites table kernel indices with userland ones.
  * Convert tables matching '/^\d+$/' to their atoi() value.
@@ -3077,40 +3155,6 @@ ipfw_rewrite_table_kidx(struct ip_fw_cha
 }
 
 /*
- * Marks every table kidx used in @rule with bit in @bmask.
- * Used to generate bitmask of referenced tables for given ruleset.
- * 
- * Returns number of newly-referenced tables.
- */
-int
-ipfw_mark_table_kidx(struct ip_fw_chain *chain, struct ip_fw *rule,
-    uint32_t *bmask)
-{
-	int cmdlen, l, count;
-	ipfw_insn *cmd;
-	uint16_t kidx;
-	uint8_t type;
-
-	l = rule->cmd_len;
-	cmd = rule->cmd;
-	cmdlen = 0;
-	count = 0;
-	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
-		cmdlen = F_LEN(cmd);
-
-		if (classify_table_opcode(cmd, &kidx, &type) != 0)
-			continue;
-
-		if ((bmask[kidx / 32] & (1 << (kidx % 32))) == 0)
-			count++;
-
-		bmask[kidx / 32] |= 1 << (kidx % 32);
-	}
-
-	return (count);
-}
-
-/*
  * Checks is opcode is referencing table of appropriate type.
  * Adds reference count for found table if true.
  * Rewrites user-supplied opcode values with kernel ones.
@@ -3186,40 +3230,4 @@ free:
 	return (error);
 }
 
-/*
- * Remove references from every table used in @rule.
- */
-void
-ipfw_unbind_table_rule(struct ip_fw_chain *chain, struct ip_fw *rule)
-{
-	int cmdlen, l;
-	ipfw_insn *cmd;
-	struct namedobj_instance *ni;
-	struct named_object *no;
-	uint16_t kidx;
-	uint8_t type;
-
-	IPFW_UH_WLOCK_ASSERT(chain);
-	ni = CHAIN_TO_NI(chain);
-
-	l = rule->cmd_len;
-	cmd = rule->cmd;
-	cmdlen = 0;
-	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
-		cmdlen = F_LEN(cmd);
-
-		if (classify_table_opcode(cmd, &kidx, &type) != 0)
-			continue;
-
-		no = ipfw_objhash_lookup_kidx(ni, kidx); 
-
-		KASSERT(no != NULL, ("table id %d not found", kidx));
-		KASSERT(no->type == type, ("wrong type %d (%d) for table id %d",
-		    no->type, type, kidx));
-		KASSERT(no->refcnt > 0, ("refcount for table %d is %d",
-		    kidx, no->refcnt));
-
-		no->refcnt--;
-	}
-}
 

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 14:09:16 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 EDB0DE3B
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 14:09:16 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id DBB872527
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 14:09:16 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 64ff
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 14:09:16 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 14:09:16 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269876 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea200c.64ff.24e31b86@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 14:09:17 -0000

Author: melifaro
Date: Tue Aug 12 14:09:15 2014
New Revision: 269876
URL: http://svnweb.freebsd.org/changeset/base/269876

Log:
  * Rename has_space to need_modify to be consistent with 0 as return values.
  * document all callbacks supported by algorithms code.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 13:28:46 2014	(r269875)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 14:09:15 2014	(r269876)
@@ -623,7 +623,7 @@ cleanup:
  * need for reallocation.
  *
  * Callbacks order:
- * 0) has_space() (UH_WLOCK) - checks if @count items can be added w/o resize.
+ * 0) need_modify() (UH_WLOCK) - checks if @count items can be added w/o resize.
  *
  * 1) alloc_modify (no locks, M_WAITOK) - alloc new state based on @pflags.
  * 2) prepare_modifyt (UH_WLOCK) - copy old data into new storage
@@ -655,15 +655,15 @@ check_table_space(struct ip_fw_chain *ch
 	 */
 	while (true) {
 		pflags = 0;
-		if (ta->has_space(tc->astate, ti, count, &pflags) != 0) {
+		if (ta->need_modify(tc->astate, ti, count, &pflags) == 0) {
 			error = 0;
 			break;
 		}
 
 		/* We have to shrink/grow table */
 		IPFW_UH_WUNLOCK(ch);
+
 		memset(&ta_buf, 0, sizeof(ta_buf));
-		
 		if ((error = ta->prepare_mod(ta_buf, &pflags)) != 0) {
 			IPFW_UH_WLOCK(ch);
 			break;
@@ -673,7 +673,8 @@ check_table_space(struct ip_fw_chain *ch
 
 		/* Check if we still need to alter table */
 		ti = KIDX_TO_TI(ch, tc->no.kidx);
-		if (ta->has_space(tc->astate, ti, count, &pflags) != 0) {
+		if (ta->need_modify(tc->astate, ti, count, &pflags) == 0) {
+			IPFW_UH_WUNLOCK(ch);
 
 			/*
 			 * Other thread has already performed resize.
@@ -3230,4 +3231,3 @@ free:
 	return (error);
 }
 
-

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Tue Aug 12 13:28:46 2014	(r269875)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Tue Aug 12 14:09:15 2014	(r269876)
@@ -83,12 +83,12 @@ typedef int (ta_del)(void *ta_state, str
 typedef void (ta_flush_entry)(struct ip_fw_chain *ch, struct tentry_info *tei,
     void *ta_buf);
 
-typedef int (ta_has_space)(void *ta_state, struct table_info *ti,
+typedef int (ta_need_modify)(void *ta_state, struct table_info *ti,
     uint32_t count, uint64_t *pflags);
 typedef int (ta_prepare_mod)(void *ta_buf, uint64_t *pflags);
 typedef int (ta_fill_mod)(void *ta_state, struct table_info *ti,
     void *ta_buf, uint64_t *pflags);
-typedef int (ta_modify)(void *ta_state, struct table_info *ti,
+typedef void (ta_modify)(void *ta_state, struct table_info *ti,
     void *ta_buf, uint64_t pflags);
 typedef void (ta_flush_mod)(void *ta_buf);
 
@@ -121,7 +121,7 @@ struct table_algo {
 	ta_del		*del;
 	ta_flush_entry	*flush_entry;
 	ta_find_tentry	*find_tentry;
-	ta_has_space	*has_space;
+	ta_need_modify	*need_modify;
 	ta_prepare_mod	*prepare_mod;
 	ta_fill_mod	*fill_mod;
 	ta_modify	*modify;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Tue Aug 12 13:28:46 2014	(r269875)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Tue Aug 12 14:09:15 2014	(r269876)
@@ -56,6 +56,221 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
 #include <netpfil/ipfw/ip_fw_private.h>
 #include <netpfil/ipfw/ip_fw_table.h>
 
+
+/*
+ * IPFW table lookup algorithms.
+ *
+ * What is needed to add another table algo?
+ *
+ * Algo init:
+ * * struct table_algo has to be filled with:
+ *   name: "type:algoname" format, e.g. "cidr:radix". Currently
+ *     there are the following types: "cidr", "iface", "number" and "flow".
+ *   type: one of IPFW_TABLE_* types
+ *   flags: one or more TA_FLAGS_*
+ *   ta_buf_size: size of structure used to store add/del item state.
+ *     Needs to be less than TA_BUF_SZ.
+ *   callbacks: see below for description.
+ * * ipfw_add_table_algo / ipfw_del_table_algo has to be called
+ *
+ * Callbacks description:
+ *
+ * -init: request to initialize new table instance.
+ * typedef int (ta_init)(struct ip_fw_chain *ch, void **ta_state,
+ *     struct table_info *ti, char *data, uint8_t tflags);
+ * MANDATORY, unlocked. (M_WAITOK). Returns 0 on success.
+ *
+ *  Allocate all structures needed for normal operations.
+ *  * Caller may want to parse @data for some algo-specific
+ *    options provided by userland.
+ *  * Caller may want to save configuration state pointer to @ta_state
+ *  * Caller needs to save desired runtime structure pointer(s)
+ *    inside @ti fields. Note that it is not correct to save
+ *    @ti pointer at this moment. Use -change_ti hook for that.
+ *  * Caller has to fill in ti->lookup to appropriate function
+ *    pointer.
+ *
+ *
+ *
+ * -destroy: request to destroy table instance.
+ * typedef void (ta_destroy)(void *ta_state, struct table_info *ti);
+ * MANDATORY, may be locked (UH+WLOCK). (M_NOWAIT).
+ *
+ * Frees all table entries and all tables structures allocated by -init.
+ *
+ *
+ *
+ * -prepare_add: request to allocate state for adding new entry.
+ * typedef int (ta_prepare_add)(struct ip_fw_chain *ch, struct tentry_info *tei,
+ *     void *ta_buf);
+ * MANDATORY, unlocked. (M_WAITOK). Returns 0 on success.
+ *
+ * Buffer ta_buf of size ta->ta_buf_sz may be used to store
+ * allocated state.
+ *
+ *
+ *
+ * -prepare_del: request to set state for deleting existing entry.
+ * typedef int (ta_prepare_del)(struct ip_fw_chain *ch, struct tentry_info *tei,
+ *     void *ta_buf);
+ * MANDATORY, locked, UH. (M_NOWAIT). Returns 0 on success.
+ *
+ * Buffer ta_buf of size ta->ta_buf_sz may be used to store
+ * allocated state. Caller should use on-stack ta_buf allocation
+ * instead of doing malloc().
+ *
+ *
+ *
+ * -add: request to insert new entry into runtime/config structures.
+ *  typedef int (ta_add)(void *ta_state, struct table_info *ti,
+ *     struct tentry_info *tei, void *ta_buf, uint32_t *pnum);
+ * MANDATORY, UH+WLOCK. (M_NOWAIT). Returns 0 on success.
+ *
+ * Insert new entry using previously-allocated state in @ta_buf.
+ * * @tei may have the following flags:
+ *   TEI_FLAGS_UPDATE: request to add or update entry.
+ *   TEI_FLAGS_DONTADD: request to update (but not add) entry.
+ * * Caller is required to do the following:
+ *   entry added: return 0, set 1 to @pnum
+ *   entry updated: return 0, store 0 to @pnum, store old value in @tei,
+ *     add TEI_FLAGS_UPDATED flag to @tei.
+ *   entry exists: return EEXIST
+ *   entry not found: return ENOENT
+ *   other error: return non-zero error code.
+ *
+ *
+ *
+ * -del: request to delete existing entry from runtime/config structures.
+ *  typedef int (ta_del)(void *ta_state, struct table_info *ti,
+ *     struct tentry_info *tei, void *ta_buf, uint32_t *pnum);
+ *  MANDATORY, UH+WLOCK. (M_NOWAIT). Returns 0 on success.
+ *
+ *  Delete entry using previously set up in @ta_buf.
+ * * Caller is required to do the following:
+ *   entry deleted: return 0, set 1 to @pnum
+ *   entry not found: return ENOENT
+ *   other error: return non-zero error code.
+ *
+ *
+ *
+ * -flush_entry: flush entry state created by -prepare_add / -del / others
+ *  typedef void (ta_flush_entry)(struct ip_fw_chain *ch,
+ *      struct tentry_info *tei, void *ta_buf);
+ *  MANDATORY, may be locked. (M_NOWAIT).
+ *
+ *  Delete state allocated by:
+ *  -prepare_add (-add returned EEXIST|UPDATED)
+ *  -prepare_del (if any)
+ *  -del
+ *  * Caller is required to handle empty @ta_buf correctly.
+ *
+ *
+ * -find_tentry: finds entry specified by key @tei
+ *  typedef int ta_find_tentry(void *ta_state, struct table_info *ti,
+ *      ipfw_obj_tentry *tent);
+ *  OPTIONAL, locked (UH). (M_NOWAIT). Returns 0 on success.
+ *
+ *  Finds entry specified by given key.
+ *  * Caller is requred to do the following:
+ *    entry found: returns 0, export entry to @tent
+ *    entry not found: returns ENOENT
+ *
+ *
+ * -need_modify: checks if @ti has enough space to hold another @count items.
+ *  typedef int (ta_need_modify)(void *ta_state, struct table_info *ti,
+ *      uint32_t count, uint64_t *pflags);
+ *  MANDATORY, locked (UH). (M_NOWAIT). Returns 0 if has.
+ *
+ *  Checks if given table has enough space to add @count items without
+ *  resize. Caller may use @pflags to store desired modification data.
+ *
+ *
+ *
+ * -prepare_mod: allocate structures for table modification.
+ *  typedef int (ta_prepare_mod)(void *ta_buf, uint64_t *pflags);
+ * MANDATORY, unlocked. (M_WAITOK). Returns 0 on success.
+ *
+ * Allocate all needed state for table modification. Caller
+ * should use `struct mod_item` to store new state in @ta_buf.
+ * Up to TA_BUF_SZ (128 bytes) can be stored in @ta_buf.
+ * 
+ *
+ *
+ * -fill_mod: copy some data to new state/
+ *  typedef int (ta_fill_mod)(void *ta_state, struct table_info *ti,
+ *      void *ta_buf, uint64_t *pflags);
+ * MANDATORY, locked (UH). (M_NOWAIT). Returns 0 on success.
+ *
+ * Copy as much data as we can to minimize changes under WLOCK.
+ * For example, array can be merged inside this callback.
+ *
+ *
+ *
+ * -modify: perform final modification.
+ *  typedef void (ta_modify)(void *ta_state, struct table_info *ti,
+ *      void *ta_buf, uint64_t pflags);
+ * MANDATORY, locked (UH+WLOCK). (M_NOWAIT). 
+ *
+ * Performs all changes necessary to switch to new structures.
+ * * Caller should save old pointers to @ta_buf storage.
+ *
+ *
+ *
+ * -flush_mod: flush table modification state.
+ *  typedef void (ta_flush_mod)(void *ta_buf);
+ * MANDATORY, unlocked. (M_WAITOK).
+ *
+ * Performs flush for the following:
+ *   - prepare_mod (modification was not necessary)
+ *   - modify (for the old state)
+ *
+ *
+ *
+ * -change_gi: monitor table info pointer changes
+ * typedef void (ta_change_ti)(void *ta_state, struct table_info *ti);
+ * OPTIONAL, locked (UH). (M_NOWAIT).
+ *
+ * Called on @ti pointer changed. Called immediately after -init
+ * to set initial state.
+ *
+ *
+ *
+ * -foreach: calls @f for each table entry
+ *  typedef void ta_foreach(void *ta_state, struct table_info *ti,
+ *      ta_foreach_f *f, void *arg);
+ * MANDATORY, locked(UH). (M_NOWAIT).
+ *
+ * Runs callback with specified argument for each table entry,
+ * Typically used for dumping table entries.
+ *
+ *
+ *
+ * -dump_tentry: dump table entry in current @tentry format.
+ *  typedef int ta_dump_tentry(void *ta_state, struct table_info *ti, void *e,
+ *      ipfw_obj_tentry *tent);
+ * MANDATORY, locked(UH). (M_NOWAIT). Returns 0 on success.
+ *
+ * Dumps entry @e to @tent.
+ *
+ *
+ * -print_config: prints custom algoritm options into buffer.
+ *  typedef void (ta_print_config)(void *ta_state, struct table_info *ti,
+ *      char *buf, size_t bufsize);
+ * OPTIONAL. locked(UH). (M_NOWAIT).
+ *
+ * Prints custom algorithm options in the format suitable to pass
+ * back to -init callback.
+ *
+ *
+ *
+ * -dump_tinfo: dumps algo-specific info.
+ *  typedef void ta_dump_tinfo(void *ta_state, struct table_info *ti,
+ *      ipfw_ta_tinfo *tinfo);
+ * OPTIONAL. locked(UH). (M_NOWAIT).
+ *
+ * Dumps options like items size/hash size, etc.
+ */
+
 static MALLOC_DEFINE(M_IPFW_TBL, "ipfw_tbl", "IpFw tables");
 
 /*
@@ -587,7 +802,7 @@ ta_flush_radix_entry(struct ip_fw_chain 
 }
 
 static int
-ta_has_space_radix(void *ta_state, struct table_info *ti, uint32_t count,
+ta_need_modify_radix(void *ta_state, struct table_info *ti, uint32_t count,
     uint64_t *pflags)
 {
 
@@ -597,7 +812,7 @@ ta_has_space_radix(void *ta_state, struc
 	 * but we don't have any API to call (and we don't known which
 	 * sizes do we need).
 	 */
-	return (1);
+	return (0);
 }
 
 struct table_algo cidr_radix = {
@@ -616,7 +831,7 @@ struct table_algo cidr_radix = {
 	.dump_tentry	= ta_dump_radix_tentry,
 	.find_tentry	= ta_find_radix_tentry,
 	.dump_tinfo	= ta_dump_radix_tinfo,
-	.has_space	= ta_has_space_radix,
+	.need_modify	= ta_need_modify_radix,
 };
 
 
@@ -1357,7 +1572,7 @@ ta_flush_chash_entry(struct ip_fw_chain 
  */
 
 static int
-ta_has_space_chash(void *ta_state, struct table_info *ti, uint32_t count,
+ta_need_modify_chash(void *ta_state, struct table_info *ti, uint32_t count,
     uint64_t *pflags)
 {
 	struct chash_cfg *cfg;
@@ -1379,10 +1594,10 @@ ta_has_space_chash(void *ta_state, struc
 
 	if (data != 0) {
 		*pflags = data;
-		return (0);
+		return (1);
 	}
 
-	return (1);
+	return (0);
 }
 
 /*
@@ -1434,7 +1649,7 @@ ta_fill_mod_chash(void *ta_state, struct
 /*
  * Switch old & new arrays.
  */
-static int
+static void
 ta_modify_chash(void *ta_state, struct table_info *ti, void *ta_buf,
     uint64_t pflags)
 {
@@ -1495,8 +1710,6 @@ ta_modify_chash(void *ta_state, struct t
 	/* Update lower 32 bits with new values */
 	ti->data &= 0xFFFFFFFF00000000;
 	ti->data |= log2(cfg->size4) << 8 | log2(cfg->size6);
-
-	return (0);
 }
 
 /*
@@ -1530,7 +1743,7 @@ struct table_algo cidr_hash = {
 	.find_tentry	= ta_find_chash_tentry,
 	.print_config	= ta_print_chash_config,
 	.dump_tinfo	= ta_dump_chash_tinfo,
-	.has_space	= ta_has_space_chash,
+	.need_modify	= ta_need_modify_chash,
 	.prepare_mod	= ta_prepare_mod_chash,
 	.fill_mod	= ta_fill_mod_chash,
 	.modify		= ta_modify_chash,
@@ -2033,7 +2246,7 @@ if_notifier(struct ip_fw_chain *ch, void
  */
 
 static int
-ta_has_space_ifidx(void *ta_state, struct table_info *ti, uint32_t count,
+ta_need_modify_ifidx(void *ta_state, struct table_info *ti, uint32_t count,
     uint64_t *pflags)
 {
 	struct iftable_cfg *cfg;
@@ -2047,10 +2260,10 @@ ta_has_space_ifidx(void *ta_state, struc
 
 	if (size != cfg->size) {
 		*pflags = size;
-		return (0);
+		return (1);
 	}
 
-	return (1);
+	return (0);
 }
 
 /*
@@ -2098,7 +2311,7 @@ ta_fill_mod_ifidx(void *ta_state, struct
 /*
  * Switch old & new arrays.
  */
-static int
+static void
 ta_modify_ifidx(void *ta_state, struct table_info *ti, void *ta_buf,
     uint64_t pflags)
 {
@@ -2115,8 +2328,6 @@ ta_modify_ifidx(void *ta_state, struct t
 	ti->state = icfg->main_ptr;
 
 	mi->main_ptr = old_ptr;
-
-	return (0);
 }
 
 /*
@@ -2220,7 +2431,7 @@ struct table_algo iface_idx = {
 	.dump_tentry	= ta_dump_ifidx_tentry,
 	.find_tentry	= ta_find_ifidx_tentry,
 	.dump_tinfo	= ta_dump_ifidx_tinfo,
-	.has_space	= ta_has_space_ifidx,
+	.need_modify	= ta_need_modify_ifidx,
 	.prepare_mod	= ta_prepare_mod_ifidx,
 	.fill_mod	= ta_fill_mod_ifidx,
 	.modify		= ta_modify_ifidx,
@@ -2460,7 +2671,7 @@ ta_flush_numarray_entry(struct ip_fw_cha
  */
 
 static int
-ta_has_space_numarray(void *ta_state, struct table_info *ti, uint32_t count,
+ta_need_modify_numarray(void *ta_state, struct table_info *ti, uint32_t count,
     uint64_t *pflags)
 {
 	struct numarray_cfg *cfg;
@@ -2474,10 +2685,10 @@ ta_has_space_numarray(void *ta_state, st
 
 	if (size != cfg->size) {
 		*pflags = size;
-		return (0);
+		return (1);
 	}
 
-	return (1);
+	return (0);
 }
 
 /*
@@ -2525,7 +2736,7 @@ ta_fill_mod_numarray(void *ta_state, str
 /*
  * Switch old & new arrays.
  */
-static int
+static void
 ta_modify_numarray(void *ta_state, struct table_info *ti, void *ta_buf,
     uint64_t pflags)
 {
@@ -2542,8 +2753,6 @@ ta_modify_numarray(void *ta_state, struc
 	ti->state = cfg->main_ptr;
 
 	mi->main_ptr = old_ptr;
-
-	return (0);
 }
 
 /*
@@ -2622,7 +2831,7 @@ struct table_algo number_array = {
 	.dump_tentry	= ta_dump_numarray_tentry,
 	.find_tentry	= ta_find_numarray_tentry,
 	.dump_tinfo	= ta_dump_numarray_tinfo,
-	.has_space	= ta_has_space_numarray,
+	.need_modify	= ta_need_modify_numarray,
 	.prepare_mod	= ta_prepare_mod_numarray,
 	.fill_mod	= ta_fill_mod_numarray,
 	.modify		= ta_modify_numarray,
@@ -3186,7 +3395,7 @@ ta_flush_fhash_entry(struct ip_fw_chain 
  */
 
 static int
-ta_has_space_fhash(void *ta_state, struct table_info *ti, uint32_t count,
+ta_need_modify_fhash(void *ta_state, struct table_info *ti, uint32_t count,
     uint64_t *pflags)
 {
 	struct fhash_cfg *cfg;
@@ -3195,10 +3404,10 @@ ta_has_space_fhash(void *ta_state, struc
 
 	if (cfg->items > cfg->size && cfg->size < 65536) {
 		*pflags = cfg->size * 2;
-		return (0);
+		return (1);
 	}
 
-	return (1);
+	return (0);
 }
 
 /*
@@ -3240,7 +3449,7 @@ ta_fill_mod_fhash(void *ta_state, struct
 /*
  * Switch old & new arrays.
  */
-static int
+static void
 ta_modify_fhash(void *ta_state, struct table_info *ti, void *ta_buf,
     uint64_t pflags)
 {
@@ -3255,13 +3464,9 @@ ta_modify_fhash(void *ta_state, struct t
 	mi = (struct mod_item *)ta_buf;
 	cfg = (struct fhash_cfg *)ta_state;
 
-	/* Check which hash we need to grow and do we still need that */
 	old_size = cfg->size;
 	old_head = ti->state;
 
-	if (old_size >= mi->size)
-		return (0);
-
 	new_head = (struct fhashbhead *)mi->main_ptr;
 	for (i = 0; i < old_size; i++) {
 		SLIST_FOREACH_SAFE(ent, &old_head[i], next, ent_next) {
@@ -3276,8 +3481,6 @@ ta_modify_fhash(void *ta_state, struct t
 	cfg->size = mi->size;
 
 	mi->main_ptr = old_head;
-
-	return (0);
 }
 
 /*
@@ -3309,7 +3512,7 @@ struct table_algo flow_hash = {
 	.dump_tentry	= ta_dump_fhash_tentry,
 	.find_tentry	= ta_find_fhash_tentry,
 	.dump_tinfo	= ta_dump_fhash_tinfo,
-	.has_space	= ta_has_space_fhash,
+	.need_modify	= ta_need_modify_fhash,
 	.prepare_mod	= ta_prepare_mod_fhash,
 	.fill_mod	= ta_fill_mod_fhash,
 	.modify		= ta_modify_fhash,

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 14:19:45 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 F324A3A7
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 14:19:45 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C89902648
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 14:19:45 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6881
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 14:19:45 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 14:19:45 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269877 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea2281.6881.336678d0@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 14:19:46 -0000

Author: melifaro
Date: Tue Aug 12 14:19:45 2014
New Revision: 269877
URL: http://svnweb.freebsd.org/changeset/base/269877

Log:
  Do not use index 0 for tables.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 14:09:15 2014	(r269876)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 14:19:45 2014	(r269877)
@@ -2917,7 +2917,7 @@ ipfw_objhash_bitmap_alloc(uint32_t items
 {
 	size_t size;
 	int max_blocks;
-	void *idx_mask;
+	u_long *idx_mask;
 
 	items = roundup2(items, BLOCK_ITEMS);	/* Align to block size */
 	max_blocks = items / BLOCK_ITEMS;
@@ -2925,6 +2925,7 @@ ipfw_objhash_bitmap_alloc(uint32_t items
 	idx_mask = malloc(size * IPFW_MAX_SETS, M_IPFW, M_WAITOK);
 	/* Mark all as free */
 	memset(idx_mask, 0xFF, size * IPFW_MAX_SETS);
+	*idx_mask &= ~(u_long)1; /* Skip index 0 */
 
 	*idx = idx_mask;
 	*pblocks = max_blocks;

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 15:51:50 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D8F925B4
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 15:51:50 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C71A122A8
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 15:51:50 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6a8f
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 15:51:49 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 15:51:49 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269880 - in projects/ipfw: sbin/ipfw sys/netinet
 sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea3815.6a8f.771861e@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 15:51:50 -0000

Author: melifaro
Date: Tue Aug 12 15:51:48 2014
New Revision: 269880
URL: http://svnweb.freebsd.org/changeset/base/269880

Log:
  Change tablearg value to be 0 (try #2).
  Most of the tablearg-supported opcodes does not accept 0 as valid value:
   O_TAG, O_TAGGED, O_PIPE, O_QUEUE, O_DIVERT, O_TEE, O_SKIPTO, O_CALLRET,
   O_NETGRAPH, O_NGTEE, O_NAT treats 0 as invalid input.
  
  The rest are O_SETDSCP and O_SETFIB.
  'Fix' them by adding high-order bit (0x8000) set for non-tablearg values.
  Do translation in kernel for old clients (import_rule0 / export_rule0),
  teach current ipfw(8) binary to add/remove given bit.
  
  This change does not affect handling SETDSCP values, but limit
  O_SETFIB values to 32767 instead of 65k. Since currently we have either
  old (16) or new (2^32) max fibs, this should not be a big deal:
  we're definitely OK for former and have to add another opcode to deal
  with latter, regardless of tablearg value.

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.c
  projects/ipfw/sbin/ipfw/ipfw2.h
  projects/ipfw/sys/netinet/ip_fw.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_dynamic.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.c	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sbin/ipfw/ipfw2.c	Tue Aug 12 15:51:48 2014	(r269880)
@@ -93,7 +93,7 @@ int ipfw_socket = -1;
 	if (!av[0])							\
 		errx(EX_USAGE, "%s: missing argument", match_value(s_x, tok)); \
 	if (_substrcmp(*av, "tablearg") == 0) {				\
-		arg = IP_FW_TABLEARG;					\
+		arg = IP_FW_TARG;					\
 		break;							\
 	}								\
 									\
@@ -111,7 +111,7 @@ int ipfw_socket = -1;
 		errx(EX_DATAERR, "%s: argument is out of range (%u..%u): %s", \
 		    match_value(s_x, tok), min, max, *av);		\
 									\
-	if (_xval == IP_FW_TABLEARG)					\
+	if (_xval == IP_FW_TARG)					\
 		errx(EX_DATAERR, "%s: illegal argument value: %s",	\
 		    match_value(s_x, tok), *av);			\
 	arg = _xval;							\
@@ -123,7 +123,7 @@ PRINT_UINT_ARG(const char *str, uint32_t
 {
 	if (str != NULL)
 		printf("%s",str);
-	if (arg == IP_FW_TABLEARG)
+	if (arg == IP_FW_TARG)
 		printf("tablearg");
 	else
 		printf("%u", arg);
@@ -469,7 +469,7 @@ bprint_uint_arg(struct buf_pr *bp, const
 
 	if (str != NULL)
 		bprintf(bp, "%s", str);
-	if (arg == IP_FW_TABLEARG)
+	if (arg == IP_FW_TARG)
 		bprintf(bp, "tablearg");
 	else
 		bprintf(bp, "%u", arg);
@@ -1386,6 +1386,7 @@ show_static_rule(struct cmdline_opts *co
 	ipfw_insn_log *logptr = NULL; /* set if we find an O_LOG */
 	ipfw_insn_altq *altqptr = NULL; /* set if we find an O_ALTQ */
 	int or_block = 0;	/* we are in an or block */
+	uint32_t uval;
 
 	if ((fo->set_mask & (1 << rule->set)) == 0) {
 		/* disabled mask */
@@ -1556,17 +1557,22 @@ show_static_rule(struct cmdline_opts *co
 			break;
 
 		case O_SETFIB:
-			bprint_uint_arg(bp, "setfib ", cmd->arg1);
+			bprint_uint_arg(bp, "setfib ", cmd->arg1 & 0x7FFF);
  			break;
 
 		case O_SETDSCP:
 		    {
 			const char *code;
 
-			if ((code = match_value(f_ipdscp, cmd->arg1)) != NULL)
+			if (cmd->arg1 == IP_FW_TARG) {
+				bprint_uint_arg(bp, "setdscp ", cmd->arg1);
+				break;
+			}
+			uval = cmd->arg1 & 0x3F;
+			if ((code = match_value(f_ipdscp, uval)) != NULL)
 				bprintf(bp, "setdscp %s", code);
 			else
-				bprint_uint_arg(bp, "setdscp ", cmd->arg1);
+				bprint_uint_arg(bp, "setdscp ", uval);
 		    }
  			break;
 
@@ -3597,11 +3603,11 @@ chkarg:
 			errx(EX_USAGE, "missing argument for %s", *(av - 1));
 		if (isdigit(**av)) {
 			action->arg1 = strtoul(*av, NULL, 10);
-			if (action->arg1 <= 0 || action->arg1 >= IP_FW_TABLEARG)
+			if (action->arg1 <= 0 || action->arg1 >= IP_FW_TARG)
 				errx(EX_DATAERR, "illegal argument for %s",
 				    *(av - 1));
 		} else if (_substrcmp(*av, "tablearg") == 0) {
-			action->arg1 = IP_FW_TABLEARG;
+			action->arg1 = IP_FW_TARG;
 		} else if (i == TOK_DIVERT || i == TOK_TEE) {
 			struct servent *s;
 			setservent(1);
@@ -3725,7 +3731,7 @@ chkarg:
 		action->opcode = O_SETFIB;
 		NEED1("missing fib number");
 		if (_substrcmp(*av, "tablearg") == 0) {
-			action->arg1 = IP_FW_TABLEARG;
+			action->arg1 = IP_FW_TARG;
 		} else {
 		        action->arg1 = strtoul(*av, NULL, 10);
 			if (sysctlbyname("net.fibs", &numfibs, &intsize,
@@ -3733,6 +3739,8 @@ chkarg:
 				errx(EX_DATAERR, "fibs not suported.\n");
 			if (action->arg1 >= numfibs)  /* Temporary */
 				errx(EX_DATAERR, "fib too large.\n");
+			/* Add high-order bit to fib to make room for tablearg*/
+			action->arg1 |= 0x8000;
 		}
 		av++;
 		break;
@@ -3745,13 +3753,16 @@ chkarg:
 		action->opcode = O_SETDSCP;
 		NEED1("missing DSCP code");
 		if (_substrcmp(*av, "tablearg") == 0) {
-			action->arg1 = IP_FW_TABLEARG;
+			action->arg1 = IP_FW_TARG;
 		} else if (isalpha(*av[0])) {
 			if ((code = match_token(f_ipdscp, *av)) == -1)
 				errx(EX_DATAERR, "Unknown DSCP code");
 			action->arg1 = code;
 		} else
 		        action->arg1 = strtoul(*av, NULL, 10);
+		/* Add high-order bit to DSCP to make room for tablearg */
+		if (action->arg1 != IP_FW_TARG)
+			action->arg1 |= 0x8000;
 		av++;
 		break;
 	    }

Modified: projects/ipfw/sbin/ipfw/ipfw2.h
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.h	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sbin/ipfw/ipfw2.h	Tue Aug 12 15:51:48 2014	(r269880)
@@ -228,6 +228,7 @@ enum tokens {
 	TOK_LOCK,
 	TOK_UNLOCK,
 };
+
 /*
  * the following macro returns an error message if we run out of
  * arguments.

Modified: projects/ipfw/sys/netinet/ip_fw.h
==============================================================================
--- projects/ipfw/sys/netinet/ip_fw.h	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sys/netinet/ip_fw.h	Tue Aug 12 15:51:48 2014	(r269880)
@@ -47,18 +47,17 @@
 
 /*
  * Most commands (queue, pipe, tag, untag, limit...) can have a 16-bit
- * argument between 1 and 65534. The value 0 is unused, the value
- * 65535 (IP_FW_TABLEARG) is used to represent 'tablearg', i.e. the
- * can be 1..65534, or 65535 to indicate the use of a 'tablearg'
+ * argument between 1 and 65534. The value 0 (IP_FW_TARG) is used
+ * to represent 'tablearg' value, e.g.  indicate the use of a 'tablearg'
  * result of the most recent table() lookup.
  * Note that 16bit is only a historical limit, resulting from
  * the use of a 16-bit fields for that value. In reality, we can have
- * 2^32 pipes, queues, tag values and so on, and use 0 as a tablearg.
- * Note there are some opcodes where value 0 is perfectly valid (fib, dscp).
+ * 2^32 pipes, queues, tag values and so on.
  */
 #define	IPFW_ARG_MIN		1
 #define	IPFW_ARG_MAX		65534
-#define IP_FW_TABLEARG		65535
+#define IP_FW_TABLEARG		65535	/* Compat value for old clients */
+#define	IP_FW_TARG		0	/* Current tablearg value */
 
 /*
  * Number of entries in the call stack of the call/return commands.

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw2.c	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw2.c	Tue Aug 12 15:51:48 2014	(r269880)
@@ -810,7 +810,7 @@ jump_fast(struct ip_fw_chain *chain, str
 	 * whose version is written in f->next_rule
 	 * (horrible hacks to avoid changing the ABI).
 	 */
-	if (num != IP_FW_TABLEARG && f->cached_id == chain->id)
+	if (num != IP_FW_TARG && f->cached_id == chain->id)
 		f_pos = f->cached_pos;
 	else {
 		int i = IP_FW_ARG_TABLEARG(num);
@@ -822,7 +822,7 @@ jump_fast(struct ip_fw_chain *chain, str
 		else
 			f_pos = ipfw_find_rule(chain, i, 0);
 		/* update the cache */
-		if (num != IP_FW_TABLEARG) {
+		if (num != IP_FW_TARG) {
 			f->cached_id = chain->id;
 			f->cached_pos = f_pos;
 		}
@@ -2400,7 +2400,7 @@ do {								\
 				uint32_t fib;
 
 				IPFW_INC_RULE_COUNTER(f, pktlen);
-				fib = IP_FW_ARG_TABLEARG(cmd->arg1);
+				fib = IP_FW_ARG_TABLEARG(cmd->arg1) & 0x7FFFF;
 				if (fib >= rt_numfibs)
 					fib = 0;
 				M_SETFIB(m, fib);
@@ -2461,7 +2461,7 @@ do {								\
 					    retval = IP_FW_DENY;
 					    break;
 					}
-					if (cmd->arg1 != IP_FW_TABLEARG)
+					if (cmd->arg1 != IP_FW_TARG)
 					    ((ipfw_insn_nat *)cmd)->nat = t;
 				}
 				retval = ipfw_nat_ptr(args, t, m);

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_dynamic.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_dynamic.c	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_dynamic.c	Tue Aug 12 15:51:48 2014	(r269880)
@@ -719,7 +719,7 @@ ipfw_install_state(struct ip_fw *rule, i
 		conn_limit = IP_FW_ARG_TABLEARG(cmd->conn_limit);
 		  
 		DEB(
-		if (cmd->conn_limit == IP_FW_TABLEARG)
+		if (cmd->conn_limit == IP_FW_TARG)
 			printf("ipfw: %s: O_LIMIT rule, conn_limit: %u "
 			    "(tablearg)\n", __func__, conn_limit);
 		else

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Tue Aug 12 15:51:48 2014	(r269880)
@@ -384,7 +384,7 @@ struct ipfw_ifc {
 #endif
 
 
-#define	IP_FW_ARG_TABLEARG(a)	(((a) == IP_FW_TABLEARG) ? tablearg : (a))
+#define	IP_FW_ARG_TABLEARG(a)	(((a) == IP_FW_TARG) ? tablearg : (a))
 /*
  * The lock is heavily used by ip_fw2.c (the main file) and ip_fw_nat.c
  * so the variable and the macros must be here.

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 15:51:48 2014	(r269880)
@@ -375,7 +375,7 @@ export_cntr0_base(struct ip_fw *krule, s
 }
 
 /*
- * Copies rule @urule from v1 userland format
+ * Copies rule @urule from v1 userland format (current).
  * to kernel @krule.
  * Assume @krule is zeroed.
  */
@@ -456,6 +456,7 @@ import_rule0(struct rule_check_info *ci)
 	struct ip_fw *krule;
 	int cmdlen, l;
 	ipfw_insn *cmd;
+	ipfw_insn_limit *lcmd;
 	ipfw_insn_if *cmdif;
 
 	urule = (struct ip_fw_rule0 *)ci->urule;
@@ -477,36 +478,69 @@ import_rule0(struct rule_check_info *ci)
 
 	/*
 	 * Alter opcodes:
-	 * 1) convert table number in iface opcodes to u16
+	 * 1) convert tablearg value from 65335 to 0
+	 * 2) Add high bit to O_SETFIB/O_SETDSCP values (to make room for targ).
+	 * 3) convert table number in iface opcodes to u16
 	 */
-	l = urule->cmd_len;
-	cmd = urule->cmd;
+	l = krule->cmd_len;
+	cmd = krule->cmd;
 	cmdlen = 0;
 
-	for ( ; l > 0 ; l -= cmdlen, cmd += cmdlen) {
-	        cmdlen = F_LEN(cmd);
+	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
+		cmdlen = F_LEN(cmd);
+
+		switch (cmd->opcode) {
+		/* Opcodes supporting tablearg */
+		case O_TAG:
+		case O_TAGGED:
+		case O_PIPE:
+		case O_QUEUE:
+		case O_DIVERT:
+		case O_TEE:
+		case O_SKIPTO:
+		case O_CALLRETURN:
+		case O_NETGRAPH:
+		case O_NGTEE:
+		case O_NAT:
+			if (cmd->arg1 == 65535)
+				cmd->arg1 = IP_FW_TARG;
+			break;
+		case O_SETFIB:
+		case O_SETDSCP:
+			if (cmd->arg1 == 65535)
+				cmd->arg1 = IP_FW_TARG;
+			else
+				cmd->arg1 |= 0x8000;
+			break;
+		case O_LIMIT:
+			lcmd = (ipfw_insn_limit *)cmd;
+			if (lcmd->conn_limit == 65535)
+				lcmd->conn_limit = IP_FW_TARG;
+			break;
+		/* Interface tables */
+		case O_XMIT:
+		case O_RECV:
+		case O_VIA:
+			/* Interface table, possibly */
+			cmdif = (ipfw_insn_if *)cmd;
+			if (cmdif->name[0] != '\1')
+				break;
 
-	        switch (cmd->opcode) {
-	        /* Interface tables */
-	        case O_XMIT:
-	        case O_RECV:
-	        case O_VIA:
-	                /* Interface table, possibly */
-	                cmdif = (ipfw_insn_if *)cmd;
-	                if (cmdif->name[0] != '\1')
-	                        break;
-
-	                cmdif->p.kidx = cmdif->p.glob;
-	                break;
-	        }
+			cmdif->p.kidx = (uint16_t)cmdif->p.glob;
+			break;
+		}
 	}
 }
 
+/*
+ * Copies rule @krule from kernel to FreeBSD8 userland format (v0)
+ */
 static void
 export_rule0(struct ip_fw *krule, struct ip_fw_rule0 *urule, int len)
 {
 	int cmdlen, l;
 	ipfw_insn *cmd;
+	ipfw_insn_limit *lcmd;
 	ipfw_insn_if *cmdif;
 
 	/* copy header */
@@ -526,28 +560,57 @@ export_rule0(struct ip_fw *krule, struct
 
 	/*
 	 * Alter opcodes:
-	 * 1) convert table number in iface opcodes to int
+	 * 1) convert tablearg value from 0 to 65335
+	 * 2) Remove highest bit from O_SETFIB/O_SETDSCP values.
+	 * 3) convert table number in iface opcodes to int
 	 */
 	l = urule->cmd_len;
 	cmd = urule->cmd;
 	cmdlen = 0;
 
-	for ( ; l > 0 ; l -= cmdlen, cmd += cmdlen) {
-	        cmdlen = F_LEN(cmd);
+	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
+		cmdlen = F_LEN(cmd);
 
-	        switch (cmd->opcode) {
-	        /* Interface tables */
-	        case O_XMIT:
-	        case O_RECV:
-	        case O_VIA:
-	                /* Interface table, possibly */
-	                cmdif = (ipfw_insn_if *)cmd;
-	                if (cmdif->name[0] != '\1')
-	                        break;
-
-	                cmdif->p.glob = cmdif->p.kidx;
-	                break;
-	        }
+		switch (cmd->opcode) {
+		/* Opcodes supporting tablearg */
+		case O_TAG:
+		case O_TAGGED:
+		case O_PIPE:
+		case O_QUEUE:
+		case O_DIVERT:
+		case O_TEE:
+		case O_SKIPTO:
+		case O_CALLRETURN:
+		case O_NETGRAPH:
+		case O_NGTEE:
+		case O_NAT:
+			if (cmd->arg1 == IP_FW_TARG)
+				cmd->arg1 = 65535;
+			break;
+		case O_SETFIB:
+		case O_SETDSCP:
+			if (cmd->arg1 == IP_FW_TARG)
+				cmd->arg1 = 65535;
+			else
+				cmd->arg1 &= ~0x8000;
+			break;
+		case O_LIMIT:
+			lcmd = (ipfw_insn_limit *)cmd;
+			if (lcmd->conn_limit == IP_FW_TARG)
+				lcmd->conn_limit = 65535;
+			break;
+		/* Interface tables */
+		case O_XMIT:
+		case O_RECV:
+		case O_VIA:
+			/* Interface table, possibly */
+			cmdif = (ipfw_insn_if *)cmd;
+			if (cmdif->name[0] != '\1')
+				break;
+
+			cmdif->p.glob = cmdif->p.kidx;
+			break;
+		}
 	}
 }
 
@@ -1391,10 +1454,10 @@ check_ipfw_rule_body(ipfw_insn *cmd, int
 		case O_SETFIB:
 			if (cmdlen != F_INSN_SIZE(ipfw_insn))
 				goto bad_size;
-			if ((cmd->arg1 != IP_FW_TABLEARG) &&
-			    (cmd->arg1 >= rt_numfibs)) {
+			if ((cmd->arg1 != IP_FW_TARG) &&
+			    ((cmd->arg1 & 0x7FFFF) >= rt_numfibs)) {
 				printf("ipfw: invalid fib number %d\n",
-					cmd->arg1);
+					cmd->arg1 & 0x7FFFF);
 				return EINVAL;
 			}
 			goto check_action;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 14:53:02 2014	(r269879)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 15:51:48 2014	(r269880)
@@ -2482,7 +2482,7 @@ classify_table_opcode(ipfw_insn *cmd, ui
 			break;
 
 		*ptype = IPFW_TABLE_INTERFACE;
-		*puidx = cmdif->p.glob;
+		*puidx = cmdif->p.kidx;
 		skip = 0;
 		break;
 	case O_IP_FLOW_LOOKUP:
@@ -2515,7 +2515,7 @@ update_table_opcode(ipfw_insn *cmd, uint
 	case O_VIA:
 		/* Interface table, possibly */
 		cmdif = (ipfw_insn_if *)cmd;
-		cmdif->p.glob = idx;
+		cmdif->p.kidx = idx;
 		break;
 	case O_IP_FLOW_LOOKUP:
 		cmd->arg1 = idx;

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 16:08:14 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 DA74BEE8
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 16:08:14 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C9904253E
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 16:08:14 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6e2b
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 16:08:14 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 16:08:14 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269881 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea3bee.6e2b.38e72c57@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 16:08:15 -0000

Author: melifaro
Date: Tue Aug 12 16:08:13 2014
New Revision: 269881
URL: http://svnweb.freebsd.org/changeset/base/269881

Log:
  * Rename ipfw_[un]bind_table_rule to ipfw_[un]ref_rule_tables
  * Update their descriptions.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 15:51:48 2014	(r269880)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 16:08:13 2014	(r269881)
@@ -658,7 +658,7 @@ commit_rules(struct ip_fw_chain *chain, 
 					ci--;
 					if (ci->table_opcodes == 0)
 						continue;
-					ipfw_unbind_table_rule(chain,ci->krule);
+					ipfw_unref_rule_tables(chain,ci->krule);
 
 				}
 				IPFW_UH_WUNLOCK(chain);

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 15:51:48 2014	(r269880)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 16:08:13 2014	(r269881)
@@ -2940,14 +2940,14 @@ ipfw_move_tables_sets(struct ip_fw_chain
 
 /*
  * Finds and bumps refcount for tables referenced by given @rule.
- * Allocates new indexes for non-existing tables.
+ * Auto-creates non-existing tables.
  * Fills in @oib array with userland/kernel indexes.
  * First free oidx pointer is saved back in @oib.
  *
  * Returns 0 on success.
  */
 static int
-bind_table_rule(struct ip_fw_chain *ch, struct ip_fw *rule,
+find_ref_rule_tables(struct ip_fw_chain *ch, struct ip_fw *rule,
     struct rule_check_info *ci, struct obj_idx **oib, struct tid_info *ti)
 {
 	struct table_config *tc;
@@ -2969,10 +2969,7 @@ bind_table_rule(struct ip_fw_chain *ch, 
 	IPFW_UH_WLOCK(ch);
 	ni = CHAIN_TO_NI(ch);
 
-	/*
-	 * Increase refcount on each referenced table.
-	 * Allocate table indexes for non-existing tables.
-	 */
+	/* Increase refcount on each existing referenced table. */
 	for ( ;	l > 0 ; l -= cmdlen, cmd += cmdlen) {
 		cmdlen = F_LEN(cmd);
 
@@ -3071,7 +3068,7 @@ bind_table_rule(struct ip_fw_chain *ch, 
  * Remove references from every table used in @rule.
  */
 void
-ipfw_unbind_table_rule(struct ip_fw_chain *chain, struct ip_fw *rule)
+ipfw_unref_rule_tables(struct ip_fw_chain *chain, struct ip_fw *rule)
 {
 	int cmdlen, l;
 	ipfw_insn *cmd;
@@ -3203,7 +3200,7 @@ ipfw_rewrite_table_uidx(struct ip_fw_cha
 	}
 
 	/* Reference all used tables */
-	error = bind_table_rule(chain, ci->krule, ci, &pidx_last, &ti);
+	error = find_ref_rule_tables(chain, ci->krule, ci, &pidx_last, &ti);
 	if (error != 0)
 		goto free;
 

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Tue Aug 12 15:51:48 2014	(r269880)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Tue Aug 12 16:08:13 2014	(r269881)
@@ -176,7 +176,7 @@ int ipfw_mark_table_kidx(struct ip_fw_ch
     uint32_t *bmask);
 int ipfw_export_table_ntlv(struct ip_fw_chain *ch, uint16_t kidx,
     struct sockopt_data *sd);
-void ipfw_unbind_table_rule(struct ip_fw_chain *chain, struct ip_fw *rule);
+void ipfw_unref_rule_tables(struct ip_fw_chain *chain, struct ip_fw *rule);
 
 /* utility functions  */
 int ipfw_check_table_name(char *name);

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 17:03:14 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 B7EE229A
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 17:03:14 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 985DA2B7F
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 17:03:14 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6450
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 17:03:14 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 17:03:14 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269883 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea48d2.6450.c4e1e09@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 17:03:14 -0000

Author: melifaro
Date: Tue Aug 12 17:03:13 2014
New Revision: 269883
URL: http://svnweb.freebsd.org/changeset/base/269883

Log:
  * Clarify ipfw_swap_table operations
  * Ensure <add|del>_table_entry handle ta change properly.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 16:51:37 2014	(r269882)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Tue Aug 12 17:03:13 2014	(r269883)
@@ -681,7 +681,7 @@ commit_rules(struct ip_fw_chain *chain, 
 				if (ci->table_opcodes == 0)
 					continue;
 
-				ipfw_unbind_table_rule(chain, ci->krule);
+				ipfw_unref_rule_tables(chain, ci->krule);
 			}
 			IPFW_UH_WUNLOCK(chain);
 		}
@@ -741,7 +741,7 @@ ipfw_reap_add(struct ip_fw_chain *chain,
 	IPFW_UH_WLOCK_ASSERT(chain);
 
 	/* Unlink rule from everywhere */
-	ipfw_unbind_table_rule(chain, rule);
+	ipfw_unref_rule_tables(chain, rule);
 
 	*((struct ip_fw **)rule) = *head;
 	*head = rule;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 16:51:37 2014	(r269882)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Tue Aug 12 17:03:13 2014	(r269883)
@@ -474,9 +474,14 @@ add_table_entry(struct ip_fw_chain *ch, 
 
 	IPFW_UH_WLOCK(ch);
 
+	/* Drop reference we've used in first search */
+	tc->no.refcnt--;
+
 	/*
 	 * Ensure we are able to add all entries without additional
 	 * memory allocations. May release/reacquire UH_WLOCK.
+	 * check_table_space() guarantees us @tc won't disappear
+	 * by referencing it internally.
 	 */
 	kidx = tc->no.kidx;
 	error = check_table_space(ch, tc, KIDX_TO_TI(ch, kidx), count);
@@ -485,8 +490,16 @@ add_table_entry(struct ip_fw_chain *ch, 
 		goto cleanup;
 	}
 
-	/* Drop reference we've used in first search */
-	tc->no.refcnt--;
+	/*
+	 * Check if table algo is still the same.
+	 * (changed ta may be the result of table swap).
+	 */
+	if (ta != tc->ta) {
+		IPFW_UH_WUNLOCK(ch);
+		error = EINVAL;
+		goto cleanup;
+	}
+
 	/* We've got valid table in @tc. Let's try to add data */
 	kidx = tc->no.kidx;
 	ta = tc->ta;
@@ -582,6 +595,16 @@ del_table_entry(struct ip_fw_chain *ch, 
 	/* Drop reference we've used in first search */
 	tc->no.refcnt--;
 
+	/*
+	 * Check if table algo is still the same.
+	 * (changed ta may be the result of table swap).
+	 */
+	if (ta != tc->ta) {
+		IPFW_UH_WUNLOCK(ch);
+		error = EINVAL;
+		goto cleanup;
+	}
+
 	kidx = tc->no.kidx;
 	numdel = 0;
 	first_error = 0;
@@ -1113,14 +1136,28 @@ ipfw_swap_table(struct ip_fw_chain *ch, 
  * Swaps two tables of the same type/valtype.
  *
  * Checks if tables are compatible and limits
- * permits swap, than actually perform swap
- * by switching
- * 1) runtime data (ch->tablestate)
- * 2) runtime cache in @tc
- * 3) algo-specific data (tc->astate)
- * 4) number of items
+ * permits swap, than actually perform swap.
  *
- * Since @ti has changed for each table, calls notification callbacks.
+ * Each table consists of 2 different parts:
+ * config:
+ *   @tc (with name, set, kidx) and rule bindings, which is "stable".
+ *   number of items
+ *   table algo
+ * runtime:
+ *   runtime data @ti (ch->tablestate)
+ *   runtime cache in @tc
+ *   algo-specific data (@tc->astate)
+ *
+ * So we switch:
+ *  all runtime data
+ *   number of items
+ *   table algo
+ *
+ * After that we call @ti change handler for each table.
+ *
+ * Note that referencing @tc won't protect tc->ta from change.
+ * XXX: Do we need to restrict swap between locked tables?
+ * XXX: Do we need to exchange ftype?
  *
  * Returns 0 on success.
  */
@@ -1440,24 +1477,36 @@ ipfw_switch_tables_namespace(struct ip_f
 	return (0);
 }
 
+/*
+ * Lookup an IP @addr in table @tbl.
+ * Stores found value in @val.
+ *
+ * Returns 1 if @addr was found.
+ */
 int
 ipfw_lookup_table(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
     uint32_t *val)
 {
 	struct table_info *ti;
 
-	ti = &(((struct table_info *)ch->tablestate)[tbl]);
+	ti = KIDX_TO_TI(ch, tbl);
 
 	return (ti->lookup(ti, &addr, sizeof(in_addr_t), val));
 }
 
+/*
+ * Lookup an arbtrary key @paddr of legth @plen in table @tbl.
+ * Stores found value in @val.
+ *
+ * Returns 1 if key was found.
+ */
 int
 ipfw_lookup_table_extended(struct ip_fw_chain *ch, uint16_t tbl, uint16_t plen,
     void *paddr, uint32_t *val)
 {
 	struct table_info *ti;
 
-	ti = &(((struct table_info *)ch->tablestate)[tbl]);
+	ti = KIDX_TO_TI(ch, tbl);
 
 	return (ti->lookup(ti, paddr, plen, val));
 }
@@ -1656,7 +1705,7 @@ create_table_internal(struct ip_fw_chain
     struct table_algo **pta, uint16_t *pkidx, int compat)
 {
 	struct namedobj_instance *ni;
-	struct table_config *tc, *tc_new, *tmp;;
+	struct table_config *tc, *tc_new, *tmp;
 	struct table_algo *ta;
 	uint16_t kidx;
 
@@ -2067,7 +2116,6 @@ ipfw_dump_table_v0(struct ip_fw_chain *c
 	return (0);
 }
 
-
 /*
  * Legacy IP_FW_TABLE_GETSIZE handler
  */
@@ -2339,6 +2387,8 @@ ipfw_add_table_algo(struct ip_fw_chain *
 
 /*
  * Unregisters table algo using @idx as id.
+ * XXX: It is NOT safe to call this function in any place
+ * other than ipfw instance destroy handler.
  */
 void
 ipfw_del_table_algo(struct ip_fw_chain *ch, int idx)
@@ -2413,10 +2463,8 @@ ipfw_list_table_algo(struct ip_fw_chain 
 	return (0);
 }
 
-
 /*
  * Tables rewriting code 
- *
  */
 
 /*

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 18:10:30 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 1834A549
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 18:10:30 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 8D00038D6
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 18:02:11 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6ba3
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 18:02:11 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 18:02:11 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269886 - projects/ipfw/sbin/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea56a3.6ba3.6c06551c@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 18:10:30 -0000

Author: melifaro
Date: Tue Aug 12 18:02:10 2014
New Revision: 269886
URL: http://svnweb.freebsd.org/changeset/base/269886

Log:
  * Update table_handler cmd list
  * Implement partial cmd matching inside table handler.

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.c
  projects/ipfw/sbin/ipfw/ipfw2.h
  projects/ipfw/sbin/ipfw/tables.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.c	Tue Aug 12 17:56:48 2014	(r269885)
+++ projects/ipfw/sbin/ipfw/ipfw2.c	Tue Aug 12 18:02:10 2014	(r269886)
@@ -681,6 +681,37 @@ match_token(struct _s_x *table, char *st
 }
 
 /**
+ * match_token takes a table and a string, returns the value associated
+ * with the string for the best match.
+ *
+ * Returns:
+ * value from @table for matched records
+ * -1 for non-matched records
+ * -2 if more than one records match @string.
+ */
+int
+match_token_relaxed(struct _s_x *table, char *string)
+{
+	struct _s_x *pt, *m;
+	int i, c;
+
+	i = strlen(string);
+	c = 0;
+
+	for (pt = table ; i != 0 && pt->s != NULL ; pt++) {
+		if (strncmp(pt->s, string, i) != 0)
+			continue;
+		m = pt;
+		c++;
+	}
+
+	if (c == 1)
+		return (m->x);
+
+	return (c > 0 ? -2: -1);
+}
+
+/**
  * match_value takes a table and a value, returns the string associated
  * with the value (NULL in case of failure).
  */

Modified: projects/ipfw/sbin/ipfw/ipfw2.h
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.h	Tue Aug 12 17:56:48 2014	(r269885)
+++ projects/ipfw/sbin/ipfw/ipfw2.h	Tue Aug 12 18:02:10 2014	(r269886)
@@ -261,6 +261,7 @@ int stringnum_cmp(const char *a, const c
 
 /* utility functions */
 int match_token(struct _s_x *table, char *string);
+int match_token_relaxed(struct _s_x *table, char *string);
 char const *match_value(struct _s_x *p, int value);
 size_t concat_tokens(char *buf, size_t bufsize, struct _s_x *table,
     char *delimiter);

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Tue Aug 12 17:56:48 2014	(r269885)
+++ projects/ipfw/sbin/ipfw/tables.c	Tue Aug 12 18:02:10 2014	(r269886)
@@ -30,21 +30,15 @@
 #include <err.h>
 #include <errno.h>
 #include <netdb.h>
-#include <stddef.h>	/* offsetof */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sysexits.h>
 
-#define IPFW_INTERNAL	/* Access to protected structures in ip_fw.h. */
-
 #include <net/if.h>
-#include <net/if_dl.h>
-#include <net/route.h> /* def. of struct route */
 #include <netinet/in.h>
 #include <netinet/ip_fw.h>
 #include <arpa/inet.h>
-#include <alias.h>
 
 #include "ipfw2.h"
 
@@ -134,15 +128,34 @@ lookup_host (char *host, struct in_addr 
 	return(0);
 }
 
+static int
+get_token(struct _s_x *table, char *string, char *errbase)
+{
+	int tcmd;
+
+	if ((tcmd = match_token_relaxed(table, string)) < 0)
+		errx(EX_USAGE, "%s %s %s",
+		    (tcmd == 0) ? "invalid" : "ambiguous", errbase, string);
+
+	return (tcmd);
+}
+
 /*
  * This one handles all table-related commands
  * 	ipfw table NAME create ...
+ * 	ipfw table NAME modify ...
  * 	ipfw table NAME destroy
- * 	ipfw table NAME add addr[/masklen] [value]
- * 	ipfw table NAME delete addr[/masklen]
+ * 	ipfw table NAME swap NAME
+ * 	ipfw table NAME lock
+ * 	ipfw table NAME unlock
+ * 	ipfw table NAME add addr[/masklen] [value] 
+ * 	ipfw table NAME add [addr[/masklen] value] [addr[/masklen] value] ..
+ * 	ipfw table NAME delete addr[/masklen] [addr[/masklen]] ..
+ * 	ipfw table NAME lookup addr
  * 	ipfw table {NAME | all} flush
  * 	ipfw table {NAME | all} list
  * 	ipfw table {NAME | all} info
+ * 	ipfw table {NAME | all} detail
  */
 void
 ipfw_table_handler(int ac, char *av[])
@@ -178,15 +191,13 @@ ipfw_table_handler(int ac, char *av[])
 	ac--; av++;
 	NEED1("table needs command");
 
-	if ((tcmd = match_token(tablecmds, *av)) == -1)
-		errx(EX_USAGE, "invalid table command %s", *av);
+	tcmd = get_token(tablecmds, *av, "table command");
 	/* Check if atomic operation was requested */
 	atomic = 0;
 	if (tcmd == TOK_ATOMIC) {
 		ac--; av++;
 		NEED1("atomic needs command");
-		if ((tcmd = match_token(tablecmds, *av)) == -1)
-			errx(EX_USAGE, "invalid table command %s", *av);
+		tcmd = get_token(tablecmds, *av, "table command");
 		switch (tcmd) {
 		case TOK_ADD:
 			break;
@@ -385,8 +396,7 @@ table_create(ipfw_obj_header *oh, int ac
 	xi.vtype = IPFW_VTYPE_U32;
 
 	while (ac > 0) {
-		if ((tcmd = match_token(tablenewcmds, *av)) == -1)
-			errx(EX_USAGE, "unknown option: %s", *av);
+		tcmd = get_token(tablenewcmds, *av, "option");
 		ac--; av++;
 
 		switch (tcmd) {
@@ -497,8 +507,7 @@ table_modify(ipfw_obj_header *oh, int ac
 	memset(&xi, 0, sizeof(xi));
 
 	while (ac > 0) {
-		if ((tcmd = match_token(tablenewcmds, *av)) == -1)
-			errx(EX_USAGE, "unknown option: %s", *av);
+		tcmd = get_token(tablenewcmds, *av, "option");
 		ac--; av++;
 
 		switch (tcmd) {

From owner-svn-src-projects@FreeBSD.ORG  Tue Aug 12 19:56:27 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 8C320CC6
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 19:56:27 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 786572829
 for <svn-src-projects@freebsd.org>; Tue, 12 Aug 2014 19:56:27 +0000 (UTC)
Received: from melifaro (uid 1268) (envelope-from melifaro@FreeBSD.org) id 6735
 by svn.freebsd.org (DragonFly Mail Agent v0.9+);
 Tue, 12 Aug 2014 19:56:27 +0000
From: Alexander V. Chernikov <melifaro@FreeBSD.org>
Date: Tue, 12 Aug 2014 19:56:27 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269889 - projects/ipfw/sbin/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Message-Id: <53ea716b.6735.535ac0d@svn.freebsd.org>
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Aug 2014 19:56:27 -0000

Author: melifaro
Date: Tue Aug 12 19:56:26 2014
New Revision: 269889
URL: http://svnweb.freebsd.org/changeset/base/269889

Log:
  Move one step further towards libipfw: convert show_static_rule() to
  bpprint-output style, so one can now output human-readable rule
  representation to preallocated buffer.

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.c
  projects/ipfw/sbin/ipfw/ipfw2.h
  projects/ipfw/sbin/ipfw/ipv6.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.c	Tue Aug 12 19:37:49 2014	(r269888)
+++ projects/ipfw/sbin/ipfw/ipfw2.c	Tue Aug 12 19:56:26 2014	(r269889)
@@ -118,17 +118,6 @@ int ipfw_socket = -1;
 	}								\
 } while (0)
 
-static void
-PRINT_UINT_ARG(const char *str, uint32_t arg)
-{
-	if (str != NULL)
-		printf("%s",str);
-	if (arg == IP_FW_TARG)
-		printf("tablearg");
-	else
-		printf("%u", arg);
-}
-
 static struct _s_x f_tcpflags[] = {
 	{ "syn", TH_SYN },
 	{ "fin", TH_FIN },
@@ -845,16 +834,16 @@ _substrcmp2(const char *str1, const char
  * prints one port, symbolic or numeric
  */
 static void
-print_port(int proto, uint16_t port)
+print_port(struct buf_pr *bp, int proto, uint16_t port)
 {
 
 	if (proto == IPPROTO_ETHERTYPE) {
 		char const *s;
 
 		if (co.do_resolv && (s = match_value(ether_types, port)) )
-			printf("%s", s);
+			bprintf(bp, "%s", s);
 		else
-			printf("0x%04x", port);
+			bprintf(bp, "0x%04x", port);
 	} else {
 		struct servent *se = NULL;
 		if (co.do_resolv) {
@@ -863,9 +852,9 @@ print_port(int proto, uint16_t port)
 			se = getservbyport(htons(port), pe ? pe->p_name : NULL);
 		}
 		if (se)
-			printf("%s", se->s_name);
+			bprintf(bp, "%s", se->s_name);
 		else
-			printf("%d", port);
+			bprintf(bp, "%d", port);
 	}
 }
 
@@ -887,7 +876,7 @@ static struct _s_x _port_name[] = {
  * XXX todo: add support for mask.
  */
 static void
-print_newports(ipfw_insn_u16 *cmd, int proto, int opcode)
+print_newports(struct buf_pr *bp, ipfw_insn_u16 *cmd, int proto, int opcode)
 {
 	uint16_t *p = cmd->ports;
 	int i;
@@ -897,15 +886,15 @@ print_newports(ipfw_insn_u16 *cmd, int p
 		sep = match_value(_port_name, opcode);
 		if (sep == NULL)
 			sep = "???";
-		printf (" %s", sep);
+		bprintf(bp, " %s", sep);
 	}
 	sep = " ";
 	for (i = F_LEN((ipfw_insn *)cmd) - 1; i > 0; i--, p += 2) {
-		printf("%s", sep);
-		print_port(proto, p[0]);
+		bprintf(bp, "%s", sep);
+		print_port(bp, proto, p[0]);
 		if (p[0] != p[1]) {
-			printf("-");
-			print_port(proto, p[1]);
+			bprintf(bp, "-");
+			print_port(bp, proto, p[1]);
 		}
 		sep = ",";
 	}
@@ -1145,7 +1134,8 @@ contigmask(uint8_t *p, int len)
  * There is a specialized check for f_tcpflags.
  */
 static void
-print_flags(char const *name, ipfw_insn *cmd, struct _s_x *list)
+print_flags(struct buf_pr *bp, char const *name, ipfw_insn *cmd,
+    struct _s_x *list)
 {
 	char const *comma = "";
 	int i;
@@ -1153,20 +1143,20 @@ print_flags(char const *name, ipfw_insn 
 	uint8_t clear = (cmd->arg1 >> 8) & 0xff;
 
 	if (list == f_tcpflags && set == TH_SYN && clear == TH_ACK) {
-		printf(" setup");
+		bprintf(bp, " setup");
 		return;
 	}
 
-	printf(" %s ", name);
+	bprintf(bp, " %s ", name);
 	for (i=0; list[i].x != 0; i++) {
 		if (set & list[i].x) {
 			set &= ~list[i].x;
-			printf("%s%s", comma, list[i].s);
+			bprintf(bp, "%s%s", comma, list[i].s);
 			comma = ",";
 		}
 		if (clear & list[i].x) {
 			clear &= ~list[i].x;
-			printf("%s!%s", comma, list[i].s);
+			bprintf(bp, "%s!%s", comma, list[i].s);
 			comma = ",";
 		}
 	}
@@ -1177,9 +1167,11 @@ print_flags(char const *name, ipfw_insn 
  * Print the ip address contained in a command.
  */
 static void
-print_ip(struct format_opts *fo, ipfw_insn_ip *cmd, char const *s)
+print_ip(struct buf_pr *bp, struct format_opts *fo, ipfw_insn_ip *cmd,
+    char const *s)
 {
 	struct hostent *he = NULL;
+	struct in_addr *ia;
 	uint32_t len = F_LEN((ipfw_insn *)cmd);
 	uint32_t *a = ((ipfw_insn_u32 *)cmd)->d;
 	char *t;
@@ -1191,23 +1183,23 @@ print_ip(struct format_opts *fo, ipfw_in
 		if (d < sizeof(lookup_key)/sizeof(lookup_key[0]))
 			arg = match_value(rule_options, lookup_key[d]);
 		t = table_search_ctlv(fo->tstate, ((ipfw_insn *)cmd)->arg1);
-		printf("%s lookup %s %s", cmd->o.len & F_NOT ? " not": "",
+		bprintf(bp, "%s lookup %s %s", cmd->o.len & F_NOT ? " not": "",
 			arg, t);
 		return;
 	}
-	printf("%s%s ", cmd->o.len & F_NOT ? " not": "", s);
+	bprintf(bp, "%s%s ", cmd->o.len & F_NOT ? " not": "", s);
 
 	if (cmd->o.opcode == O_IP_SRC_ME || cmd->o.opcode == O_IP_DST_ME) {
-		printf("me");
+		bprintf(bp, "me");
 		return;
 	}
 	if (cmd->o.opcode == O_IP_SRC_LOOKUP ||
 	    cmd->o.opcode == O_IP_DST_LOOKUP) {
 		t = table_search_ctlv(fo->tstate, ((ipfw_insn *)cmd)->arg1);
-		printf("table(%s", t);
+		bprintf(bp, "table(%s", t);
 		if (len == F_INSN_SIZE(ipfw_insn_u32))
-			printf(",%u", *a);
-		printf(")");
+			bprintf(bp, ",%u", *a);
+		bprintf(bp, ")");
 		return;
 	}
 	if (cmd->o.opcode == O_IP_SRC_SET || cmd->o.opcode == O_IP_DST_SET) {
@@ -1218,7 +1210,7 @@ print_ip(struct format_opts *fo, ipfw_in
 		x = cmd->o.arg1 - 1;
 		x = htonl( ~x );
 		cmd->addr.s_addr = htonl(cmd->addr.s_addr);
-		printf("%s/%d", inet_ntoa(cmd->addr),
+		bprintf(bp, "%s/%d", inet_ntoa(cmd->addr),
 			contigmask((uint8_t *)&x, 32));
 		x = cmd->addr.s_addr = htonl(cmd->addr.s_addr);
 		x &= 0xff; /* base */
@@ -1233,14 +1225,14 @@ print_ip(struct format_opts *fo, ipfw_in
 				for (j=i+1; j < cmd->o.arg1; j++)
 					if (!(map[ j/32] & (1<<(j & 31))))
 						break;
-				printf("%c%d", comma, i+x);
+				bprintf(bp, "%c%d", comma, i+x);
 				if (j>i+2) { /* range has at least 3 elements */
-					printf("-%d", j-1+x);
+					bprintf(bp, "-%d", j-1+x);
 					i = j-1;
 				}
 				comma = ',';
 			}
-		printf("}");
+		bprintf(bp, "}");
 		return;
 	}
 	/*
@@ -1255,18 +1247,19 @@ print_ip(struct format_opts *fo, ipfw_in
 	if (mb == 32 && co.do_resolv)
 		he = gethostbyaddr((char *)&(a[0]), sizeof(u_long), AF_INET);
 	if (he != NULL)		/* resolved to name */
-		printf("%s", he->h_name);
+		bprintf(bp, "%s", he->h_name);
 	else if (mb == 0)	/* any */
-		printf("any");
+		bprintf(bp, "any");
 	else {		/* numeric IP followed by some kind of mask */
-		printf("%s", inet_ntoa( *((struct in_addr *)&a[0]) ) );
+		ia = (struct in_addr *)&a[0];
+		bprintf(bp, "%s", inet_ntoa(*ia));
 		if (mb < 0)
-			printf(":%s", inet_ntoa( *((struct in_addr *)&a[1]) ) );
+			bprintf(bp, ":%s", inet_ntoa(*ia ) );
 		else if (mb < 32)
-			printf("/%d", mb);
+			bprintf(bp, "/%d", mb);
 	}
 	if (len > 1)
-		printf(",");
+		bprintf(bp, ",");
     }
 }
 
@@ -1274,21 +1267,21 @@ print_ip(struct format_opts *fo, ipfw_in
  * prints a MAC address/mask pair
  */
 static void
-print_mac(uint8_t *addr, uint8_t *mask)
+print_mac(struct buf_pr *bp, uint8_t *addr, uint8_t *mask)
 {
 	int l = contigmask(mask, 48);
 
 	if (l == 0)
-		printf(" any");
+		bprintf(bp, " any");
 	else {
-		printf(" %02x:%02x:%02x:%02x:%02x:%02x",
+		bprintf(bp, " %02x:%02x:%02x:%02x:%02x:%02x",
 		    addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
 		if (l == -1)
-			printf("&%02x:%02x:%02x:%02x:%02x:%02x",
+			bprintf(bp, "&%02x:%02x:%02x:%02x:%02x:%02x",
 			    mask[0], mask[1], mask[2],
 			    mask[3], mask[4], mask[5]);
 		else if (l < 48)
-			printf("/%d", l);
+			bprintf(bp, "/%d", l);
 	}
 }
 
@@ -1317,38 +1310,38 @@ fill_icmptypes(ipfw_insn_u32 *cmd, char 
 }
 
 static void
-print_icmptypes(ipfw_insn_u32 *cmd)
+print_icmptypes(struct buf_pr *bp, ipfw_insn_u32 *cmd)
 {
 	int i;
 	char sep= ' ';
 
-	printf(" icmptypes");
+	bprintf(bp, " icmptypes");
 	for (i = 0; i < 32; i++) {
 		if ( (cmd->d[0] & (1 << (i))) == 0)
 			continue;
-		printf("%c%d", sep, i);
+		bprintf(bp, "%c%d", sep, i);
 		sep = ',';
 	}
 }
 
 static void
-print_dscp(ipfw_insn_u32 *cmd)
+print_dscp(struct buf_pr *bp, ipfw_insn_u32 *cmd)
 {
 	int i, c;
 	uint32_t *v;
 	char sep= ' ';
 	const char *code;
 
-	printf(" dscp");
+	bprintf(bp, " dscp");
 	i = 0;
 	c = 0;
 	v = cmd->d;
 	while (i < 64) {
 		if (*v & (1 << i)) {
 			if ((code = match_value(f_ipdscp, i)) != NULL)
-				printf("%c%s", sep, code);
+				bprintf(bp, "%c%s", sep, code);
 			else
-				printf("%c%d", sep, i);
+				bprintf(bp, "%c%d", sep, i);
 			sep = ',';
 		}
 
@@ -1379,7 +1372,7 @@ print_dscp(ipfw_insn_u32 *cmd)
 #define	HAVE_OPTIONS	0x8000
 
 static void
-show_prerequisites(int *flags, int want, int cmd)
+show_prerequisites(struct buf_pr *bp, int *flags, int want, int cmd)
 {
 	(void)cmd;	/* UNUSED */
 	if (co.comment_only)
@@ -1390,16 +1383,16 @@ show_prerequisites(int *flags, int want,
 	if ( !(*flags & HAVE_OPTIONS)) {
 		if ( !(*flags & HAVE_PROTO) && (want & HAVE_PROTO)) {
 			if ( (*flags & HAVE_PROTO4))
-				printf(" ip4");
+				bprintf(bp, " ip4");
 			else if ( (*flags & HAVE_PROTO6))
-				printf(" ip6");
+				bprintf(bp, " ip6");
 			else
-				printf(" ip");
+				bprintf(bp, " ip");
 		}
 		if ( !(*flags & HAVE_SRCIP) && (want & HAVE_SRCIP))
-			printf(" from any");
+			bprintf(bp, " from any");
 		if ( !(*flags & HAVE_DSTIP) && (want & HAVE_DSTIP))
-			printf(" to any");
+			bprintf(bp, " to any");
 	}
 	*flags |= want;
 }
@@ -1642,12 +1635,6 @@ show_static_rule(struct cmdline_opts *co
 	}
 
 	/*
-	 * TODO: convert remainings to use @bp buffer
-	 *
-	 */
-	printf("%s", bp->buf);
-
-	/*
 	 * then print the body.
 	 */
 	for (l = rule->act_ofs, cmd = rule->cmd;
@@ -1664,8 +1651,8 @@ show_static_rule(struct cmdline_opts *co
 	}
 	if (rule->flags & IPFW_RULE_NOOPT) {	/* empty rules before options */
 		if (!co->do_compact) {
-			show_prerequisites(&flags, HAVE_PROTO, 0);
-			printf(" from any to any");
+			show_prerequisites(bp, &flags, HAVE_PROTO, 0);
+			bprintf(bp, " from any to any");
 		}
 		flags |= HAVE_IP | HAVE_OPTIONS | HAVE_PROTO |
 			 HAVE_SRCIP | HAVE_DSTIP;
@@ -1682,11 +1669,11 @@ show_static_rule(struct cmdline_opts *co
 		if (co->comment_only) {
 			if (cmd->opcode != O_NOP)
 				continue;
-			printf(" // %s\n", (char *)(cmd + 1));
+			bprintf(bp, " // %s\n", (char *)(cmd + 1));
 			return;
 		}
 
-		show_prerequisites(&flags, 0, cmd->opcode);
+		show_prerequisites(bp, &flags, 0, cmd->opcode);
 
 		switch(cmd->opcode) {
 		case O_PROB:
@@ -1700,12 +1687,12 @@ show_static_rule(struct cmdline_opts *co
 		case O_IP_SRC_MASK:
 		case O_IP_SRC_ME:
 		case O_IP_SRC_SET:
-			show_prerequisites(&flags, HAVE_PROTO, 0);
+			show_prerequisites(bp, &flags, HAVE_PROTO, 0);
 			if (!(flags & HAVE_SRCIP))
-				printf(" from");
+				bprintf(bp, " from");
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
-			print_ip(fo, (ipfw_insn_ip *)cmd,
+				bprintf(bp, " {");
+			print_ip(bp, fo, (ipfw_insn_ip *)cmd,
 				(flags & HAVE_OPTIONS) ? " src-ip" : "");
 			flags |= HAVE_SRCIP;
 			break;
@@ -1715,12 +1702,12 @@ show_static_rule(struct cmdline_opts *co
 		case O_IP_DST_MASK:
 		case O_IP_DST_ME:
 		case O_IP_DST_SET:
-			show_prerequisites(&flags, HAVE_PROTO|HAVE_SRCIP, 0);
+			show_prerequisites(bp, &flags, HAVE_PROTO|HAVE_SRCIP, 0);
 			if (!(flags & HAVE_DSTIP))
-				printf(" to");
+				bprintf(bp, " to");
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
-			print_ip(fo, (ipfw_insn_ip *)cmd,
+				bprintf(bp, " {");
+			print_ip(bp, fo, (ipfw_insn_ip *)cmd,
 				(flags & HAVE_OPTIONS) ? " dst-ip" : "");
 			flags |= HAVE_DSTIP;
 			break;
@@ -1728,12 +1715,12 @@ show_static_rule(struct cmdline_opts *co
 		case O_IP6_SRC:
 		case O_IP6_SRC_MASK:
 		case O_IP6_SRC_ME:
-			show_prerequisites(&flags, HAVE_PROTO, 0);
+			show_prerequisites(bp, &flags, HAVE_PROTO, 0);
 			if (!(flags & HAVE_SRCIP))
-				printf(" from");
+				bprintf(bp, " from");
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
-			print_ip6((ipfw_insn_ip6 *)cmd,
+				bprintf(bp, " {");
+			print_ip6(bp, (ipfw_insn_ip6 *)cmd,
 			    (flags & HAVE_OPTIONS) ? " src-ip6" : "");
 			flags |= HAVE_SRCIP | HAVE_PROTO;
 			break;
@@ -1741,35 +1728,35 @@ show_static_rule(struct cmdline_opts *co
 		case O_IP6_DST:
 		case O_IP6_DST_MASK:
 		case O_IP6_DST_ME:
-			show_prerequisites(&flags, HAVE_PROTO|HAVE_SRCIP, 0);
+			show_prerequisites(bp, &flags, HAVE_PROTO|HAVE_SRCIP, 0);
 			if (!(flags & HAVE_DSTIP))
-				printf(" to");
+				bprintf(bp, " to");
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
-			print_ip6((ipfw_insn_ip6 *)cmd,
+				bprintf(bp, " {");
+			print_ip6(bp, (ipfw_insn_ip6 *)cmd,
 			    (flags & HAVE_OPTIONS) ? " dst-ip6" : "");
 			flags |= HAVE_DSTIP;
 			break;
 
 		case O_FLOW6ID:
-		print_flow6id( (ipfw_insn_u32 *) cmd );
-		flags |= HAVE_OPTIONS;
-		break;
+			print_flow6id(bp, (ipfw_insn_u32 *) cmd );
+			flags |= HAVE_OPTIONS;
+			break;
 
 		case O_IP_DSTPORT:
-			show_prerequisites(&flags,
+			show_prerequisites(bp, &flags,
 				HAVE_PROTO | HAVE_SRCIP |
 				HAVE_DSTIP | HAVE_IP, 0);
 		case O_IP_SRCPORT:
 			if (flags & HAVE_DSTIP)
 				flags |= HAVE_IP;
-			show_prerequisites(&flags,
+			show_prerequisites(bp, &flags,
 				HAVE_PROTO | HAVE_SRCIP, 0);
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
+				bprintf(bp, " {");
 			if (cmd->len & F_NOT)
-				printf(" not");
-			print_newports((ipfw_insn_u16 *)cmd, proto,
+				bprintf(bp, " not");
+			print_newports(bp, (ipfw_insn_u16 *)cmd, proto,
 				(flags & HAVE_OPTIONS) ? cmd->opcode : 0);
 			break;
 
@@ -1777,22 +1764,22 @@ show_static_rule(struct cmdline_opts *co
 			struct protoent *pe = NULL;
 
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
+				bprintf(bp, " {");
 			if (cmd->len & F_NOT)
-				printf(" not");
+				bprintf(bp, " not");
 			proto = cmd->arg1;
 			pe = getprotobynumber(cmd->arg1);
 			if ((flags & (HAVE_PROTO4 | HAVE_PROTO6)) &&
 			    !(flags & HAVE_PROTO))
-				show_prerequisites(&flags,
+				show_prerequisites(bp, &flags,
 				    HAVE_PROTO | HAVE_IP | HAVE_SRCIP |
 				    HAVE_DSTIP | HAVE_OPTIONS, 0);
 			if (flags & HAVE_OPTIONS)
-				printf(" proto");
+				bprintf(bp, " proto");
 			if (pe)
-				printf(" %s", pe->p_name);
+				bprintf(bp, " %s", pe->p_name);
 			else
-				printf(" %u", cmd->arg1);
+				bprintf(bp, " %u", cmd->arg1);
 			}
 			flags |= HAVE_PROTO;
 			break;
@@ -1804,62 +1791,62 @@ show_static_rule(struct cmdline_opts *co
 				    ((cmd->opcode == O_IP4) &&
 				    (flags & HAVE_PROTO4)))
 					break;
-			show_prerequisites(&flags, HAVE_PROTO | HAVE_SRCIP |
+			show_prerequisites(bp, &flags, HAVE_PROTO | HAVE_SRCIP |
 				    HAVE_DSTIP | HAVE_IP | HAVE_OPTIONS, 0);
 			if ((cmd->len & F_OR) && !or_block)
-				printf(" {");
+				bprintf(bp, " {");
 			if (cmd->len & F_NOT && cmd->opcode != O_IN)
-				printf(" not");
+				bprintf(bp, " not");
 			switch(cmd->opcode) {
 			case O_MACADDR2: {
 				ipfw_insn_mac *m = (ipfw_insn_mac *)cmd;
 
-				printf(" MAC");
-				print_mac(m->addr, m->mask);
-				print_mac(m->addr + 6, m->mask + 6);
+				bprintf(bp, " MAC");
+				print_mac(bp, m->addr, m->mask);
+				print_mac(bp, m->addr + 6, m->mask + 6);
 				}
 				break;
 
 			case O_MAC_TYPE:
-				print_newports((ipfw_insn_u16 *)cmd,
+				print_newports(bp, (ipfw_insn_u16 *)cmd,
 						IPPROTO_ETHERTYPE, cmd->opcode);
 				break;
 
 
 			case O_FRAG:
-				printf(" frag");
+				bprintf(bp, " frag");
 				break;
 
 			case O_FIB:
-				printf(" fib %u", cmd->arg1 );
+				bprintf(bp, " fib %u", cmd->arg1 );
 				break;
 			case O_SOCKARG:
-				printf(" sockarg");
+				bprintf(bp, " sockarg");
 				break;
 
 			case O_IN:
-				printf(cmd->len & F_NOT ? " out" : " in");
+				bprintf(bp, cmd->len & F_NOT ? " out" : " in");
 				break;
 
 			case O_DIVERTED:
 				switch (cmd->arg1) {
 				case 3:
-					printf(" diverted");
+					bprintf(bp, " diverted");
 					break;
 				case 1:
-					printf(" diverted-loopback");
+					bprintf(bp, " diverted-loopback");
 					break;
 				case 2:
-					printf(" diverted-output");
+					bprintf(bp, " diverted-output");
 					break;
 				default:
-					printf(" diverted-?<%u>", cmd->arg1);
+					bprintf(bp, " diverted-?<%u>", cmd->arg1);
 					break;
 				}
 				break;
 
 			case O_LAYER2:
-				printf(" layer2");
+				bprintf(bp, " layer2");
 				break;
 			case O_XMIT:
 			case O_RECV:
@@ -1875,15 +1862,15 @@ show_static_rule(struct cmdline_opts *co
 				else /* if (cmd->opcode == O_VIA) */
 					s = "via";
 				if (cmdif->name[0] == '\0')
-					printf(" %s %s", s,
+					bprintf(bp, " %s %s", s,
 					    inet_ntoa(cmdif->p.ip));
 				else if (cmdif->name[0] == '\1') {
 					/* interface table */
 					t = table_search_ctlv(fo->tstate,
 					    cmdif->p.kidx);
-					printf(" %s table(%s)", s, t);
+					bprintf(bp, " %s table(%s)", s, t);
 				} else
-					printf(" %s %s", s, cmdif->name);
+					bprintf(bp, " %s %s", s, cmdif->name);
 
 				break;
 			    }
@@ -1892,95 +1879,95 @@ show_static_rule(struct cmdline_opts *co
 				char *t;
 
 				t = table_search_ctlv(fo->tstate, cmd->arg1);
-				printf(" flow table(%s", t);
+				bprintf(bp, " flow table(%s", t);
 				if (F_LEN(cmd) == F_INSN_SIZE(ipfw_insn_u32))
-					printf(",%u",
+					bprintf(bp, ",%u",
 					    ((ipfw_insn_u32 *)cmd)->d[0]);
-				printf(")");
+				bprintf(bp, ")");
 				break;
 			    }
 			case O_IPID:
 				if (F_LEN(cmd) == 1)
-				    printf(" ipid %u", cmd->arg1 );
+				    bprintf(bp, " ipid %u", cmd->arg1 );
 				else
-				    print_newports((ipfw_insn_u16 *)cmd, 0,
+				    print_newports(bp, (ipfw_insn_u16 *)cmd, 0,
 					O_IPID);
 				break;
 
 			case O_IPTTL:
 				if (F_LEN(cmd) == 1)
-				    printf(" ipttl %u", cmd->arg1 );
+				    bprintf(bp, " ipttl %u", cmd->arg1 );
 				else
-				    print_newports((ipfw_insn_u16 *)cmd, 0,
+				    print_newports(bp, (ipfw_insn_u16 *)cmd, 0,
 					O_IPTTL);
 				break;
 
 			case O_IPVER:
-				printf(" ipver %u", cmd->arg1 );
+				bprintf(bp, " ipver %u", cmd->arg1 );
 				break;
 
 			case O_IPPRECEDENCE:
-				printf(" ipprecedence %u", (cmd->arg1) >> 5 );
+				bprintf(bp, " ipprecedence %u", cmd->arg1 >> 5);
 				break;
 
 			case O_DSCP:
-				print_dscp((ipfw_insn_u32 *)cmd);
+				print_dscp(bp, (ipfw_insn_u32 *)cmd);
 	 			break;
 
 			case O_IPLEN:
 				if (F_LEN(cmd) == 1)
-				    printf(" iplen %u", cmd->arg1 );
+				    bprintf(bp, " iplen %u", cmd->arg1 );
 				else
-				    print_newports((ipfw_insn_u16 *)cmd, 0,
+				    print_newports(bp, (ipfw_insn_u16 *)cmd, 0,
 					O_IPLEN);
 				break;
 
 			case O_IPOPT:
-				print_flags("ipoptions", cmd, f_ipopts);
+				print_flags(bp, "ipoptions", cmd, f_ipopts);
 				break;
 
 			case O_IPTOS:
-				print_flags("iptos", cmd, f_iptos);
+				print_flags(bp, "iptos", cmd, f_iptos);
 				break;
 
 			case O_ICMPTYPE:
-				print_icmptypes((ipfw_insn_u32 *)cmd);
+				print_icmptypes(bp, (ipfw_insn_u32 *)cmd);
 				break;
 
 			case O_ESTAB:
-				printf(" established");
+				bprintf(bp, " established");
 				break;
 
 			case O_TCPDATALEN:
 				if (F_LEN(cmd) == 1)
-				    printf(" tcpdatalen %u", cmd->arg1 );
+				    bprintf(bp, " tcpdatalen %u", cmd->arg1 );
 				else
-				    print_newports((ipfw_insn_u16 *)cmd, 0,
+				    print_newports(bp, (ipfw_insn_u16 *)cmd, 0,
 					O_TCPDATALEN);
 				break;
 
 			case O_TCPFLAGS:
-				print_flags("tcpflags", cmd, f_tcpflags);
+				print_flags(bp, "tcpflags", cmd, f_tcpflags);
 				break;
 
 			case O_TCPOPTS:
-				print_flags("tcpoptions", cmd, f_tcpopts);
+				print_flags(bp, "tcpoptions", cmd, f_tcpopts);
 				break;
 
 			case O_TCPWIN:
 				if (F_LEN(cmd) == 1)
-				    printf(" tcpwin %u", cmd->arg1);
+				    bprintf(bp, " tcpwin %u", cmd->arg1);
 				else
-				    print_newports((ipfw_insn_u16 *)cmd, 0,
+				    print_newports(bp, (ipfw_insn_u16 *)cmd, 0,
 					O_TCPWIN);
 				break;
 
 			case O_TCPACK:
-				printf(" tcpack %d", ntohl(cmd32->d[0]));
+				bprintf(bp, " tcpack %d", ntohl(cmd32->d[0]));
 				break;
 
 			case O_TCPSEQ:
-				printf(" tcpseq %d", ntohl(cmd32->d[0]));
+				bprintf(bp, " tcpseq %d", ntohl(cmd32->d[0]));
 				break;
 
 			case O_UID:
@@ -1988,9 +1975,9 @@ show_static_rule(struct cmdline_opts *co
 				struct passwd *pwd = getpwuid(cmd32->d[0]);
 
 				if (pwd)
-					printf(" uid %s", pwd->pw_name);
+					bprintf(bp, " uid %s", pwd->pw_name);
 				else
-					printf(" uid %u", cmd32->d[0]);
+					bprintf(bp, " uid %u", cmd32->d[0]);
 			    }
 				break;
 
@@ -1999,30 +1986,30 @@ show_static_rule(struct cmdline_opts *co
 				struct group *grp = getgrgid(cmd32->d[0]);
 
 				if (grp)
-					printf(" gid %s", grp->gr_name);
+					bprintf(bp, " gid %s", grp->gr_name);
 				else
-					printf(" gid %u", cmd32->d[0]);
+					bprintf(bp, " gid %u", cmd32->d[0]);
 			    }
 				break;
 
 			case O_JAIL:
-				printf(" jail %d", cmd32->d[0]);
+				bprintf(bp, " jail %d", cmd32->d[0]);
 				break;
 
 			case O_VERREVPATH:
-				printf(" verrevpath");
+				bprintf(bp, " verrevpath");
 				break;
 
 			case O_VERSRCREACH:
-				printf(" versrcreach");
+				bprintf(bp, " versrcreach");
 				break;
 
 			case O_ANTISPOOF:
-				printf(" antispoof");
+				bprintf(bp, " antispoof");
 				break;
 
 			case O_IPSEC:
-				printf(" ipsec");
+				bprintf(bp, " ipsec");
 				break;
 
 			case O_NOP:
@@ -2030,7 +2017,7 @@ show_static_rule(struct cmdline_opts *co
 				break;
 
 			case O_KEEP_STATE:
-				printf(" keep-state");
+				bprintf(bp, " keep-state");
 				break;
 
 			case O_LIMIT: {
@@ -2039,59 +2026,60 @@ show_static_rule(struct cmdline_opts *co
 				uint8_t x = c->limit_mask;
 				char const *comma = " ";
 
-				printf(" limit");
+				bprintf(bp, " limit");
 				for (; p->x != 0 ; p++)
 					if ((x & p->x) == p->x) {
 						x &= ~p->x;
-						printf("%s%s", comma, p->s);
+						bprintf(bp, "%s%s", comma,p->s);
 						comma = ",";
 					}
-				PRINT_UINT_ARG(" ", c->conn_limit);
+				bprint_uint_arg(bp, " ", c->conn_limit);
 				break;
 			}
 
 			case O_IP6:
-				printf(" ip6");
+				bprintf(bp, " ip6");
 				break;
 
 			case O_IP4:
-				printf(" ip4");
+				bprintf(bp, " ip4");
 				break;
 
 			case O_ICMP6TYPE:
-				print_icmp6types((ipfw_insn_u32 *)cmd);
+				print_icmp6types(bp, (ipfw_insn_u32 *)cmd);
 				break;
 
 			case O_EXT_HDR:
-				print_ext6hdr( (ipfw_insn *) cmd );
+				print_ext6hdr(bp, (ipfw_insn *)cmd);
 				break;
 
 			case O_TAGGED:
 				if (F_LEN(cmd) == 1)
-					PRINT_UINT_ARG(" tagged ", cmd->arg1);
+					bprint_uint_arg(bp, " tagged ",
+					    cmd->arg1);
 				else
-					print_newports((ipfw_insn_u16 *)cmd, 0,
-					    O_TAGGED);
+					print_newports(bp, (ipfw_insn_u16 *)cmd,
+					    0, O_TAGGED);
 				break;
 
 			default:
-				printf(" [opcode %d len %d]",
+				bprintf(bp, " [opcode %d len %d]",
 				    cmd->opcode, cmd->len);
 			}
 		}
 		if (cmd->len & F_OR) {
-			printf(" or");
+			bprintf(bp, " or");
 			or_block = 1;
 		} else if (or_block) {
-			printf(" }");
+			bprintf(bp, " }");
 			or_block = 0;
 		}
 	}
-	show_prerequisites(&flags, HAVE_PROTO | HAVE_SRCIP | HAVE_DSTIP
+	show_prerequisites(bp, &flags, HAVE_PROTO | HAVE_SRCIP | HAVE_DSTIP
 					      | HAVE_IP, 0);
 	if (comment)
-		printf(" // %s", comment);
-	printf("\n");
+		bprintf(bp, " // %s", comment);
+	bprintf(bp, "\n");
 }
 
 static void
@@ -2448,6 +2436,7 @@ list_static_range(struct cmdline_opts *c
 			continue;
 		if (r->rulenum >= fo->first && r->rulenum <= fo->last) {
 			show_static_rule(co, fo, bp, r, cntr);
+			printf("%s", bp->buf);
 			c += rtlv->length;
 			bp_flush(bp);
 			seen++;
@@ -4745,6 +4734,7 @@ ipfw_add(char *av[])
 		sfo.set_mask = (uint32_t)(-1);
 		bp_alloc(&bp, 4096);
 		show_static_rule(&co, &sfo, &bp, rule, NULL);
+		printf("%s", bp.buf);
 		bp_free(&bp);
 	}
 

Modified: projects/ipfw/sbin/ipfw/ipfw2.h
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.h	Tue Aug 12 19:37:49 2014	(r269888)
+++ projects/ipfw/sbin/ipfw/ipfw2.h	Tue Aug 12 19:56:26 2014	(r269889)
@@ -328,10 +328,10 @@ int ipfw_delete_pipe(int pipe_or_queue, 
 
 /* ipv6.c */
 void print_unreach6_code(uint16_t code);
-void print_ip6(struct _ipfw_insn_ip6 *cmd, char const *s);
-void print_flow6id(struct _ipfw_insn_u32 *cmd);
-void print_icmp6types(struct _ipfw_insn_u32 *cmd);
-void print_ext6hdr(struct _ipfw_insn *cmd );
+void print_ip6(struct buf_pr *bp, struct _ipfw_insn_ip6 *cmd, char const *s);
+void print_flow6id(struct buf_pr *bp, struct _ipfw_insn_u32 *cmd);
+void print_icmp6types(struct buf_pr *bp, struct _ipfw_insn_u32 *cmd);
+void print_ext6hdr(struct buf_pr *bp, struct _ipfw_insn *cmd );
 
 struct _ipfw_insn *add_srcip6(struct _ipfw_insn *cmd, char *av, int cblen);
 struct _ipfw_insn *add_dstip6(struct _ipfw_insn *cmd, char *av, int cblen);

Modified: projects/ipfw/sbin/ipfw/ipv6.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipv6.c	Tue Aug 12 19:37:49 2014	(r269888)
+++ projects/ipfw/sbin/ipfw/ipv6.c	Tue Aug 12 19:56:26 2014	(r269889)
@@ -85,21 +85,21 @@ print_unreach6_code(uint16_t code)
  * Print the ip address contained in a command.
  */
 void
-print_ip6(ipfw_insn_ip6 *cmd, char const *s)
+print_ip6(struct buf_pr *bp, ipfw_insn_ip6 *cmd, char const *s)
 {
        struct hostent *he = NULL;
        int len = F_LEN((ipfw_insn *) cmd) - 1;
        struct in6_addr *a = &(cmd->addr6);
        char trad[255];
 
-       printf("%s%s ", cmd->o.len & F_NOT ? " not": "", s);
+       bprintf(bp, "%s%s ", cmd->o.len & F_NOT ? " not": "", s);
 
        if (cmd->o.opcode == O_IP6_SRC_ME || cmd->o.opcode == O_IP6_DST_ME) {
-	       printf("me6");
+	       bprintf(bp, "me6");
 	       return;
        }
        if (cmd->o.opcode == O_IP6) {
-	       printf(" ip6");
+	       bprintf(bp, " ip6");
 	       return;
        }
 
@@ -117,21 +117,21 @@ print_ip6(ipfw_insn_ip6 *cmd, char const
 	   if (mb == 128 && co.do_resolv)
 	       he = gethostbyaddr((char *)a, sizeof(*a), AF_INET6);
 	   if (he != NULL)	     /* resolved to name */
-	       printf("%s", he->h_name);
+	       bprintf(bp, "%s", he->h_name);
 	   else if (mb == 0)	   /* any */
-	       printf("any");
+	       bprintf(bp, "any");
 	   else {	  /* numeric IP followed by some kind of mask */
 	       if (inet_ntop(AF_INET6,  a, trad, sizeof( trad ) ) == NULL)
-		   printf("Error ntop in print_ip6\n");
-	       printf("%s",  trad );
+		   bprintf(bp, "Error ntop in print_ip6\n");
+	       bprintf(bp, "%s",  trad );
 	       if (mb < 0)     /* XXX not really legal... */
-		   printf(":%s",
+		   bprintf(bp, ":%s",
 		       inet_ntop(AF_INET6, &a[1], trad, sizeof(trad)));
 	       else if (mb < 128)
-		   printf("/%d", mb);
+		   bprintf(bp, "/%d", mb);
 	   }
 	   if (len > 2)
-	       printf(",");
+	       bprintf(bp, ",");
        }
 }
 
@@ -165,32 +165,32 @@ fill_icmp6types(ipfw_insn_icmp6 *cmd, ch
 
 
 void
-print_icmp6types(ipfw_insn_u32 *cmd)
+print_icmp6types(struct buf_pr *bp, ipfw_insn_u32 *cmd)
 {
        int i, j;
        char sep= ' ';
 
-       printf(" ip6 icmp6types");
+       bprintf(bp, " ip6 icmp6types");
        for (i = 0; i < 7; i++)
 	       for (j=0; j < 32; ++j) {
 		       if ( (cmd->d[i] & (1 << (j))) == 0)
 			       continue;
-		       printf("%c%d", sep, (i*32 + j));
+		       bprintf(bp, "%c%d", sep, (i*32 + j));
 		       sep = ',';
 	       }
 }
 
 void
-print_flow6id( ipfw_insn_u32 *cmd)
+print_flow6id(struct buf_pr *bp, ipfw_insn_u32 *cmd)
 {
        uint16_t i, limit = cmd->o.arg1;
        char sep = ',';
 
-       printf(" flow-id ");
+       bprintf(bp, " flow-id ");
        for( i=0; i < limit; ++i) {
 	       if (i == limit - 1)
 		       sep = ' ';
-	       printf("%d%c", cmd->d[i], sep);
+	       bprintf(bp, "%d%c", cmd->d[i], sep);
        }
 }
 
@@ -265,41 +265,41 @@ fill_ext6hdr( ipfw_insn *cmd, char *av)
 }
 
 void
-print_ext6hdr( ipfw_insn *cmd )
+print_ext6hdr(struct buf_pr *bp, ipfw_insn *cmd )
 {
        char sep = ' ';
 
-       printf(" extension header:");
+       bprintf(bp, " extension header:");
        if (cmd->arg1 & EXT_FRAGMENT ) {
-	   printf("%cfragmentation", sep);
+	   bprintf(bp, "%cfragmentation", sep);
 	   sep = ',';
        }
        if (cmd->arg1 & EXT_HOPOPTS ) {
-	   printf("%chop options", sep);
+	   bprintf(bp, "%chop options", sep);
 	   sep = ',';
        }
        if (cmd->arg1 & EXT_ROUTING ) {
-	   printf("%crouting options", sep);
+	   bprintf(bp, "%crouting options", sep);
 	   sep = ',';
        }
        if (cmd->arg1 & EXT_RTHDR0 ) {
-	   printf("%crthdr0", sep);
+	   bprintf(bp, "%crthdr0", sep);
 	   sep = ',';
        }
        if (cmd->arg1 & EXT_RTHDR2 ) {
-	   printf("%crthdr2", sep);
+	   bprintf(bp, "%crthdr2", sep);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 00:19:19 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 6B94E4E7;
 Wed, 13 Aug 2014 00:19:19 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3CE842A9F;
 Wed, 13 Aug 2014 00:19:19 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7D0JJ8E060585;
 Wed, 13 Aug 2014 00:19:19 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7D0JJ53060584;
 Wed, 13 Aug 2014 00:19:19 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408130019.s7D0JJ53060584@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 00:19:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269898 - projects/ipfw/sbin/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 00:19:19 -0000

Author: melifaro
Date: Wed Aug 13 00:19:18 2014
New Revision: 269898
URL: http://svnweb.freebsd.org/changeset/base/269898

Log:
  Document most of the changes that have happened.

Modified:
  projects/ipfw/sbin/ipfw/ipfw.8

Modified: projects/ipfw/sbin/ipfw/ipfw.8
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw.8	Wed Aug 13 00:18:16 2014	(r269897)
+++ projects/ipfw/sbin/ipfw/ipfw.8	Wed Aug 13 00:19:18 2014	(r269898)
@@ -1,7 +1,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 31, 2014
+.Dd Aug 13, 2014
 .Dt IPFW 8
 .Os
 .Sh NAME
@@ -48,17 +48,43 @@ in-kernel NAT.
 .Brq Cm firewall | altq | one_pass | debug | verbose | dyn_keepalive
 .Ss LOOKUP TABLES
 .Nm
-.Cm table Ar number Cm add Ar addr Ns Oo / Ns Ar masklen Oc Op Ar value
+.Cm table Ar name Cm create Ar create-options
 .Nm
-.Cm table Ar number Cm delete Ar addr Ns Op / Ns Ar masklen
+.Cm table Ar name Cm destroy
 .Nm
-.Cm table
-.Brq Ar number | all
-.Cm flush
+.Cm table Ar name Cm modify Ar modify-options
+.Nm
+.Cm table Ar name Cm swap Ar name
+.Nm
+.Cm table Ar name Cm add Ar table-key Op Ar value
+.Nm
+.Cm table Ar name Cm add Op Ar table-key Ar value ...
+.Nm
+.Cm table Ar name Cm atomic add Op Ar table-key Ar value ...
+.Nm
+.Cm table Ar name Cm delete Op Ar table-key ...
+.Nm
+.Cm table Ar name Cm lookup Ar addr
+.Nm
+.Cm table Ar name Cm lock
+.Nm
+.Cm table Ar name Cm unlock
 .Nm
 .Cm table
-.Brq Ar number | all
+.Brq Ar name | all
 .Cm list
+.Nm
+.Cm table
+.Brq Ar name | all
+.Cm info 
+.Nm
+.Cm table
+.Brq Ar name | all
+.Cm detail
+.Nm
+.Cm table
+.Brq Ar name | all
+.Cm flush
 .Ss DUMMYNET CONFIGURATION (TRAFFIC SHAPER AND PACKET SCHEDULER)
 .Nm
 .Brq Cm pipe | queue | sched
@@ -822,10 +848,11 @@ It is possible to use the
 .Cm tablearg
 keyword with a skipto for a
 .Em computed
-skipto, but care should be used, as no destination caching
-is possible in this case so the rules are always walked to find it,
-starting from the
-.Cm skipto .
+skipto. Skipto may work either in O(log(N)) or in O(1) depending
+on amount of memory and/or sysctl variables.
+See the
+.Sx SYSCTL VARIABLES
+section for more details.
 .It Cm call Ar number | tablearg
 The current rule number is saved in the internal stack and
 ruleset processing continues with the first rule numbered
@@ -1152,7 +1179,7 @@ with multiple addresses) is provided for
 its use is discouraged.
 .It Ar addr : Oo Cm not Oc Bro
 .Cm any | me | me6 |
-.Cm table Ns Pq Ar number Ns Op , Ns Ar value
+.Cm table Ns Pq Ar name Ns Op , Ns Ar value
 .Ar | addr-list | addr-set
 .Brc
 .Bl -tag -width indent
@@ -1164,8 +1191,8 @@ matches any IP address configured on an 
 matches any IPv6 address configured on an interface in the system.
 The address list is evaluated at the time the packet is
 analysed.
-.It Cm table Ns Pq Ar number Ns Op , Ns Ar value
-Matches any IPv4 address for which an entry exists in the lookup table
+.It Cm table Ns Pq Ar name Ns Op , Ns Ar value
+Matches any IPv4 or IPv6 address for which an entry exists in the lookup table
 .Ar number .
 If an optional 32-bit unsigned
 .Ar value
@@ -1359,6 +1386,19 @@ and IPsec encapsulated security payload 
 .It Cm fib Ar fibnum
 Matches a packet that has been tagged to use
 the given FIB (routing table) number.
+.It Cm flow Ar table Ns Pq Ar name Ns Op , Ns Ar value
+Search for the flow entry in lookup table
+.Ar name .
+If not found, the match fails.
+Otherwise, the match succeeds and
+.Cm tablearg
+is set to the value extracted from the table.
+.Pp
+This option can be useful to quickly dispatch traffic based on
+certain packet fields.
+See the
+.Sx LOOKUP TABLES
+section below for more information on lookup tables.
 .It Cm flow-id Ar labels
 Matches IPv6 packets containing any of the flow labels given in
 .Ar labels .
@@ -1550,9 +1590,9 @@ of source and destination addresses and 
 specified.
 Currently,
 only IPv4 flows are supported.
-.It Cm lookup Bro Cm dst-ip | dst-port | src-ip | src-port | uid | jail Brc Ar N
+.It Cm lookup Bro Cm dst-ip | dst-port | src-ip | src-port | uid | jail Brc Ar name
 Search an entry in lookup table
-.Ar N
+.Ar name
 that matches the field specified as argument.
 If not found, the match fails.
 Otherwise, the match succeeds and
@@ -1617,13 +1657,19 @@ and they are always printed as hexadecim
 option is used, in which case symbolic resolution will be attempted).
 .It Cm proto Ar protocol
 Matches packets with the corresponding IP protocol.
-.It Cm recv | xmit | via Brq Ar ifX | Ar if Ns Cm * | Ar table Ns Pq Ar number Ns Op , Ns Ar value | Ar ipno | Ar any
+.It Cm recv | xmit | via Brq Ar ifX | Ar if Ns Cm * | Ar table Ns Po Ar name Ns Oo , Ns Ar value Oc Pc | Ar ipno | Ar any
 Matches packets received, transmitted or going through,
 respectively, the interface specified by exact name
 .Po Ar ifX Pc ,
 by device name
 .Po Ar if* Pc ,
 by IP address, or through some interface.
+Table
+.Ar name
+may be used to match interface by its kernel ifindex.
+See the
+.Sx LOOKUP TABLES
+section below for more information on lookup tables.
 .Pp
 The
 .Cm via
@@ -1818,15 +1864,24 @@ connected networks instead of all source
 .Sh LOOKUP TABLES
 Lookup tables are useful to handle large sparse sets of
 addresses or other search keys (e.g., ports, jail IDs, interface names).
-In the rest of this section we will use the term ``address''.
-There may be up to 65535 different lookup tables, numbered 0 to 65534.
+In the rest of this section we will use the term ``key''.
+Table name needs to match the following spec:
+.Ar table-name .
+There may be up to 65535 different lookup tables.
 .Pp
+The following table types are supported:
+.Bl -tag -width indent
+.It Ar table-type : Ar cidr | iface | number | flow
+.It Ar table-key : Ar addr Ns Oo / Ns Ar masklen Oc | iface-name | number | flow-spec
+.It Ar flow-spec : Ar flow-field Ns Op , Ns Ar flow-spec
+.It Ar flow-field : src-ip | proto | src-port | dst-ip | dst-port
+.It Cm cidr
+matches IPv4 or IPv6 address.
 Each entry is represented by an
 .Ar addr Ns Op / Ns Ar masklen
 and will match all addresses with base
 .Ar addr
-(specified as an IPv4/IPv6 address, a hostname or an unsigned integer)
-and mask width of
+(specified as an IPv4/IPv6 address, or a hostname) and mask width of
 .Ar masklen
 bits.
 If
@@ -1834,29 +1889,159 @@ If
 is not specified, it defaults to 32 for IPv4 and 128 for IPv6.
 When looking up an IP address in a table, the most specific
 entry will match.
-Associated with each entry is a 32-bit unsigned
-.Ar value ,
-which can optionally be checked by a rule matching code.
-When adding an entry, if
-.Ar value
-is not specified, it defaults to 0.
+.It Cm iface
+matches interface names.
+Each entry is represented by string treated as interface name.
+Wildcards are not supported.
+.It Cm number
+maches protocol ports, uids/gids or jail IDs.
+Each entry is represented by 32-bit unsigned integer.
+Ranges are not supported.
+.It Cm flow
+Matches packet fields specified by
+.Ar flow
+type suboptions with table entries.
+.El
 .Pp
-An entry can be added to a table
-.Pq Cm add ,
-or removed from a table
-.Pq Cm delete .
-A table can be examined
-.Pq Cm list
-or flushed
-.Pq Cm flush .
+The following value format types are supported:
+.Bl -tag -width indent
+.It Ar value-ftype : Ar number | ip
+.It Cm number
+Default for
+.Ar number
+value type.
+Shows values as unsigned integer.
+.It Cm ip
+Show values as IPv4 addresses.
+.El
 .Pp
-Internally, each table is stored in a Radix tree, the same way as
-the routing table (see
-.Xr route 4 ) .
+Tables require explicit creation via
+.Cm create
+before use.
+.Pp
+The following creation options are supported:
+.Bl -tag -width indent
+.It Ar create-options : Ar create-option | create-options
+.It Ar create-option : Cm type Ar table-type | Cm ftype Ar value-ftype | Cm algo Ar algo-desc |
+.Cm limit Ar number | Cm locked
+.It Cm type
+Table key type.
+.It Cm ftype
+Table value format type.
+Affects userland formatting only.
+.It Cm algo
+Table algorithm to use (see below).
+.It Cm limit
+Maximum number of items that may be inserted into table.
+.It Cm locked
+Restrict any table modifications.
+.El
+.Pp
+Some of these options may be modified later via
+.Cm modify
+keyword.
+The following options can be changed:
+.Bl -tag -width indent
+.It Ar modify-options : Ar modify-option | modify-options
+.It Ar modify-option : Cm ftype Ar value-ftype | Cm limit Ar number
+.It Cm ftype
+Set table value format type.
+Affects userland formatting only.
+.It Cm limit
+Alter maximum number of items that may be inserted into table.
+.El
+.Pp
+Additionally, table can be locked or unlocked using
+.Cm lock
+or
+.Cm unlock
+commands.
+.Pp
+Tables of the same
+.Ar type
+and
+.Ar valtype
+can be swapped with each other using
+.Cm swap Ar name
+command.
+Swap may fail if tables limits are set and data exchange
+would result in limits hit.
+Operation is performed atomically.
+.Pp
+One or more entries can be added to a table at once using
+.Cm add
+command.
+Addition of all items are performed atomically.
+By default, error in addition of one entry does not influence
+addition of other entries. However, non-zero error code is returned
+in that case. 
+Special
+.Cm atomic
+keyword may be specified before
+.Cm add
+to indicate all-or-none add request.
+.Pp
+One or more entries can be removed from a table at once using
+.Cm delete
+command.
+By default, error in removal of one entry does not influence
+removing of other entries. However, non-zero error code is returned
+in that case. 
+.Pp
+It may be possible to check what entry will be found on particular
+.Ar table-key
+using
+.Cm lookup
+.Ae table-key
+command.
+This functionality is optional and may be unsupported in some algorithms.
 .Pp
-Lookup tables currently support only ports, jail IDs, IPv4/IPv6  addresses
-and interface names.
-Wildcards is not supported for interface names.
+The following operations can be performed on
+.Ar one
+or
+.Cm all
+tables:
+.Bl -tag -width indent
+.It Cm list
+List all entries.
+.It Cm flush
+Removes all entries.
+.It Cm info
+Shows generic table information.
+.It Cm detail
+Shows generic table information and algo-specific data.
+.El
+.Pp
+The following lookup algorithms are supported:
+.Bl -tag -width indent
+.It Ar algo-desc : algo-name | "algo-name algo-data"
+.It Ar algo-name: Ar cidr:radix | cidr:hash | iface:arrray | number:array | flow:hash
+.It Cm cidr:radix
+Separate Radix trees for IPv4 and IPv6, the same way as the routing table (see
+.Xr route 4 ) .
+Default choice for
+.Ar
+cidr
+type.
+.It Cm cidr:hash
+Separate auto-growing hashes for IPv4 and IPv6.
+Accepts entries with the same mask length specified initially via
+.Cm "cidr:hash masks=/v4,/v6"
+algorithm creation options.
+Assume /32 and /128 masks by default.
+Search removes host bits (according to mask) from supplied address and checks
+resulting key in appropriate hash.
+Mostly optimized for /64 and byte-ranged IPv6 masks.
+.It Cm iface:arrray
+Array storing sorted indexes for entries which are presented in the system.
+Optimized for very fast lookup.
+.It Cm number:array
+Array storing sorted u32 numbers.
+.It Cm flow:hash
+Auto-growing hash storing flow entries.
+Search calculates hash on required packet fields and searches for matching
+entries in selected bucket.
+.El
 .Pp
 The
 .Cm tablearg
@@ -1865,6 +2050,14 @@ the argument for a rule action, action p
 This can significantly reduce number of rules in some configurations.
 If two tables are used in a rule, the result of the second (destination)
 is used.
+.Pp
+The following value types are supported:
+.Bl -tag -width indent
+.It Ar value-type : Ar number
+.It Cm number
+Default value type.
+If value is not specified, defaults to 0.
+.El
 The
 .Cm tablearg
 argument can be used with the following actions:
@@ -3221,30 +3414,42 @@ Then we classify traffic using a single 
 .Dl "ipfw pipe 1 config bw 1000Kbyte/s"
 .Dl "ipfw pipe 4 config bw 4000Kbyte/s"
 .Dl "..."
-.Dl "ipfw table 1 add 192.168.2.0/24 1"
-.Dl "ipfw table 1 add 192.168.0.0/27 4"
-.Dl "ipfw table 1 add 192.168.0.2 1"
+.Dl "ipfw table T1 create type cidr"
+.Dl "ipfw table T1 add 192.168.2.0/24 1"
+.Dl "ipfw table T1 add 192.168.0.0/27 4"
+.Dl "ipfw table T1 add 192.168.0.2 1"
 .Dl "..."
-.Dl "ipfw add pipe tablearg ip from table(1) to any"
+.Dl "ipfw add pipe tablearg ip from 'table(T1)' to any"
 .Pp
 Using the
 .Cm fwd
 action, the table entries may include hostnames and IP addresses.
 .Pp
-.Dl "ipfw table 1 add 192.168.2.0/24 10.23.2.1"
-.Dl "ipfw table 1 add 192.168.0.0/27 router1.dmz"
+.Dl "ipfw table T2 create type cidr ftype ip"
+.Dl "ipfw table T2 add 192.168.2.0/24 10.23.2.1"
+.Dl "ipfw table T21 add 192.168.0.0/27 router1.dmz"
 .Dl "..."
 .Dl "ipfw add 100 fwd tablearg ip from any to table(1)"
 .Pp
 In the following example per-interface firewall is created:
 .Pp
-.Dl "ipfw table 10 add vlan20 12000"
-.Dl "ipfw table 10 add vlan30 13000"
-.Dl "ipfw table 20 add vlan20 22000"
-.Dl "ipfw table 20 add vlan30 23000"
+.Dl "ipfw table IN create type iface"
+.Dl "ipfw table IN add vlan20 12000"
+.Dl "ipfw table IN add vlan30 13000"
+.Dl "ipfw table OUT create type iface"
+.Dl "ipfw table OUT add vlan20 22000"
+.Dl "ipfw table OUT add vlan30 23000"
+.Dl ".."
+.Dl "ipfw add 100 ipfw skipto tablearg ip from any to any recv 'table(IN)' in"
+.Dl "ipfw add 200 ipfw skipto tablearg ip from any to any xmit 'table(OUT)' out"
+.Pp
+The following example illustrate usage of flow tables:
+.Pp
+.Dl "ipfw table fl create type flow:flow:src-ip,proto,dst-ip,dst-port"
+.Dl "ipfw table fl add 2a02:6b8:77::88,tcp,2a02:6b8:77::99,80 11"
+.Dl "ipfw table fl add 10.0.0.1,udp,10.0.0.2,53 12"
 .Dl ".."
-.Dl "ipfw add 100 ipfw skipto tablearg ip from any to any recv 'table(10)' in"
-.Dl "ipfw add 200 ipfw skipto tablearg ip from any to any xmit 'table(10)' out"
+.Dl "ipfw add 100 allow ip from any to any flow 'table(fl,11)' recv ix0"
 .Ss SETS OF RULES
 To add a set of rules atomically, e.g.\& set 18:
 .Pp

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 06:16:38 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 678DFB48;
 Wed, 13 Aug 2014 06:16:38 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 5467D22DB;
 Wed, 13 Aug 2014 06:16:38 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7D6Gc2V023528;
 Wed, 13 Aug 2014 06:16:38 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7D6GcUh023527;
 Wed, 13 Aug 2014 06:16:38 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408130616.s7D6GcUh023527@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 06:16:38 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269910 - projects/ipfw/sbin/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 06:16:38 -0000

Author: melifaro
Date: Wed Aug 13 06:16:37 2014
New Revision: 269910
URL: http://svnweb.freebsd.org/changeset/base/269910

Log:
  * Do not crash on incorrect "flow" type inputs.
  * Do not auto-create tables for operations other than add.

Modified:
  projects/ipfw/sbin/ipfw/tables.c

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Wed Aug 13 05:53:41 2014	(r269909)
+++ projects/ipfw/sbin/ipfw/tables.c	Wed Aug 13 06:16:37 2014	(r269910)
@@ -67,7 +67,7 @@ static void table_show_list(ipfw_obj_hea
 static void table_show_entry(ipfw_xtable_info *i, ipfw_obj_tentry *tent);
 
 static void tentry_fill_key(ipfw_obj_header *oh, ipfw_obj_tentry *tent,
-    char *key, uint8_t *ptype, uint8_t *pvtype, ipfw_xtable_info *xi);
+    char *key, int add, uint8_t *ptype, uint8_t *pvtype, ipfw_xtable_info *xi);
 static void tentry_fill_value(ipfw_obj_header *oh, ipfw_obj_tentry *tent,
     char *arg, uint8_t type, uint8_t vtype);
 
@@ -932,7 +932,7 @@ table_modify_record(ipfw_obj_header *oh,
 	memset(&xi, 0, sizeof(xi));
 	count = 0;
 	while (ac > 0) {
-		tentry_fill_key(oh, ptent, *av, &type, &vtype, &xi);
+		tentry_fill_key(oh, ptent, *av, add, &type, &vtype, &xi);
 
 		/*
 		 * compability layer: auto-create table if not exists
@@ -1073,7 +1073,7 @@ table_do_lookup(ipfw_obj_header *oh, cha
 	tent->head.length = sizeof(*tent);
 	tent->idx = 1;
 
-	tentry_fill_key(oh, tent, key, &type, &vtype, xi);
+	tentry_fill_key(oh, tent, key, 0, &type, &vtype, xi);
 	oh->ntlv.type = type;
 
 	sz = sizeof(xbuf);
@@ -1196,7 +1196,7 @@ tentry_fill_key_type(char *arg, ipfw_obj
 		tfe = &tentry->k.flow;
 		af = 0;
 
-		/* Handle <ipv4|ipv6>*/
+		/* Handle <ipv4|ipv6> */
 		if ((tflags & IPFW_TFFLAG_SRCIP) != 0) {
 			if ((p = strchr(arg, ',')) != NULL)
 				*p++ = '\0';
@@ -1220,6 +1220,8 @@ tentry_fill_key_type(char *arg, ipfw_obj
 
 		/* Handle <proto-num|proto-name> */
 		if ((tflags & IPFW_TFFLAG_PROTO) != 0) {
+			if (arg == NULL)
+				errx(EX_DATAERR, "invalid key: proto missing");
 			if ((p = strchr(arg, ',')) != NULL)
 				*p++ = '\0';
 
@@ -1242,6 +1244,8 @@ tentry_fill_key_type(char *arg, ipfw_obj
 
 		/* Handle <port-num|service-name> */
 		if ((tflags & IPFW_TFFLAG_SRCPORT) != 0) {
+			if (arg == NULL)
+				errx(EX_DATAERR, "invalid key: src port missing");
 			if ((p = strchr(arg, ',')) != NULL)
 				*p++ = '\0';
 
@@ -1260,6 +1264,8 @@ tentry_fill_key_type(char *arg, ipfw_obj
 
 		/* Handle <ipv4|ipv6>*/
 		if ((tflags & IPFW_TFFLAG_DSTIP) != 0) {
+			if (arg == NULL)
+				errx(EX_DATAERR, "invalid key: dst ip missing");
 			if ((p = strchr(arg, ',')) != NULL)
 				*p++ = '\0';
 			/* Determine family using temporary storage */
@@ -1282,6 +1288,8 @@ tentry_fill_key_type(char *arg, ipfw_obj
 
 		/* Handle <port-num|service-name> */
 		if ((tflags & IPFW_TFFLAG_DSTPORT) != 0) {
+			if (arg == NULL)
+				errx(EX_DATAERR, "invalid key: dst port missing");
 			if ((p = strchr(arg, ',')) != NULL)
 				*p++ = '\0';
 
@@ -1312,7 +1320,7 @@ tentry_fill_key_type(char *arg, ipfw_obj
 
 static void
 tentry_fill_key(ipfw_obj_header *oh, ipfw_obj_tentry *tent, char *key,
-    uint8_t *ptype, uint8_t *pvtype, ipfw_xtable_info *xi)
+    int add, uint8_t *ptype, uint8_t *pvtype, ipfw_xtable_info *xi)
 {
 	uint8_t type, tflags, vtype;
 	int error;
@@ -1336,6 +1344,9 @@ tentry_fill_key(ipfw_obj_header *oh, ipf
 		if (error != ESRCH)
 			errx(EX_OSERR, "Error requesting table %s info",
 			    oh->ntlv.name);
+		if (add == 0)
+			errx(EX_DATAERR, "Table %s does not exist",
+			    oh->ntlv.name);
 		/*
 		 * Table does not exist.
 		 * Compability layer: try to interpret data as CIDR

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 06:39:45 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 5061B228;
 Wed, 13 Aug 2014 06:39: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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 2341225DB;
 Wed, 13 Aug 2014 06:39:45 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7D6djK3032808;
 Wed, 13 Aug 2014 06:39:45 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7D6dixS032807;
 Wed, 13 Aug 2014 06:39:44 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408130639.s7D6dixS032807@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 06:39:44 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269911 - projects/ipfw/sbin/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 06:39:45 -0000

Author: melifaro
Date: Wed Aug 13 06:39:44 2014
New Revision: 269911
URL: http://svnweb.freebsd.org/changeset/base/269911

Log:
  Update op3 cmds.

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.c	Wed Aug 13 06:16:37 2014	(r269910)
+++ projects/ipfw/sbin/ipfw/ipfw2.c	Wed Aug 13 06:39:44 2014	(r269911)
@@ -593,6 +593,16 @@ do_set3(int optname, ip_fw3_opheader *op
 	return (0);
 }
 
+/*
+ * do_get3 - pass ipfw control cmd to kernel
+ * @optname: option name
+ * @optval: pointer to option data
+ * @optlen: pointer to option length
+ *
+ * Assumes op3 header is already embedded.
+ * Calls getsockopt() with IP_FW3 as kernel-visible opcode.
+ * Returns 0 on success or errno otherwise.
+ */
 int
 do_get3(int optname, ip_fw3_opheader *op3, size_t *optlen)
 {
@@ -619,40 +629,6 @@ do_get3(int optname, ip_fw3_opheader *op
 	return (error);
 }
 
-/*
- * do_setcmd3 - pass ipfw control cmd to kernel
- * @optname: option name
- * @optval: pointer to option data
- * @optlen: option length
- *
- * Function encapsulates option value in IP_FW3 socket option
- * and calls setsockopt().
- * Function returns 0 on success or -1 otherwise.
- */
-static int
-do_setcmd3(int optname, void *optval, socklen_t optlen)
-{
-	socklen_t len;
-	ip_fw3_opheader *op3;
-
-	if (co.test_only)
-		return (0);
-
-	if (ipfw_socket == -1)
-		ipfw_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
-	if (ipfw_socket < 0)
-		err(EX_UNAVAILABLE, "socket");
-
-	len = sizeof(ip_fw3_opheader) + optlen;
-	op3 = alloca(len);
-	/* Zero reserved fields */
-	memset(op3, 0, sizeof(ip_fw3_opheader));
-	memcpy(op3 + 1, optval, optlen);
-	op3->opcode = optname;
-
-	return setsockopt(ipfw_socket, IPPROTO_IP, IP_FW3, op3, len);
-}
-
 /**
  * match_token takes a table and a string, returns the value associated
  * with the string (-1 in case of failure).

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 09:34:34 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 103B582C;
 Wed, 13 Aug 2014 09:34:34 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id E548A2AC8;
 Wed, 13 Aug 2014 09:34:33 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7D9YXkN016597;
 Wed, 13 Aug 2014 09:34:33 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7D9YXfn016596;
 Wed, 13 Aug 2014 09:34:33 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408130934.s7D9YXfn016596@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 09:34:33 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269924 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 09:34:34 -0000

Author: melifaro
Date: Wed Aug 13 09:34:33 2014
New Revision: 269924
URL: http://svnweb.freebsd.org/changeset/base/269924

Log:
  * Add jump_linear() function utilizing calculated skipto cache.
  * Update description for jump_fast()
  * Make jump_fast() users use JUMP() macro which is resolved to
      jump_fast() by default.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw2.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw2.c	Wed Aug 13 08:24:48 2014	(r269923)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw2.c	Wed Aug 13 09:34:33 2014	(r269924)
@@ -126,6 +126,12 @@ VNET_DEFINE(unsigned int, fw_tables_sets
 /* Use 128 tables by default */
 static unsigned int default_fw_tables = IPFW_TABLES_DEFAULT;
 
+static int jump_fast(struct ip_fw_chain *chain, struct ip_fw *f, int num,
+    int tablearg, int jump_backwards);
+static int jump_linear(struct ip_fw_chain *chain, struct ip_fw *f, int num,
+    int tablearg, int jump_backwards);
+#define	JUMP(ch, f, num, targ, back)	jump_fast(ch, f, num, targ, back)
+
 /*
  * Each rule belongs to one of 32 different sets (0..31).
  * The variable set_disable contains one bit per set.
@@ -798,7 +804,7 @@ set_match(struct ip_fw_args *args, int s
 
 /*
  * Helper function to enable cached rule lookups using
- * x_next and next_rule fields in ipfw rule.
+ * cached_id and cached_pos fields in ipfw rule.
  */
 static int
 jump_fast(struct ip_fw_chain *chain, struct ip_fw *f, int num,
@@ -806,8 +812,8 @@ jump_fast(struct ip_fw_chain *chain, str
 {
 	int f_pos;
 
-	/* If possible use cached f_pos (in f->next_rule),
-	 * whose version is written in f->next_rule
+	/* If possible use cached f_pos (in f->cached_pos),
+	 * whose version is written in f->cached_id
 	 * (horrible hacks to avoid changing the ABI).
 	 */
 	if (num != IP_FW_TARG && f->cached_id == chain->id)
@@ -832,6 +838,24 @@ jump_fast(struct ip_fw_chain *chain, str
 }
 
 /*
+ * Helper function to enable real fast rule lookups.
+ */
+static int
+jump_linear(struct ip_fw_chain *chain, struct ip_fw *f, int num,
+    int tablearg, int jump_backwards)
+{
+	int f_pos;
+
+	num = IP_FW_ARG_TABLEARG(num);
+	/* make sure we do not jump backward */
+	if (jump_backwards == 0 && num <= f->rulenum)
+		num = f->rulenum + 1;
+	f_pos = chain->idxmap[num];
+
+	return (f_pos);
+}
+
+/*
  * The main check routine for the firewall.
  *
  * All arguments are in args so we can modify them and return them
@@ -2190,7 +2214,7 @@ do {								\
 
 			case O_SKIPTO:
 			    IPFW_INC_RULE_COUNTER(f, pktlen);
-			    f_pos = jump_fast(chain, f, cmd->arg1, tablearg, 0);
+			    f_pos = JUMP(chain, f, cmd->arg1, tablearg, 0);
 			    /*
 			     * Skip disabled rules, and re-enter
 			     * the inner loop with the correct
@@ -2279,7 +2303,7 @@ do {								\
 				if (IS_CALL) {
 					stack[mtag->m_tag_id] = f->rulenum;
 					mtag->m_tag_id++;
-			    		f_pos = jump_fast(chain, f, cmd->arg1,
+			    		f_pos = JUMP(chain, f, cmd->arg1,
 					    tablearg, 1);
 				} else {	/* `return' action */
 					mtag->m_tag_id--;

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 12:04:46 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 0887D43B;
 Wed, 13 Aug 2014 12:04:46 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id DDFCD2DB7;
 Wed, 13 Aug 2014 12:04:45 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DC4jOV086803;
 Wed, 13 Aug 2014 12:04:45 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DC4jxN086801;
 Wed, 13 Aug 2014 12:04:45 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408131204.s7DC4jxN086801@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 12:04:45 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269926 - in projects/ipfw: sbin/ipfw sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 12:04:46 -0000

Author: melifaro
Date: Wed Aug 13 12:04:45 2014
New Revision: 269926
URL: http://svnweb.freebsd.org/changeset/base/269926

Log:
  * Pass proper table set numbers from userland side.
  * Ignore them, but honor V_fw_tables_sets value on kernel side.

Modified:
  projects/ipfw/sbin/ipfw/ipfw2.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.c	Wed Aug 13 11:11:27 2014	(r269925)
+++ projects/ipfw/sbin/ipfw/ipfw2.c	Wed Aug 13 12:04:45 2014	(r269926)
@@ -2711,10 +2711,11 @@ struct tidx {
 	uint32_t count;
 	uint32_t size;
 	uint16_t counter;
+	uint8_t set;
 };
 
 static uint16_t
-pack_table(struct tidx *tstate, char *name, uint32_t set)
+pack_table(struct tidx *tstate, char *name)
 {
 	int i;
 	ipfw_obj_ntlv *ntlv;
@@ -2725,7 +2726,7 @@ pack_table(struct tidx *tstate, char *na
 	for (i = 0; i < tstate->count; i++) {
 		if (strcmp(tstate->idx[i].name, name) != 0)
 			continue;
-		if (tstate->idx[i].set != set)
+		if (tstate->idx[i].set != tstate->set)
 			continue;
 
 		return (tstate->idx[i].idx);
@@ -2744,7 +2745,7 @@ pack_table(struct tidx *tstate, char *na
 	strlcpy(ntlv->name, name, sizeof(ntlv->name));
 	ntlv->head.type = IPFW_TLV_TBL_NAME;
 	ntlv->head.length = sizeof(ipfw_obj_ntlv);
-	ntlv->set = set;
+	ntlv->set = tstate->set;
 	ntlv->idx = ++tstate->counter;
 	tstate->count++;
 
@@ -2765,7 +2766,7 @@ fill_table(ipfw_insn *cmd, char *av, uin
 	if (p)
 		*p++ = '\0';
 
-	if ((uidx = pack_table(tstate, av + 6, 0)) == 0)
+	if ((uidx = pack_table(tstate, av + 6)) == 0)
 		errx(EX_DATAERR, "Invalid table name: %s", av + 6);
 
 	cmd->opcode = opcode;
@@ -3091,7 +3092,7 @@ fill_iface(ipfw_insn_if *cmd, char *arg,
 		p = strchr(arg + 6, ',');
 		if (p)
 			*p++ = '\0';
-		if ((uidx = pack_table(tstate, arg + 6, 0)) == 0)
+		if ((uidx = pack_table(tstate, arg + 6)) == 0)
 			errx(EX_DATAERR, "Invalid table name: %s", arg + 6);
 
 		cmd->name[0] = '\1'; /* Special value indicating table */
@@ -3494,6 +3495,7 @@ compile_rule(char *av[], uint32_t *rbuf,
 		if (set < 0 || set > RESVD_SET)
 			errx(EX_DATAERR, "illegal set %s", av[1]);
 		rule->set = set;
+		tstate->set = set;
 		av += 2;
 	}
 
@@ -4496,7 +4498,7 @@ read_options:
 			__PAST_END(c->d, 1) = j; // i converted to option
 			av++;
 
-			if ((j = pack_table(tstate, *av, 0)) == 0)
+			if ((j = pack_table(tstate, *av)) == 0)
 				errx(EX_DATAERR, "Invalid table name: %s", *av);
 
 			cmd->arg1 = j;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Wed Aug 13 11:11:27 2014	(r269925)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Wed Aug 13 12:04:45 2014	(r269926)
@@ -2657,7 +2657,13 @@ find_table(struct namedobj_instance *ni,
 		if (ntlv == NULL)
 			return (NULL);
 		name = ntlv->name;
-		set = ntlv->set;
+
+		/*
+		 * Use set provided by @ti instead of @ntlv one.
+		 * This is needed due to different sets behavior
+		 * controlled by V_fw_tables_sets.
+		 */
+		set = ti->set;
 	} else {
 		snprintf(bname, sizeof(bname), "%d", ti->uidx);
 		name = bname;

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 12:31:37 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 2FDBC8E9;
 Wed, 13 Aug 2014 12:31:37 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 029C62123;
 Wed, 13 Aug 2014 12:31:37 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DCVanv004250;
 Wed, 13 Aug 2014 12:31:36 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DCVaMf004244;
 Wed, 13 Aug 2014 12:31:36 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408131231.s7DCVaMf004244@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Wed, 13 Aug 2014 12:31:36 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269927 - in projects/arm64/sys: arm64/arm64 dev/fdt
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 12:31:37 -0000

Author: andrew
Date: Wed Aug 13 12:31:36 2014
New Revision: 269927
URL: http://svnweb.freebsd.org/changeset/base/269927

Log:
  Remove the hack to map interrupts from simplebus to nexus so it can be
  used with ofwbus.

Modified:
  projects/arm64/sys/arm64/arm64/nexus.c
  projects/arm64/sys/dev/fdt/simplebus.c

Modified: projects/arm64/sys/arm64/arm64/nexus.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/nexus.c	Wed Aug 13 12:04:45 2014	(r269926)
+++ projects/arm64/sys/arm64/arm64/nexus.c	Wed Aug 13 12:31:36 2014	(r269927)
@@ -114,11 +114,9 @@ static device_method_t nexus_methods[] =
 	DEVMETHOD(bus_deactivate_resource,	nexus_deactivate_resource),
 	DEVMETHOD(bus_setup_intr,	nexus_setup_intr),
 	DEVMETHOD(bus_teardown_intr,	nexus_teardown_intr),
-#if 0
 #ifdef FDT
 	DEVMETHOD(ofw_bus_map_intr,	nexus_ofw_map_intr),
 #endif
-#endif
 	{ 0, 0 }
 };
 
@@ -320,36 +318,23 @@ nexus_deactivate_resource(device_t bus, 
 	return (rman_deactivate_resource(r));
 }
 
-#if 0
 #ifdef FDT
 static int
 nexus_ofw_map_intr(device_t dev, device_t child, phandle_t iparent, int icells,
     pcell_t *intr)
 {
-	fdt_pic_decode_t intr_decode;
-	phandle_t intr_offset;
-	int i, rv, interrupt, trig, pol;
-
-	intr_offset = OF_xref_phandle(iparent);
-	for (i = 0; i < icells; i++)
-		intr[i] = cpu_to_fdt32(intr[i]);
-
-	for (i = 0; fdt_pic_table[i] != NULL; i++) {
-		intr_decode = fdt_pic_table[i];
-		rv = intr_decode(intr_offset, intr, &interrupt, &trig, &pol);
-
-		if (rv == 0) {
-			/* This was recognized as our PIC and decoded. */
-			interrupt = FDT_MAP_IRQ(intr_parent, interrupt);
-			return (interrupt);
-		}
-	}
+	int irq;
 
-	/* Not in table, so guess */
-	interrupt = FDT_MAP_IRQ(intr_parent, fdt32_to_cpu(intr[0]));
+	if (icells == 3) {
+		irq = intr[1];
+		if (intr[0] == 0)
+			irq += 32; /* SPI */
+		else
+			irq += 16; /* PPI */
+	} else
+		irq = intr[0];
 
-	return (interrupt);
+	return (irq);
 }
 #endif
-#endif
 

Modified: projects/arm64/sys/dev/fdt/simplebus.c
==============================================================================
--- projects/arm64/sys/dev/fdt/simplebus.c	Wed Aug 13 12:04:45 2014	(r269926)
+++ projects/arm64/sys/dev/fdt/simplebus.c	Wed Aug 13 12:31:36 2014	(r269927)
@@ -310,18 +310,10 @@ simplebus_setup_dinfo(device_t dev, phan
 			icells = 1;
 		}
 		for (i = 0, k = 0; i < nintr; i += icells, k++) {
-			u_int irq;
-
-			if (icells == 3) {
-				irq = intr[i + 1];
-				if (intr[i] == 0)
-					irq += 32;
-			} else
-				irq = intr[i];
 			intr[i] = ofw_bus_map_intr(dev, iparent, icells,
 			    &intr[i]);
-			resource_list_add(&ndi->rl, SYS_RES_IRQ, k, irq,
-			    irq, 1);
+			resource_list_add(&ndi->rl, SYS_RES_IRQ, k, intr[i],
+			    intr[i], 1);
 		}
 		free(intr, M_OFWPROP);
 	}

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 12:35:32 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 1E9ECCCC;
 Wed, 13 Aug 2014 12:35:32 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 0ABEE2152;
 Wed, 13 Aug 2014 12:35:32 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DCZVUW006769;
 Wed, 13 Aug 2014 12:35:31 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DCZVOg006761;
 Wed, 13 Aug 2014 12:35:31 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408131235.s7DCZVOg006761@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Wed, 13 Aug 2014 12:35:31 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269930 - in projects/arm64/sys: arm/arm arm64/arm64 conf
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 12:35:32 -0000

Author: andrew
Date: Wed Aug 13 12:35:30 2014
New Revision: 269930
URL: http://svnweb.freebsd.org/changeset/base/269930

Log:
  Get the generic timer working on ARMv8. More work is needed to allow
  the driver to be used on both 32 and 64 bit platforms.

Modified:
  projects/arm64/sys/arm/arm/generic_timer.c
  projects/arm64/sys/arm64/arm64/clock.c
  projects/arm64/sys/arm64/arm64/machdep.c
  projects/arm64/sys/conf/files.arm64

Modified: projects/arm64/sys/arm/arm/generic_timer.c
==============================================================================
--- projects/arm64/sys/arm/arm/generic_timer.c	Wed Aug 13 12:35:11 2014	(r269929)
+++ projects/arm64/sys/arm/arm/generic_timer.c	Wed Aug 13 12:35:30 2014	(r269930)
@@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/ofw_bus_subr.h>
 
 #include <machine/bus.h>
-#include <machine/fdt.h>
+//#include <machine/fdt.h>
 
 #define	GT_CTRL_ENABLE		(1 << 0)
 #define	GT_CTRL_INT_MASK	(1 << 1)
@@ -106,29 +106,20 @@ get_freq(void)
 {
 	uint32_t val;
 
-	__asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (val));
+	//__asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (val));
+	__asm volatile("mrs %x0, cntfrq_el0" : "=r" (val));
 
 	return (val);
 }
 
-static inline int
-set_freq(uint32_t val)
-{
-
-	__asm volatile("mcr p15, 0, %[val], c14, c0, 0" : :
-	    [val] "r" (val));
-	isb();
-
-	return (val);
-}
-
-
 static inline long
 get_cntpct(void)
 {
 	uint64_t val;
 
-	__asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (val));
+	//__asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (val));
+	isb();
+	__asm volatile("mrs %0, cntvct_el0" : "=r" (val));
 
 	return (val);
 }
@@ -137,8 +128,9 @@ static inline int
 set_ctrl(uint32_t val)
 {
 
-	__asm volatile("mcr p15, 0, %[val], c14, c2, 1" : :
-	    [val] "r" (val));
+	//__asm volatile("mcr p15, 0, %[val], c14, c2, 1" : :
+	//    [val] "r" (val));
+	__asm volatile("msr cntv_ctl_el0, %x0" : : "r" (val));
 	isb();
 
 	return (0);
@@ -148,8 +140,9 @@ static inline int
 set_tval(uint32_t val)
 {
 
-	__asm volatile("mcr p15, 0, %[val], c14, c2, 0" : :
-	    [val] "r" (val));
+	//__asm volatile("mcr p15, 0, %[val], c14, c2, 0" : :
+	//    [val] "r" (val));
+	__asm volatile("msr cntv_tval_el0, %x0" : : "r" (val));
 	isb();
 
 	return (0);
@@ -160,17 +153,8 @@ get_ctrl(void)
 {
 	uint32_t val;
 
-	__asm volatile("mrc p15, 0, %0, c14, c2, 1" : "=r" (val));
-
-	return (val);
-}
-
-static inline int
-get_tval(void)
-{
-	uint32_t val;
-
-	__asm volatile("mrc p15, 0, %0, c14, c2, 0" : "=r" (val));
+	//__asm volatile("mrc p15, 0, %0, c14, c2, 1" : "=r" (val));
+	__asm volatile("mrs %x0, cntv_ctl_el0" : "=r" (val));
 
 	return (val);
 }
@@ -180,13 +164,18 @@ disable_user_access(void)
 {
 	uint32_t cntkctl;
 
-	__asm volatile("mrc p15, 0, %0, c14, c1, 0" : "=r" (cntkctl));
+	//__asm volatile("mrc p15, 0, %0, c14, c1, 0" : "=r" (cntkctl));
+	__asm volatile("mrs %x0, cntkctl_el1" : "=r" (cntkctl));
 	cntkctl &= ~(GT_CNTKCTL_PL0PTEN | GT_CNTKCTL_PL0VTEN |
-	    GT_CNTKCTL_EVNTEN | GT_CNTKCTL_PL0VCTEN | GT_CNTKCTL_PL0PCTEN);
-	__asm volatile("mcr p15, 0, %0, c14, c1, 0" : : "r" (cntkctl));
+	    GT_CNTKCTL_EVNTEN | GT_CNTKCTL_PL0VCTEN | GT_CNTKCTL_PL0PCTEN |
+	    0xf << 4);
+	cntkctl |= GT_CNTKCTL_EVNTEN | 0 << 4;
+	//__asm volatile("mcr p15, 0, %0, c14, c1, 0" : : "r" (cntkctl));
+	__asm volatile("msr cntkctl_el1, %x0" :: "r" (cntkctl));
 	isb();
 }
 
+
 static unsigned
 arm_tmr_get_timecount(struct timecounter *tc)
 {
@@ -213,7 +202,6 @@ arm_tmr_start(struct eventtimer *et, sbi
 	}
 
 	return (EINVAL);
-
 }
 
 static int
@@ -254,10 +242,15 @@ arm_tmr_probe(device_t dev)
 	if (!ofw_bus_status_okay(dev))
 		return (ENXIO);
 
-	if (!ofw_bus_is_compatible(dev, "arm,armv7-timer"))
+	if (!ofw_bus_is_compatible(dev, "arm,armv7-timer") &&
+	    !ofw_bus_is_compatible(dev, "arm,armv8-timer"))
 		return (ENXIO);
 
+#if 0
 	device_set_desc(dev, "ARMv7 Generic Timer");
+#else
+	device_set_desc(dev, "ARMv8 Generic Timer");
+#endif
 	return (BUS_PROBE_DEFAULT);
 }
 
@@ -300,7 +293,7 @@ arm_tmr_attach(device_t dev)
 	arm_tmr_sc = sc;
 
 	/* Setup secure and non-secure IRQs handler */
-	for (i = 0; i < 2; i++) {
+	for (i = 0; i < 4; i++) {
 		error = bus_setup_intr(dev, sc->res[i], INTR_TYPE_CLK,
 		    arm_tmr_intr, NULL, sc, &sc->ihl[i]);
 		if (error) {
@@ -345,6 +338,8 @@ static devclass_t arm_tmr_devclass;
 
 EARLY_DRIVER_MODULE(timer, simplebus, arm_tmr_driver, arm_tmr_devclass, 0, 0,
     BUS_PASS_TIMER + BUS_PASS_ORDER_MIDDLE);
+EARLY_DRIVER_MODULE(timer, ofwbus, arm_tmr_driver, arm_tmr_devclass, 0, 0,
+    BUS_PASS_TIMER + BUS_PASS_ORDER_MIDDLE);
 
 void
 DELAY(int usec)
@@ -360,10 +355,10 @@ DELAY(int usec)
 		for (; usec > 0; usec--)
 			for (counts = 200; counts > 0; counts--)
 				/*
-				 * Prevent gcc from optimizing
+				 * Prevent the compiler from optimizing
 				 * out the loop
 				 */
-				cpufunc_nullop();
+				__asm __volatile("nop" ::: "memory");
 		return;
 	}
 
@@ -389,3 +384,4 @@ DELAY(int usec)
 		first = last;
 	}
 }
+

Modified: projects/arm64/sys/arm64/arm64/clock.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/clock.c	Wed Aug 13 12:35:11 2014	(r269929)
+++ projects/arm64/sys/arm64/arm64/clock.c	Wed Aug 13 12:35:30 2014	(r269930)
@@ -35,5 +35,5 @@ void
 cpu_initclocks(void)
 {
 
-	printf("cpu_initclocks\n");
+	cpu_initclocks_bsp();
 }

Modified: projects/arm64/sys/arm64/arm64/machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/machdep.c	Wed Aug 13 12:35:11 2014	(r269929)
+++ projects/arm64/sys/arm64/arm64/machdep.c	Wed Aug 13 12:35:30 2014	(r269930)
@@ -147,13 +147,6 @@ set_dbregs(struct thread *td, struct dbr
 	panic("set_dbregs");
 }
 
-void
-DELAY(int delay)
-{
-
-	/* TODO: Implement... */
-}
-
 int
 ptrace_set_pc(struct thread *td, u_long addr)
 {

Modified: projects/arm64/sys/conf/files.arm64
==============================================================================
--- projects/arm64/sys/conf/files.arm64	Wed Aug 13 12:35:11 2014	(r269929)
+++ projects/arm64/sys/conf/files.arm64	Wed Aug 13 12:35:30 2014	(r269930)
@@ -1,5 +1,6 @@
 
 arm/arm/devmap.c		standard
+arm/arm/generic_timer.c		standard
 arm/arm/gic.c			standard
 arm64/arm64/autoconf.c		standard
 arm64/arm64/bcopy.c		standard

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 12:35:36 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 47855DAD;
 Wed, 13 Aug 2014 12:35:36 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3498D2157;
 Wed, 13 Aug 2014 12:35:36 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DCZa6d006813;
 Wed, 13 Aug 2014 12:35:36 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DCZaup006811;
 Wed, 13 Aug 2014 12:35:36 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408131235.s7DCZaup006811@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Wed, 13 Aug 2014 12:35:36 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269931 - projects/arm64/sys/arm64/arm64
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 12:35:36 -0000

Author: andrew
Date: Wed Aug 13 12:35:35 2014
New Revision: 269931
URL: http://svnweb.freebsd.org/changeset/base/269931

Log:
  Implement cpu_idle correctly

Modified:
  projects/arm64/sys/arm64/arm64/machdep.c

Modified: projects/arm64/sys/arm64/arm64/machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/machdep.c	Wed Aug 13 12:35:30 2014	(r269930)
+++ projects/arm64/sys/arm64/arm64/machdep.c	Wed Aug 13 12:35:35 2014	(r269931)
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/ptrace.h>
 #include <sys/reboot.h>
 #include <sys/rwlock.h>
+#include <sys/sched.h>
 #include <sys/signalvar.h>
 #include <sys/sysproto.h>
 #include <sys/ucontext.h>
@@ -196,7 +197,16 @@ void
 cpu_idle(int busy)
 {
 
-	/* Insert code to halt (until next interrupt) for the idle loop. */
+	spinlock_enter();
+	if (!busy)
+		cpu_idleclock();
+	if (!sched_runnable())
+		__asm __volatile(
+		    "dsb sy \n"
+		    "wfi    \n");
+	if (!busy)
+		cpu_activeclock();
+	spinlock_exit();
 }
 
 void

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 12:35:40 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 29C3EE94;
 Wed, 13 Aug 2014 12:35:40 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 16EAB215B;
 Wed, 13 Aug 2014 12:35:40 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DCZdHX006863;
 Wed, 13 Aug 2014 12:35:39 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DCZd05006862;
 Wed, 13 Aug 2014 12:35:39 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408131235.s7DCZd05006862@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Wed, 13 Aug 2014 12:35:39 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269932 - projects/arm64/sys/dev/random
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 12:35:40 -0000

Author: andrew
Date: Wed Aug 13 12:35:39 2014
New Revision: 269932
URL: http://svnweb.freebsd.org/changeset/base/269932

Log:
  Enable random, sleeping now works

Modified:
  projects/arm64/sys/dev/random/random_adaptors.c

Modified: projects/arm64/sys/dev/random/random_adaptors.c
==============================================================================
--- projects/arm64/sys/dev/random/random_adaptors.c	Wed Aug 13 12:35:35 2014	(r269931)
+++ projects/arm64/sys/dev/random/random_adaptors.c	Wed Aug 13 12:35:39 2014	(r269932)
@@ -242,13 +242,10 @@ static void
 random_adaptors_reseed(void *unused)
 {
 
-	/* TODO: This sleeps which is broken on arm64 */
-#if 0
 	(void)unused;
 	if (random_adaptor != NULL)
 		(*random_adaptor->reseed)();
 	arc4rand(NULL, 0, 1);
-#endif
 }
 SYSINIT(random_reseed, SI_SUB_INTRINSIC_POST, SI_ORDER_SECOND,
     random_adaptors_reseed, NULL);

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 15:29:29 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D61AC7E3;
 Wed, 13 Aug 2014 15:29:29 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C264E261D;
 Wed, 13 Aug 2014 15:29:29 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DFTTRl085867;
 Wed, 13 Aug 2014 15:29:29 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DFTTXd085865;
 Wed, 13 Aug 2014 15:29:29 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408131529.s7DFTTXd085865@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 15:29:29 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269943 - projects/ipfw/sbin/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 15:29:30 -0000

Author: melifaro
Date: Wed Aug 13 15:29:29 2014
New Revision: 269943
URL: http://svnweb.freebsd.org/changeset/base/269943

Log:
  Document table set-awareness in ipfw(8).

Modified:
  projects/ipfw/sbin/ipfw/ipfw.8

Modified: projects/ipfw/sbin/ipfw/ipfw.8
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw.8	Wed Aug 13 14:49:51 2014	(r269942)
+++ projects/ipfw/sbin/ipfw/ipfw.8	Wed Aug 13 15:29:29 2014	(r269943)
@@ -48,41 +48,41 @@ in-kernel NAT.
 .Brq Cm firewall | altq | one_pass | debug | verbose | dyn_keepalive
 .Ss LOOKUP TABLES
 .Nm
-.Cm table Ar name Cm create Ar create-options
+.Oo Cm set Ar N Oc Cm table Ar name Cm create Ar create-options
 .Nm
-.Cm table Ar name Cm destroy
+.Oo Cm set Ar N Oc Cm table Ar name Cm destroy
 .Nm
-.Cm table Ar name Cm modify Ar modify-options
+.Oo Cm set Ar N Oc Cm table Ar name Cm modify Ar modify-options
 .Nm
-.Cm table Ar name Cm swap Ar name
+.Oo Cm set Ar N Oc Cm table Ar name Cm swap Ar name
 .Nm
-.Cm table Ar name Cm add Ar table-key Op Ar value
+.Oo Cm set Ar N Oc Cm table Ar name Cm add Ar table-key Op Ar value
 .Nm
-.Cm table Ar name Cm add Op Ar table-key Ar value ...
+.Oo Cm set Ar N Oc Cm table Ar name Cm add Op Ar table-key Ar value ...
 .Nm
-.Cm table Ar name Cm atomic add Op Ar table-key Ar value ...
+.Oo Cm set Ar N Oc Cm table Ar name Cm atomic add Op Ar table-key Ar value ...
 .Nm
-.Cm table Ar name Cm delete Op Ar table-key ...
+.Oo Cm set Ar N Oc Cm table Ar name Cm delete Op Ar table-key ...
 .Nm
-.Cm table Ar name Cm lookup Ar addr
+.Oo Cm set Ar N Oc Cm table Ar name Cm lookup Ar addr
 .Nm
-.Cm table Ar name Cm lock
+.Oo Cm set Ar N Oc Cm table Ar name Cm lock
 .Nm
-.Cm table Ar name Cm unlock
+.Oo Cm set Ar N Oc Cm table Ar name Cm unlock
 .Nm
-.Cm table
+.Oo Cm set Ar N Oc Cm table
 .Brq Ar name | all
 .Cm list
 .Nm
-.Cm table
+.Oo Cm set Ar N Oc Cm table
 .Brq Ar name | all
 .Cm info 
 .Nm
-.Cm table
+.Oo Cm set Ar N Oc Cm table
 .Brq Ar name | all
 .Cm detail
 .Nm
-.Cm table
+.Oo Cm set Ar N Oc Cm table
 .Brq Ar name | all
 .Cm flush
 .Ss DUMMYNET CONFIGURATION (TRAFFIC SHAPER AND PACKET SCHEDULER)
@@ -1867,6 +1867,17 @@ addresses or other search keys (e.g., po
 In the rest of this section we will use the term ``key''.
 Table name needs to match the following spec:
 .Ar table-name .
+Tables with the same name can be created in different 
+.Ar sets .
+However, rule links to the tables in
+.Ar set 0
+by default.
+This behavior can be controlled by
+.Va net.inet.ip.fw.tables_sets
+variable.
+See the
+.Sx SETS OF RULES
+section for more information.
 There may be up to 65535 different lookup tables.
 .Pp
 The following table types are supported:
@@ -2058,6 +2069,7 @@ The following value types are supported:
 Default value type.
 If value is not specified, defaults to 0.
 .El
+.Pp
 The
 .Cm tablearg
 argument can be used with the following actions:
@@ -2082,17 +2094,25 @@ up to a rule equal to, or past, the give
 and should therefore try keep the
 ruleset compact between the skipto and the target rules.
 .Sh SETS OF RULES
-Each rule belongs to one of 32 different
+Each rule or table belongs to one of 32 different
 .Em sets
 , numbered 0 to 31.
 Set 31 is reserved for the default rule.
 .Pp
-By default, rules are put in set 0, unless you use the
+By default, rules or tables are put in set 0, unless you use the
 .Cm set N
-attribute when entering a new rule.
+attribute when adding a new rule or table.
 Sets can be individually and atomically enabled or disabled,
 so this mechanism permits an easy way to store multiple configurations
 of the firewall and quickly (and atomically) switch between them.
+.Pp
+By default, tables from set 0 are referenced when adding rule with
+table opcodes regardless of rule set.
+This behavior can be changed by setting
+.Va net.inet.ip.fw.tables_set
+variable to 1.
+Rule's set will then be used for table references.
+.Pp
 The command to enable/disable sets is
 .Bd -ragged -offset indent
 .Nm

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 16:20:52 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D0F68355;
 Wed, 13 Aug 2014 16:20:52 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id B79D52CB2;
 Wed, 13 Aug 2014 16:20:52 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DGKqPN012778;
 Wed, 13 Aug 2014 16:20:52 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DGKlL4012749;
 Wed, 13 Aug 2014 16:20:47 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408131620.s7DGKlL4012749@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 16:20:47 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269947 - in projects/ipfw: . bin/chio bin/csh
 bin/date/tests bin/freebsd-version bin/ls bin/mv bin/pkill bin/ps bin/rm
 bin/setfacl bin/sh bin/sh/tests bin/sh/tests/builtins bin/sh/test...
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 16:20:52 -0000

Author: melifaro
Date: Wed Aug 13 16:20:41 2014
New Revision: 269947
URL: http://svnweb.freebsd.org/changeset/base/269947

Log:
  Sync to HEAD@r269943.

Added:
  projects/ipfw/bin/date/tests/format_string_test.sh
     - copied unchanged from r269943, head/bin/date/tests/format_string_test.sh
  projects/ipfw/bin/sh/tests/builtins/break6.0
     - copied unchanged from r269943, head/bin/sh/tests/builtins/break6.0
  projects/ipfw/bin/sh/tests/functional_test.sh
     - copied unchanged from r269943, head/bin/sh/tests/functional_test.sh
  projects/ipfw/bin/sh/tests/parameters/positional3.0
     - copied unchanged from r269943, head/bin/sh/tests/parameters/positional3.0
  projects/ipfw/bin/sh/tests/parameters/positional4.0
     - copied unchanged from r269943, head/bin/sh/tests/parameters/positional4.0
  projects/ipfw/bin/sh/tests/parameters/positional5.0
     - copied unchanged from r269943, head/bin/sh/tests/parameters/positional5.0
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggencoding.d
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggencoding.d
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggencoding.d.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggencoding.d.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.agghist.d
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.agghist.d
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.agghist.d.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.agghist.d.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpack.d
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpack.d
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpack.d.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpack.d.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackbanner.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackbanner.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackbanner.ksh.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackbanner.ksh.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackzoom.d
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackzoom.d
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackzoom.d.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggpackzoom.d.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggzoom.d
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggzoom.d
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggzoom.d.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.aggzoom.d.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/
     - copied from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.fds.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.fds.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.getf.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.getf.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.procpriv.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.procpriv.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.providers.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.providers.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/strtoll/
     - copied from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/strtoll/
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/uctf/
     - copied from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/uctf/
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.multiprov.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.multiprov.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.multiprov.ksh.out
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.multiprov.ksh.out
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.noprobes.ksh
     - copied unchanged from r269943, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.noprobes.ksh
  projects/ipfw/cddl/contrib/opensolaris/common/util/
     - copied from r269943, head/cddl/contrib/opensolaris/common/util/
  projects/ipfw/contrib/file/config.guess
     - copied unchanged from r269943, head/contrib/file/config.guess
  projects/ipfw/contrib/file/config.sub
     - copied unchanged from r269943, head/contrib/file/config.sub
  projects/ipfw/contrib/file/depcomp
     - copied unchanged from r269943, head/contrib/file/depcomp
  projects/ipfw/contrib/file/doc/
     - copied from r269943, head/contrib/file/doc/
  projects/ipfw/contrib/file/ltmain.sh
     - copied unchanged from r269943, head/contrib/file/ltmain.sh
  projects/ipfw/contrib/file/m4/
     - copied from r269943, head/contrib/file/m4/
  projects/ipfw/contrib/file/magic/
     - copied from r269943, head/contrib/file/magic/
  projects/ipfw/contrib/file/missing
     - copied unchanged from r269943, head/contrib/file/missing
  projects/ipfw/contrib/file/python/
     - copied from r269943, head/contrib/file/python/
  projects/ipfw/contrib/file/src/
     - copied from r269943, head/contrib/file/src/
  projects/ipfw/contrib/file/tests/escapevel.result
     - copied unchanged from r269943, head/contrib/file/tests/escapevel.result
  projects/ipfw/contrib/file/tests/escapevel.testfile
     - copied unchanged from r269943, head/contrib/file/tests/escapevel.testfile
  projects/ipfw/contrib/file/tests/issue311docx.result
     - copied unchanged from r269943, head/contrib/file/tests/issue311docx.result
  projects/ipfw/contrib/file/tests/issue311docx.testfile
     - copied unchanged from r269943, head/contrib/file/tests/issue311docx.testfile
  projects/ipfw/contrib/libucl/ChangeLog.md
     - copied unchanged from r269943, head/contrib/libucl/ChangeLog.md
  projects/ipfw/contrib/libucl/src/ucl_emitter_streamline.c
     - copied unchanged from r269943, head/contrib/libucl/src/ucl_emitter_streamline.c
  projects/ipfw/contrib/libucl/src/ucl_emitter_utils.c
     - copied unchanged from r269943, head/contrib/libucl/src/ucl_emitter_utils.c
  projects/ipfw/contrib/libucl/tests/basic/11.in
     - copied unchanged from r269943, head/contrib/libucl/tests/basic/11.in
  projects/ipfw/contrib/libucl/tests/basic/11.res
     - copied unchanged from r269943, head/contrib/libucl/tests/basic/11.res
  projects/ipfw/contrib/libucl/tests/streamline.res
     - copied unchanged from r269943, head/contrib/libucl/tests/streamline.res
  projects/ipfw/contrib/libucl/tests/streamline.test
     - copied unchanged from r269943, head/contrib/libucl/tests/streamline.test
  projects/ipfw/contrib/libucl/tests/test_streamline.c
     - copied unchanged from r269943, head/contrib/libucl/tests/test_streamline.c
  projects/ipfw/contrib/llvm/patches/patch-r267704-llvm-r211435-fix-avx-backend.diff
     - copied unchanged from r269943, head/contrib/llvm/patches/patch-r267704-llvm-r211435-fix-avx-backend.diff
  projects/ipfw/contrib/llvm/patches/patch-r267981-llvm-r211435-fix-ppc-fctiduz.diff
     - copied unchanged from r269943, head/contrib/llvm/patches/patch-r267981-llvm-r211435-fix-ppc-fctiduz.diff
  projects/ipfw/contrib/subversion/subversion/include/private/svn_cert.h
     - copied unchanged from r269943, head/contrib/subversion/subversion/include/private/svn_cert.h
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod
     - copied unchanged from r269943, head/crypto/openssl/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod
  projects/ipfw/crypto/openssl/ssl/ssl_utst.c
     - copied unchanged from r269943, head/crypto/openssl/ssl/ssl_utst.c
  projects/ipfw/lib/libc/arm/aeabi/aeabi_unwind_exidx.c
     - copied unchanged from r269943, head/lib/libc/arm/aeabi/aeabi_unwind_exidx.c
  projects/ipfw/lib/libc/md/
     - copied from r269943, head/lib/libc/md/
  projects/ipfw/lib/libedit/TEST/tc1.c
     - copied unchanged from r269943, head/lib/libedit/TEST/tc1.c
  projects/ipfw/lib/libmp/tests/
     - copied from r269943, head/lib/libmp/tests/
  projects/ipfw/lib/libnv/tests/
     - copied from r269943, head/lib/libnv/tests/
  projects/ipfw/lib/libohash/
     - copied from r269943, head/lib/libohash/
  projects/ipfw/lib/libstand/pkgfs.c
     - copied unchanged from r269943, head/lib/libstand/pkgfs.c
  projects/ipfw/lib/libthr/plockstat.d
     - copied unchanged from r269943, head/lib/libthr/plockstat.d
  projects/ipfw/lib/libutil/tests/
     - copied from r269943, head/lib/libutil/tests/
  projects/ipfw/lib/msun/ld128/s_erfl.c
     - copied unchanged from r269943, head/lib/msun/ld128/s_erfl.c
  projects/ipfw/lib/msun/ld80/s_erfl.c
     - copied unchanged from r269943, head/lib/msun/ld80/s_erfl.c
  projects/ipfw/libexec/rtld-elf/tests/
     - copied from r269943, head/libexec/rtld-elf/tests/
  projects/ipfw/sbin/camcontrol/persist.c
     - copied unchanged from r269943, head/sbin/camcontrol/persist.c
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.3
     - copied unchanged from r269943, head/secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.3
  projects/ipfw/share/dtrace/disklatency
     - copied unchanged from r269943, head/share/dtrace/disklatency
  projects/ipfw/share/dtrace/disklatencycmd
     - copied unchanged from r269943, head/share/dtrace/disklatencycmd
  projects/ipfw/share/examples/hwpmc/Makefile
     - copied unchanged from r269943, head/share/examples/hwpmc/Makefile
  projects/ipfw/share/examples/hwpmc/overhead.c
     - copied unchanged from r269943, head/share/examples/hwpmc/overhead.c
  projects/ipfw/share/man/man9/PCBGROUP.9
     - copied unchanged from r269943, head/share/man/man9/PCBGROUP.9
  projects/ipfw/share/man/man9/fpu_kern.9
     - copied unchanged from r269943, head/share/man/man9/fpu_kern.9
  projects/ipfw/share/man/man9/pmap_protect.9
     - copied unchanged from r269943, head/share/man/man9/pmap_protect.9
  projects/ipfw/share/man/man9/pmap_unwire.9
     - copied unchanged from r269943, head/share/man/man9/pmap_unwire.9
  projects/ipfw/share/mk/src.libnames.mk
     - copied unchanged from r269943, head/share/mk/src.libnames.mk
  projects/ipfw/share/vt/fonts/vgarom-thin-8x16.hex
     - copied unchanged from r269943, head/share/vt/fonts/vgarom-thin-8x16.hex
  projects/ipfw/share/vt/fonts/vgarom-thin-8x8.hex
     - copied unchanged from r269943, head/share/vt/fonts/vgarom-thin-8x8.hex
  projects/ipfw/share/vt/keymaps/pl.kbd
     - copied unchanged from r269943, head/share/vt/keymaps/pl.kbd
  projects/ipfw/sys/arm/conf/APALIS-IMX6
     - copied unchanged from r269943, head/sys/arm/conf/APALIS-IMX6
  projects/ipfw/sys/arm/conf/CHROMEBOOK-PEACH-PIT
     - copied unchanged from r269943, head/sys/arm/conf/CHROMEBOOK-PEACH-PIT
  projects/ipfw/sys/arm/conf/CHROMEBOOK-PEACH-PIT.hints
     - copied unchanged from r269943, head/sys/arm/conf/CHROMEBOOK-PEACH-PIT.hints
  projects/ipfw/sys/arm/freescale/imx/imx_gpio.c
     - copied unchanged from r269943, head/sys/arm/freescale/imx/imx_gpio.c
  projects/ipfw/sys/arm/freescale/imx/imx_i2c.c
     - copied unchanged from r269943, head/sys/arm/freescale/imx/imx_i2c.c
  projects/ipfw/sys/arm/freescale/vybrid/vf_adc.c
     - copied unchanged from r269943, head/sys/arm/freescale/vybrid/vf_adc.c
  projects/ipfw/sys/arm/freescale/vybrid/vf_adc.h
     - copied unchanged from r269943, head/sys/arm/freescale/vybrid/vf_adc.h
  projects/ipfw/sys/arm/samsung/exynos/chrome_ec_spi.c
     - copied unchanged from r269943, head/sys/arm/samsung/exynos/chrome_ec_spi.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_pmu.c
     - copied unchanged from r269943, head/sys/arm/samsung/exynos/exynos5_pmu.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_pmu.h
     - copied unchanged from r269943, head/sys/arm/samsung/exynos/exynos5_pmu.h
  projects/ipfw/sys/arm/samsung/exynos/exynos5_spi.c
     - copied unchanged from r269943, head/sys/arm/samsung/exynos/exynos5_spi.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_usb_phy.c
     - copied unchanged from r269943, head/sys/arm/samsung/exynos/exynos5_usb_phy.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_xhci.c
     - copied unchanged from r269943, head/sys/arm/samsung/exynos/exynos5_xhci.c
  projects/ipfw/sys/boot/common/install.c
     - copied unchanged from r269943, head/sys/boot/common/install.c
  projects/ipfw/sys/boot/fdt/dts/arm/apalis-imx6.dts
     - copied unchanged from r269943, head/sys/boot/fdt/dts/arm/apalis-imx6.dts
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5250-snow.dts
     - copied unchanged from r269943, head/sys/boot/fdt/dts/arm/exynos5250-snow.dts
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5250-spring.dts
     - copied unchanged from r269943, head/sys/boot/fdt/dts/arm/exynos5250-spring.dts
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5420-peach-pit.dts
     - copied unchanged from r269943, head/sys/boot/fdt/dts/arm/exynos5420-peach-pit.dts
  projects/ipfw/sys/boot/kshim/
     - copied from r269943, head/sys/boot/kshim/
  projects/ipfw/sys/boot/usb/tools/Makefile
     - copied unchanged from r269943, head/sys/boot/usb/tools/Makefile
  projects/ipfw/sys/boot/usb/usbcore.mk
     - copied unchanged from r269943, head/sys/boot/usb/usbcore.mk
  projects/ipfw/sys/cam/ctl/ctl_tpc.c
     - copied unchanged from r269943, head/sys/cam/ctl/ctl_tpc.c
  projects/ipfw/sys/cam/ctl/ctl_tpc.h
     - copied unchanged from r269943, head/sys/cam/ctl/ctl_tpc.h
  projects/ipfw/sys/cam/ctl/ctl_tpc_local.c
     - copied unchanged from r269943, head/sys/cam/ctl/ctl_tpc_local.c
  projects/ipfw/sys/cddl/boot/zfs/blkptr.c
     - copied unchanged from r269943, head/sys/cddl/boot/zfs/blkptr.c
  projects/ipfw/sys/cddl/contrib/opensolaris/common/util/
     - copied from r269943, head/sys/cddl/contrib/opensolaris/common/util/
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/blkptr.c
     - copied unchanged from r269943, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/blkptr.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/blkptr.h
     - copied unchanged from r269943, head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/blkptr.h
  projects/ipfw/sys/dev/cxgbe/firmware/t4fw-1.11.27.0.bin.uu
     - copied unchanged from r269943, head/sys/dev/cxgbe/firmware/t4fw-1.11.27.0.bin.uu
  projects/ipfw/sys/dev/cxgbe/firmware/t5fw-1.11.27.0.bin.uu
     - copied unchanged from r269943, head/sys/dev/cxgbe/firmware/t5fw-1.11.27.0.bin.uu
  projects/ipfw/sys/dev/fb/creator_vt.c
     - copied unchanged from r269943, head/sys/dev/fb/creator_vt.c
  projects/ipfw/sys/dev/i40e/README
     - copied unchanged from r269943, head/sys/dev/i40e/README
  projects/ipfw/sys/dev/usb/template/usb_template_phone.c
     - copied unchanged from r269943, head/sys/dev/usb/template/usb_template_phone.c
  projects/ipfw/sys/dev/vt/hw/vga/vt_vga.c
     - copied unchanged from r269943, head/sys/dev/vt/hw/vga/vt_vga.c
  projects/ipfw/sys/dev/vt/hw/vga/vt_vga_reg.h
     - copied unchanged from r269943, head/sys/dev/vt/hw/vga/vt_vga_reg.h
  projects/ipfw/sys/dev/xen/pvcpu/
     - copied from r269943, head/sys/dev/xen/pvcpu/
  projects/ipfw/sys/kern/subr_sfbuf.c
     - copied unchanged from r269943, head/sys/kern/subr_sfbuf.c
  projects/ipfw/sys/modules/tsec/
     - copied from r269943, head/sys/modules/tsec/
  projects/ipfw/sys/rpc/clnt_bck.c
     - copied unchanged from r269943, head/sys/rpc/clnt_bck.c
  projects/ipfw/sys/x86/xen/xen_apic.c
     - copied unchanged from r269943, head/sys/x86/xen/xen_apic.c
  projects/ipfw/sys/x86/xen/xen_nexus.c
     - copied unchanged from r269943, head/sys/x86/xen/xen_nexus.c
  projects/ipfw/sys/x86/xen/xenpv.c
     - copied unchanged from r269943, head/sys/x86/xen/xenpv.c
  projects/ipfw/sys/xen/xen_pv.h
     - copied unchanged from r269943, head/sys/xen/xen_pv.h
  projects/ipfw/tools/build/options/WITHOUT_TESTS
     - copied unchanged from r269943, head/tools/build/options/WITHOUT_TESTS
  projects/ipfw/tools/build/options/WITHOUT_VT
     - copied unchanged from r269943, head/tools/build/options/WITHOUT_VT
  projects/ipfw/tools/build/options/WITH_INFO
     - copied unchanged from r269943, head/tools/build/options/WITH_INFO
  projects/ipfw/tools/tools/nanobsd/rescue/R32
     - copied unchanged from r269943, head/tools/tools/nanobsd/rescue/R32
  projects/ipfw/tools/tools/nanobsd/rescue/R64
     - copied unchanged from r269943, head/tools/tools/nanobsd/rescue/R64
  projects/ipfw/usr.bin/gcore/elf32core.c
     - copied unchanged from r269943, head/usr.bin/gcore/elf32core.c
  projects/ipfw/usr.bin/mkimg/vhd.c
     - copied unchanged from r269943, head/usr.bin/mkimg/vhd.c
  projects/ipfw/usr.bin/send-pr/
     - copied from r269943, head/usr.bin/send-pr/
  projects/ipfw/usr.bin/timeout/
     - copied from r269943, head/usr.bin/timeout/
  projects/ipfw/usr.bin/units/tests/
     - copied from r269943, head/usr.bin/units/tests/
  projects/ipfw/usr.bin/users/users.cc
     - copied unchanged from r269943, head/usr.bin/users/users.cc
  projects/ipfw/usr.bin/yacc/tests/yacc_tests.sh
     - copied unchanged from r269943, head/usr.bin/yacc/tests/yacc_tests.sh
  projects/ipfw/usr.sbin/bhyve/task_switch.c
     - copied unchanged from r269943, head/usr.sbin/bhyve/task_switch.c
  projects/ipfw/usr.sbin/bsdconfig/examples/add_some_packages.sh
     - copied unchanged from r269943, head/usr.sbin/bsdconfig/examples/add_some_packages.sh
  projects/ipfw/usr.sbin/bsdconfig/share/packages/musthavepkg.subr
     - copied unchanged from r269943, head/usr.sbin/bsdconfig/share/packages/musthavepkg.subr
  projects/ipfw/usr.sbin/chown/tests/
     - copied from r269943, head/usr.sbin/chown/tests/
Replaced:
  projects/ipfw/release/amd64/make-memstick.sh
     - copied unchanged from r269943, head/release/amd64/make-memstick.sh
  projects/ipfw/sys/dev/iicbus/iic.h
     - copied unchanged from r269943, head/sys/dev/iicbus/iic.h
  projects/ipfw/sys/sparc64/include/sf_buf.h
     - copied unchanged from r269943, head/sys/sparc64/include/sf_buf.h
Deleted:
  projects/ipfw/bin/date/tests/legacy_test.sh
  projects/ipfw/bin/sh/tests/legacy_test.sh
  projects/ipfw/contrib/byacc/NOTES-btyacc-Changes
  projects/ipfw/contrib/byacc/NOTES-btyacc-Disposition
  projects/ipfw/contrib/file/Header
  projects/ipfw/contrib/file/Localstuff
  projects/ipfw/contrib/file/Magdir/
  projects/ipfw/contrib/file/Makefile.am-src
  projects/ipfw/contrib/file/apprentice.c
  projects/ipfw/contrib/file/apptype.c
  projects/ipfw/contrib/file/ascmagic.c
  projects/ipfw/contrib/file/asprintf.c
  projects/ipfw/contrib/file/cdf.c
  projects/ipfw/contrib/file/cdf.h
  projects/ipfw/contrib/file/cdf_time.c
  projects/ipfw/contrib/file/compress.c
  projects/ipfw/contrib/file/elfclass.h
  projects/ipfw/contrib/file/encoding.c
  projects/ipfw/contrib/file/file.c
  projects/ipfw/contrib/file/file.h
  projects/ipfw/contrib/file/file.man
  projects/ipfw/contrib/file/file_opts.h
  projects/ipfw/contrib/file/fsmagic.c
  projects/ipfw/contrib/file/funcs.c
  projects/ipfw/contrib/file/getline.c
  projects/ipfw/contrib/file/getopt_long.c
  projects/ipfw/contrib/file/is_tar.c
  projects/ipfw/contrib/file/libmagic.man
  projects/ipfw/contrib/file/magic.c
  projects/ipfw/contrib/file/magic.h
  projects/ipfw/contrib/file/magic.man
  projects/ipfw/contrib/file/magic2mime
  projects/ipfw/contrib/file/mygetopt.h
  projects/ipfw/contrib/file/names.h
  projects/ipfw/contrib/file/print.c
  projects/ipfw/contrib/file/readcdf.c
  projects/ipfw/contrib/file/readelf.c
  projects/ipfw/contrib/file/readelf.h
  projects/ipfw/contrib/file/softmagic.c
  projects/ipfw/contrib/file/strlcat.c
  projects/ipfw/contrib/file/strlcpy.c
  projects/ipfw/contrib/file/tar.h
  projects/ipfw/contrib/file/tests/gedcom.magic
  projects/ipfw/contrib/file/vasprintf.c
  projects/ipfw/contrib/unbound/util/configlexer.c
  projects/ipfw/contrib/unbound/util/configparser.c
  projects/ipfw/contrib/unbound/util/configparser.h
  projects/ipfw/crypto/openssl/crypto/pkcs7/bio_ber.c
  projects/ipfw/crypto/openssl/crypto/pkcs7/dec.c
  projects/ipfw/crypto/openssl/crypto/pkcs7/des.pem
  projects/ipfw/crypto/openssl/crypto/pkcs7/doc
  projects/ipfw/crypto/openssl/crypto/pkcs7/enc.c
  projects/ipfw/crypto/openssl/crypto/pkcs7/es1.pem
  projects/ipfw/crypto/openssl/crypto/pkcs7/example.c
  projects/ipfw/crypto/openssl/crypto/pkcs7/example.h
  projects/ipfw/crypto/openssl/crypto/pkcs7/info.pem
  projects/ipfw/crypto/openssl/crypto/pkcs7/infokey.pem
  projects/ipfw/crypto/openssl/crypto/pkcs7/p7/
  projects/ipfw/crypto/openssl/crypto/pkcs7/server.pem
  projects/ipfw/crypto/openssl/crypto/pkcs7/sign.c
  projects/ipfw/crypto/openssl/crypto/pkcs7/t/
  projects/ipfw/crypto/openssl/crypto/pkcs7/verify.c
  projects/ipfw/etc/etc.ia64/
  projects/ipfw/gnu/lib/libreadline/history/
  projects/ipfw/gnu/lib/libreadline/readline/doc/
  projects/ipfw/gnu/usr.bin/binutils/as/ia64-freebsd/
  projects/ipfw/gnu/usr.bin/binutils/ld/Makefile.ia64
  projects/ipfw/gnu/usr.bin/binutils/ld/elf64_ia64_fbsd.sh
  projects/ipfw/gnu/usr.bin/binutils/libbfd/Makefile.ia64
  projects/ipfw/gnu/usr.bin/binutils/libopcodes/Makefile.ia64
  projects/ipfw/gnu/usr.bin/gdb/arch/ia64/
  projects/ipfw/gnu/usr.bin/gdb/kgdb/trgt_ia64.c
  projects/ipfw/gnu/usr.bin/send-pr/
  projects/ipfw/lib/clang/include/IA64GenAsmWriter.inc
  projects/ipfw/lib/clang/include/IA64GenDAGISel.inc
  projects/ipfw/lib/clang/include/IA64GenInstrInfo.inc
  projects/ipfw/lib/clang/include/IA64GenRegisterInfo.inc
  projects/ipfw/lib/csu/ia64/
  projects/ipfw/lib/libc/ia64/
  projects/ipfw/lib/libedit/TEST/test.c
  projects/ipfw/lib/libkvm/kvm_ia64.c
  projects/ipfw/lib/libthr/arch/ia64/
  projects/ipfw/lib/libthread_db/arch/ia64/
  projects/ipfw/lib/msun/ia64/
  projects/ipfw/libexec/rtld-elf/ia64/
  projects/ipfw/release/amd64/make-uefi-memstick.sh
  projects/ipfw/release/amd64/mkisoimages-uefi.sh
  projects/ipfw/release/ia64/
  projects/ipfw/sbin/Makefile.ia64
  projects/ipfw/sbin/mca/
  projects/ipfw/secure/lib/libcrypto/opensslconf-ia64.h
  projects/ipfw/share/examples/cvsup/
  projects/ipfw/share/man/man9/VOP_GETVOBJECT.9
  projects/ipfw/share/man/man9/pmap_change_wiring.9
  projects/ipfw/share/man/man9/pmap_page_protect.9
  projects/ipfw/share/man/man9/zero_copy.9
  projects/ipfw/share/mk/bsd.dtrace.mk
  projects/ipfw/share/vt/fonts/vgarom-8x14.fnt.uu
  projects/ipfw/share/vt/fonts/vgarom-8x16.fnt.uu
  projects/ipfw/share/vt/fonts/vgarom-8x8.fnt.uu
  projects/ipfw/sys/amd64/conf/VT
  projects/ipfw/sys/arm/conf/AC100
  projects/ipfw/sys/arm/freescale/imx/i2c.c
  projects/ipfw/sys/arm/freescale/imx/imx51_gpio.c
  projects/ipfw/sys/arm/tegra/
  projects/ipfw/sys/boot/Makefile.ia64
  projects/ipfw/sys/boot/efi/include/ia64/
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5250-chromebook-snow.dts
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5250-chromebook-spring.dts
  projects/ipfw/sys/boot/ficl/ia64/
  projects/ipfw/sys/boot/ia64/
  projects/ipfw/sys/boot/usb/bsd_busspace.c
  projects/ipfw/sys/boot/usb/bsd_global.h
  projects/ipfw/sys/boot/usb/bsd_kernel.c
  projects/ipfw/sys/boot/usb/bsd_kernel.h
  projects/ipfw/sys/boot/usb/tools/sysinit.h
  projects/ipfw/sys/cddl/contrib/opensolaris/common/atomic/ia64/
  projects/ipfw/sys/cddl/dev/dtrace/dtrace_clone.c
  projects/ipfw/sys/conf/Makefile.ia64
  projects/ipfw/sys/conf/files.ia64
  projects/ipfw/sys/conf/ldscript.ia64
  projects/ipfw/sys/conf/options.ia64
  projects/ipfw/sys/contrib/ia64/
  projects/ipfw/sys/dev/cxgbe/firmware/t4fw-1.9.12.0.bin.uu
  projects/ipfw/sys/dev/cxgbe/firmware/t5fw-1.9.12.0.bin.uu
  projects/ipfw/sys/dev/hwpmc/hwpmc_ia64.c
  projects/ipfw/sys/dev/uart/uart_cpu_ia64.c
  projects/ipfw/sys/dev/vt/hw/vga/vga.c
  projects/ipfw/sys/dev/vt/hw/vga/vga_reg.h
  projects/ipfw/sys/i386/conf/VT
  projects/ipfw/sys/ia64/
  projects/ipfw/sys/libkern/ia64/
  projects/ipfw/sys/powerpc/include/sf_buf.h
  projects/ipfw/sys/xen/interface/arch-ia64/
  projects/ipfw/sys/xen/interface/arch-ia64.h
  projects/ipfw/tools/build/options/WITHOUT_VT_SUPPORT
  projects/ipfw/tools/build/options/WITH_TESTS
  projects/ipfw/tools/regression/ia64/
  projects/ipfw/tools/regression/lib/libmp/
  projects/ipfw/tools/regression/lib/libnv/
  projects/ipfw/tools/regression/lib/libutil/
  projects/ipfw/tools/tools/gdb_regofs/ia64.c
  projects/ipfw/tools/tools/prstats/
  projects/ipfw/usr.bin/Makefile.ia64
  projects/ipfw/usr.bin/csup/
  projects/ipfw/usr.bin/gprof/ia64.h
  projects/ipfw/usr.bin/m4/lib/
  projects/ipfw/usr.bin/truss/ia64-fbsd.c
  projects/ipfw/usr.bin/users/users.c
  projects/ipfw/usr.bin/xlint/arch/ia64/
  projects/ipfw/usr.bin/yacc/tests/calc.y
  projects/ipfw/usr.bin/yacc/tests/calc1.y
  projects/ipfw/usr.bin/yacc/tests/calc2.y
  projects/ipfw/usr.bin/yacc/tests/calc3.y
  projects/ipfw/usr.bin/yacc/tests/code_calc.y
  projects/ipfw/usr.bin/yacc/tests/code_error.y
  projects/ipfw/usr.bin/yacc/tests/error.y
  projects/ipfw/usr.bin/yacc/tests/ftp.y
  projects/ipfw/usr.bin/yacc/tests/grammar.y
  projects/ipfw/usr.bin/yacc/tests/legacy_test.sh
  projects/ipfw/usr.bin/yacc/tests/pure_calc.y
  projects/ipfw/usr.bin/yacc/tests/pure_error.y
  projects/ipfw/usr.bin/yacc/tests/quote_calc.y
  projects/ipfw/usr.bin/yacc/tests/quote_calc2.y
  projects/ipfw/usr.bin/yacc/tests/quote_calc3.y
  projects/ipfw/usr.bin/yacc/tests/quote_calc4.y
  projects/ipfw/usr.bin/yacc/tests/regress.00.out
  projects/ipfw/usr.bin/yacc/tests/regress.01.out
  projects/ipfw/usr.bin/yacc/tests/regress.02.out
  projects/ipfw/usr.bin/yacc/tests/regress.03.out
  projects/ipfw/usr.bin/yacc/tests/regress.04.out
  projects/ipfw/usr.bin/yacc/tests/regress.05.out
  projects/ipfw/usr.bin/yacc/tests/regress.06.out
  projects/ipfw/usr.bin/yacc/tests/regress.07.out
  projects/ipfw/usr.bin/yacc/tests/regress.08.out
  projects/ipfw/usr.bin/yacc/tests/regress.09.out
  projects/ipfw/usr.bin/yacc/tests/regress.10.out
  projects/ipfw/usr.bin/yacc/tests/regress.11.out
  projects/ipfw/usr.bin/yacc/tests/regress.12.out
  projects/ipfw/usr.bin/yacc/tests/regress.13.out
  projects/ipfw/usr.bin/yacc/tests/regress.14.out
  projects/ipfw/usr.bin/yacc/tests/regress.sh
  projects/ipfw/usr.bin/yacc/tests/undefined.y
  projects/ipfw/usr.sbin/Makefile.ia64
  projects/ipfw/usr.sbin/bsdconfig/examples/browse_packages_ftp.sh
  projects/ipfw/usr.sbin/ctm/mkCTM/ctm_conf.gnats
Modified:
  projects/ipfw/MAINTAINERS   (contents, props changed)
  projects/ipfw/Makefile
  projects/ipfw/Makefile.inc1
  projects/ipfw/ObsoleteFiles.inc
  projects/ipfw/UPDATING
  projects/ipfw/bin/chio/chio.1
  projects/ipfw/bin/csh/Makefile
  projects/ipfw/bin/date/tests/Makefile
  projects/ipfw/bin/freebsd-version/freebsd-version.1
  projects/ipfw/bin/ls/Makefile
  projects/ipfw/bin/mv/mv.c
  projects/ipfw/bin/pkill/pkill.1
  projects/ipfw/bin/ps/ps.1
  projects/ipfw/bin/rm/rm.1
  projects/ipfw/bin/rm/rm.c
  projects/ipfw/bin/setfacl/setfacl.1
  projects/ipfw/bin/sh/Makefile
  projects/ipfw/bin/sh/eval.c
  projects/ipfw/bin/sh/exec.c
  projects/ipfw/bin/sh/expand.c
  projects/ipfw/bin/sh/jobs.c
  projects/ipfw/bin/sh/miscbltin.c
  projects/ipfw/bin/sh/mystring.c
  projects/ipfw/bin/sh/mystring.h
  projects/ipfw/bin/sh/tests/Makefile
  projects/ipfw/bin/sh/tests/builtins/Makefile
  projects/ipfw/bin/sh/tests/errors/Makefile
  projects/ipfw/bin/sh/tests/errors/bad-parm-exp2.2.stderr
  projects/ipfw/bin/sh/tests/errors/bad-parm-exp3.2.stderr
  projects/ipfw/bin/sh/tests/errors/bad-parm-exp4.2.stderr
  projects/ipfw/bin/sh/tests/errors/bad-parm-exp5.2.stderr
  projects/ipfw/bin/sh/tests/errors/bad-parm-exp6.2.stderr
  projects/ipfw/bin/sh/tests/execution/Makefile
  projects/ipfw/bin/sh/tests/expansion/Makefile
  projects/ipfw/bin/sh/tests/parameters/Makefile
  projects/ipfw/bin/sh/tests/parser/Makefile
  projects/ipfw/bin/sh/tests/set-e/Makefile
  projects/ipfw/cddl/contrib/dtracetoolkit/Apps/shellsnoop
  projects/ipfw/cddl/contrib/dtracetoolkit/rwsnoop
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.subr.d
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.func_access.ksh
  projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb.8
  projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb_il.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/zfs/zfs.8
  projects/ipfw/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/zhack/zhack.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
  projects/ipfw/cddl/contrib/opensolaris/cmd/zpool/zpool.8
  projects/ipfw/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/zstreamdump/zstreamdump.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/ztest/ztest.c
  projects/ipfw/cddl/contrib/opensolaris/common/avl/avl.c
  projects/ipfw/cddl/contrib/opensolaris/common/ctf/ctf_open.c
  projects/ipfw/cddl/contrib/opensolaris/common/ctf/ctf_types.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_as.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_decl.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_decl.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_dis.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_error.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_grammar.y
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_ident.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_lex.l
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_map.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_options.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_parser.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_parser.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_pid.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_pid.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_print.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_printf.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_work.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dt_xlator.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libdtrace/common/dtrace.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_compat.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs_core/common/libzfs_core.h
  projects/ipfw/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c
  projects/ipfw/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h
  projects/ipfw/cddl/lib/libdtrace/libproc_compat.h
  projects/ipfw/cddl/lib/libzpool/Makefile
  projects/ipfw/cddl/sbin/zpool/Makefile
  projects/ipfw/cddl/usr.bin/zinject/Makefile
  projects/ipfw/cddl/usr.sbin/zdb/Makefile
  projects/ipfw/cddl/usr.sbin/zhack/Makefile
  projects/ipfw/contrib/binutils/gas/config/tc-arm.c
  projects/ipfw/contrib/bmake/ChangeLog
  projects/ipfw/contrib/bmake/Makefile
  projects/ipfw/contrib/bmake/README
  projects/ipfw/contrib/bmake/bmake.1
  projects/ipfw/contrib/bmake/bmake.cat1
  projects/ipfw/contrib/bmake/boot-strap
  projects/ipfw/contrib/bmake/bsd.after-import.mk
  projects/ipfw/contrib/bmake/config.h.in
  projects/ipfw/contrib/bmake/configure
  projects/ipfw/contrib/bmake/configure.in
  projects/ipfw/contrib/bmake/main.c
  projects/ipfw/contrib/bmake/make.1
  projects/ipfw/contrib/bmake/mk/ChangeLog
  projects/ipfw/contrib/bmake/mk/autodep.mk
  projects/ipfw/contrib/bmake/mk/dirdeps.mk
  projects/ipfw/contrib/bmake/mk/dpadd.mk
  projects/ipfw/contrib/bmake/mk/gendirdeps.mk
  projects/ipfw/contrib/bmake/mk/host-target.mk
  projects/ipfw/contrib/bmake/mk/install-mk
  projects/ipfw/contrib/bmake/mk/lib.mk
  projects/ipfw/contrib/bmake/mk/meta.autodep.mk
  projects/ipfw/contrib/bmake/mk/meta2deps.py
  projects/ipfw/contrib/bmake/mk/meta2deps.sh
  projects/ipfw/contrib/bmake/mk/options.mk
  projects/ipfw/contrib/bmake/mk/rst2htm.mk
  projects/ipfw/contrib/bmake/mk/sys.mk
  projects/ipfw/contrib/bmake/mk/sys/SunOS.mk
  projects/ipfw/contrib/bmake/mk/target-flags.mk
  projects/ipfw/contrib/bmake/mk/warnings.mk
  projects/ipfw/contrib/bmake/os.sh
  projects/ipfw/contrib/bmake/parse.c
  projects/ipfw/contrib/bmake/str.c
  projects/ipfw/contrib/bmake/var.c
  projects/ipfw/contrib/byacc/CHANGES
  projects/ipfw/contrib/byacc/MANIFEST
  projects/ipfw/contrib/byacc/VERSION
  projects/ipfw/contrib/byacc/aclocal.m4
  projects/ipfw/contrib/byacc/main.c
  projects/ipfw/contrib/byacc/package/byacc.spec
  projects/ipfw/contrib/byacc/package/debian/changelog
  projects/ipfw/contrib/byacc/package/mingw-byacc.spec
  projects/ipfw/contrib/byacc/package/pkgsrc/Makefile
  projects/ipfw/contrib/byacc/test/btyacc/big_b.output
  projects/ipfw/contrib/byacc/test/btyacc/big_l.output
  projects/ipfw/contrib/byacc/test/btyacc/err_inherit1.error
  projects/ipfw/contrib/byacc/test/btyacc/err_inherit2.error
  projects/ipfw/contrib/byacc/test/btyacc/err_inherit3.error
  projects/ipfw/contrib/byacc/test/btyacc/err_inherit4.error
  projects/ipfw/contrib/byacc/test/btyacc/err_inherit5.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax1.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax10.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax11.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax12.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax13.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax14.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax15.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax16.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax17.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax18.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax19.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax2.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax21.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax22.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax23.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax24.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax25.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax26.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax27.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax3.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax4.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax5.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax6.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax7.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax7a.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax7b.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax8.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax8a.error
  projects/ipfw/contrib/byacc/test/btyacc/err_syntax9.error
  projects/ipfw/contrib/byacc/test/btyacc/help.output
  projects/ipfw/contrib/byacc/test/btyacc/no_b_opt.output
  projects/ipfw/contrib/byacc/test/btyacc/no_output2.output
  projects/ipfw/contrib/byacc/test/btyacc/no_p_opt.output
  projects/ipfw/contrib/byacc/test/btyacc/nostdin.output
  projects/ipfw/contrib/byacc/test/run_test.sh
  projects/ipfw/contrib/byacc/test/yacc/big_b.output
  projects/ipfw/contrib/byacc/test/yacc/big_l.output
  projects/ipfw/contrib/byacc/test/yacc/err_syntax1.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax10.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax11.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax12.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax13.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax14.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax15.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax16.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax17.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax18.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax19.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax2.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax21.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax22.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax23.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax24.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax25.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax26.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax27.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax3.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax4.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax5.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax6.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax7.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax7a.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax7b.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax8.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax8a.error
  projects/ipfw/contrib/byacc/test/yacc/err_syntax9.error
  projects/ipfw/contrib/byacc/test/yacc/help.output
  projects/ipfw/contrib/byacc/test/yacc/no_b_opt.output
  projects/ipfw/contrib/byacc/test/yacc/no_output2.output
  projects/ipfw/contrib/byacc/test/yacc/no_p_opt.output
  projects/ipfw/contrib/byacc/test/yacc/nostdin.output
  projects/ipfw/contrib/file/ChangeLog
  projects/ipfw/contrib/file/Makefile.am
  projects/ipfw/contrib/file/Makefile.in
  projects/ipfw/contrib/file/README
  projects/ipfw/contrib/file/TODO
  projects/ipfw/contrib/file/aclocal.m4
  projects/ipfw/contrib/file/compile
  projects/ipfw/contrib/file/config.h.in
  projects/ipfw/contrib/file/configure
  projects/ipfw/contrib/file/configure.ac
  projects/ipfw/contrib/file/install-sh
  projects/ipfw/contrib/file/tests/Makefile.am
  projects/ipfw/contrib/file/tests/Makefile.in
  projects/ipfw/contrib/file/tests/README
  projects/ipfw/contrib/file/tests/gedcom.result
  projects/ipfw/contrib/gcc/config/arm/unwind-arm.h
  projects/ipfw/contrib/gcc/version.c
  projects/ipfw/contrib/ipfilter/lib/printhost.c
  projects/ipfw/contrib/ipfilter/lib/printhostmask.c
  projects/ipfw/contrib/ipfilter/lib/printipfexpr.c
  projects/ipfw/contrib/ipfilter/lib/save_v1trap.c
  projects/ipfw/contrib/ipfilter/lib/save_v2trap.c
  projects/ipfw/contrib/libc++/include/list
  projects/ipfw/contrib/libstdc++/libsupc++/unwind-cxx.h
  projects/ipfw/contrib/libucl/configure.ac
  projects/ipfw/contrib/libucl/doc/api.md
  projects/ipfw/contrib/libucl/doc/libucl.3
  projects/ipfw/contrib/libucl/doc/pandoc.template
  projects/ipfw/contrib/libucl/include/ucl.h
  projects/ipfw/contrib/libucl/src/Makefile.am
  projects/ipfw/contrib/libucl/src/ucl_emitter.c
  projects/ipfw/contrib/libucl/src/ucl_internal.h
  projects/ipfw/contrib/libucl/src/ucl_parser.c
  projects/ipfw/contrib/libucl/tests/Makefile.am
  projects/ipfw/contrib/libucl/tests/test_basic.c
  projects/ipfw/contrib/libucl/uthash/utstring.h
  projects/ipfw/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
  projects/ipfw/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
  projects/ipfw/contrib/llvm/lib/Target/PowerPC/PPCFastISel.cpp
  projects/ipfw/contrib/llvm/tools/clang/lib/Driver/ToolChain.cpp
  projects/ipfw/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
  projects/ipfw/contrib/llvm/tools/lldb/tools/driver/Platform.h
  projects/ipfw/contrib/openbsm/libbsm/bsm_io.c
  projects/ipfw/contrib/opie/libopie/challenge.c
  projects/ipfw/contrib/opie/opie.h
  projects/ipfw/contrib/opie/opiekey.c
  projects/ipfw/contrib/serf/CHANGES
  projects/ipfw/contrib/serf/auth/auth.c
  projects/ipfw/contrib/serf/buckets/ssl_buckets.c
  projects/ipfw/contrib/serf/outgoing.c
  projects/ipfw/contrib/serf/serf.h
  projects/ipfw/contrib/sqlite3/INSTALL
  projects/ipfw/contrib/sqlite3/Makefile.in
  projects/ipfw/contrib/sqlite3/aclocal.m4
  projects/ipfw/contrib/sqlite3/config.guess
  projects/ipfw/contrib/sqlite3/config.sub
  projects/ipfw/contrib/sqlite3/configure
  projects/ipfw/contrib/sqlite3/configure.ac
  projects/ipfw/contrib/sqlite3/depcomp
  projects/ipfw/contrib/sqlite3/install-sh
  projects/ipfw/contrib/sqlite3/ltmain.sh
  projects/ipfw/contrib/sqlite3/missing
  projects/ipfw/contrib/sqlite3/shell.c
  projects/ipfw/contrib/sqlite3/sqlite3.1
  projects/ipfw/contrib/sqlite3/sqlite3.c
  projects/ipfw/contrib/sqlite3/sqlite3.h
  projects/ipfw/contrib/sqlite3/sqlite3ext.h
  projects/ipfw/contrib/subversion/CHANGES
  projects/ipfw/contrib/subversion/build-outputs.mk
  projects/ipfw/contrib/subversion/build.conf
  projects/ipfw/contrib/subversion/configure
  projects/ipfw/contrib/subversion/configure.ac
  projects/ipfw/contrib/subversion/get-deps.sh
  projects/ipfw/contrib/subversion/subversion/include/svn_version.h
  projects/ipfw/contrib/subversion/subversion/libsvn_client/delete.c
  projects/ipfw/contrib/subversion/subversion/libsvn_client/externals.c
  projects/ipfw/contrib/subversion/subversion/libsvn_fs_fs/fs_fs.c
  projects/ipfw/contrib/subversion/subversion/libsvn_fs_fs/rep-cache-db.h
  projects/ipfw/contrib/subversion/subversion/libsvn_ra_serf/commit.c
  projects/ipfw/contrib/subversion/subversion/libsvn_ra_serf/options.c
  projects/ipfw/contrib/subversion/subversion/libsvn_ra_serf/util.c
  projects/ipfw/contrib/subversion/subversion/libsvn_subr/config_auth.c
  projects/ipfw/contrib/subversion/subversion/libsvn_subr/dirent_uri.c
  projects/ipfw/contrib/subversion/subversion/libsvn_subr/internal_statements.h
  projects/ipfw/contrib/subversion/subversion/libsvn_subr/opt.c
  projects/ipfw/contrib/subversion/subversion/libsvn_wc/wc-checks.h
  projects/ipfw/contrib/subversion/subversion/libsvn_wc/wc-metadata.h
  projects/ipfw/contrib/subversion/subversion/libsvn_wc/wc-queries.h
  projects/ipfw/contrib/subversion/subversion/libsvn_wc/wc_db.c
  projects/ipfw/contrib/subversion/subversion/svn/util.c
  projects/ipfw/contrib/tzdata/africa
  projects/ipfw/contrib/tzdata/australasia
  projects/ipfw/contrib/tzdata/europe
  projects/ipfw/contrib/tzdata/northamerica
  projects/ipfw/contrib/unbound/doc/example.conf.in
  projects/ipfw/contrib/unbound/doc/unbound.conf.5
  projects/ipfw/contrib/unbound/doc/unbound.conf.5.in
  projects/ipfw/contrib/unbound/freebsd-configure.sh
  projects/ipfw/contrib/unbound/services/localzone.c
  projects/ipfw/contrib/unbound/util/config_file.c
  projects/ipfw/contrib/unbound/util/config_file.h
  projects/ipfw/contrib/unbound/util/configlexer.lex
  projects/ipfw/contrib/unbound/util/configparser.y
  projects/ipfw/contrib/wpa/src/utils/os_unix.c
  projects/ipfw/crypto/openssl/CHANGES
  projects/ipfw/crypto/openssl/Configure
  projects/ipfw/crypto/openssl/FAQ
  projects/ipfw/crypto/openssl/Makefile
  projects/ipfw/crypto/openssl/NEWS
  projects/ipfw/crypto/openssl/README
  projects/ipfw/crypto/openssl/apps/apps.c
  projects/ipfw/crypto/openssl/apps/ca.c
  projects/ipfw/crypto/openssl/apps/ciphers.c
  projects/ipfw/crypto/openssl/apps/crl2p7.c
  projects/ipfw/crypto/openssl/apps/enc.c
  projects/ipfw/crypto/openssl/apps/ocsp.c
  projects/ipfw/crypto/openssl/apps/progs.h
  projects/ipfw/crypto/openssl/apps/progs.pl
  projects/ipfw/crypto/openssl/apps/s_client.c
  projects/ipfw/crypto/openssl/apps/s_server.c
  projects/ipfw/crypto/openssl/crypto/asn1/a_object.c
  projects/ipfw/crypto/openssl/crypto/asn1/a_utctm.c
  projects/ipfw/crypto/openssl/crypto/asn1/ameth_lib.c
  projects/ipfw/crypto/openssl/crypto/asn1/asn1_lib.c
  projects/ipfw/crypto/openssl/crypto/asn1/asn_mime.c
  projects/ipfw/crypto/openssl/crypto/asn1/asn_pack.c
  projects/ipfw/crypto/openssl/crypto/asn1/bio_asn1.c
  projects/ipfw/crypto/openssl/crypto/asn1/charmap.pl
  projects/ipfw/crypto/openssl/crypto/asn1/evp_asn1.c
  projects/ipfw/crypto/openssl/crypto/asn1/t_x509.c
  projects/ipfw/crypto/openssl/crypto/asn1/tasn_enc.c
  projects/ipfw/crypto/openssl/crypto/asn1/x_crl.c
  projects/ipfw/crypto/openssl/crypto/bio/bio_lib.c
  projects/ipfw/crypto/openssl/crypto/bn/bn_exp.c
  projects/ipfw/crypto/openssl/crypto/bn/bn_lib.c
  projects/ipfw/crypto/openssl/crypto/bn/bn_sqr.c
  projects/ipfw/crypto/openssl/crypto/cms/cms_pwri.c
  projects/ipfw/crypto/openssl/crypto/conf/conf_def.c
  projects/ipfw/crypto/openssl/crypto/ec/ec_lib.c
  projects/ipfw/crypto/openssl/crypto/ec/ecp_smpl.c
  projects/ipfw/crypto/openssl/crypto/ec/ectest.c
  projects/ipfw/crypto/openssl/crypto/evp/e_aes.c
  projects/ipfw/crypto/openssl/crypto/evp/evp_pbe.c
  projects/ipfw/crypto/openssl/crypto/idea/ideatest.c
  projects/ipfw/crypto/openssl/crypto/objects/obj_dat.c
  projects/ipfw/crypto/openssl/crypto/objects/obj_dat.h
  projects/ipfw/crypto/openssl/crypto/objects/obj_dat.pl
  projects/ipfw/crypto/openssl/crypto/ocsp/ocsp_ht.c
  projects/ipfw/crypto/openssl/crypto/ocsp/ocsp_lib.c
  projects/ipfw/crypto/openssl/crypto/opensslconf.h
  projects/ipfw/crypto/openssl/crypto/opensslv.h
  projects/ipfw/crypto/openssl/crypto/pem/pvkfmt.c
  projects/ipfw/crypto/openssl/crypto/pkcs7/Makefile
  projects/ipfw/crypto/openssl/crypto/rand/md_rand.c
  projects/ipfw/crypto/openssl/crypto/rand/rand_lcl.h
  projects/ipfw/crypto/openssl/crypto/rand/rand_lib.c
  projects/ipfw/crypto/openssl/crypto/rand/randfile.c
  projects/ipfw/crypto/openssl/crypto/rsa/rsa_eay.c
  projects/ipfw/crypto/openssl/crypto/srp/srp_lib.c
  projects/ipfw/crypto/openssl/crypto/ui/ui_lib.c
  projects/ipfw/crypto/openssl/doc/apps/asn1parse.pod
  projects/ipfw/crypto/openssl/doc/apps/ca.pod
  projects/ipfw/crypto/openssl/doc/apps/ciphers.pod
  projects/ipfw/crypto/openssl/doc/apps/cms.pod
  projects/ipfw/crypto/openssl/doc/apps/crl.pod
  projects/ipfw/crypto/openssl/doc/apps/dhparam.pod
  projects/ipfw/crypto/openssl/doc/apps/dsa.pod
  projects/ipfw/crypto/openssl/doc/apps/ecparam.pod
  projects/ipfw/crypto/openssl/doc/apps/gendsa.pod
  projects/ipfw/crypto/openssl/doc/apps/genrsa.pod
  projects/ipfw/crypto/openssl/doc/apps/rsa.pod
  projects/ipfw/crypto/openssl/doc/apps/s_client.pod
  projects/ipfw/crypto/openssl/doc/apps/s_server.pod
  projects/ipfw/crypto/openssl/doc/apps/verify.pod
  projects/ipfw/crypto/openssl/doc/apps/x509.pod
  projects/ipfw/crypto/openssl/doc/apps/x509v3_config.pod
  projects/ipfw/crypto/openssl/doc/crypto/ASN1_generate_nconf.pod
  projects/ipfw/crypto/openssl/doc/crypto/BIO_f_base64.pod
  projects/ipfw/crypto/openssl/doc/crypto/BIO_push.pod
  projects/ipfw/crypto/openssl/doc/crypto/ERR_get_error.pod
  projects/ipfw/crypto/openssl/doc/crypto/EVP_DigestInit.pod
  projects/ipfw/crypto/openssl/doc/crypto/EVP_EncryptInit.pod
  projects/ipfw/crypto/openssl/doc/crypto/EVP_SignInit.pod
  projects/ipfw/crypto/openssl/doc/crypto/RSA_set_method.pod
  projects/ipfw/crypto/openssl/doc/crypto/RSA_sign.pod
  projects/ipfw/crypto/openssl/doc/crypto/des.pod
  projects/ipfw/crypto/openssl/doc/crypto/err.pod
  projects/ipfw/crypto/openssl/doc/crypto/pem.pod
  projects/ipfw/crypto/openssl/doc/crypto/ui.pod
  projects/ipfw/crypto/openssl/doc/fingerprints.txt
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_add_session.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_new.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_cipher_list.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_client_cert_cb.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_options.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_CTX_set_verify.pod
  projects/ipfw/crypto/openssl/doc/ssl/SSL_get_version.pod
  projects/ipfw/crypto/openssl/doc/ssl/d2i_SSL_SESSION.pod
  projects/ipfw/crypto/openssl/ssl/Makefile
  projects/ipfw/crypto/openssl/ssl/d1_both.c
  projects/ipfw/crypto/openssl/ssl/d1_clnt.c
  projects/ipfw/crypto/openssl/ssl/d1_srvr.c
  projects/ipfw/crypto/openssl/ssl/heartbeat_test.c
  projects/ipfw/crypto/openssl/ssl/s23_lib.c
  projects/ipfw/crypto/openssl/ssl/s23_srvr.c
  projects/ipfw/crypto/openssl/ssl/s2_lib.c
  projects/ipfw/crypto/openssl/ssl/s3_clnt.c
  projects/ipfw/crypto/openssl/ssl/s3_enc.c
  projects/ipfw/crypto/openssl/ssl/s3_lib.c
  projects/ipfw/crypto/openssl/ssl/s3_pkt.c
  projects/ipfw/crypto/openssl/ssl/s3_srvr.c
  projects/ipfw/crypto/openssl/ssl/ssl.h
  projects/ipfw/crypto/openssl/ssl/ssl_ciph.c
  projects/ipfw/crypto/openssl/ssl/ssl_err.c
  projects/ipfw/crypto/openssl/ssl/ssl_lib.c
  projects/ipfw/crypto/openssl/ssl/ssl_locl.h
  projects/ipfw/crypto/openssl/ssl/ssl_stat.c
  projects/ipfw/crypto/openssl/ssl/t1_enc.c
  projects/ipfw/crypto/openssl/ssl/t1_lib.c
  projects/ipfw/crypto/openssl/ssl/tls_srp.c
  projects/ipfw/crypto/openssl/util/mk1mf.pl
  projects/ipfw/crypto/openssl/util/mkdef.pl
  projects/ipfw/crypto/openssl/util/mkerr.pl
  projects/ipfw/crypto/openssl/util/ssleay.num
  projects/ipfw/etc/Makefile
  projects/ipfw/etc/defaults/rc.conf
  projects/ipfw/etc/etc.amd64/ttys
  projects/ipfw/etc/etc.i386/ttys
  projects/ipfw/etc/mtree/BSD.root.dist
  projects/ipfw/etc/mtree/BSD.tests.dist
  projects/ipfw/etc/mtree/BSD.usr.dist
  projects/ipfw/etc/network.subr
  projects/ipfw/games/fortune/datfiles/fortunes
  projects/ipfw/games/fortune/datfiles/freebsd-tips
  projects/ipfw/games/fortune/fortune/pathnames.h
  projects/ipfw/games/grdc/Makefile
  projects/ipfw/games/morse/morse.6
  projects/ipfw/games/random/random.6
  projects/ipfw/gnu/lib/Makefile
  projects/ipfw/gnu/lib/csu/Makefile
  projects/ipfw/gnu/lib/libgcc/Makefile
  projects/ipfw/gnu/lib/libgcov/Makefile
  projects/ipfw/gnu/lib/libreadline/Makefile
  projects/ipfw/gnu/lib/libreadline/readline/Makefile
  projects/ipfw/gnu/usr.bin/Makefile
  projects/ipfw/gnu/usr.bin/binutils/ld/Makefile
  projects/ipfw/gnu/usr.bin/binutils/libbfd/Makefile
  projects/ipfw/gnu/usr.bin/binutils/libbfd/bfd.h
  projects/ipfw/gnu/usr.bin/cc/Makefile
  projects/ipfw/gnu/usr.bin/cc/Makefile.tgt
  projects/ipfw/gnu/usr.bin/cc/include/Makefile
  projects/ipfw/gnu/usr.bin/gdb/Makefile.inc
  projects/ipfw/gnu/usr.bin/gdb/gdb/Makefile
  projects/ipfw/gnu/usr.bin/gdb/gdbtui/Makefile
  projects/ipfw/gnu/usr.bin/gdb/kgdb/Makefile
  projects/ipfw/gnu/usr.bin/texinfo/info/Makefile
  projects/ipfw/include/Makefile
  projects/ipfw/include/arpa/inet.h
  projects/ipfw/include/arpa/nameser.h
  projects/ipfw/include/arpa/nameser_compat.h
  projects/ipfw/include/dirent.h
  projects/ipfw/include/res_update.h
  projects/ipfw/include/resolv.h
  projects/ipfw/include/search.h
  projects/ipfw/kerberos5/lib/libkrb5/Makefile
  projects/ipfw/kerberos5/libexec/digest-service/Makefile
  projects/ipfw/kerberos5/libexec/kcm/Makefile
  projects/ipfw/kerberos5/usr.bin/kadmin/Makefile
  projects/ipfw/lib/Makefile
  projects/ipfw/lib/csu/i386-elf/Makefile
  projects/ipfw/lib/libarchive/Makefile
  projects/ipfw/lib/libarchive/config_freebsd.h
  projects/ipfw/lib/libbluetooth/bluetooth.3
  projects/ipfw/lib/libc/Makefile
  projects/ipfw/lib/libc/arm/Symbol.map
  projects/ipfw/lib/libc/arm/aeabi/Makefile.inc
  projects/ipfw/lib/libc/capability/cap_rights_init.3
  projects/ipfw/lib/libc/gen/arc4random.c
  projects/ipfw/lib/libc/gen/cap_rights_get.3
  projects/ipfw/lib/libc/gen/cap_sandboxed.3
  projects/ipfw/lib/libc/gen/check_utility_compat.3
  projects/ipfw/lib/libc/gen/clock_getcpuclockid.3
  projects/ipfw/lib/libc/gen/directory.3
  projects/ipfw/lib/libc/gen/dlinfo.3
  projects/ipfw/lib/libc/gen/ftok.3
  projects/ipfw/lib/libc/gen/gen-private.h
  projects/ipfw/lib/libc/gen/getpagesizes.3
  projects/ipfw/lib/libc/gen/getutxent.3
  projects/ipfw/lib/libc/gen/opendir.c
  projects/ipfw/lib/libc/gen/posix_spawn.3
  projects/ipfw/lib/libc/gen/posix_spawn_file_actions_addopen.3
  projects/ipfw/lib/libc/gen/posix_spawn_file_actions_init.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_getflags.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_getpgroup.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_getschedparam.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_getschedpolicy.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_getsigdefault.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_getsigmask.3
  projects/ipfw/lib/libc/gen/posix_spawnattr_init.3
  projects/ipfw/lib/libc/gen/readdir.c
  projects/ipfw/lib/libc/gen/readpassphrase.c
  projects/ipfw/lib/libc/gen/rewinddir.c
  projects/ipfw/lib/libc/gen/setproctitle.3
  projects/ipfw/lib/libc/gen/statvfs.3
  projects/ipfw/lib/libc/gen/sysconf.c
  projects/ipfw/lib/libc/gen/telldir.c
  projects/ipfw/lib/libc/gen/telldir.h
  projects/ipfw/lib/libc/gen/tls.c
  projects/ipfw/lib/libc/gen/ttyname.3
  projects/ipfw/lib/libc/iconv/__iconv_get_list.3
  projects/ipfw/lib/libc/iconv/bsd_iconv.c
  projects/ipfw/lib/libc/iconv/citrus_db_factory.c
  projects/ipfw/lib/libc/iconv/citrus_iconv.c
  projects/ipfw/lib/libc/iconv/iconv.3
  projects/ipfw/lib/libc/iconv/iconv_canonicalize.3
  projects/ipfw/lib/libc/iconv/iconvctl.3
  projects/ipfw/lib/libc/iconv/iconvlist.3
  projects/ipfw/lib/libc/include/isc/eventlib.h
  projects/ipfw/lib/libc/include/isc/list.h
  projects/ipfw/lib/libc/include/port_before.h
  projects/ipfw/lib/libc/inet/inet_addr.c
  projects/ipfw/lib/libc/inet/inet_cidr_ntop.c
  projects/ipfw/lib/libc/inet/inet_cidr_pton.c
  projects/ipfw/lib/libc/inet/inet_net_ntop.c
  projects/ipfw/lib/libc/inet/inet_net_pton.c
  projects/ipfw/lib/libc/inet/inet_neta.c
  projects/ipfw/lib/libc/inet/inet_ntoa.c
  projects/ipfw/lib/libc/inet/inet_ntop.c
  projects/ipfw/lib/libc/inet/inet_pton.c
  projects/ipfw/lib/libc/inet/nsap_addr.c
  projects/ipfw/lib/libc/isc/ev_streams.c
  projects/ipfw/lib/libc/isc/ev_timers.c
  projects/ipfw/lib/libc/isc/eventlib_p.h
  projects/ipfw/lib/libc/locale/utf8.c
  projects/ipfw/lib/libc/mips/arith.h
  projects/ipfw/lib/libc/nameser/Symbol.map
  projects/ipfw/lib/libc/nameser/ns_name.c
  projects/ipfw/lib/libc/nameser/ns_netint.c
  projects/ipfw/lib/libc/nameser/ns_parse.c
  projects/ipfw/lib/libc/nameser/ns_print.c
  projects/ipfw/lib/libc/nameser/ns_samedomain.c
  projects/ipfw/lib/libc/nameser/ns_ttl.c
  projects/ipfw/lib/libc/net/Makefile.inc
  projects/ipfw/lib/libc/net/getaddrinfo.c
  projects/ipfw/lib/libc/net/linkaddr.c
  projects/ipfw/lib/libc/net/nsdispatch.3
  projects/ipfw/lib/libc/net/sctp_sys_calls.c
  projects/ipfw/lib/libc/net/sourcefilter.3
  projects/ipfw/lib/libc/net/sourcefilter.c
  projects/ipfw/lib/libc/posix1e/acl_add_flag_np.3
  projects/ipfw/lib/libc/posix1e/acl_add_perm.3
  projects/ipfw/lib/libc/posix1e/acl_calc_mask.3
  projects/ipfw/lib/libc/posix1e/acl_clear_flags_np.3
  projects/ipfw/lib/libc/posix1e/acl_clear_perms.3
  projects/ipfw/lib/libc/posix1e/acl_copy_entry.3
  projects/ipfw/lib/libc/posix1e/acl_create_entry.3
  projects/ipfw/lib/libc/posix1e/acl_delete_entry.3
  projects/ipfw/lib/libc/posix1e/acl_delete_flag_np.3
  projects/ipfw/lib/libc/posix1e/acl_delete_perm.3
  projects/ipfw/lib/libc/posix1e/acl_get_brand_np.3
  projects/ipfw/lib/libc/posix1e/acl_get_entry.3
  projects/ipfw/lib/libc/posix1e/acl_get_entry_type_np.3
  projects/ipfw/lib/libc/posix1e/acl_get_flag_np.3
  projects/ipfw/lib/libc/posix1e/acl_get_flagset_np.3
  projects/ipfw/lib/libc/posix1e/acl_get_perm_np.3
  projects/ipfw/lib/libc/posix1e/acl_get_permset.3
  projects/ipfw/lib/libc/posix1e/acl_get_qualifier.3
  projects/ipfw/lib/libc/posix1e/acl_get_tag_type.3
  projects/ipfw/lib/libc/posix1e/acl_is_trivial_np.3
  projects/ipfw/lib/libc/posix1e/acl_set_entry_type_np.3
  projects/ipfw/lib/libc/posix1e/acl_set_flagset_np.3
  projects/ipfw/lib/libc/posix1e/acl_set_permset.3
  projects/ipfw/lib/libc/posix1e/acl_set_qualifier.3
  projects/ipfw/lib/libc/posix1e/acl_set_tag_type.3
  projects/ipfw/lib/libc/posix1e/acl_strip_np.3
  projects/ipfw/lib/libc/regex/re_format.7
  projects/ipfw/lib/libc/regex/regcomp.c
  projects/ipfw/lib/libc/resolv/Makefile.inc
  projects/ipfw/lib/libc/resolv/Symbol.map
  projects/ipfw/lib/libc/resolv/herror.c
  projects/ipfw/lib/libc/resolv/res_comp.c
  projects/ipfw/lib/libc/resolv/res_data.c
  projects/ipfw/lib/libc/resolv/res_debug.c
  projects/ipfw/lib/libc/resolv/res_findzonecut.c
  projects/ipfw/lib/libc/resolv/res_init.c
  projects/ipfw/lib/libc/resolv/res_mkquery.c
  projects/ipfw/lib/libc/resolv/res_mkupdate.c
  projects/ipfw/lib/libc/resolv/res_query.c
  projects/ipfw/lib/libc/resolv/res_send.c
  projects/ipfw/lib/libc/resolv/res_update.c
  projects/ipfw/lib/libc/stdio/fflush.c
  projects/ipfw/lib/libc/stdio/fputs.c
  projects/ipfw/lib/libc/stdio/fputws.c
  projects/ipfw/lib/libc/stdio/freopen.c
  projects/ipfw/lib/libc/stdio/ftell.c
  projects/ipfw/lib/libc/stdio/getline.3
  projects/ipfw/lib/libc/stdio/gets.c
  projects/ipfw/lib/libc/stdio/printf.3
  projects/ipfw/lib/libc/stdio/puts.c
  projects/ipfw/lib/libc/stdio/putw.c
  projects/ipfw/lib/libc/stdio/rewind.c
  projects/ipfw/lib/libc/stdio/vfprintf.c
  projects/ipfw/lib/libc/stdio/vfwprintf.c
  projects/ipfw/lib/libc/stdio/wbuf.c
  projects/ipfw/lib/libc/stdlib/Makefile.inc
  projects/ipfw/lib/libc/stdlib/Symbol.map
  projects/ipfw/lib/libc/stdlib/a64l.3
  projects/ipfw/lib/libc/stdlib/getopt.3
  projects/ipfw/lib/libc/stdlib/getopt.c
  projects/ipfw/lib/libc/stdlib/getopt_long.c
  projects/ipfw/lib/libc/stdlib/hcreate.3
  projects/ipfw/lib/libc/stdlib/hcreate.c
  projects/ipfw/lib/libc/stdlib/strfmon.3
  projects/ipfw/lib/libc/stdlib/strfmon.c
  projects/ipfw/lib/libc/stdlib/strtonum.c
  projects/ipfw/lib/libc/stdlib/tsearch.c
  projects/ipfw/lib/libc/stdlib/twalk.c
  projects/ipfw/lib/libc/stdtime/strftime.3
  projects/ipfw/lib/libc/stdtime/strftime.c
  projects/ipfw/lib/libc/stdtime/strptime.c
  projects/ipfw/lib/libc/stdtime/timelocal.c
  projects/ipfw/lib/libc/string/memmem.3
  projects/ipfw/lib/libc/string/strerror.3
  projects/ipfw/lib/libc/string/strtok.3
  projects/ipfw/lib/libc/sys/abort2.2
  projects/ipfw/lib/libc/sys/aio_cancel.2
  projects/ipfw/lib/libc/sys/aio_error.2
  projects/ipfw/lib/libc/sys/aio_mlock.2
  projects/ipfw/lib/libc/sys/aio_read.2
  projects/ipfw/lib/libc/sys/aio_return.2
  projects/ipfw/lib/libc/sys/aio_suspend.2
  projects/ipfw/lib/libc/sys/aio_waitcomplete.2
  projects/ipfw/lib/libc/sys/aio_write.2
  projects/ipfw/lib/libc/sys/bind.2
  projects/ipfw/lib/libc/sys/bindat.2
  projects/ipfw/lib/libc/sys/cap_fcntls_limit.2
  projects/ipfw/lib/libc/sys/cap_ioctls_limit.2
  projects/ipfw/lib/libc/sys/cap_rights_limit.2
  projects/ipfw/lib/libc/sys/connect.2
  projects/ipfw/lib/libc/sys/connectat.2
  projects/ipfw/lib/libc/sys/cpuset.2
  projects/ipfw/lib/libc/sys/cpuset_getaffinity.2
  projects/ipfw/lib/libc/sys/ffclock.2
  projects/ipfw/lib/libc/sys/intro.2
  projects/ipfw/lib/libc/sys/kenv.2
  projects/ipfw/lib/libc/sys/kqueue.2
  projects/ipfw/lib/libc/sys/kse.2
  projects/ipfw/lib/libc/sys/listen.2
  projects/ipfw/lib/libc/sys/mmap.2
  projects/ipfw/lib/libc/sys/mmap.c
  projects/ipfw/lib/libc/sys/pdfork.2
  projects/ipfw/lib/libc/sys/posix_fallocate.2
  projects/ipfw/lib/libc/sys/posix_openpt.2
  projects/ipfw/lib/libc/sys/procctl.2
  projects/ipfw/lib/libc/sys/pselect.2
  projects/ipfw/lib/libc/sys/rtprio.2
  projects/ipfw/lib/libc/sys/sendfile.2
  projects/ipfw/lib/libc/sys/shm_open.2
  projects/ipfw/lib/libc/sys/shutdown.2
  projects/ipfw/lib/libc/sys/socket.2
  projects/ipfw/lib/libc/sys/utimes.2
  projects/ipfw/lib/libc/xdr/xdr_float.c
  projects/ipfw/lib/libcalendar/calendar.3
  projects/ipfw/lib/libcam/cam.3
  projects/ipfw/lib/libcapsicum/libcapsicum.3
  projects/ipfw/lib/libcrypt/crypt.3
  projects/ipfw/lib/libcuse/cuse.3
  projects/ipfw/lib/libcuse/cuse_lib.c
  projects/ipfw/lib/libdevinfo/devinfo.3
  projects/ipfw/lib/libdevstat/devstat.3
  projects/ipfw/lib/libedit/Makefile
  projects/ipfw/lib/libedit/common.c
  projects/ipfw/lib/libedit/emacs.c
  projects/ipfw/lib/libedit/filecomplete.h
  projects/ipfw/lib/libedit/histedit.h
  projects/ipfw/lib/libedit/prompt.c
  projects/ipfw/lib/libedit/prompt.h
  projects/ipfw/lib/libedit/read.h
  projects/ipfw/lib/libedit/sys.h
  projects/ipfw/lib/libedit/term.h
  projects/ipfw/lib/libedit/tty.c
  projects/ipfw/lib/libefi/libefi.3
  projects/ipfw/lib/libexpat/libbsdxml.3
  projects/ipfw/lib/libfetch/common.c
  projects/ipfw/lib/libgeom/libgeom.3
  projects/ipfw/lib/libgssapi/mech.5
  projects/ipfw/lib/libiconv_modules/HZ/citrus_hz.c
  projects/ipfw/lib/libkvm/kvm_amd64.c
  projects/ipfw/lib/libkvm/kvm_i386.c
  projects/ipfw/lib/libmagic/Makefile
  projects/ipfw/lib/libmagic/config.h
  projects/ipfw/lib/libmd/mdX.3
  projects/ipfw/lib/libmemstat/libmemstat.3
  projects/ipfw/lib/libmp/Makefile
  projects/ipfw/lib/libnetgraph/netgraph.3
  projects/ipfw/lib/libnv/Makefile
  projects/ipfw/lib/libnv/nv.3
  projects/ipfw/lib/libpam/modules/pam_group/pam_group.8
  projects/ipfw/lib/libpam/modules/pam_group/pam_group.c
  projects/ipfw/lib/libpam/modules/pam_lastlog/pam_lastlog.c
  projects/ipfw/lib/libpam/modules/pam_opie/pam_opie.c
  projects/ipfw/lib/libpam/modules/pam_passwdqc/pam_passwdqc.8
  projects/ipfw/lib/libpam/modules/pam_radius/pam_radius.8
  projects/ipfw/lib/libpam/modules/pam_ssh/Makefile
  projects/ipfw/lib/libpam/modules/pam_ssh/pam_ssh.8
  projects/ipfw/lib/libpam/modules/pam_tacplus/pam_tacplus.8
  projects/ipfw/lib/libpmc/pmc.3
  projects/ipfw/lib/libpmc/pmc.atom.3
  projects/ipfw/lib/libpmc/pmc.atomsilvermont.3
  projects/ipfw/lib/libpmc/pmc.core.3
  projects/ipfw/lib/libpmc/pmc.core2.3
  projects/ipfw/lib/libpmc/pmc.corei7.3
  projects/ipfw/lib/libpmc/pmc.corei7uc.3
  projects/ipfw/lib/libpmc/pmc.haswell.3
  projects/ipfw/lib/libpmc/pmc.haswelluc.3
  projects/ipfw/lib/libpmc/pmc.iaf.3
  projects/ipfw/lib/libpmc/pmc.ivybridge.3
  projects/ipfw/lib/libpmc/pmc.ivybridgexeon.3
  projects/ipfw/lib/libpmc/pmc.k7.3
  projects/ipfw/lib/libpmc/pmc.k8.3
  projects/ipfw/lib/libpmc/pmc.mips24k.3
  projects/ipfw/lib/libpmc/pmc.octeon.3
  projects/ipfw/lib/libpmc/pmc.p4.3
  projects/ipfw/lib/libpmc/pmc.p5.3
  projects/ipfw/lib/libpmc/pmc.p6.3
  projects/ipfw/lib/libpmc/pmc.sandybridge.3
  projects/ipfw/lib/libpmc/pmc.sandybridgeuc.3
  projects/ipfw/lib/libpmc/pmc.sandybridgexeon.3
  projects/ipfw/lib/libpmc/pmc.soft.3
  projects/ipfw/lib/libpmc/pmc.tsc.3
  projects/ipfw/lib/libpmc/pmc.ucf.3
  projects/ipfw/lib/libpmc/pmc.westmere.3
  projects/ipfw/lib/libpmc/pmc.westmereuc.3
  projects/ipfw/lib/libpmc/pmc.xscale.3
  projects/ipfw/lib/libproc/Makefile
  projects/ipfw/lib/libproc/proc_sym.c
  projects/ipfw/lib/libprocstat/libprocstat.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_get_error.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_get_mech_info.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_get_mechanisms.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_get_principal_name.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_get_versions.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_getcred.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_is_installed.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_max_data_length.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_mech_to_oid.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_oid_to_mech.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_qop_to_num.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_seccreate.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_set_callback.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_set_defaults.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_set_svc_name.3
  projects/ipfw/lib/librpcsec_gss/rpc_gss_svc_max_data_length.3
  projects/ipfw/lib/librpcsec_gss/rpcsec_gss.3
  projects/ipfw/lib/librtld_db/librtld_db.3
  projects/ipfw/lib/libsdp/sdp.3
  projects/ipfw/lib/libstand/Makefile
  projects/ipfw/lib/libstand/libstand.3
  projects/ipfw/lib/libstand/open.c
  projects/ipfw/lib/libstand/qdivrem.c
  projects/ipfw/lib/libstand/quad.h
  projects/ipfw/lib/libstand/stand.h
  projects/ipfw/lib/libstdthreads/thrd_create.3
  projects/ipfw/lib/libthr/libthr.3
  projects/ipfw/lib/libthr/thread/thr_init.c
  projects/ipfw/lib/libthr/thread/thr_stack.c
  projects/ipfw/lib/libucl/Makefile
  projects/ipfw/lib/libufs/bread.3
  projects/ipfw/lib/libufs/cgread.3
  projects/ipfw/lib/libufs/libufs.3
  projects/ipfw/lib/libufs/sbread.3
  projects/ipfw/lib/libufs/ufs_disk_close.3
  projects/ipfw/lib/libunbound/Makefile
  projects/ipfw/lib/libutil/Makefile
  projects/ipfw/lib/libutil/flopen.3
  projects/ipfw/lib/libutil/fparseln.3
  projects/ipfw/lib/libutil/fparseln.c
  projects/ipfw/lib/libutil/kld.3
  projects/ipfw/lib/libutil/login_class.3
  projects/ipfw/lib/libutil/pidfile.3
  projects/ipfw/lib/libutil/pw_util.3
  projects/ipfw/lib/libutil/quotafile.3
  projects/ipfw/lib/libvgl/vgl.3
  projects/ipfw/lib/libvmmapi/vmmapi.c
  projects/ipfw/lib/libvmmapi/vmmapi.h
  projects/ipfw/lib/msun/Makefile
  projects/ipfw/lib/msun/Symbol.map
  projects/ipfw/lib/msun/man/erf.3
  projects/ipfw/lib/msun/sparc64/fenv.h
  projects/ipfw/lib/msun/src/e_pow.c
  projects/ipfw/lib/msun/src/imprecise.c
  projects/ipfw/lib/msun/src/math.h
  projects/ipfw/lib/msun/src/s_erf.c
  projects/ipfw/lib/msun/src/s_erff.c
  projects/ipfw/lib/ncurses/ncurses/Makefile
  projects/ipfw/libexec/atf/atf-check/Makefile
  projects/ipfw/libexec/atf/atf-sh/Makefile
  projects/ipfw/libexec/atf/atf-sh/tests/Makefile
  projects/ipfw/libexec/bootpd/bootpd.8
  projects/ipfw/libexec/bootpd/tools/bootptest/bootptest.8
  projects/ipfw/libexec/mknetid/mknetid.8
  projects/ipfw/libexec/mknetid/netid.5
  projects/ipfw/libexec/pppoed/pppoed.8
  projects/ipfw/libexec/revnetgroup/revnetgroup.8
  projects/ipfw/libexec/rtld-elf/Makefile
  projects/ipfw/libexec/rtld-elf/arm/rtld_start.S
  projects/ipfw/libexec/rtld-elf/rtld.1
  projects/ipfw/libexec/rtld-elf/rtld.c
  projects/ipfw/libexec/rtld-elf/rtld_printf.c
  projects/ipfw/libexec/rtld-elf/rtld_printf.h
  projects/ipfw/libexec/save-entropy/save-entropy.sh
  projects/ipfw/libexec/telnetd/Makefile
  projects/ipfw/libexec/ypxfr/ypxfr.8
  projects/ipfw/release/Makefile
  projects/ipfw/release/amd64/mkisoimages.sh
  projects/ipfw/release/arm/BEAGLEBONE.conf
  projects/ipfw/release/arm/PANDABOARD.conf
  projects/ipfw/release/arm/RPI-B.conf
  projects/ipfw/release/arm/WANDBOARD-QUAD.conf
  projects/ipfw/release/arm/ZEDBOARD.conf
  projects/ipfw/release/arm/release.sh
  projects/ipfw/release/doc/README
  projects/ipfw/release/doc/en_US.ISO8859-1/hardware/article.xml
  projects/ipfw/release/doc/en_US.ISO8859-1/readme/article.xml
  projects/ipfw/release/doc/en_US.ISO8859-1/relnotes/article.xml
  projects/ipfw/release/doc/share/examples/Makefile.relnotesng
  projects/ipfw/release/doc/share/misc/dev.archlist.txt
  projects/ipfw/release/doc/share/xml/release.ent
  projects/ipfw/release/doc/share/xml/sponsor.ent
  projects/ipfw/release/release.conf.sample
  projects/ipfw/release/release.sh
  projects/ipfw/release/scripts/mm-mtree.sh
  projects/ipfw/rescue/rescue/Makefile
  projects/ipfw/sbin/adjkerntz/adjkerntz.8
  projects/ipfw/sbin/atm/atmconfig/atmconfig.8
  projects/ipfw/sbin/bsdlabel/bsdlabel.8
  projects/ipfw/sbin/bsdlabel/bsdlabel.c
  projects/ipfw/sbin/camcontrol/Makefile
  projects/ipfw/sbin/camcontrol/camcontrol.8
  projects/ipfw/sbin/camcontrol/camcontrol.c
  projects/ipfw/sbin/camcontrol/camcontrol.h
  projects/ipfw/sbin/casperd/casperd.8
  projects/ipfw/sbin/dhclient/bpf.c
  projects/ipfw/sbin/dhclient/dhclient-script.8
  projects/ipfw/sbin/dhclient/dhclient.8
  projects/ipfw/sbin/dhclient/dhclient.c
  projects/ipfw/sbin/dhclient/dhclient.conf.5
  projects/ipfw/sbin/dhclient/dhclient.leases.5
  projects/ipfw/sbin/dhclient/dhcp-options.5
  projects/ipfw/sbin/etherswitchcfg/etherswitchcfg.c
  projects/ipfw/sbin/fdisk/fdisk.c
  projects/ipfw/sbin/ffsinfo/ffsinfo.8
  projects/ipfw/sbin/fsck_msdosfs/check.c
  projects/ipfw/sbin/fsck_msdosfs/dir.c
  projects/ipfw/sbin/fsck_msdosfs/ext.h
  projects/ipfw/sbin/fsck_msdosfs/fat.c
  projects/ipfw/sbin/fsdb/Makefile
  projects/ipfw/sbin/fsirand/fsirand.8
  projects/ipfw/sbin/gbde/gbde.8
  projects/ipfw/sbin/geom/class/cache/gcache.8
  projects/ipfw/sbin/geom/class/concat/gconcat.8
  projects/ipfw/sbin/geom/class/eli/geli.8
  projects/ipfw/sbin/geom/class/journal/gjournal.8
  projects/ipfw/sbin/geom/class/label/glabel.8
  projects/ipfw/sbin/geom/class/mirror/gmirror.8
  projects/ipfw/sbin/geom/class/mountver/gmountver.8
  projects/ipfw/sbin/geom/class/multipath/gmultipath.8
  projects/ipfw/sbin/geom/class/nop/gnop.8
  projects/ipfw/sbin/geom/class/part/gpart.8
  projects/ipfw/sbin/geom/class/raid/graid.8
  projects/ipfw/sbin/geom/class/raid3/graid3.8
  projects/ipfw/sbin/geom/class/sched/gsched.8
  projects/ipfw/sbin/geom/class/shsec/gshsec.8
  projects/ipfw/sbin/geom/class/stripe/gstripe.8
  projects/ipfw/sbin/geom/class/virstor/gvirstor.8
  projects/ipfw/sbin/geom/core/geom.8
  projects/ipfw/sbin/ggate/ggatec/ggatec.8
  projects/ipfw/sbin/ggate/ggated/ggated.8
  projects/ipfw/sbin/ggate/ggatel/ggatel.8
  projects/ipfw/sbin/growfs/growfs.8
  projects/ipfw/sbin/gvinum/Makefile
  projects/ipfw/sbin/gvinum/gvinum.8
  projects/ipfw/sbin/hastctl/hastctl.8
  projects/ipfw/sbin/hastd/hast.conf.5
  projects/ipfw/sbin/hastd/hastd.8
  projects/ipfw/sbin/ifconfig/af_inet6.c
  projects/ipfw/sbin/ifconfig/ifconfig.8
  projects/ipfw/sbin/ifconfig/ifconfig.c
  projects/ipfw/sbin/ipf/Makefile.inc
  projects/ipfw/sbin/ipfw/ipfw.8
  projects/ipfw/sbin/kldconfig/kldconfig.8
  projects/ipfw/sbin/kldload/kldload.8
  projects/ipfw/sbin/kldstat/kldstat.8
  projects/ipfw/sbin/kldunload/kldunload.8
  projects/ipfw/sbin/md5/md5.1
  projects/ipfw/sbin/mdconfig/mdconfig.8
  projects/ipfw/sbin/mount/mount.8
  projects/ipfw/sbin/mount/mount.conf.8
  projects/ipfw/sbin/mount_cd9660/mount_cd9660.8
  projects/ipfw/sbin/mount_fusefs/mount_fusefs.8
  projects/ipfw/sbin/mount_msdosfs/mount_msdosfs.8
  projects/ipfw/sbin/mount_nfs/mount_nfs.8
  projects/ipfw/sbin/mount_nfs/mount_nfs.c
  projects/ipfw/sbin/mount_unionfs/mount_unionfs.8
  projects/ipfw/sbin/natd/natd.8
  projects/ipfw/sbin/newfs_msdos/newfs_msdos.8
  projects/ipfw/sbin/newfs_nandfs/newfs_nandfs.8
  projects/ipfw/sbin/nos-tun/nos-tun.8
  projects/ipfw/sbin/nvmecontrol/nvmecontrol.8
  projects/ipfw/sbin/pfctl/pfctl.8
  projects/ipfw/sbin/ping6/ping6.c
  projects/ipfw/sbin/rcorder/rcorder.8
  projects/ipfw/sbin/reboot/nextboot.8
  projects/ipfw/sbin/recoverdisk/recoverdisk.1
  projects/ipfw/sbin/restore/tape.c
  projects/ipfw/sbin/sconfig/sconfig.8
  projects/ipfw/sbin/setkey/setkey.8
  projects/ipfw/sbin/sysctl/sysctl.c
  projects/ipfw/secure/lib/libcrypto/Makefile.inc
  projects/ipfw/secure/lib/libcrypto/man/ASN1_OBJECT_new.3
  projects/ipfw/secure/lib/libcrypto/man/ASN1_STRING_length.3
  projects/ipfw/secure/lib/libcrypto/man/ASN1_STRING_new.3
  projects/ipfw/secure/lib/libcrypto/man/ASN1_STRING_print_ex.3
  projects/ipfw/secure/lib/libcrypto/man/ASN1_generate_nconf.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_ctrl.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_f_base64.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_f_buffer.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_f_cipher.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_f_md.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_f_null.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_f_ssl.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_find_type.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_new.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_new_CMS.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_push.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_read.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_accept.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_bio.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_connect.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_fd.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_file.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_mem.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_null.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_s_socket.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_set_callback.3
  projects/ipfw/secure/lib/libcrypto/man/BIO_should_retry.3
  projects/ipfw/secure/lib/libcrypto/man/BN_BLINDING_new.3
  projects/ipfw/secure/lib/libcrypto/man/BN_CTX_new.3
  projects/ipfw/secure/lib/libcrypto/man/BN_CTX_start.3
  projects/ipfw/secure/lib/libcrypto/man/BN_add.3
  projects/ipfw/secure/lib/libcrypto/man/BN_add_word.3
  projects/ipfw/secure/lib/libcrypto/man/BN_bn2bin.3
  projects/ipfw/secure/lib/libcrypto/man/BN_cmp.3
  projects/ipfw/secure/lib/libcrypto/man/BN_copy.3
  projects/ipfw/secure/lib/libcrypto/man/BN_generate_prime.3
  projects/ipfw/secure/lib/libcrypto/man/BN_mod_inverse.3
  projects/ipfw/secure/lib/libcrypto/man/BN_mod_mul_montgomery.3
  projects/ipfw/secure/lib/libcrypto/man/BN_mod_mul_reciprocal.3
  projects/ipfw/secure/lib/libcrypto/man/BN_new.3
  projects/ipfw/secure/lib/libcrypto/man/BN_num_bytes.3
  projects/ipfw/secure/lib/libcrypto/man/BN_rand.3
  projects/ipfw/secure/lib/libcrypto/man/BN_set_bit.3
  projects/ipfw/secure/lib/libcrypto/man/BN_swap.3
  projects/ipfw/secure/lib/libcrypto/man/BN_zero.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_add0_cert.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_add1_recipient_cert.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_compress.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_decrypt.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_encrypt.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_final.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_get0_RecipientInfos.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_get0_SignerInfos.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_get0_type.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_get1_ReceiptRequest.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_sign.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_sign_add1_signer.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_sign_receipt.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_uncompress.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_verify.3
  projects/ipfw/secure/lib/libcrypto/man/CMS_verify_receipt.3
  projects/ipfw/secure/lib/libcrypto/man/CONF_modules_free.3
  projects/ipfw/secure/lib/libcrypto/man/CONF_modules_load_file.3
  projects/ipfw/secure/lib/libcrypto/man/CRYPTO_set_ex_data.3
  projects/ipfw/secure/lib/libcrypto/man/DH_generate_key.3
  projects/ipfw/secure/lib/libcrypto/man/DH_generate_parameters.3
  projects/ipfw/secure/lib/libcrypto/man/DH_get_ex_new_index.3
  projects/ipfw/secure/lib/libcrypto/man/DH_new.3
  projects/ipfw/secure/lib/libcrypto/man/DH_set_method.3
  projects/ipfw/secure/lib/libcrypto/man/DH_size.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_SIG_new.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_do_sign.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_dup_DH.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_generate_key.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_generate_parameters.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_get_ex_new_index.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_new.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_set_method.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_sign.3
  projects/ipfw/secure/lib/libcrypto/man/DSA_size.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_GET_LIB.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_clear_error.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_error_string.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_get_error.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_load_crypto_strings.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_load_strings.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_print_errors.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_put_error.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_remove_state.3
  projects/ipfw/secure/lib/libcrypto/man/ERR_set_mark.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_BytesToKey.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_DigestInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_DigestSignInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_DigestVerifyInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_EncryptInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_OpenInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_CTX_new.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_cmp.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_decrypt.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_derive.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_encrypt.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_get_default_digest.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_keygen.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_new.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_print_private.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_sign.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_verify.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_PKEY_verify_recover.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_SealInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_SignInit.3
  projects/ipfw/secure/lib/libcrypto/man/EVP_VerifyInit.3
  projects/ipfw/secure/lib/libcrypto/man/OBJ_nid2obj.3
  projects/ipfw/secure/lib/libcrypto/man/OPENSSL_Applink.3
  projects/ipfw/secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.3
  projects/ipfw/secure/lib/libcrypto/man/OPENSSL_config.3
  projects/ipfw/secure/lib/libcrypto/man/OPENSSL_ia32cap.3
  projects/ipfw/secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.3
  projects/ipfw/secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.3
  projects/ipfw/secure/lib/libcrypto/man/PEM_write_bio_CMS_stream.3
  projects/ipfw/secure/lib/libcrypto/man/PEM_write_bio_PKCS7_stream.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS12_create.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS12_parse.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS7_decrypt.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS7_encrypt.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS7_sign.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS7_sign_add_signer.3
  projects/ipfw/secure/lib/libcrypto/man/PKCS7_verify.3
  projects/ipfw/secure/lib/libcrypto/man/RAND_add.3
  projects/ipfw/secure/lib/libcrypto/man/RAND_bytes.3
  projects/ipfw/secure/lib/libcrypto/man/RAND_cleanup.3
  projects/ipfw/secure/lib/libcrypto/man/RAND_egd.3
  projects/ipfw/secure/lib/libcrypto/man/RAND_load_file.3
  projects/ipfw/secure/lib/libcrypto/man/RAND_set_rand_method.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_blinding_on.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_check_key.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_generate_key.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_get_ex_new_index.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_new.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_print.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_private_encrypt.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_public_encrypt.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_set_method.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_sign.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.3
  projects/ipfw/secure/lib/libcrypto/man/RSA_size.3
  projects/ipfw/secure/lib/libcrypto/man/SMIME_read_CMS.3
  projects/ipfw/secure/lib/libcrypto/man/SMIME_read_PKCS7.3
  projects/ipfw/secure/lib/libcrypto/man/SMIME_write_CMS.3
  projects/ipfw/secure/lib/libcrypto/man/SMIME_write_PKCS7.3
  projects/ipfw/secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.3
  projects/ipfw/secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.3
  projects/ipfw/secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.3
  projects/ipfw/secure/lib/libcrypto/man/X509_NAME_print_ex.3
  projects/ipfw/secure/lib/libcrypto/man/X509_STORE_CTX_get_error.3
  projects/ipfw/secure/lib/libcrypto/man/X509_STORE_CTX_get_ex_new_index.3
  projects/ipfw/secure/lib/libcrypto/man/X509_STORE_CTX_new.3
  projects/ipfw/secure/lib/libcrypto/man/X509_STORE_CTX_set_verify_cb.3
  projects/ipfw/secure/lib/libcrypto/man/X509_STORE_set_verify_cb_func.3
  projects/ipfw/secure/lib/libcrypto/man/X509_VERIFY_PARAM_set_flags.3
  projects/ipfw/secure/lib/libcrypto/man/X509_new.3
  projects/ipfw/secure/lib/libcrypto/man/X509_verify_cert.3
  projects/ipfw/secure/lib/libcrypto/man/bio.3
  projects/ipfw/secure/lib/libcrypto/man/blowfish.3
  projects/ipfw/secure/lib/libcrypto/man/bn.3
  projects/ipfw/secure/lib/libcrypto/man/bn_internal.3
  projects/ipfw/secure/lib/libcrypto/man/buffer.3
  projects/ipfw/secure/lib/libcrypto/man/crypto.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_ASN1_OBJECT.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_DHparams.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_DSAPublicKey.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_RSAPublicKey.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_X509.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_X509_ALGOR.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_X509_CRL.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_X509_NAME.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_X509_REQ.3
  projects/ipfw/secure/lib/libcrypto/man/d2i_X509_SIG.3
  projects/ipfw/secure/lib/libcrypto/man/des.3
  projects/ipfw/secure/lib/libcrypto/man/dh.3
  projects/ipfw/secure/lib/libcrypto/man/dsa.3
  projects/ipfw/secure/lib/libcrypto/man/ecdsa.3
  projects/ipfw/secure/lib/libcrypto/man/engine.3
  projects/ipfw/secure/lib/libcrypto/man/err.3
  projects/ipfw/secure/lib/libcrypto/man/evp.3
  projects/ipfw/secure/lib/libcrypto/man/hmac.3
  projects/ipfw/secure/lib/libcrypto/man/i2d_CMS_bio_stream.3
  projects/ipfw/secure/lib/libcrypto/man/i2d_PKCS7_bio_stream.3
  projects/ipfw/secure/lib/libcrypto/man/lh_stats.3
  projects/ipfw/secure/lib/libcrypto/man/lhash.3
  projects/ipfw/secure/lib/libcrypto/man/md5.3
  projects/ipfw/secure/lib/libcrypto/man/mdc2.3
  projects/ipfw/secure/lib/libcrypto/man/pem.3
  projects/ipfw/secure/lib/libcrypto/man/rand.3
  projects/ipfw/secure/lib/libcrypto/man/rc4.3
  projects/ipfw/secure/lib/libcrypto/man/ripemd.3
  projects/ipfw/secure/lib/libcrypto/man/rsa.3
  projects/ipfw/secure/lib/libcrypto/man/sha.3
  projects/ipfw/secure/lib/libcrypto/man/threads.3
  projects/ipfw/secure/lib/libcrypto/man/ui.3
  projects/ipfw/secure/lib/libcrypto/man/ui_compat.3
  projects/ipfw/secure/lib/libcrypto/man/x509.3
  projects/ipfw/secure/lib/libssh/Makefile
  projects/ipfw/secure/lib/libssl/Makefile.man
  projects/ipfw/secure/lib/libssl/man/SSL_CIPHER_get_name.3
  projects/ipfw/secure/lib/libssl/man/SSL_COMP_add_compression_method.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_add_session.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_ctrl.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_flush_sessions.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_free.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_get_ex_new_index.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_get_verify_mode.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_load_verify_locations.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_new.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_sess_number.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_sessions.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_cert_store.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_cipher_list.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_client_CA_list.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_generate_session_id.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_info_callback.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_max_cert_list.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_mode.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_msg_callback.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_options.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_psk_client_callback.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_session_id_context.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_ssl_version.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_timeout.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_set_verify.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_use_certificate.3
  projects/ipfw/secure/lib/libssl/man/SSL_CTX_use_psk_identity_hint.3
  projects/ipfw/secure/lib/libssl/man/SSL_SESSION_free.3
  projects/ipfw/secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.3
  projects/ipfw/secure/lib/libssl/man/SSL_SESSION_get_time.3
  projects/ipfw/secure/lib/libssl/man/SSL_accept.3
  projects/ipfw/secure/lib/libssl/man/SSL_alert_type_string.3
  projects/ipfw/secure/lib/libssl/man/SSL_clear.3
  projects/ipfw/secure/lib/libssl/man/SSL_connect.3
  projects/ipfw/secure/lib/libssl/man/SSL_do_handshake.3
  projects/ipfw/secure/lib/libssl/man/SSL_free.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_SSL_CTX.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_ciphers.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_client_CA_list.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_current_cipher.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_default_timeout.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_error.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_ex_new_index.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_fd.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_peer_cert_chain.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_peer_certificate.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_psk_identity.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_rbio.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_session.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_verify_result.3
  projects/ipfw/secure/lib/libssl/man/SSL_get_version.3
  projects/ipfw/secure/lib/libssl/man/SSL_library_init.3
  projects/ipfw/secure/lib/libssl/man/SSL_load_client_CA_file.3
  projects/ipfw/secure/lib/libssl/man/SSL_new.3
  projects/ipfw/secure/lib/libssl/man/SSL_pending.3
  projects/ipfw/secure/lib/libssl/man/SSL_read.3
  projects/ipfw/secure/lib/libssl/man/SSL_rstate_string.3
  projects/ipfw/secure/lib/libssl/man/SSL_session_reused.3
  projects/ipfw/secure/lib/libssl/man/SSL_set_bio.3
  projects/ipfw/secure/lib/libssl/man/SSL_set_connect_state.3
  projects/ipfw/secure/lib/libssl/man/SSL_set_fd.3
  projects/ipfw/secure/lib/libssl/man/SSL_set_session.3
  projects/ipfw/secure/lib/libssl/man/SSL_set_shutdown.3
  projects/ipfw/secure/lib/libssl/man/SSL_set_verify_result.3
  projects/ipfw/secure/lib/libssl/man/SSL_shutdown.3
  projects/ipfw/secure/lib/libssl/man/SSL_state_string.3
  projects/ipfw/secure/lib/libssl/man/SSL_want.3
  projects/ipfw/secure/lib/libssl/man/SSL_write.3
  projects/ipfw/secure/lib/libssl/man/d2i_SSL_SESSION.3
  projects/ipfw/secure/lib/libssl/man/ssl.3
  projects/ipfw/secure/libexec/sftp-server/Makefile
  projects/ipfw/secure/libexec/ssh-keysign/Makefile
  projects/ipfw/secure/libexec/ssh-pkcs11-helper/Makefile
  projects/ipfw/secure/usr.bin/openssl/man/CA.pl.1
  projects/ipfw/secure/usr.bin/openssl/man/asn1parse.1
  projects/ipfw/secure/usr.bin/openssl/man/ca.1
  projects/ipfw/secure/usr.bin/openssl/man/ciphers.1
  projects/ipfw/secure/usr.bin/openssl/man/cms.1
  projects/ipfw/secure/usr.bin/openssl/man/crl.1
  projects/ipfw/secure/usr.bin/openssl/man/crl2pkcs7.1
  projects/ipfw/secure/usr.bin/openssl/man/dgst.1
  projects/ipfw/secure/usr.bin/openssl/man/dhparam.1
  projects/ipfw/secure/usr.bin/openssl/man/dsa.1
  projects/ipfw/secure/usr.bin/openssl/man/dsaparam.1
  projects/ipfw/secure/usr.bin/openssl/man/ec.1
  projects/ipfw/secure/usr.bin/openssl/man/ecparam.1
  projects/ipfw/secure/usr.bin/openssl/man/enc.1
  projects/ipfw/secure/usr.bin/openssl/man/errstr.1
  projects/ipfw/secure/usr.bin/openssl/man/gendsa.1
  projects/ipfw/secure/usr.bin/openssl/man/genpkey.1
  projects/ipfw/secure/usr.bin/openssl/man/genrsa.1
  projects/ipfw/secure/usr.bin/openssl/man/nseq.1
  projects/ipfw/secure/usr.bin/openssl/man/ocsp.1
  projects/ipfw/secure/usr.bin/openssl/man/openssl.1
  projects/ipfw/secure/usr.bin/openssl/man/passwd.1
  projects/ipfw/secure/usr.bin/openssl/man/pkcs12.1
  projects/ipfw/secure/usr.bin/openssl/man/pkcs7.1
  projects/ipfw/secure/usr.bin/openssl/man/pkcs8.1
  projects/ipfw/secure/usr.bin/openssl/man/pkey.1
  projects/ipfw/secure/usr.bin/openssl/man/pkeyparam.1
  projects/ipfw/secure/usr.bin/openssl/man/pkeyutl.1
  projects/ipfw/secure/usr.bin/openssl/man/rand.1
  projects/ipfw/secure/usr.bin/openssl/man/req.1
  projects/ipfw/secure/usr.bin/openssl/man/rsa.1
  projects/ipfw/secure/usr.bin/openssl/man/rsautl.1
  projects/ipfw/secure/usr.bin/openssl/man/s_client.1
  projects/ipfw/secure/usr.bin/openssl/man/s_server.1
  projects/ipfw/secure/usr.bin/openssl/man/s_time.1
  projects/ipfw/secure/usr.bin/openssl/man/sess_id.1
  projects/ipfw/secure/usr.bin/openssl/man/smime.1
  projects/ipfw/secure/usr.bin/openssl/man/speed.1
  projects/ipfw/secure/usr.bin/openssl/man/spkac.1
  projects/ipfw/secure/usr.bin/openssl/man/ts.1
  projects/ipfw/secure/usr.bin/openssl/man/tsget.1
  projects/ipfw/secure/usr.bin/openssl/man/verify.1
  projects/ipfw/secure/usr.bin/openssl/man/version.1
  projects/ipfw/secure/usr.bin/openssl/man/x509.1
  projects/ipfw/secure/usr.bin/openssl/man/x509v3_config.1
  projects/ipfw/secure/usr.bin/scp/Makefile
  projects/ipfw/secure/usr.bin/sftp/Makefile
  projects/ipfw/secure/usr.bin/ssh-add/Makefile
  projects/ipfw/secure/usr.bin/ssh-agent/Makefile
  projects/ipfw/secure/usr.bin/ssh-keygen/Makefile
  projects/ipfw/secure/usr.bin/ssh-keyscan/Makefile
  projects/ipfw/secure/usr.bin/ssh/Makefile
  projects/ipfw/secure/usr.sbin/sshd/Makefile
  projects/ipfw/share/Makefile
  projects/ipfw/share/dict/freebsd
  projects/ipfw/share/dtrace/Makefile
  projects/ipfw/share/dtrace/README
  projects/ipfw/share/dtrace/hotopen
  projects/ipfw/share/dtrace/nfsattrstats
  projects/ipfw/share/dtrace/nfsclienttime
  projects/ipfw/share/dtrace/toolkit/Makefile
  projects/ipfw/share/examples/Makefile
  projects/ipfw/share/examples/bhyve/vmrun.sh
  projects/ipfw/share/examples/etc/make.conf
  projects/ipfw/share/examples/hwpmc/README
  projects/ipfw/share/examples/mdoc/example.1
  projects/ipfw/share/examples/mdoc/example.3
  projects/ipfw/share/examples/mdoc/example.4
  projects/ipfw/share/examples/mdoc/example.9
  projects/ipfw/share/examples/scsi_target/scsi_target.8
  projects/ipfw/share/man/man1/builtin.1
  projects/ipfw/share/man/man3/ATOMIC_VAR_INIT.3
  projects/ipfw/share/man/man3/Makefile
  projects/ipfw/share/man/man3/offsetof.3
  projects/ipfw/share/man/man3/pthread.3
  projects/ipfw/share/man/man3/pthread_affinity_np.3
  projects/ipfw/share/man/man3/pthread_atfork.3
  projects/ipfw/share/man/man3/pthread_attr_affinity_np.3
  projects/ipfw/share/man/man3/pthread_attr_get_np.3
  projects/ipfw/share/man/man3/pthread_attr_setcreatesuspend_np.3
  projects/ipfw/share/man/man3/pthread_cancel.3
  projects/ipfw/share/man/man3/pthread_getcpuclockid.3
  projects/ipfw/share/man/man3/pthread_getthreadid_np.3
  projects/ipfw/share/man/man3/pthread_main_np.3
  projects/ipfw/share/man/man3/pthread_multi_np.3
  projects/ipfw/share/man/man3/pthread_resume_all_np.3
  projects/ipfw/share/man/man3/pthread_resume_np.3
  projects/ipfw/share/man/man3/pthread_set_name_np.3
  projects/ipfw/share/man/man3/pthread_suspend_all_np.3
  projects/ipfw/share/man/man3/pthread_suspend_np.3
  projects/ipfw/share/man/man3/pthread_switch_add_np.3
  projects/ipfw/share/man/man3/pthread_testcancel.3
  projects/ipfw/share/man/man3/siginfo.3
  projects/ipfw/share/man/man4/aac.4
  projects/ipfw/share/man/man4/aacraid.4
  projects/ipfw/share/man/man4/acpi.4
  projects/ipfw/share/man/man4/acpi_asus.4
  projects/ipfw/share/man/man4/acpi_asus_wmi.4
  projects/ipfw/share/man/man4/acpi_dock.4
  projects/ipfw/share/man/man4/acpi_fujitsu.4
  projects/ipfw/share/man/man4/acpi_hp.4
  projects/ipfw/share/man/man4/acpi_ibm.4
  projects/ipfw/share/man/man4/acpi_panasonic.4
  projects/ipfw/share/man/man4/acpi_rapidstart.4
  projects/ipfw/share/man/man4/acpi_sony.4
  projects/ipfw/share/man/man4/acpi_toshiba.4
  projects/ipfw/share/man/man4/acpi_video.4
  projects/ipfw/share/man/man4/acpi_wmi.4
  projects/ipfw/share/man/man4/ada.4
  projects/ipfw/share/man/man4/ae.4
  projects/ipfw/share/man/man4/aesni.4
  projects/ipfw/share/man/man4/age.4
  projects/ipfw/share/man/man4/ahci.4
  projects/ipfw/share/man/man4/aibs.4
  projects/ipfw/share/man/man4/alc.4
  projects/ipfw/share/man/man4/ale.4
  projects/ipfw/share/man/man4/alpm.4
  projects/ipfw/share/man/man4/amdpm.4
  projects/ipfw/share/man/man4/amdsbwd.4
  projects/ipfw/share/man/man4/amdsmb.4
  projects/ipfw/share/man/man4/amdtemp.4
  projects/ipfw/share/man/man4/amr.4
  projects/ipfw/share/man/man4/an.4
  projects/ipfw/share/man/man4/aout.4
  projects/ipfw/share/man/man4/arcmsr.4
  projects/ipfw/share/man/man4/asmc.4
  projects/ipfw/share/man/man4/asr.4
  projects/ipfw/share/man/man4/ata.4
  projects/ipfw/share/man/man4/atkbd.4
  projects/ipfw/share/man/man4/atkbdc.4
  projects/ipfw/share/man/man4/atp.4
  projects/ipfw/share/man/man4/audit.4
  projects/ipfw/share/man/man4/auditpipe.4
  projects/ipfw/share/man/man4/aue.4
  projects/ipfw/share/man/man4/axe.4
  projects/ipfw/share/man/man4/axge.4
  projects/ipfw/share/man/man4/bce.4
  projects/ipfw/share/man/man4/bge.4
  projects/ipfw/share/man/man4/bhyve.4   (contents, props changed)
  projects/ipfw/share/man/man4/bktr.4
  projects/ipfw/share/man/man4/bridge.4
  projects/ipfw/share/man/man4/bwn.4
  projects/ipfw/share/man/man4/bxe.4
  projects/ipfw/share/man/man4/capsicum.4
  projects/ipfw/share/man/man4/cas.4
  projects/ipfw/share/man/man4/cc_cdg.4
  projects/ipfw/share/man/man4/cc_chd.4
  projects/ipfw/share/man/man4/cc_cubic.4
  projects/ipfw/share/man/man4/cc_hd.4
  projects/ipfw/share/man/man4/cc_htcp.4
  projects/ipfw/share/man/man4/cc_newreno.4
  projects/ipfw/share/man/man4/cc_vegas.4
  projects/ipfw/share/man/man4/cdce.4
  projects/ipfw/share/man/man4/ch.4
  projects/ipfw/share/man/man4/ciss.4
  projects/ipfw/share/man/man4/cm.4
  projects/ipfw/share/man/man4/cmx.4
  projects/ipfw/share/man/man4/coretemp.4
  projects/ipfw/share/man/man4/cpuctl.4
  projects/ipfw/share/man/man4/ctl.4
  projects/ipfw/share/man/man4/cue.4
  projects/ipfw/share/man/man4/cxgb.4
  projects/ipfw/share/man/man4/cxgbe.4
  projects/ipfw/share/man/man4/dc.4
  projects/ipfw/share/man/man4/dcons.4
  projects/ipfw/share/man/man4/dcons_crom.4
  projects/ipfw/share/man/man4/ddb.4
  projects/ipfw/share/man/man4/divert.4
  projects/ipfw/share/man/man4/dummynet.4
  projects/ipfw/share/man/man4/em.4
  projects/ipfw/share/man/man4/esp.4
  projects/ipfw/share/man/man4/est.4
  projects/ipfw/share/man/man4/et.4
  projects/ipfw/share/man/man4/fatm.4
  projects/ipfw/share/man/man4/ffclock.4
  projects/ipfw/share/man/man4/full.4
  projects/ipfw/share/man/man4/gbde.4
  projects/ipfw/share/man/man4/gdb.4
  projects/ipfw/share/man/man4/gem.4
  projects/ipfw/share/man/man4/geom.4
  projects/ipfw/share/man/man4/geom_fox.4
  projects/ipfw/share/man/man4/geom_linux_lvm.4
  projects/ipfw/share/man/man4/geom_map.4
  projects/ipfw/share/man/man4/geom_uncompress.4
  projects/ipfw/share/man/man4/geom_uzip.4
  projects/ipfw/share/man/man4/gpio.4
  projects/ipfw/share/man/man4/gre.4
  projects/ipfw/share/man/man4/h_ertt.4
  projects/ipfw/share/man/man4/hatm.4
  projects/ipfw/share/man/man4/hme.4
  projects/ipfw/share/man/man4/hpt27xx.4
  projects/ipfw/share/man/man4/hptiop.4
  projects/ipfw/share/man/man4/hptnr.4
  projects/ipfw/share/man/man4/hv_ata_pci_disengage.4
  projects/ipfw/share/man/man4/hv_kvp.4
  projects/ipfw/share/man/man4/hv_netvsc.4
  projects/ipfw/share/man/man4/hv_storvsc.4
  projects/ipfw/share/man/man4/hv_utils.4
  projects/ipfw/share/man/man4/hv_vmbus.4
  projects/ipfw/share/man/man4/hwpmc.4
  projects/ipfw/share/man/man4/ichsmb.4
  projects/ipfw/share/man/man4/ichwd.4
  projects/ipfw/share/man/man4/ida.4
  projects/ipfw/share/man/man4/igb.4
  projects/ipfw/share/man/man4/iic.4
  projects/ipfw/share/man/man4/iicbus.4
  projects/ipfw/share/man/man4/iir.4
  projects/ipfw/share/man/man4/inet.4
  projects/ipfw/share/man/man4/intpm.4
  projects/ipfw/share/man/man4/ipmi.4
  projects/ipfw/share/man/man4/ips.4
  projects/ipfw/share/man/man4/ipw.4
  projects/ipfw/share/man/man4/isci.4
  projects/ipfw/share/man/man4/ismt.4
  projects/ipfw/share/man/man4/iwi.4
  projects/ipfw/share/man/man4/iwn.4
  projects/ipfw/share/man/man4/ixgb.4
  projects/ipfw/share/man/man4/ixgbe.4
  projects/ipfw/share/man/man4/jme.4
  projects/ipfw/share/man/man4/joy.4
  projects/ipfw/share/man/man4/kbdmux.4
  projects/ipfw/share/man/man4/keyboard.4
  projects/ipfw/share/man/man4/kld.4
  projects/ipfw/share/man/man4/ksyms.4
  projects/ipfw/share/man/man4/kue.4
  projects/ipfw/share/man/man4/lagg.4
  projects/ipfw/share/man/man4/le.4
  projects/ipfw/share/man/man4/led.4
  projects/ipfw/share/man/man4/lge.4
  projects/ipfw/share/man/man4/lm75.4
  projects/ipfw/share/man/man4/lmc.4
  projects/ipfw/share/man/man4/mac_bsdextended.4
  projects/ipfw/share/man/man4/man4.arm/ti_adc.4
  projects/ipfw/share/man/man4/man4.i386/CPU_ELAN.4
  projects/ipfw/share/man/man4/man4.i386/ct.4
  projects/ipfw/share/man/man4/man4.i386/fe.4
  projects/ipfw/share/man/man4/man4.i386/glxiic.4
  projects/ipfw/share/man/man4/man4.i386/glxsb.4
  projects/ipfw/share/man/man4/man4.i386/longrun.4
  projects/ipfw/share/man/man4/man4.i386/pae.4
  projects/ipfw/share/man/man4/man4.i386/pbio.4
  projects/ipfw/share/man/man4/man4.i386/smapi.4
  projects/ipfw/share/man/man4/man4.i386/snc.4
  projects/ipfw/share/man/man4/man4.i386/vpd.4
  projects/ipfw/share/man/man4/man4.i386/vx.4
  projects/ipfw/share/man/man4/man4.powerpc/adb.4
  projects/ipfw/share/man/man4/man4.powerpc/akbd.4
  projects/ipfw/share/man/man4/man4.powerpc/ams.4
  projects/ipfw/share/man/man4/man4.powerpc/bm.4
  projects/ipfw/share/man/man4/man4.powerpc/cuda.4
  projects/ipfw/share/man/man4/man4.powerpc/pmu.4
  projects/ipfw/share/man/man4/man4.powerpc/powermac_nvram.4
  projects/ipfw/share/man/man4/man4.powerpc/smu.4
  projects/ipfw/share/man/man4/man4.powerpc/snd_ai2s.4
  projects/ipfw/share/man/man4/man4.powerpc/snd_davbus.4
  projects/ipfw/share/man/man4/man4.sparc64/auxio.4
  projects/ipfw/share/man/man4/man4.sparc64/central.4
  projects/ipfw/share/man/man4/man4.sparc64/clkbrd.4
  projects/ipfw/share/man/man4/man4.sparc64/creator.4
  projects/ipfw/share/man/man4/man4.sparc64/ebus.4
  projects/ipfw/share/man/man4/man4.sparc64/eeprom.4
  projects/ipfw/share/man/man4/man4.sparc64/fhc.4
  projects/ipfw/share/man/man4/man4.sparc64/machfb.4
  projects/ipfw/share/man/man4/man4.sparc64/ofw_console.4
  projects/ipfw/share/man/man4/man4.sparc64/openfirm.4
  projects/ipfw/share/man/man4/man4.sparc64/openprom.4
  projects/ipfw/share/man/man4/man4.sparc64/rtc.4
  projects/ipfw/share/man/man4/man4.sparc64/sbus.4
  projects/ipfw/share/man/man4/man4.sparc64/snd_audiocs.4
  projects/ipfw/share/man/man4/md.4
  projects/ipfw/share/man/man4/meteor.4
  projects/ipfw/share/man/man4/mfi.4
  projects/ipfw/share/man/man4/miibus.4
  projects/ipfw/share/man/man4/mk48txx.4
  projects/ipfw/share/man/man4/mlx.4
  projects/ipfw/share/man/man4/mly.4
  projects/ipfw/share/man/man4/mn.4
  projects/ipfw/share/man/man4/mod_cc.4
  projects/ipfw/share/man/man4/mouse.4
  projects/ipfw/share/man/man4/mpr.4
  projects/ipfw/share/man/man4/mps.4
  projects/ipfw/share/man/man4/mpt.4
  projects/ipfw/share/man/man4/mrsas.4
  projects/ipfw/share/man/man4/msk.4
  projects/ipfw/share/man/man4/mvs.4
  projects/ipfw/share/man/man4/mxge.4
  projects/ipfw/share/man/man4/my.4
  projects/ipfw/share/man/man4/nand.4
  projects/ipfw/share/man/man4/nandsim.4
  projects/ipfw/share/man/man4/ncv.4
  projects/ipfw/share/man/man4/ndis.4
  projects/ipfw/share/man/man4/netgraph.4
  projects/ipfw/share/man/man4/nfe.4
  projects/ipfw/share/man/man4/nfsmb.4
  projects/ipfw/share/man/man4/ng_UI.4
  projects/ipfw/share/man/man4/ng_async.4
  projects/ipfw/share/man/man4/ng_atm.4
  projects/ipfw/share/man/man4/ng_atmllc.4
  projects/ipfw/share/man/man4/ng_bluetooth.4
  projects/ipfw/share/man/man4/ng_bpf.4
  projects/ipfw/share/man/man4/ng_bridge.4
  projects/ipfw/share/man/man4/ng_bt3c.4
  projects/ipfw/share/man/man4/ng_btsocket.4
  projects/ipfw/share/man/man4/ng_car.4
  projects/ipfw/share/man/man4/ng_ccatm.4
  projects/ipfw/share/man/man4/ng_cisco.4
  projects/ipfw/share/man/man4/ng_deflate.4
  projects/ipfw/share/man/man4/ng_device.4
  projects/ipfw/share/man/man4/ng_echo.4
  projects/ipfw/share/man/man4/ng_etf.4
  projects/ipfw/share/man/man4/ng_ether.4
  projects/ipfw/share/man/man4/ng_ether_echo.4
  projects/ipfw/share/man/man4/ng_frame_relay.4
  projects/ipfw/share/man/man4/ng_gif.4
  projects/ipfw/share/man/man4/ng_gif_demux.4
  projects/ipfw/share/man/man4/ng_h4.4
  projects/ipfw/share/man/man4/ng_hci.4
  projects/ipfw/share/man/man4/ng_hole.4
  projects/ipfw/share/man/man4/ng_hub.4
  projects/ipfw/share/man/man4/ng_iface.4
  projects/ipfw/share/man/man4/ng_ip_input.4
  projects/ipfw/share/man/man4/ng_ipfw.4
  projects/ipfw/share/man/man4/ng_ksocket.4
  projects/ipfw/share/man/man4/ng_l2cap.4
  projects/ipfw/share/man/man4/ng_l2tp.4
  projects/ipfw/share/man/man4/ng_lmi.4
  projects/ipfw/share/man/man4/ng_mppc.4
  projects/ipfw/share/man/man4/ng_nat.4
  projects/ipfw/share/man/man4/ng_netflow.4
  projects/ipfw/share/man/man4/ng_one2many.4
  projects/ipfw/share/man/man4/ng_patch.4
  projects/ipfw/share/man/man4/ng_ppp.4
  projects/ipfw/share/man/man4/ng_pppoe.4
  projects/ipfw/share/man/man4/ng_pptpgre.4
  projects/ipfw/share/man/man4/ng_pred1.4
  projects/ipfw/share/man/man4/ng_rfc1490.4
  projects/ipfw/share/man/man4/ng_socket.4
  projects/ipfw/share/man/man4/ng_split.4
  projects/ipfw/share/man/man4/ng_sppp.4
  projects/ipfw/share/man/man4/ng_sscfu.4
  projects/ipfw/share/man/man4/ng_sscop.4
  projects/ipfw/share/man/man4/ng_tag.4
  projects/ipfw/share/man/man4/ng_tcpmss.4
  projects/ipfw/share/man/man4/ng_tee.4
  projects/ipfw/share/man/man4/ng_tty.4
  projects/ipfw/share/man/man4/ng_ubt.4
  projects/ipfw/share/man/man4/ng_uni.4
  projects/ipfw/share/man/man4/ng_vjc.4
  projects/ipfw/share/man/man4/ng_vlan.4
  projects/ipfw/share/man/man4/ngatmbase.4
  projects/ipfw/share/man/man4/nge.4
  projects/ipfw/share/man/man4/nsp.4
  projects/ipfw/share/man/man4/ntb.4
  projects/ipfw/share/man/man4/nvd.4
  projects/ipfw/share/man/man4/nvme.4
  projects/ipfw/share/man/man4/nvram2env.4
  projects/ipfw/share/man/man4/nxge.4
  projects/ipfw/share/man/man4/ohci.4
  projects/ipfw/share/man/man4/orm.4
  projects/ipfw/share/man/man4/padlock.4
  projects/ipfw/share/man/man4/pass.4
  projects/ipfw/share/man/man4/patm.4
  projects/ipfw/share/man/man4/pci.4
  projects/ipfw/share/man/man4/pcm.4
  projects/ipfw/share/man/man4/pcn.4
  projects/ipfw/share/man/man4/polling.4
  projects/ipfw/share/man/man4/procdesc.4
  projects/ipfw/share/man/man4/proto.4
  projects/ipfw/share/man/man4/psm.4
  projects/ipfw/share/man/man4/pst.4
  projects/ipfw/share/man/man4/qlxgb.4
  projects/ipfw/share/man/man4/qlxgbe.4
  projects/ipfw/share/man/man4/qlxge.4
  projects/ipfw/share/man/man4/ral.4
  projects/ipfw/share/man/man4/rc.4
  projects/ipfw/share/man/man4/re.4
  projects/ipfw/share/man/man4/rights.4
  projects/ipfw/share/man/man4/rl.4
  projects/ipfw/share/man/man4/rp.4
  projects/ipfw/share/man/man4/rsu.4
  projects/ipfw/share/man/man4/rue.4
  projects/ipfw/share/man/man4/rum.4
  projects/ipfw/share/man/man4/run.4
  projects/ipfw/share/man/man4/scc.4
  projects/ipfw/share/man/man4/sched_ule.4
  projects/ipfw/share/man/man4/screen.4
  projects/ipfw/share/man/man4/scsi.4
  projects/ipfw/share/man/man4/sdhci.4
  projects/ipfw/share/man/man4/send.4
  projects/ipfw/share/man/man4/sf.4
  projects/ipfw/share/man/man4/sge.4
  projects/ipfw/share/man/man4/si.4
  projects/ipfw/share/man/man4/siba.4
  projects/ipfw/share/man/man4/siftr.4
  projects/ipfw/share/man/man4/siis.4
  projects/ipfw/share/man/man4/sis.4
  projects/ipfw/share/man/man4/sk.4
  projects/ipfw/share/man/man4/smp.4
  projects/ipfw/share/man/man4/snd_ad1816.4
  projects/ipfw/share/man/man4/snd_als4000.4
  projects/ipfw/share/man/man4/snd_atiixp.4
  projects/ipfw/share/man/man4/snd_cmi.4
  projects/ipfw/share/man/man4/snd_cs4281.4
  projects/ipfw/share/man/man4/snd_csa.4
  projects/ipfw/share/man/man4/snd_ds1.4
  projects/ipfw/share/man/man4/snd_emu10k1.4
  projects/ipfw/share/man/man4/snd_emu10kx.4
  projects/ipfw/share/man/man4/snd_envy24.4
  projects/ipfw/share/man/man4/snd_envy24ht.4
  projects/ipfw/share/man/man4/snd_es137x.4
  projects/ipfw/share/man/man4/snd_ess.4
  projects/ipfw/share/man/man4/snd_fm801.4
  projects/ipfw/share/man/man4/snd_gusc.4
  projects/ipfw/share/man/man4/snd_hda.4
  projects/ipfw/share/man/man4/snd_ich.4
  projects/ipfw/share/man/man4/snd_maestro.4
  projects/ipfw/share/man/man4/snd_maestro3.4
  projects/ipfw/share/man/man4/snd_mss.4
  projects/ipfw/share/man/man4/snd_neomagic.4
  projects/ipfw/share/man/man4/snd_sbc.4
  projects/ipfw/share/man/man4/snd_solo.4
  projects/ipfw/share/man/man4/snd_spicds.4
  projects/ipfw/share/man/man4/snd_t4dwave.4
  projects/ipfw/share/man/man4/snd_uaudio.4
  projects/ipfw/share/man/man4/snd_via8233.4
  projects/ipfw/share/man/man4/snd_via82c686.4
  projects/ipfw/share/man/man4/snd_vibes.4
  projects/ipfw/share/man/man4/snp.4
  projects/ipfw/share/man/man4/spic.4
  projects/ipfw/share/man/man4/spkr.4
  projects/ipfw/share/man/man4/splash.4
  projects/ipfw/share/man/man4/sppp.4
  projects/ipfw/share/man/man4/ste.4
  projects/ipfw/share/man/man4/stge.4
  projects/ipfw/share/man/man4/syncache.4
  projects/ipfw/share/man/man4/syscons.4
  projects/ipfw/share/man/man4/sysmouse.4
  projects/ipfw/share/man/man4/targ.4
  projects/ipfw/share/man/man4/tdfx.4
  projects/ipfw/share/man/man4/ti.4
  projects/ipfw/share/man/man4/tl.4
  projects/ipfw/share/man/man4/trm.4
  projects/ipfw/share/man/man4/tty.4
  projects/ipfw/share/man/man4/twa.4
  projects/ipfw/share/man/man4/twe.4
  projects/ipfw/share/man/man4/tws.4
  projects/ipfw/share/man/man4/u3g.4
  projects/ipfw/share/man/man4/uark.4
  projects/ipfw/share/man/man4/uart.4
  projects/ipfw/share/man/man4/uath.4
  projects/ipfw/share/man/man4/ubsa.4
  projects/ipfw/share/man/man4/ubtbcmfw.4
  projects/ipfw/share/man/man4/ucom.4
  projects/ipfw/share/man/man4/ucycom.4
  projects/ipfw/share/man/man4/udav.4
  projects/ipfw/share/man/man4/udbp.4
  projects/ipfw/share/man/man4/uep.4
  projects/ipfw/share/man/man4/ufm.4
  projects/ipfw/share/man/man4/uhci.4
  projects/ipfw/share/man/man4/uhid.4
  projects/ipfw/share/man/man4/uhso.4
  projects/ipfw/share/man/man4/ukbd.4
  projects/ipfw/share/man/man4/ulpt.4
  projects/ipfw/share/man/man4/umass.4
  projects/ipfw/share/man/man4/umcs.4
  projects/ipfw/share/man/man4/umct.4
  projects/ipfw/share/man/man4/umodem.4
  projects/ipfw/share/man/man4/ums.4
  projects/ipfw/share/man/man4/upgt.4
  projects/ipfw/share/man/man4/uplcom.4
  projects/ipfw/share/man/man4/ural.4
  projects/ipfw/share/man/man4/urio.4
  projects/ipfw/share/man/man4/urtw.4
  projects/ipfw/share/man/man4/urtwn.4
  projects/ipfw/share/man/man4/usb.4
  projects/ipfw/share/man/man4/usb_quirk.4
  projects/ipfw/share/man/man4/usb_template.4
  projects/ipfw/share/man/man4/uslcom.4
  projects/ipfw/share/man/man4/utopia.4
  projects/ipfw/share/man/man4/uvisor.4
  projects/ipfw/share/man/man4/uvscom.4
  projects/ipfw/share/man/man4/vale.4
  projects/ipfw/share/man/man4/vga.4
  projects/ipfw/share/man/man4/vge.4
  projects/ipfw/share/man/man4/viapm.4
  projects/ipfw/share/man/man4/viawd.4
  projects/ipfw/share/man/man4/virtio.4
  projects/ipfw/share/man/man4/virtio_balloon.4
  projects/ipfw/share/man/man4/virtio_blk.4
  projects/ipfw/share/man/man4/virtio_random.4
  projects/ipfw/share/man/man4/virtio_scsi.4
  projects/ipfw/share/man/man4/vkbd.4
  projects/ipfw/share/man/man4/vmx.4
  projects/ipfw/share/man/man4/vr.4
  projects/ipfw/share/man/man4/vt.4
  projects/ipfw/share/man/man4/vte.4
  projects/ipfw/share/man/man4/vtnet.4
  projects/ipfw/share/man/man4/vxge.4
  projects/ipfw/share/man/man4/watchdog.4
  projects/ipfw/share/man/man4/wb.4
  projects/ipfw/share/man/man4/wbwd.4
  projects/ipfw/share/man/man4/wi.4
  projects/ipfw/share/man/man4/wlan.4
  projects/ipfw/share/man/man4/wpi.4
  projects/ipfw/share/man/man4/wsp.4
  projects/ipfw/share/man/man4/xe.4
  projects/ipfw/share/man/man4/xen.4
  projects/ipfw/share/man/man4/xl.4
  projects/ipfw/share/man/man4/xnb.4
  projects/ipfw/share/man/man4/xpt.4
  projects/ipfw/share/man/man4/zyd.4
  projects/ipfw/share/man/man5/bluetooth.device.conf.5
  projects/ipfw/share/man/man5/bluetooth.hosts.5
  projects/ipfw/share/man/man5/bluetooth.protocols.5
  projects/ipfw/share/man/man5/boot.config.5
  projects/ipfw/share/man/man5/devfs.5
  projects/ipfw/share/man/man5/devfs.conf.5
  projects/ipfw/share/man/man5/devfs.rules.5
  projects/ipfw/share/man/man5/elf.5
  projects/ipfw/share/man/man5/ext2fs.5
  projects/ipfw/share/man/man5/fdescfs.5
  projects/ipfw/share/man/man5/freebsd-update.conf.5
  projects/ipfw/share/man/man5/libmap.conf.5
  projects/ipfw/share/man/man5/mailer.conf.5
  projects/ipfw/share/man/man5/make.conf.5
  projects/ipfw/share/man/man5/mqueuefs.5
  projects/ipfw/share/man/man5/msdosfs.5
  projects/ipfw/share/man/man5/nandfs.5
  projects/ipfw/share/man/man5/nsmb.conf.5
  projects/ipfw/share/man/man5/nsswitch.conf.5
  projects/ipfw/share/man/man5/nullfs.5
  projects/ipfw/share/man/man5/periodic.conf.5
  projects/ipfw/share/man/man5/pf.conf.5
  projects/ipfw/share/man/man5/portindex.5
  projects/ipfw/share/man/man5/portsnap.conf.5
  projects/ipfw/share/man/man5/rc.conf.5
  projects/ipfw/share/man/man5/reiserfs.5
  projects/ipfw/share/man/man5/src.conf.5
  projects/ipfw/share/man/man5/tmpfs.5
  projects/ipfw/share/man/man7/build.7
  projects/ipfw/share/man/man7/c99.7
  projects/ipfw/share/man/man7/development.7
  projects/ipfw/share/man/man7/hier.7
  projects/ipfw/share/man/man7/release.7
  projects/ipfw/share/man/man7/sdoc.7
  projects/ipfw/share/man/man7/sprog.7
  projects/ipfw/share/man/man7/tests.7
  projects/ipfw/share/man/man7/tuning.7
  projects/ipfw/share/man/man8/hv_kvp_daemon.8
  projects/ipfw/share/man/man8/nanobsd.8
  projects/ipfw/share/man/man8/picobsd.8
  projects/ipfw/share/man/man8/rescue.8
  projects/ipfw/share/man/man9/BUF_ISLOCKED.9
  projects/ipfw/share/man/man9/BUF_LOCK.9
  projects/ipfw/share/man/man9/BUF_LOCKFREE.9
  projects/ipfw/share/man/man9/BUF_LOCKINIT.9
  projects/ipfw/share/man/man9/BUF_RECURSED.9
  projects/ipfw/share/man/man9/BUF_TIMELOCK.9
  projects/ipfw/share/man/man9/BUF_UNLOCK.9
  projects/ipfw/share/man/man9/BUS_CONFIG_INTR.9
  projects/ipfw/share/man/man9/BUS_SETUP_INTR.9
  projects/ipfw/share/man/man9/CTASSERT.9
  projects/ipfw/share/man/man9/DB_COMMAND.9
  projects/ipfw/share/man/man9/DECLARE_GEOM_CLASS.9
  projects/ipfw/share/man/man9/DECLARE_MODULE.9
  projects/ipfw/share/man/man9/DEVICE_ATTACH.9
  projects/ipfw/share/man/man9/DEVICE_IDENTIFY.9
  projects/ipfw/share/man/man9/DEV_MODULE.9
  projects/ipfw/share/man/man9/DRIVER_MODULE.9
  projects/ipfw/share/man/man9/EVENTHANDLER.9
  projects/ipfw/share/man/man9/KASSERT.9
  projects/ipfw/share/man/man9/LOCK_PROFILING.9
  projects/ipfw/share/man/man9/MODULE_DEPEND.9
  projects/ipfw/share/man/man9/MODULE_VERSION.9
  projects/ipfw/share/man/man9/Makefile
  projects/ipfw/share/man/man9/SDT.9
  projects/ipfw/share/man/man9/SYSCALL_MODULE.9
  projects/ipfw/share/man/man9/SYSINIT.9
  projects/ipfw/share/man/man9/VFS_SET.9
  projects/ipfw/share/man/man9/VOP_INACTIVE.9
  projects/ipfw/share/man/man9/alq.9
  projects/ipfw/share/man/man9/atomic.9
  projects/ipfw/share/man/man9/bus_activate_resource.9
  projects/ipfw/share/man/man9/bus_alloc_resource.9
  projects/ipfw/share/man/man9/bus_child_present.9
  projects/ipfw/share/man/man9/bus_release_resource.9
  projects/ipfw/share/man/man9/bus_set_resource.9
  projects/ipfw/share/man/man9/cd.9
  projects/ipfw/share/man/man9/config_intrhook.9
  projects/ipfw/share/man/man9/crypto.9
  projects/ipfw/share/man/man9/devstat.9
  projects/ipfw/share/man/man9/domain.9
  projects/ipfw/share/man/man9/eventtimers.9
  projects/ipfw/share/man/man9/fail.9
  projects/ipfw/share/man/man9/firmware.9
  projects/ipfw/share/man/man9/g_access.9
  projects/ipfw/share/man/man9/g_attach.9
  projects/ipfw/share/man/man9/g_bio.9
  projects/ipfw/share/man/man9/g_consumer.9
  projects/ipfw/share/man/man9/g_data.9
  projects/ipfw/share/man/man9/g_event.9
  projects/ipfw/share/man/man9/g_geom.9
  projects/ipfw/share/man/man9/g_provider.9
  projects/ipfw/share/man/man9/g_provider_by_name.9
  projects/ipfw/share/man/man9/g_wither_geom.9
  projects/ipfw/share/man/man9/get_cyclecount.9
  projects/ipfw/share/man/man9/getnewvnode.9
  projects/ipfw/share/man/man9/groupmember.9
  projects/ipfw/share/man/man9/hhook.9
  projects/ipfw/share/man/man9/ieee80211_radiotap.9
  projects/ipfw/share/man/man9/ifnet.9
  projects/ipfw/share/man/man9/insmntque.9
  projects/ipfw/share/man/man9/kernel_mount.9
  projects/ipfw/share/man/man9/khelp.9
  projects/ipfw/share/man/man9/kqueue.9
  projects/ipfw/share/man/man9/kthread.9
  projects/ipfw/share/man/man9/lock.9
  projects/ipfw/share/man/man9/mbchain.9
  projects/ipfw/share/man/man9/mbpool.9
  projects/ipfw/share/man/man9/mbuf_tags.9
  projects/ipfw/share/man/man9/mdchain.9
  projects/ipfw/share/man/man9/memguard.9
  projects/ipfw/share/man/man9/microtime.9
  projects/ipfw/share/man/man9/microuptime.9
  projects/ipfw/share/man/man9/mod_cc.9
  projects/ipfw/share/man/man9/module.9
  projects/ipfw/share/man/man9/namei.9
  projects/ipfw/share/man/man9/osd.9
  projects/ipfw/share/man/man9/pbuf.9
  projects/ipfw/share/man/man9/pci.9
  projects/ipfw/share/man/man9/pfind.9
  projects/ipfw/share/man/man9/pgfind.9
  projects/ipfw/share/man/man9/pmap.9
  projects/ipfw/share/man/man9/pmap_activate.9
  projects/ipfw/share/man/man9/pmap_clear_modify.9
  projects/ipfw/share/man/man9/pmap_copy.9
  projects/ipfw/share/man/man9/pmap_enter.9
  projects/ipfw/share/man/man9/pmap_extract.9
  projects/ipfw/share/man/man9/pmap_growkernel.9
  projects/ipfw/share/man/man9/pmap_init.9
  projects/ipfw/share/man/man9/pmap_is_modified.9
  projects/ipfw/share/man/man9/pmap_is_prefaultable.9
  projects/ipfw/share/man/man9/pmap_map.9
  projects/ipfw/share/man/man9/pmap_mincore.9
  projects/ipfw/share/man/man9/pmap_object_init_pt.9
  projects/ipfw/share/man/man9/pmap_page_exists_quick.9
  projects/ipfw/share/man/man9/pmap_page_init.9
  projects/ipfw/share/man/man9/pmap_pinit.9
  projects/ipfw/share/man/man9/pmap_qenter.9
  projects/ipfw/share/man/man9/pmap_release.9
  projects/ipfw/share/man/man9/pmap_remove.9
  projects/ipfw/share/man/man9/pmap_resident_count.9
  projects/ipfw/share/man/man9/pmap_zero_page.9
  projects/ipfw/share/man/man9/pseudofs.9
  projects/ipfw/share/man/man9/redzone.9
  projects/ipfw/share/man/man9/resource_int_value.9
  projects/ipfw/share/man/man9/rman.9
  projects/ipfw/share/man/man9/sbuf.9
  projects/ipfw/share/man/man9/selrecord.9
  projects/ipfw/share/man/man9/signal.9
  projects/ipfw/share/man/man9/sleep.9
  projects/ipfw/share/man/man9/socket.9
  projects/ipfw/share/man/man9/sysctl.9
  projects/ipfw/share/man/man9/sysctl_add_oid.9
  projects/ipfw/share/man/man9/sysctl_ctx_init.9
  projects/ipfw/share/man/man9/timeout.9
  projects/ipfw/share/man/man9/tvtohz.9
  projects/ipfw/share/man/man9/ucred.9
  projects/ipfw/share/man/man9/uidinfo.9
  projects/ipfw/share/man/man9/usbdi.9
  projects/ipfw/share/man/man9/utopia.9
  projects/ipfw/share/man/man9/vaccess_acl_nfs4.9
  projects/ipfw/share/man/man9/vflush.9
  projects/ipfw/share/man/man9/vfs_busy.9
  projects/ipfw/share/man/man9/vfs_getnewfsid.9
  projects/ipfw/share/man/man9/vfs_getopt.9
  projects/ipfw/share/man/man9/vfs_getvfs.9
  projects/ipfw/share/man/man9/vfs_mountedfrom.9
  projects/ipfw/share/man/man9/vfs_rootmountalloc.9
  projects/ipfw/share/man/man9/vfs_timestamp.9
  projects/ipfw/share/man/man9/vfs_unbusy.9
  projects/ipfw/share/man/man9/vfsconf.9
  projects/ipfw/share/man/man9/vgone.9
  projects/ipfw/share/man/man9/vhold.9
  projects/ipfw/share/man/man9/vinvalbuf.9
  projects/ipfw/share/man/man9/vm_fault_prefault.9
  projects/ipfw/share/man/man9/vm_map.9
  projects/ipfw/share/man/man9/vm_map_check_protection.9
  projects/ipfw/share/man/man9/vm_map_create.9
  projects/ipfw/share/man/man9/vm_map_delete.9
  projects/ipfw/share/man/man9/vm_map_entry_resize_free.9
  projects/ipfw/share/man/man9/vm_map_find.9
  projects/ipfw/share/man/man9/vm_map_findspace.9
  projects/ipfw/share/man/man9/vm_map_inherit.9
  projects/ipfw/share/man/man9/vm_map_init.9
  projects/ipfw/share/man/man9/vm_map_insert.9
  projects/ipfw/share/man/man9/vm_map_lock.9
  projects/ipfw/share/man/man9/vm_map_lookup.9
  projects/ipfw/share/man/man9/vm_map_madvise.9
  projects/ipfw/share/man/man9/vm_map_max.9
  projects/ipfw/share/man/man9/vm_map_protect.9
  projects/ipfw/share/man/man9/vm_map_remove.9
  projects/ipfw/share/man/man9/vm_map_simplify_entry.9
  projects/ipfw/share/man/man9/vm_map_stack.9
  projects/ipfw/share/man/man9/vm_map_submap.9
  projects/ipfw/share/man/man9/vm_map_sync.9
  projects/ipfw/share/man/man9/vm_map_wire.9
  projects/ipfw/share/man/man9/vm_page_aflag.9
  projects/ipfw/share/man/man9/vm_page_alloc.9
  projects/ipfw/share/man/man9/vm_page_bits.9
  projects/ipfw/share/man/man9/vm_page_busy.9
  projects/ipfw/share/man/man9/vm_page_cache.9
  projects/ipfw/share/man/man9/vm_page_deactivate.9
  projects/ipfw/share/man/man9/vm_page_dontneed.9
  projects/ipfw/share/man/man9/vm_page_free.9
  projects/ipfw/share/man/man9/vm_page_grab.9
  projects/ipfw/share/man/man9/vm_page_hold.9
  projects/ipfw/share/man/man9/vm_page_insert.9
  projects/ipfw/share/man/man9/vm_page_lookup.9
  projects/ipfw/share/man/man9/vm_page_rename.9
  projects/ipfw/share/man/man9/vm_page_wire.9
  projects/ipfw/share/man/man9/vm_set_page_size.9
  projects/ipfw/share/man/man9/vn_fullpath.9
  projects/ipfw/share/man/man9/vn_isdisk.9
  projects/ipfw/share/man/man9/vnode.9
  projects/ipfw/share/man/man9/watchdog.9
  projects/ipfw/share/man/man9/zone.9
  projects/ipfw/share/misc/bsd-family-tree
  projects/ipfw/share/misc/committers-ports.dot
  projects/ipfw/share/misc/committers-src.dot
  projects/ipfw/share/misc/organization.dot
  projects/ipfw/share/mk/Makefile
  projects/ipfw/share/mk/atf.test.mk
  projects/ipfw/share/mk/bsd.README
  projects/ipfw/share/mk/bsd.cpu.mk
  projects/ipfw/share/mk/bsd.dep.mk
  projects/ipfw/share/mk/bsd.endian.mk
  projects/ipfw/share/mk/bsd.lib.mk
  projects/ipfw/share/mk/bsd.libnames.mk
  projects/ipfw/share/mk/bsd.obj.mk
  projects/ipfw/share/mk/bsd.opts.mk
  projects/ipfw/share/mk/bsd.prog.mk
  projects/ipfw/share/mk/bsd.subdir.mk
  projects/ipfw/share/mk/bsd.sys.mk
  projects/ipfw/share/mk/plain.test.mk
  projects/ipfw/share/mk/src.opts.mk
  projects/ipfw/share/mk/src.sys.mk
  projects/ipfw/share/mk/sys.mk
  projects/ipfw/share/mk/tap.test.mk
  projects/ipfw/share/termcap/termcap.src
  projects/ipfw/share/vt/fonts/Makefile
  projects/ipfw/share/vt/fonts/vgarom-8x14.hex
  projects/ipfw/share/vt/fonts/vgarom-8x16.hex
  projects/ipfw/share/vt/fonts/vgarom-8x8.hex
  projects/ipfw/share/vt/keymaps/Makefile
  projects/ipfw/sys/Makefile
  projects/ipfw/sys/amd64/acpica/acpi_machdep.c
  projects/ipfw/sys/amd64/acpica/acpi_wakecode.S
  projects/ipfw/sys/amd64/amd64/amd64_mem.c
  projects/ipfw/sys/amd64/amd64/exception.S
  projects/ipfw/sys/amd64/amd64/fpu.c
  projects/ipfw/sys/amd64/amd64/identcpu.c
  projects/ipfw/sys/amd64/amd64/machdep.c
  projects/ipfw/sys/amd64/amd64/mp_machdep.c
  projects/ipfw/sys/amd64/amd64/mp_watchdog.c
  projects/ipfw/sys/amd64/amd64/mpboot.S
  projects/ipfw/sys/amd64/amd64/pmap.c
  projects/ipfw/sys/amd64/amd64/sys_machdep.c
  projects/ipfw/sys/amd64/amd64/trap.c
  projects/ipfw/sys/amd64/conf/GENERIC
  projects/ipfw/sys/amd64/conf/NOTES
  projects/ipfw/sys/amd64/include/cpu.h
  projects/ipfw/sys/amd64/include/fpu.h
  projects/ipfw/sys/amd64/include/sf_buf.h
  projects/ipfw/sys/amd64/include/vmm.h   (contents, props changed)
  projects/ipfw/sys/amd64/include/vmm_dev.h   (contents, props changed)
  projects/ipfw/sys/amd64/include/vmm_instruction_emul.h   (contents, props changed)
  projects/ipfw/sys/amd64/linux32/linux32_sysvec.c
  projects/ipfw/sys/amd64/pci/pci_cfgreg.c
  projects/ipfw/sys/amd64/vmm/intel/vmcs.c
  projects/ipfw/sys/amd64/vmm/intel/vmcs.h
  projects/ipfw/sys/amd64/vmm/intel/vmx.c
  projects/ipfw/sys/amd64/vmm/intel/vmx_msr.c
  projects/ipfw/sys/amd64/vmm/intel/vmx_msr.h
  projects/ipfw/sys/amd64/vmm/vmm.c
  projects/ipfw/sys/amd64/vmm/vmm_dev.c
  projects/ipfw/sys/amd64/vmm/vmm_instruction_emul.c
  projects/ipfw/sys/amd64/vmm/vmm_stat.c
  projects/ipfw/sys/amd64/vmm/vmm_stat.h
  projects/ipfw/sys/arm/arm/busdma_machdep-v6.c
  projects/ipfw/sys/arm/arm/busdma_machdep.c
  projects/ipfw/sys/arm/arm/cpufunc.c
  projects/ipfw/sys/arm/arm/cpufunc_asm_arm10.S
  projects/ipfw/sys/arm/arm/cpufunc_asm_arm9.S
  projects/ipfw/sys/arm/arm/cpufunc_asm_armv5.S
  projects/ipfw/sys/arm/arm/cpufunc_asm_armv6.S
  projects/ipfw/sys/arm/arm/cpufunc_asm_armv7.S
  projects/ipfw/sys/arm/arm/cpufunc_asm_xscale.S
  projects/ipfw/sys/arm/arm/cpufunc_asm_xscale_c3.S
  projects/ipfw/sys/arm/arm/dump_machdep.c
  projects/ipfw/sys/arm/arm/elf_machdep.c
  projects/ipfw/sys/arm/arm/exception.S
  projects/ipfw/sys/arm/arm/fusu.S
  projects/ipfw/sys/arm/arm/generic_timer.c
  projects/ipfw/sys/arm/arm/gic.c
  projects/ipfw/sys/arm/arm/intr.c
  projects/ipfw/sys/arm/arm/locore.S
  projects/ipfw/sys/arm/arm/machdep.c
  projects/ipfw/sys/arm/arm/mpcore_timer.c
  projects/ipfw/sys/arm/arm/nexus.c
  projects/ipfw/sys/arm/arm/pl190.c
  projects/ipfw/sys/arm/arm/pl310.c
  projects/ipfw/sys/arm/arm/platform.c
  projects/ipfw/sys/arm/arm/pmap-v6.c
  projects/ipfw/sys/arm/arm/pmap.c
  projects/ipfw/sys/arm/arm/setstack.s
  projects/ipfw/sys/arm/arm/support.S
  projects/ipfw/sys/arm/arm/vm_machdep.c
  projects/ipfw/sys/arm/at91/if_ate.c
  projects/ipfw/sys/arm/conf/CHROMEBOOK
  projects/ipfw/sys/arm/conf/CHROMEBOOK-SNOW
  projects/ipfw/sys/arm/conf/CHROMEBOOK-SPRING
  projects/ipfw/sys/arm/conf/EXYNOS5.common
  projects/ipfw/sys/arm/conf/EXYNOS5250
  projects/ipfw/sys/arm/conf/IMX6
  projects/ipfw/sys/arm/conf/RPI-B
  projects/ipfw/sys/arm/conf/VYBRID
  projects/ipfw/sys/arm/freescale/imx/files.imx51
  projects/ipfw/sys/arm/freescale/imx/files.imx53
  projects/ipfw/sys/arm/freescale/imx/files.imx6
  projects/ipfw/sys/arm/freescale/imx/imx51_ipuv3_fbd.c
  projects/ipfw/sys/arm/freescale/imx/imx6_anatop.c
  projects/ipfw/sys/arm/freescale/imx/imx6_ccmreg.h
  projects/ipfw/sys/arm/freescale/imx/imx6_machdep.c
  projects/ipfw/sys/arm/freescale/imx/imx6_mp.c
  projects/ipfw/sys/arm/freescale/vybrid/files.vybrid
  projects/ipfw/sys/arm/freescale/vybrid/vf_i2c.c
  projects/ipfw/sys/arm/include/asm.h
  projects/ipfw/sys/arm/include/atomic.h
  projects/ipfw/sys/arm/include/counter.h
  projects/ipfw/sys/arm/include/cpu.h
  projects/ipfw/sys/arm/include/elf.h
  projects/ipfw/sys/arm/include/pl310.h
  projects/ipfw/sys/arm/include/sf_buf.h
  projects/ipfw/sys/arm/include/vmparam.h
  projects/ipfw/sys/arm/samsung/exynos/chrome_ec.c
  projects/ipfw/sys/arm/samsung/exynos/chrome_ec.h
  projects/ipfw/sys/arm/samsung/exynos/chrome_kb.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_combiner.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_ehci.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_fimd.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_i2c.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_machdep.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_mct.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_mp.c
  projects/ipfw/sys/arm/samsung/exynos/exynos5_pad.c
  projects/ipfw/sys/arm/samsung/exynos/files.exynos5
  projects/ipfw/sys/arm/ti/ti_smc.S
  projects/ipfw/sys/arm/xilinx/zy7_slcr.c
  projects/ipfw/sys/arm/xilinx/zy7_slcr.h
  projects/ipfw/sys/arm/xscale/ixp425/if_npe.c
  projects/ipfw/sys/arm/xscale/ixp425/ixp425_npe.c
  projects/ipfw/sys/arm/xscale/ixp425/ixp425_qmgr.c
  projects/ipfw/sys/boot/amd64/boot1.efi/Makefile
  projects/ipfw/sys/boot/amd64/efi/bootinfo.c
  projects/ipfw/sys/boot/amd64/efi/main.c
  projects/ipfw/sys/boot/arm/at91/boot0/main.c
  projects/ipfw/sys/boot/arm/at91/boot0iic/main.c
  projects/ipfw/sys/boot/arm/at91/boot0spi/main.c
  projects/ipfw/sys/boot/arm/at91/boot2/boot2.c
  projects/ipfw/sys/boot/arm/at91/bootiic/main.c
  projects/ipfw/sys/boot/arm/at91/bootspi/main.c
  projects/ipfw/sys/boot/arm/at91/libat91/emac.c
  projects/ipfw/sys/boot/arm/at91/libat91/mci_device.h
  projects/ipfw/sys/boot/arm/at91/libat91/sd-card.c
  projects/ipfw/sys/boot/arm/at91/libat91/sd-card.h
  projects/ipfw/sys/boot/common/Makefile.inc
  projects/ipfw/sys/boot/common/bootstrap.h
  projects/ipfw/sys/boot/common/interp.c
  projects/ipfw/sys/boot/common/interp_forth.c
  projects/ipfw/sys/boot/common/module.c
  projects/ipfw/sys/boot/efi/include/amd64/pe.h
  projects/ipfw/sys/boot/efi/include/efiapi.h
  projects/ipfw/sys/boot/efi/include/i386/pe.h
  projects/ipfw/sys/boot/efi/libefi/Makefile
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5.dtsi
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5250.dtsi
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5420-arndale-octa.dts
  projects/ipfw/sys/boot/fdt/dts/arm/exynos5420.dtsi
  projects/ipfw/sys/boot/fdt/dts/arm/imx6.dtsi
  projects/ipfw/sys/boot/fdt/dts/arm/wandboard-dual.dts
  projects/ipfw/sys/boot/fdt/dts/arm/wandboard-quad.dts
  projects/ipfw/sys/boot/fdt/dts/arm/wandboard-solo.dts
  projects/ipfw/sys/boot/fdt/dts/arm/zedboard.dts
  projects/ipfw/sys/boot/ficl/loader.c
  projects/ipfw/sys/boot/forth/loader.conf
  projects/ipfw/sys/boot/i386/boot2/boot2.c
  projects/ipfw/sys/boot/i386/libi386/Makefile
  projects/ipfw/sys/boot/i386/libi386/amd64_tramp.S
  projects/ipfw/sys/boot/i386/libi386/libi386.h
  projects/ipfw/sys/boot/i386/libi386/pxe.c
  projects/ipfw/sys/boot/i386/loader/Makefile
  projects/ipfw/sys/boot/i386/loader/main.c
  projects/ipfw/sys/boot/libstand32/Makefile
  projects/ipfw/sys/boot/mips/beri/boot2/Makefile
  projects/ipfw/sys/boot/mips/beri/loader/main.c
  projects/ipfw/sys/boot/ofw/common/main.c
  projects/ipfw/sys/boot/pc98/boot2/Makefile
  projects/ipfw/sys/boot/pc98/boot2/boot2.c
  projects/ipfw/sys/boot/pc98/loader/main.c
  projects/ipfw/sys/boot/powerpc/ps3/main.c
  projects/ipfw/sys/boot/sparc64/loader/main.c
  projects/ipfw/sys/boot/uboot/common/main.c
  projects/ipfw/sys/boot/usb/Makefile
  projects/ipfw/sys/boot/userboot/libstand/Makefile
  projects/ipfw/sys/boot/userboot/test/test.c
  projects/ipfw/sys/boot/userboot/userboot/devicename.c
  projects/ipfw/sys/boot/userboot/userboot/main.c
  projects/ipfw/sys/boot/zfs/zfsimpl.c
  projects/ipfw/sys/cam/ata/ata_da.c
  projects/ipfw/sys/cam/ata/ata_pmp.c
  projects/ipfw/sys/cam/cam.c
  projects/ipfw/sys/cam/cam_periph.c
  projects/ipfw/sys/cam/cam_xpt.c
  projects/ipfw/sys/cam/ctl/ctl.c
  projects/ipfw/sys/cam/ctl/ctl.h
  projects/ipfw/sys/cam/ctl/ctl_backend.c
  projects/ipfw/sys/cam/ctl/ctl_backend.h
  projects/ipfw/sys/cam/ctl/ctl_backend_block.c
  projects/ipfw/sys/cam/ctl/ctl_backend_ramdisk.c
  projects/ipfw/sys/cam/ctl/ctl_cmd_table.c
  projects/ipfw/sys/cam/ctl/ctl_error.c
  projects/ipfw/sys/cam/ctl/ctl_error.h
  projects/ipfw/sys/cam/ctl/ctl_frontend.c
  projects/ipfw/sys/cam/ctl/ctl_frontend.h
  projects/ipfw/sys/cam/ctl/ctl_frontend_cam_sim.c
  projects/ipfw/sys/cam/ctl/ctl_frontend_internal.c
  projects/ipfw/sys/cam/ctl/ctl_frontend_iscsi.c
  projects/ipfw/sys/cam/ctl/ctl_frontend_iscsi.h
  projects/ipfw/sys/cam/ctl/ctl_io.h
  projects/ipfw/sys/cam/ctl/ctl_ioctl.h
  projects/ipfw/sys/cam/ctl/ctl_private.h
  projects/ipfw/sys/cam/ctl/ctl_ser_table.c
  projects/ipfw/sys/cam/ctl/ctl_util.c
  projects/ipfw/sys/cam/ctl/ctl_util.h
  projects/ipfw/sys/cam/ctl/scsi_ctl.c
  projects/ipfw/sys/cam/scsi/scsi_all.c
  projects/ipfw/sys/cam/scsi/scsi_all.h
  projects/ipfw/sys/cam/scsi/scsi_cd.c
  projects/ipfw/sys/cam/scsi/scsi_da.c
  projects/ipfw/sys/cam/scsi/scsi_da.h
  projects/ipfw/sys/cam/scsi/scsi_enc_safte.c
  projects/ipfw/sys/cam/scsi/scsi_sa.c
  projects/ipfw/sys/cam/scsi/scsi_xpt.c
  projects/ipfw/sys/cddl/boot/zfs/README
  projects/ipfw/sys/cddl/boot/zfs/zfsimpl.h
  projects/ipfw/sys/cddl/boot/zfs/zfssubr.c
  projects/ipfw/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c
  projects/ipfw/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c
  projects/ipfw/sys/cddl/compat/opensolaris/sys/atomic.h
  projects/ipfw/sys/cddl/contrib/opensolaris/common/avl/avl.c
  projects/ipfw/sys/cddl/contrib/opensolaris/common/unicode/u8_textprep.c
  projects/ipfw/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.c
  projects/ipfw/sys/cddl/contrib/opensolaris/common/zfs/zfeature_common.h
  projects/ipfw/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.c
  projects/ipfw/sys/cddl/contrib/opensolaris/common/zfs/zfs_ioctl_compat.h
  projects/ipfw/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
  projects/ipfw/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/Makefile.files
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/dtrace/sdt_subr.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bpobj.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bptree.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ddt.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/range_tree.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_errlog.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_compress.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/trim_map.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_cache.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_debug.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/sys/avl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/sys/ctf_api.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/sys/isa_defs.h
  projects/ipfw/sys/cddl/dev/dtrace/amd64/dtrace_isa.c
  projects/ipfw/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
  projects/ipfw/sys/cddl/dev/dtrace/dtrace_cddl.h
  projects/ipfw/sys/cddl/dev/dtrace/dtrace_ioctl.c
  projects/ipfw/sys/cddl/dev/dtrace/dtrace_load.c
  projects/ipfw/sys/cddl/dev/dtrace/dtrace_sysctl.c
  projects/ipfw/sys/cddl/dev/dtrace/dtrace_unload.c
  projects/ipfw/sys/cddl/dev/dtrace/i386/dtrace_asm.S
  projects/ipfw/sys/cddl/dev/dtrace/i386/dtrace_isa.c
  projects/ipfw/sys/cddl/dev/dtrace/i386/dtrace_subr.c
  projects/ipfw/sys/cddl/dev/dtrace/mips/dtrace_subr.c
  projects/ipfw/sys/cddl/dev/dtrace/powerpc/dtrace_subr.c
  projects/ipfw/sys/cddl/dev/fbt/fbt.c
  projects/ipfw/sys/cddl/dev/sdt/sdt.c
  projects/ipfw/sys/compat/freebsd32/freebsd32_misc.c
  projects/ipfw/sys/compat/freebsd32/freebsd32_util.h
  projects/ipfw/sys/compat/ia32/ia32_sysvec.c
  projects/ipfw/sys/compat/ia32/ia32_util.h
  projects/ipfw/sys/compat/ndis/kern_ndis.c
  projects/ipfw/sys/compat/ndis/ndis_var.h
  projects/ipfw/sys/compat/ndis/pe_var.h
  projects/ipfw/sys/compat/x86bios/x86bios.c
  projects/ipfw/sys/conf/Makefile.arm
  projects/ipfw/sys/conf/NOTES
  projects/ipfw/sys/conf/files
  projects/ipfw/sys/conf/files.amd64
  projects/ipfw/sys/conf/files.arm
  projects/ipfw/sys/conf/files.i386
  projects/ipfw/sys/conf/files.mips
  projects/ipfw/sys/conf/files.pc98
  projects/ipfw/sys/conf/files.powerpc
  projects/ipfw/sys/conf/files.sparc64
  projects/ipfw/sys/conf/kern.mk
  projects/ipfw/sys/conf/kern.opts.mk
  projects/ipfw/sys/conf/kern.post.mk
  projects/ipfw/sys/conf/kern.pre.mk
  projects/ipfw/sys/conf/kmod.mk
  projects/ipfw/sys/conf/options
  projects/ipfw/sys/conf/options.arm
  projects/ipfw/sys/conf/options.mips
  projects/ipfw/sys/contrib/dev/acpica/acpica_prep.sh
  projects/ipfw/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_interrupts.c
  projects/ipfw/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_power.c
  projects/ipfw/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_recv.c
  projects/ipfw/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_reset.c
  projects/ipfw/sys/contrib/ipfilter/netinet/ip_compat.h
  projects/ipfw/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c   (contents, props changed)
  projects/ipfw/sys/crypto/aesni/aesni.c
  projects/ipfw/sys/crypto/aesni/aesni.h
  projects/ipfw/sys/crypto/aesni/aesni_wrap.c
  projects/ipfw/sys/crypto/via/padlock.c
  projects/ipfw/sys/crypto/via/padlock_cipher.c
  projects/ipfw/sys/crypto/via/padlock_hash.c
  projects/ipfw/sys/dev/aac/aac_pci.c
  projects/ipfw/sys/dev/acpica/Osd/OsdSchedule.c
  projects/ipfw/sys/dev/acpica/acpi.c
  projects/ipfw/sys/dev/acpica/acpi_cpu.c
  projects/ipfw/sys/dev/acpica/acpi_ec.c
  projects/ipfw/sys/dev/acpica/acpi_hpet.c
  projects/ipfw/sys/dev/acpica/acpi_powerres.c
  projects/ipfw/sys/dev/acpica/acpi_timer.c
  projects/ipfw/sys/dev/adb/adb_buttons.c
  projects/ipfw/sys/dev/adb/adb_kbd.c
  projects/ipfw/sys/dev/agp/agp.c
  projects/ipfw/sys/dev/agp/agp_i810.c
  projects/ipfw/sys/dev/ahci/ahci.c
  projects/ipfw/sys/dev/aic7xxx/aic79xx_pci.c
  projects/ipfw/sys/dev/amr/amr.c
  projects/ipfw/sys/dev/amr/amr_pci.c
  projects/ipfw/sys/dev/amr/amrio.h
  projects/ipfw/sys/dev/an/if_an.c
  projects/ipfw/sys/dev/asmc/asmc.c
  projects/ipfw/sys/dev/asmc/asmcvar.h
  projects/ipfw/sys/dev/ata/ata-all.c
  projects/ipfw/sys/dev/ata/ata-dma.c
  projects/ipfw/sys/dev/ata/chipsets/ata-ati.c
  projects/ipfw/sys/dev/ata/chipsets/ata-promise.c
  projects/ipfw/sys/dev/ath/ah_osdep.c
  projects/ipfw/sys/dev/ath/ath_hal/ah.c
  projects/ipfw/sys/dev/ath/ath_hal/ah_decode.h
  projects/ipfw/sys/dev/ath/ath_hal/ah_internal.h
  projects/ipfw/sys/dev/ath/if_ath.c
  projects/ipfw/sys/dev/ath/if_ath_ahb.c
  projects/ipfw/sys/dev/ath/if_ath_debug.c
  projects/ipfw/sys/dev/ath/if_ath_pci.c
  projects/ipfw/sys/dev/atkbdc/atkbdc.c
  projects/ipfw/sys/dev/bce/if_bce.c
  projects/ipfw/sys/dev/bge/if_bge.c
  projects/ipfw/sys/dev/bwn/if_bwn.c
  projects/ipfw/sys/dev/bxe/bxe.c
  projects/ipfw/sys/dev/bxe/bxe.h
  projects/ipfw/sys/dev/bxe/bxe_stats.c
  projects/ipfw/sys/dev/bxe/ecore_reg.h
  projects/ipfw/sys/dev/bxe/ecore_sp.h
  projects/ipfw/sys/dev/cadence/if_cgem.c
  projects/ipfw/sys/dev/cardbus/cardbus.c
  projects/ipfw/sys/dev/cas/if_cas.c
  projects/ipfw/sys/dev/ciss/ciss.c
  projects/ipfw/sys/dev/ciss/cissreg.h
  projects/ipfw/sys/dev/cpuctl/cpuctl.c
  projects/ipfw/sys/dev/cs/if_cs.c
  projects/ipfw/sys/dev/cxgb/cxgb_include.h
  projects/ipfw/sys/dev/cxgb/cxgb_main.c
  projects/ipfw/sys/dev/cxgb/cxgb_sge.c
  projects/ipfw/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c
  projects/ipfw/sys/dev/cxgbe/adapter.h
  projects/ipfw/sys/dev/cxgbe/common/common.h
  projects/ipfw/sys/dev/cxgbe/common/t4_hw.c
  projects/ipfw/sys/dev/cxgbe/firmware/t4fw_cfg_uwire.txt
  projects/ipfw/sys/dev/cxgbe/firmware/t4fw_interface.h
  projects/ipfw/sys/dev/cxgbe/firmware/t5fw_cfg_uwire.txt
  projects/ipfw/sys/dev/cxgbe/iw_cxgbe/cm.c
  projects/ipfw/sys/dev/cxgbe/offload.h
  projects/ipfw/sys/dev/cxgbe/t4_main.c
  projects/ipfw/sys/dev/cxgbe/t4_netmap.c
  projects/ipfw/sys/dev/cxgbe/t4_sge.c
  projects/ipfw/sys/dev/cxgbe/tom/t4_cpl_io.c
  projects/ipfw/sys/dev/cxgbe/tom/t4_ddp.c
  projects/ipfw/sys/dev/cxgbe/tom/t4_tom.h
  projects/ipfw/sys/dev/de/if_de.c
  projects/ipfw/sys/dev/drm/ati_pcigart.c
  projects/ipfw/sys/dev/drm/drm.h
  projects/ipfw/sys/dev/drm/drm_drv.c
  projects/ipfw/sys/dev/drm/drm_pci.c
  projects/ipfw/sys/dev/drm/drm_sarea.h
  projects/ipfw/sys/dev/drm/drm_sysctl.c
  projects/ipfw/sys/dev/drm/via_dmablit.c
  projects/ipfw/sys/dev/drm2/drm.h
  projects/ipfw/sys/dev/drm2/drm_drv.c
  projects/ipfw/sys/dev/drm2/drm_fb_helper.c
  projects/ipfw/sys/dev/drm2/drm_pci.c
  projects/ipfw/sys/dev/drm2/drm_sarea.h
  projects/ipfw/sys/dev/drm2/drm_sysctl.c
  projects/ipfw/sys/dev/drm2/i915/i915_gem.c
  projects/ipfw/sys/dev/drm2/i915/i915_gem_gtt.c
  projects/ipfw/sys/dev/drm2/i915/intel_fb.c
  projects/ipfw/sys/dev/drm2/radeon/rs690.c
  projects/ipfw/sys/dev/drm2/radeon/rv515.c
  projects/ipfw/sys/dev/drm2/ttm/ttm_bo_vm.c
  projects/ipfw/sys/dev/drm2/ttm/ttm_page_alloc.c
  projects/ipfw/sys/dev/e1000/e1000_82542.c
  projects/ipfw/sys/dev/e1000/e1000_82571.c
  projects/ipfw/sys/dev/e1000/e1000_82575.c
  projects/ipfw/sys/dev/e1000/e1000_82575.h
  projects/ipfw/sys/dev/e1000/e1000_api.c
  projects/ipfw/sys/dev/e1000/e1000_api.h
  projects/ipfw/sys/dev/e1000/e1000_defines.h
  projects/ipfw/sys/dev/e1000/e1000_hw.h
  projects/ipfw/sys/dev/e1000/e1000_i210.c
  projects/ipfw/sys/dev/e1000/e1000_i210.h
  projects/ipfw/sys/dev/e1000/e1000_ich8lan.c
  projects/ipfw/sys/dev/e1000/e1000_ich8lan.h
  projects/ipfw/sys/dev/e1000/e1000_mac.c
  projects/ipfw/sys/dev/e1000/e1000_mac.h
  projects/ipfw/sys/dev/e1000/e1000_manage.c
  projects/ipfw/sys/dev/e1000/e1000_mbx.c
  projects/ipfw/sys/dev/e1000/e1000_mbx.h
  projects/ipfw/sys/dev/e1000/e1000_nvm.c
  projects/ipfw/sys/dev/e1000/e1000_osdep.h
  projects/ipfw/sys/dev/e1000/e1000_phy.c
  projects/ipfw/sys/dev/e1000/e1000_phy.h
  projects/ipfw/sys/dev/e1000/e1000_regs.h
  projects/ipfw/sys/dev/e1000/e1000_vf.c
  projects/ipfw/sys/dev/e1000/e1000_vf.h
  projects/ipfw/sys/dev/e1000/if_em.c
  projects/ipfw/sys/dev/e1000/if_igb.c
  projects/ipfw/sys/dev/e1000/if_lem.c
  projects/ipfw/sys/dev/esp/ncr53c9x.c
  projects/ipfw/sys/dev/et/if_et.c
  projects/ipfw/sys/dev/etherswitch/arswitch/arswitch.c
  projects/ipfw/sys/dev/etherswitch/rtl8366/rtl8366rb.c
  projects/ipfw/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h
  projects/ipfw/sys/dev/fb/fbd.c
  projects/ipfw/sys/dev/fb/fbreg.h
  projects/ipfw/sys/dev/fb/vesa.c
  projects/ipfw/sys/dev/fdt/simplebus.c
  projects/ipfw/sys/dev/firewire/fwohci.c
  projects/ipfw/sys/dev/firewire/if_fwe.c
  projects/ipfw/sys/dev/firewire/if_fwip.c
  projects/ipfw/sys/dev/firewire/sbp.c
  projects/ipfw/sys/dev/glxiic/glxiic.c
  projects/ipfw/sys/dev/hatm/if_hatm_intr.c
  projects/ipfw/sys/dev/hpt27xx/hpt27xx_os_bsd.c
  projects/ipfw/sys/dev/hpt27xx/hpt27xx_osm_bsd.c
  projects/ipfw/sys/dev/hpt27xx/os_bsd.h
  projects/ipfw/sys/dev/hptiop/hptiop.c
  projects/ipfw/sys/dev/hptiop/hptiop.h
  projects/ipfw/sys/dev/hptmv/entry.c
  projects/ipfw/sys/dev/hptmv/global.h
  projects/ipfw/sys/dev/hptmv/hptproc.c
  projects/ipfw/sys/dev/hptmv/ioctl.c
  projects/ipfw/sys/dev/hptmv/mv.c
  projects/ipfw/sys/dev/hptmv/osbsd.h
  projects/ipfw/sys/dev/hptnr/hptnr_os_bsd.c
  projects/ipfw/sys/dev/hptnr/hptnr_osm_bsd.c
  projects/ipfw/sys/dev/hptnr/os_bsd.h
  projects/ipfw/sys/dev/hptrr/hptrr_os_bsd.c
  projects/ipfw/sys/dev/hptrr/hptrr_osm_bsd.c
  projects/ipfw/sys/dev/hptrr/os_bsd.h
  projects/ipfw/sys/dev/hwpmc/hwpmc_logging.c
  projects/ipfw/sys/dev/hwpmc/hwpmc_mod.c
  projects/ipfw/sys/dev/hwpmc/hwpmc_powerpc.c
  projects/ipfw/sys/dev/i40e/i40e.h
  projects/ipfw/sys/dev/i40e/i40e_adminq.c
  projects/ipfw/sys/dev/i40e/i40e_adminq.h
  projects/ipfw/sys/dev/i40e/i40e_adminq_cmd.h
  projects/ipfw/sys/dev/i40e/i40e_common.c
  projects/ipfw/sys/dev/i40e/i40e_hmc.h
  projects/ipfw/sys/dev/i40e/i40e_lan_hmc.c
  projects/ipfw/sys/dev/i40e/i40e_lan_hmc.h
  projects/ipfw/sys/dev/i40e/i40e_nvm.c
  projects/ipfw/sys/dev/i40e/i40e_osdep.c
  projects/ipfw/sys/dev/i40e/i40e_prototype.h
  projects/ipfw/sys/dev/i40e/i40e_register.h
  projects/ipfw/sys/dev/i40e/i40e_register_x710_int.h
  projects/ipfw/sys/dev/i40e/i40e_txrx.c
  projects/ipfw/sys/dev/i40e/i40e_type.h
  projects/ipfw/sys/dev/i40e/if_i40e.c
  projects/ipfw/sys/dev/isci/isci.h
  projects/ipfw/sys/dev/isci/isci_controller.c
  projects/ipfw/sys/dev/isci/isci_sysctl.c
  projects/ipfw/sys/dev/isci/isci_task_request.c
  projects/ipfw/sys/dev/isci/scil/scic_sds_stp_request.c
  projects/ipfw/sys/dev/iscsi/icl.c
  projects/ipfw/sys/dev/iscsi/iscsi.c
  projects/ipfw/sys/dev/iscsi/iscsi.h
  projects/ipfw/sys/dev/iscsi/iscsi_ioctl.h
  projects/ipfw/sys/dev/iscsi_initiator/isc_soc.c
  projects/ipfw/sys/dev/iscsi_initiator/iscsi.c
  projects/ipfw/sys/dev/isp/isp_freebsd.c
  projects/ipfw/sys/dev/isp/isp_pci.c
  projects/ipfw/sys/dev/iwn/if_iwn.c
  projects/ipfw/sys/dev/iwn/if_iwn_chip_cfg.h
  projects/ipfw/sys/dev/ixgb/if_ixgb.c
  projects/ipfw/sys/dev/ixgbe/ixgbe.c
  projects/ipfw/sys/dev/ixgbe/ixv.c
  projects/ipfw/sys/dev/lge/if_lge.c
  projects/ipfw/sys/dev/malo/if_malo.c
  projects/ipfw/sys/dev/malo/if_malo_pci.c
  projects/ipfw/sys/dev/md/md.c
  projects/ipfw/sys/dev/mfi/mfi.c
  projects/ipfw/sys/dev/mfi/mfi_cam.c
  projects/ipfw/sys/dev/mfi/mfi_pci.c
  projects/ipfw/sys/dev/mfi/mfi_tbolt.c
  projects/ipfw/sys/dev/mge/if_mge.c
  projects/ipfw/sys/dev/mlx/mlx.c
  projects/ipfw/sys/dev/mmc/mmc.c
  projects/ipfw/sys/dev/mmc/mmcsd.c
  projects/ipfw/sys/dev/mmc/mmcvar.h
  projects/ipfw/sys/dev/mps/mps.c
  projects/ipfw/sys/dev/mps/mps_mapping.c
  projects/ipfw/sys/dev/mps/mps_sas.c
  projects/ipfw/sys/dev/mps/mps_sas.h
  projects/ipfw/sys/dev/mps/mps_sas_lsi.c
  projects/ipfw/sys/dev/mps/mps_user.c
  projects/ipfw/sys/dev/mps/mpsvar.h
  projects/ipfw/sys/dev/mpt/mpt_cam.c
  projects/ipfw/sys/dev/mrsas/mrsas_fp.c
  projects/ipfw/sys/dev/mvs/mvs.c
  projects/ipfw/sys/dev/mwl/if_mwl.c
  projects/ipfw/sys/dev/nand/nand.c
  projects/ipfw/sys/dev/netfpga10g/nf10bmac/if_nf10bmac.c
  projects/ipfw/sys/dev/netfpga10g/nf10bmac/if_nf10bmac_fdt.c
  projects/ipfw/sys/dev/netmap/netmap_freebsd.c
  projects/ipfw/sys/dev/netmap/netmap_generic.c
  projects/ipfw/sys/dev/nfe/if_nfe.c
  projects/ipfw/sys/dev/nxge/xge-osdep.h
  projects/ipfw/sys/dev/oce/oce_hw.c
  projects/ipfw/sys/dev/oce/oce_hw.h
  projects/ipfw/sys/dev/oce/oce_if.c
  projects/ipfw/sys/dev/oce/oce_if.h
  projects/ipfw/sys/dev/oce/oce_mbox.c
  projects/ipfw/sys/dev/oce/oce_util.c
  projects/ipfw/sys/dev/ofw/ofwbus.c
  projects/ipfw/sys/dev/pccard/pccard.c
  projects/ipfw/sys/dev/pccbb/pccbb.c
  projects/ipfw/sys/dev/pccbb/pccbb_isa.c
  projects/ipfw/sys/dev/pccbb/pccbb_pci.c
  projects/ipfw/sys/dev/pci/pci.c
  projects/ipfw/sys/dev/pci/pci_pci.c
  projects/ipfw/sys/dev/pci/vga_pci.c
  projects/ipfw/sys/dev/puc/puc_pci.c
  projects/ipfw/sys/dev/random/ivy.c
  projects/ipfw/sys/dev/rt/if_rt.c
  projects/ipfw/sys/dev/sdhci/sdhci.c
  projects/ipfw/sys/dev/sdhci/sdhci_pci.c
  projects/ipfw/sys/dev/si/si.c
  projects/ipfw/sys/dev/sio/sio.c
  projects/ipfw/sys/dev/sis/if_sis.c
  projects/ipfw/sys/dev/sound/pci/atiixp.c
  projects/ipfw/sys/dev/sound/pci/emu10k1.c
  projects/ipfw/sys/dev/sound/pci/emu10kx.c
  projects/ipfw/sys/dev/sound/pci/envy24.c
  projects/ipfw/sys/dev/sound/pci/envy24ht.c
  projects/ipfw/sys/dev/sound/pci/hda/hdaa_patches.c
  projects/ipfw/sys/dev/sound/pci/hda/hdac.c
  projects/ipfw/sys/dev/sound/pci/hda/hdac.h
  projects/ipfw/sys/dev/sound/pci/hdspe.c
  projects/ipfw/sys/dev/sound/pci/maestro.c
  projects/ipfw/sys/dev/sound/pci/via8233.c
  projects/ipfw/sys/dev/sound/pci/via82c686.c
  projects/ipfw/sys/dev/sound/pcm/buffer.c
  projects/ipfw/sys/dev/sound/pcm/channel.c
  projects/ipfw/sys/dev/sound/pcm/feeder_chain.c
  projects/ipfw/sys/dev/sound/pcm/feeder_eq.c
  projects/ipfw/sys/dev/sound/pcm/feeder_rate.c
  projects/ipfw/sys/dev/sound/pcm/mixer.c
  projects/ipfw/sys/dev/sound/pcm/pcm.h
  projects/ipfw/sys/dev/sound/pcm/sound.c
  projects/ipfw/sys/dev/sound/usb/uaudio.c
  projects/ipfw/sys/dev/sym/sym_hipd.c
  projects/ipfw/sys/dev/syscons/syscons.c
  projects/ipfw/sys/dev/syscons/sysmouse.c
  projects/ipfw/sys/dev/terasic/mtl/terasic_mtl.h
  projects/ipfw/sys/dev/ti/if_ti.c
  projects/ipfw/sys/dev/tsec/if_tsec_fdt.c
  projects/ipfw/sys/dev/tws/tws.c
  projects/ipfw/sys/dev/txp/if_txp.c
  projects/ipfw/sys/dev/uart/uart_bus_pci.c
  projects/ipfw/sys/dev/uart/uart_cpu_powerpc.c
  projects/ipfw/sys/dev/uart/uart_dev_ns8250.c
  projects/ipfw/sys/dev/ubsec/ubsec.c
  projects/ipfw/sys/dev/usb/controller/at91dci.c
  projects/ipfw/sys/dev/usb/controller/at91dci.h
  projects/ipfw/sys/dev/usb/controller/at91dci_atmelarm.c
  projects/ipfw/sys/dev/usb/controller/at91dci_fdt.c
  projects/ipfw/sys/dev/usb/controller/dwc_otg.c
  projects/ipfw/sys/dev/usb/controller/ehci.c
  projects/ipfw/sys/dev/usb/controller/ohci.c
  projects/ipfw/sys/dev/usb/controller/saf1761_otg.c
  projects/ipfw/sys/dev/usb/controller/uhci.c
  projects/ipfw/sys/dev/usb/controller/usb_controller.c
  projects/ipfw/sys/dev/usb/controller/uss820dci.c
  projects/ipfw/sys/dev/usb/controller/uss820dci.h
  projects/ipfw/sys/dev/usb/controller/uss820dci_atmelarm.c
  projects/ipfw/sys/dev/usb/controller/xhci.c
  projects/ipfw/sys/dev/usb/controller/xhci.h
  projects/ipfw/sys/dev/usb/controller/xhci_pci.c
  projects/ipfw/sys/dev/usb/controller/xhcireg.h
  projects/ipfw/sys/dev/usb/gadget/g_audio.c
  projects/ipfw/sys/dev/usb/input/uhid.c
  projects/ipfw/sys/dev/usb/input/ukbd.c
  projects/ipfw/sys/dev/usb/net/if_axge.c
  projects/ipfw/sys/dev/usb/net/if_axgereg.h
  projects/ipfw/sys/dev/usb/net/if_cdce.c
  projects/ipfw/sys/dev/usb/net/uhso.c
  projects/ipfw/sys/dev/usb/quirk/usb_quirk.c
  projects/ipfw/sys/dev/usb/quirk/usb_quirk.h
  projects/ipfw/sys/dev/usb/serial/u3g.c
  projects/ipfw/sys/dev/usb/serial/uftdi.c
  projects/ipfw/sys/dev/usb/serial/umcs.c
  projects/ipfw/sys/dev/usb/serial/usb_serial.c
  projects/ipfw/sys/dev/usb/serial/usb_serial.h
  projects/ipfw/sys/dev/usb/storage/umass.c
  projects/ipfw/sys/dev/usb/template/usb_template.c
  projects/ipfw/sys/dev/usb/template/usb_template.h
  projects/ipfw/sys/dev/usb/usb_debug.c
  projects/ipfw/sys/dev/usb/usb_dev.c
  projects/ipfw/sys/dev/usb/usb_device.c
  projects/ipfw/sys/dev/usb/usb_generic.c
  projects/ipfw/sys/dev/usb/usb_hub.c
  projects/ipfw/sys/dev/usb/usb_ioctl.h
  projects/ipfw/sys/dev/usb/usb_msctest.c
  projects/ipfw/sys/dev/usb/usb_msctest.h
  projects/ipfw/sys/dev/usb/usb_process.c
  projects/ipfw/sys/dev/usb/usbdevs
  projects/ipfw/sys/dev/usb/wlan/if_rum.c
  projects/ipfw/sys/dev/usb/wlan/if_uath.c
  projects/ipfw/sys/dev/usb/wlan/if_upgt.c
  projects/ipfw/sys/dev/usb/wlan/if_ural.c
  projects/ipfw/sys/dev/usb/wlan/if_urtw.c
  projects/ipfw/sys/dev/usb/wlan/if_urtwn.c
  projects/ipfw/sys/dev/usb/wlan/if_zyd.c
  projects/ipfw/sys/dev/usb/wlan/if_zydreg.h
  projects/ipfw/sys/dev/virtio/balloon/virtio_balloon.c
  projects/ipfw/sys/dev/virtio/network/if_vtnet.c
  projects/ipfw/sys/dev/virtio/network/if_vtnetvar.h
  projects/ipfw/sys/dev/virtio/pci/virtio_pci.c
  projects/ipfw/sys/dev/virtio/pci/virtio_pci.h
  projects/ipfw/sys/dev/virtio/virtio.h
  projects/ipfw/sys/dev/virtio/virtio_config.h
  projects/ipfw/sys/dev/virtio/virtqueue.c
  projects/ipfw/sys/dev/virtio/virtqueue.h
  projects/ipfw/sys/dev/vmware/vmxnet3/if_vmx.c
  projects/ipfw/sys/dev/vmware/vmxnet3/if_vmxvar.h
  projects/ipfw/sys/dev/vt/colors/vt_termcolors.c
  projects/ipfw/sys/dev/vt/colors/vt_termcolors.h
  projects/ipfw/sys/dev/vt/hw/efifb/efifb.c
  projects/ipfw/sys/dev/vt/hw/fb/vt_early_fb.c
  projects/ipfw/sys/dev/vt/hw/fb/vt_fb.c
  projects/ipfw/sys/dev/vt/hw/fb/vt_fb.h
  projects/ipfw/sys/dev/vt/hw/ofwfb/ofwfb.c
  projects/ipfw/sys/dev/vt/vt.h
  projects/ipfw/sys/dev/vt/vt_buf.c
  projects/ipfw/sys/dev/vt/vt_consolectl.c
  projects/ipfw/sys/dev/vt/vt_core.c
  projects/ipfw/sys/dev/vt/vt_sysmouse.c
  projects/ipfw/sys/dev/vxge/vxge-osdep.h
  projects/ipfw/sys/dev/wb/if_wb.c
  projects/ipfw/sys/dev/wpi/if_wpi.c
  projects/ipfw/sys/dev/xen/balloon/balloon.c
  projects/ipfw/sys/dev/xen/blkfront/blkfront.c
  projects/ipfw/sys/dev/xen/console/console.c
  projects/ipfw/sys/dev/xen/console/xencons_ring.c
  projects/ipfw/sys/dev/xen/control/control.c
  projects/ipfw/sys/dev/xen/timer/timer.c
  projects/ipfw/sys/dev/xen/xenpci/xenpci.c
  projects/ipfw/sys/dev/xen/xenpci/xenpcivar.h
  projects/ipfw/sys/fs/cd9660/cd9660_lookup.c
  projects/ipfw/sys/fs/cuse/cuse.c
  projects/ipfw/sys/fs/devfs/devfs_vnops.c
  projects/ipfw/sys/fs/ext2fs/ext2_vnops.c
  projects/ipfw/sys/fs/msdosfs/msdosfs_lookup.c
  projects/ipfw/sys/fs/msdosfs/msdosfs_vnops.c
  projects/ipfw/sys/fs/nandfs/nandfs.h
  projects/ipfw/sys/fs/nandfs/nandfs_subr.c
  projects/ipfw/sys/fs/nandfs/nandfs_vfsops.c
  projects/ipfw/sys/fs/nandfs/nandfs_vnops.c
  projects/ipfw/sys/fs/nfs/nfs.h
  projects/ipfw/sys/fs/nfs/nfs_commonkrpc.c
  projects/ipfw/sys/fs/nfs/nfs_commonport.c
  projects/ipfw/sys/fs/nfs/nfs_commonsubs.c
  projects/ipfw/sys/fs/nfs/nfs_var.h
  projects/ipfw/sys/fs/nfs/nfsclstate.h
  projects/ipfw/sys/fs/nfs/nfsdport.h
  projects/ipfw/sys/fs/nfs/nfsport.h
  projects/ipfw/sys/fs/nfs/nfsproto.h
  projects/ipfw/sys/fs/nfs/nfsrvcache.h
  projects/ipfw/sys/fs/nfs/nfsrvstate.h
  projects/ipfw/sys/fs/nfsclient/nfs_clstate.c
  projects/ipfw/sys/fs/nfsclient/nfs_clvnops.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdcache.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdkrpc.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdport.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdserv.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdsocket.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdstate.c
  projects/ipfw/sys/fs/nfsserver/nfs_nfsdsubs.c
  projects/ipfw/sys/fs/nullfs/null_vnops.c
  projects/ipfw/sys/fs/tmpfs/tmpfs.h
  projects/ipfw/sys/fs/tmpfs/tmpfs_fifoops.c
  projects/ipfw/sys/fs/tmpfs/tmpfs_fifoops.h
  projects/ipfw/sys/fs/tmpfs/tmpfs_subr.c
  projects/ipfw/sys/fs/tmpfs/tmpfs_vfsops.c
  projects/ipfw/sys/fs/tmpfs/tmpfs_vnops.c
  projects/ipfw/sys/fs/tmpfs/tmpfs_vnops.h
  projects/ipfw/sys/gdb/gdb_cons.c
  projects/ipfw/sys/geom/cache/g_cache.c
  projects/ipfw/sys/geom/concat/g_concat.c
  projects/ipfw/sys/geom/eli/g_eli.c
  projects/ipfw/sys/geom/eli/g_eli_key_cache.c
  projects/ipfw/sys/geom/gate/g_gate.c
  projects/ipfw/sys/geom/geom_disk.c
  projects/ipfw/sys/geom/geom_kern.c
  projects/ipfw/sys/geom/journal/g_journal.c
  projects/ipfw/sys/geom/label/g_label.c
  projects/ipfw/sys/geom/label/g_label.h
  projects/ipfw/sys/geom/linux_lvm/g_linux_lvm.c
  projects/ipfw/sys/geom/mirror/g_mirror.c
  projects/ipfw/sys/geom/part/g_part.c
  projects/ipfw/sys/geom/part/g_part.h
  projects/ipfw/sys/geom/part/g_part_apm.c
  projects/ipfw/sys/geom/part/g_part_gpt.c
  projects/ipfw/sys/geom/part/g_part_ldm.c
  projects/ipfw/sys/geom/part/g_part_mbr.c
  projects/ipfw/sys/geom/raid/g_raid.c
  projects/ipfw/sys/geom/raid/g_raid.h
  projects/ipfw/sys/geom/raid/tr_raid1.c
  projects/ipfw/sys/geom/raid/tr_raid1e.c
  projects/ipfw/sys/geom/raid3/g_raid3.c
  projects/ipfw/sys/geom/shsec/g_shsec.c
  projects/ipfw/sys/geom/stripe/g_stripe.c
  projects/ipfw/sys/geom/uzip/g_uzip.c
  projects/ipfw/sys/geom/vinum/geom_vinum.c
  projects/ipfw/sys/geom/virstor/g_virstor.c
  projects/ipfw/sys/i386/acpica/acpi_machdep.c
  projects/ipfw/sys/i386/acpica/acpi_wakecode.S
  projects/ipfw/sys/i386/bios/apm.c
  projects/ipfw/sys/i386/conf/GENERIC
  projects/ipfw/sys/i386/conf/NOTES
  projects/ipfw/sys/i386/i386/i686_mem.c
  projects/ipfw/sys/i386/i386/machdep.c
  projects/ipfw/sys/i386/i386/mp_machdep.c
  projects/ipfw/sys/i386/i386/mp_watchdog.c
  projects/ipfw/sys/i386/i386/pmap.c
  projects/ipfw/sys/i386/i386/sys_machdep.c
  projects/ipfw/sys/i386/i386/trap.c
  projects/ipfw/sys/i386/i386/vm_machdep.c
  projects/ipfw/sys/i386/include/cpu.h
  projects/ipfw/sys/i386/include/npx.h
  projects/ipfw/sys/i386/include/sf_buf.h
  projects/ipfw/sys/i386/include/vmparam.h
  projects/ipfw/sys/i386/isa/npx.c
  projects/ipfw/sys/i386/linux/linux_sysvec.c
  projects/ipfw/sys/i386/pci/pci_cfgreg.c
  projects/ipfw/sys/i386/pci/pci_pir.c
  projects/ipfw/sys/i386/xen/pmap.c
  projects/ipfw/sys/kern/imgact_elf.c
  projects/ipfw/sys/kern/kern_clocksource.c
  projects/ipfw/sys/kern/kern_cons.c
  projects/ipfw/sys/kern/kern_cpu.c
  projects/ipfw/sys/kern/kern_cpuset.c
  projects/ipfw/sys/kern/kern_descrip.c
  projects/ipfw/sys/kern/kern_event.c
  projects/ipfw/sys/kern/kern_exec.c
  projects/ipfw/sys/kern/kern_exit.c
  projects/ipfw/sys/kern/kern_fork.c
  projects/ipfw/sys/kern/kern_intr.c
  projects/ipfw/sys/kern/kern_ktr.c
  projects/ipfw/sys/kern/kern_ktrace.c
  projects/ipfw/sys/kern/kern_linker.c
  projects/ipfw/sys/kern/kern_lockf.c
  projects/ipfw/sys/kern/kern_malloc.c
  projects/ipfw/sys/kern/kern_mbuf.c
  projects/ipfw/sys/kern/kern_mib.c
  projects/ipfw/sys/kern/kern_ntptime.c
  projects/ipfw/sys/kern/kern_osd.c
  projects/ipfw/sys/kern/kern_pmc.c
  projects/ipfw/sys/kern/kern_priv.c
  projects/ipfw/sys/kern/kern_proc.c
  projects/ipfw/sys/kern/kern_shutdown.c
  projects/ipfw/sys/kern/kern_sig.c
  projects/ipfw/sys/kern/kern_sysctl.c
  projects/ipfw/sys/kern/kern_tc.c
  projects/ipfw/sys/kern/kern_thread.c
  projects/ipfw/sys/kern/kern_time.c
  projects/ipfw/sys/kern/kern_timeout.c
  projects/ipfw/sys/kern/link_elf.c
  projects/ipfw/sys/kern/sched_ule.c
  projects/ipfw/sys/kern/subr_bus.c
  projects/ipfw/sys/kern/subr_capability.c
  projects/ipfw/sys/kern/subr_kdb.c
  projects/ipfw/sys/kern/subr_mbpool.c
  projects/ipfw/sys/kern/subr_msgbuf.c
  projects/ipfw/sys/kern/subr_param.c
  projects/ipfw/sys/kern/subr_prf.c
  projects/ipfw/sys/kern/subr_rman.c
  projects/ipfw/sys/kern/subr_sleepqueue.c
  projects/ipfw/sys/kern/subr_smp.c
  projects/ipfw/sys/kern/subr_terminal.c
  projects/ipfw/sys/kern/subr_witness.c
  projects/ipfw/sys/kern/sys_capability.c
  projects/ipfw/sys/kern/sys_generic.c
  projects/ipfw/sys/kern/sys_pipe.c
  projects/ipfw/sys/kern/sys_process.c
  projects/ipfw/sys/kern/sysv_msg.c
  projects/ipfw/sys/kern/sysv_sem.c
  projects/ipfw/sys/kern/sysv_shm.c
  projects/ipfw/sys/kern/tty.c
  projects/ipfw/sys/kern/uipc_accf.c
  projects/ipfw/sys/kern/uipc_mbuf.c
  projects/ipfw/sys/kern/uipc_shm.c
  projects/ipfw/sys/kern/uipc_sockbuf.c
  projects/ipfw/sys/kern/uipc_socket.c
  projects/ipfw/sys/kern/uipc_syscalls.c
  projects/ipfw/sys/kern/uipc_usrreq.c
  projects/ipfw/sys/kern/vfs_bio.c
  projects/ipfw/sys/kern/vfs_cache.c
  projects/ipfw/sys/kern/vfs_init.c
  projects/ipfw/sys/kern/vfs_lookup.c
  projects/ipfw/sys/kern/vfs_mount.c
  projects/ipfw/sys/kern/vfs_subr.c
  projects/ipfw/sys/kern/vfs_syscalls.c
  projects/ipfw/sys/kern/vfs_vnops.c
  projects/ipfw/sys/libkern/arm/divsi3.S
  projects/ipfw/sys/mips/atheros/if_arge.c
  projects/ipfw/sys/mips/atheros/uart_dev_ar933x.c
  projects/ipfw/sys/mips/cavium/usb/octusb.c
  projects/ipfw/sys/mips/conf/BERI_NETFPGA_MDROOT
  projects/ipfw/sys/mips/include/elf.h
  projects/ipfw/sys/mips/include/sf_buf.h
  projects/ipfw/sys/mips/include/vmparam.h
  projects/ipfw/sys/mips/mips/dump_machdep.c
  projects/ipfw/sys/mips/mips/pmap.c
  projects/ipfw/sys/mips/mips/trap.c
  projects/ipfw/sys/mips/mips/vm_machdep.c
  projects/ipfw/sys/mips/rmi/rootfs_list.txt
  projects/ipfw/sys/mips/rt305x/uart_dev_rt305x.c
  projects/ipfw/sys/modules/Makefile
  projects/ipfw/sys/modules/acl_nfs4/Makefile
  projects/ipfw/sys/modules/acl_posix1e/Makefile
  projects/ipfw/sys/modules/acpi/acpi/Makefile
  projects/ipfw/sys/modules/aic7xxx/ahc/Makefile
  projects/ipfw/sys/modules/alq/Makefile
  projects/ipfw/sys/modules/an/Makefile
  projects/ipfw/sys/modules/arcnet/Makefile
  projects/ipfw/sys/modules/bxe/Makefile
  projects/ipfw/sys/modules/cam/Makefile
  projects/ipfw/sys/modules/carp/Makefile
  projects/ipfw/sys/modules/cc/cc_cdg/Makefile
  projects/ipfw/sys/modules/cc/cc_chd/Makefile
  projects/ipfw/sys/modules/cc/cc_cubic/Makefile
  projects/ipfw/sys/modules/cc/cc_hd/Makefile
  projects/ipfw/sys/modules/cc/cc_htcp/Makefile
  projects/ipfw/sys/modules/cc/cc_vegas/Makefile
  projects/ipfw/sys/modules/ctl/Makefile
  projects/ipfw/sys/modules/cxgb/Makefile
  projects/ipfw/sys/modules/cxgb/cxgb/Makefile
  projects/ipfw/sys/modules/cxgb/iw_cxgb/Makefile
  projects/ipfw/sys/modules/cxgb/tom/Makefile
  projects/ipfw/sys/modules/cxgbe/Makefile
  projects/ipfw/sys/modules/cxgbe/if_cxgbe/Makefile
  projects/ipfw/sys/modules/cxgbe/iw_cxgbe/Makefile
  projects/ipfw/sys/modules/cxgbe/t4_firmware/Makefile
  projects/ipfw/sys/modules/cxgbe/t5_firmware/Makefile
  projects/ipfw/sys/modules/cxgbe/tom/Makefile
  projects/ipfw/sys/modules/dpt/Makefile
  projects/ipfw/sys/modules/drm/Makefile
  projects/ipfw/sys/modules/drm2/Makefile
  projects/ipfw/sys/modules/drm2/radeonkms/Makefile
  projects/ipfw/sys/modules/dtrace/Makefile
  projects/ipfw/sys/modules/dtrace/dtrace/Makefile
  projects/ipfw/sys/modules/dtrace/fasttrap/Makefile
  projects/ipfw/sys/modules/dummynet/Makefile
  projects/ipfw/sys/modules/em/Makefile
  projects/ipfw/sys/modules/en/Makefile
  projects/ipfw/sys/modules/ep/Makefile
  projects/ipfw/sys/modules/fatm/Makefile
  projects/ipfw/sys/modules/firewire/fwip/Makefile
  projects/ipfw/sys/modules/hatm/Makefile
  projects/ipfw/sys/modules/hwpmc/Makefile
  projects/ipfw/sys/modules/i40e/Makefile
  projects/ipfw/sys/modules/ibcore/Makefile
  projects/ipfw/sys/modules/if_bridge/Makefile
  projects/ipfw/sys/modules/if_disc/Makefile
  projects/ipfw/sys/modules/if_faith/Makefile
  projects/ipfw/sys/modules/if_gif/Makefile
  projects/ipfw/sys/modules/if_gre/Makefile
  projects/ipfw/sys/modules/if_lagg/Makefile
  projects/ipfw/sys/modules/if_stf/Makefile
  projects/ipfw/sys/modules/if_tap/Makefile
  projects/ipfw/sys/modules/if_tun/Makefile
  projects/ipfw/sys/modules/igb/Makefile
  projects/ipfw/sys/modules/ip6_mroute_mod/Makefile
  projects/ipfw/sys/modules/ip_mroute_mod/Makefile
  projects/ipfw/sys/modules/ipdivert/Makefile
  projects/ipfw/sys/modules/ipfilter/Makefile
  projects/ipfw/sys/modules/ipoib/Makefile
  projects/ipfw/sys/modules/ixgbe/Makefile
  projects/ipfw/sys/modules/khelp/h_ertt/Makefile
  projects/ipfw/sys/modules/krpc/Makefile
  projects/ipfw/sys/modules/linux/Makefile
  projects/ipfw/sys/modules/lmc/Makefile
  projects/ipfw/sys/modules/mlx4/Makefile
  projects/ipfw/sys/modules/mlx4ib/Makefile
  projects/ipfw/sys/modules/mlxen/Makefile
  projects/ipfw/sys/modules/mthca/Makefile
  projects/ipfw/sys/modules/netfpga10g/nf10bmac/Makefile
  projects/ipfw/sys/modules/netgraph/Makefile
  projects/ipfw/sys/modules/netgraph/gif/Makefile
  projects/ipfw/sys/modules/netgraph/iface/Makefile
  projects/ipfw/sys/modules/netgraph/ipfw/Makefile
  projects/ipfw/sys/modules/netgraph/netflow/Makefile
  projects/ipfw/sys/modules/nfscl/Makefile
  projects/ipfw/sys/modules/nfsclient/Makefile
  projects/ipfw/sys/modules/nfslockd/Makefile
  projects/ipfw/sys/modules/nfsserver/Makefile
  projects/ipfw/sys/modules/patm/Makefile
  projects/ipfw/sys/modules/pf/Makefile
  projects/ipfw/sys/modules/pflog/Makefile
  projects/ipfw/sys/modules/pfsync/Makefile
  projects/ipfw/sys/modules/ppc/Makefile
  projects/ipfw/sys/modules/siftr/Makefile
  projects/ipfw/sys/modules/smbfs/Makefile
  projects/ipfw/sys/modules/snc/Makefile
  projects/ipfw/sys/modules/sound/driver/Makefile
  projects/ipfw/sys/modules/sound/sound/Makefile
  projects/ipfw/sys/modules/sppp/Makefile
  projects/ipfw/sys/modules/svr4/README
  projects/ipfw/sys/modules/trm/Makefile
  projects/ipfw/sys/modules/usb/Makefile
  projects/ipfw/sys/modules/usb/template/Makefile
  projects/ipfw/sys/modules/virtio/network/Makefile
  projects/ipfw/sys/modules/vmware/vmxnet3/Makefile
  projects/ipfw/sys/modules/vx/Makefile
  projects/ipfw/sys/modules/wlan/Makefile
  projects/ipfw/sys/modules/wlan_acl/Makefile
  projects/ipfw/sys/modules/wlan_amrr/Makefile
  projects/ipfw/sys/modules/wlan_ccmp/Makefile
  projects/ipfw/sys/modules/wlan_rssadapt/Makefile
  projects/ipfw/sys/modules/wlan_tkip/Makefile
  projects/ipfw/sys/modules/wlan_wep/Makefile
  projects/ipfw/sys/modules/wlan_xauth/Makefile
  projects/ipfw/sys/modules/zfs/Makefile
  projects/ipfw/sys/net/bpf_zerocopy.c
  projects/ipfw/sys/net/ieee8023ad_lacp.c
  projects/ipfw/sys/net/if.c
  projects/ipfw/sys/net/if.h
  projects/ipfw/sys/net/if_bridge.c
  projects/ipfw/sys/net/if_lagg.c
  projects/ipfw/sys/net/if_lagg.h
  projects/ipfw/sys/net/if_spppsubr.c
  projects/ipfw/sys/net/if_stf.c
  projects/ipfw/sys/net/if_stf.h
  projects/ipfw/sys/net/if_tap.c
  projects/ipfw/sys/net/if_tun.c
  projects/ipfw/sys/net/if_var.h
  projects/ipfw/sys/net/if_vlan.c
  projects/ipfw/sys/net/netisr.c
  projects/ipfw/sys/net/route.c
  projects/ipfw/sys/net/rtsock.c
  projects/ipfw/sys/net80211/ieee80211.c
  projects/ipfw/sys/netgraph/ng_base.c
  projects/ipfw/sys/netgraph/ng_eiface.c
  projects/ipfw/sys/netgraph/ng_mppc.c
  projects/ipfw/sys/netinet/cc/cc.c
  projects/ipfw/sys/netinet/igmp.c
  projects/ipfw/sys/netinet/igmp_var.h
  projects/ipfw/sys/netinet/in.c
  projects/ipfw/sys/netinet/in.h
  projects/ipfw/sys/netinet/in_gif.c
  projects/ipfw/sys/netinet/in_gif.h
  projects/ipfw/sys/netinet/in_mcast.c
  projects/ipfw/sys/netinet/in_pcb.c
  projects/ipfw/sys/netinet/in_pcb.h
  projects/ipfw/sys/netinet/in_pcbgroup.c
  projects/ipfw/sys/netinet/in_proto.c
  projects/ipfw/sys/netinet/in_rss.c
  projects/ipfw/sys/netinet/in_rss.h
  projects/ipfw/sys/netinet/ip_carp.c
  projects/ipfw/sys/netinet/ip_carp.h
  projects/ipfw/sys/netinet/ip_divert.c
  projects/ipfw/sys/netinet/ip_encap.c
  projects/ipfw/sys/netinet/ip_encap.h
  projects/ipfw/sys/netinet/ip_gre.c
  projects/ipfw/sys/netinet/ip_gre.h
  projects/ipfw/sys/netinet/ip_icmp.c
  projects/ipfw/sys/netinet/ip_icmp.h
  projects/ipfw/sys/netinet/ip_input.c
  projects/ipfw/sys/netinet/ip_mroute.c
  projects/ipfw/sys/netinet/ip_output.c
  projects/ipfw/sys/netinet/ip_var.h
  projects/ipfw/sys/netinet/pim_var.h
  projects/ipfw/sys/netinet/raw_ip.c
  projects/ipfw/sys/netinet/sctp.h
  projects/ipfw/sys/netinet/sctp_asconf.c
  projects/ipfw/sys/netinet/sctp_auth.c
  projects/ipfw/sys/netinet/sctp_auth.h
  projects/ipfw/sys/netinet/sctp_header.h
  projects/ipfw/sys/netinet/sctp_indata.c
  projects/ipfw/sys/netinet/sctp_input.c
  projects/ipfw/sys/netinet/sctp_os_bsd.h
  projects/ipfw/sys/netinet/sctp_output.c
  projects/ipfw/sys/netinet/sctp_pcb.c
  projects/ipfw/sys/netinet/sctp_pcb.h
  projects/ipfw/sys/netinet/sctp_peeloff.c
  projects/ipfw/sys/netinet/sctp_structs.h
  projects/ipfw/sys/netinet/sctp_sysctl.c
  projects/ipfw/sys/netinet/sctp_sysctl.h
  projects/ipfw/sys/netinet/sctp_timer.c
  projects/ipfw/sys/netinet/sctp_uio.h
  projects/ipfw/sys/netinet/sctp_usrreq.c
  projects/ipfw/sys/netinet/sctp_var.h
  projects/ipfw/sys/netinet/sctputil.c
  projects/ipfw/sys/netinet/sctputil.h
  projects/ipfw/sys/netinet/tcp_input.c
  projects/ipfw/sys/netinet/tcp_output.c
  projects/ipfw/sys/netinet/tcp_subr.c
  projects/ipfw/sys/netinet/tcp_timer.c
  projects/ipfw/sys/netinet/tcp_timewait.c
  projects/ipfw/sys/netinet/tcp_var.h
  projects/ipfw/sys/netinet/udp_usrreq.c
  projects/ipfw/sys/netinet/udp_var.h
  projects/ipfw/sys/netinet6/in6.c
  projects/ipfw/sys/netinet6/in6.h
  projects/ipfw/sys/netinet6/in6_gif.c
  projects/ipfw/sys/netinet6/in6_mcast.c
  projects/ipfw/sys/netinet6/in6_pcb.c
  projects/ipfw/sys/netinet6/in6_pcbgroup.c
  projects/ipfw/sys/netinet6/in6_proto.c
  projects/ipfw/sys/netinet6/in6_src.c
  projects/ipfw/sys/netinet6/ip6_forward.c
  projects/ipfw/sys/netinet6/ip6_input.c
  projects/ipfw/sys/netinet6/ip6_mroute.c
  projects/ipfw/sys/netinet6/ip6_output.c
  projects/ipfw/sys/netinet6/ip6_var.h
  projects/ipfw/sys/netinet6/ip6protosw.h
  projects/ipfw/sys/netinet6/mld6.c
  projects/ipfw/sys/netinet6/nd6.c
  projects/ipfw/sys/netinet6/raw_ip6.c
  projects/ipfw/sys/netipsec/ipsec.h
  projects/ipfw/sys/netipsec/ipsec_input.c
  projects/ipfw/sys/netipsec/ipsec_output.c
  projects/ipfw/sys/netipsec/key_debug.c
  projects/ipfw/sys/netipsec/xform.h
  projects/ipfw/sys/netipsec/xform_ipip.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
  projects/ipfw/sys/netpfil/pf/if_pfsync.c
  projects/ipfw/sys/netpfil/pf/pf.c
  projects/ipfw/sys/nfs/nfs_fha.c
  projects/ipfw/sys/nfsserver/nfs_serv.c
  projects/ipfw/sys/ofed/drivers/infiniband/hw/mlx4/main.c
  projects/ipfw/sys/ofed/drivers/infiniband/hw/mlx4/mcg.c
  projects/ipfw/sys/ofed/drivers/infiniband/hw/mlx4/qp.c
  projects/ipfw/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
  projects/ipfw/sys/ofed/drivers/net/mlx4/en_main.c
  projects/ipfw/sys/ofed/drivers/net/mlx4/en_netdev.c
  projects/ipfw/sys/ofed/drivers/net/mlx4/main.c
  projects/ipfw/sys/ofed/include/linux/bitops.h
  projects/ipfw/sys/ofed/include/linux/linux_compat.c
  projects/ipfw/sys/ofed/include/linux/linux_radix.c
  projects/ipfw/sys/ofed/include/linux/module.h
  projects/ipfw/sys/pc98/cbus/sio.c
  projects/ipfw/sys/pc98/pc98/canbus.c
  projects/ipfw/sys/pc98/pc98/machdep.c
  projects/ipfw/sys/pc98/pc98/pc98_machdep.c
  projects/ipfw/sys/powerpc/aim/mmu_oea.c
  projects/ipfw/sys/powerpc/aim/mmu_oea64.c
  projects/ipfw/sys/powerpc/aim/trap.c
  projects/ipfw/sys/powerpc/booke/pmap.c
  projects/ipfw/sys/powerpc/include/endian.h
  projects/ipfw/sys/powerpc/include/pmap.h
  projects/ipfw/sys/powerpc/include/spr.h
  projects/ipfw/sys/powerpc/include/vmparam.h
  projects/ipfw/sys/powerpc/powerpc/cpu.c
  projects/ipfw/sys/powerpc/powerpc/dump_machdep.c
  projects/ipfw/sys/powerpc/powerpc/elf32_machdep.c
  projects/ipfw/sys/powerpc/powerpc/mem.c
  projects/ipfw/sys/powerpc/powerpc/mmu_if.m
  projects/ipfw/sys/powerpc/powerpc/pmap_dispatch.c
  projects/ipfw/sys/powerpc/powerpc/vm_machdep.c
  projects/ipfw/sys/powerpc/ps3/platform_ps3.c
  projects/ipfw/sys/powerpc/ps3/ps3_syscons.c
  projects/ipfw/sys/rpc/krpc.h
  projects/ipfw/sys/rpc/svc.h
  projects/ipfw/sys/rpc/svc_vc.c
  projects/ipfw/sys/security/mac_biba/mac_biba.c
  projects/ipfw/sys/security/mac_bsdextended/mac_bsdextended.c
  projects/ipfw/sys/security/mac_ifoff/mac_ifoff.c
  projects/ipfw/sys/security/mac_lomac/mac_lomac.c
  projects/ipfw/sys/security/mac_mls/mac_mls.c
  projects/ipfw/sys/security/mac_portacl/mac_portacl.c
  projects/ipfw/sys/sparc64/conf/GENERIC
  projects/ipfw/sys/sparc64/include/vmparam.h
  projects/ipfw/sys/sparc64/pci/psycho.c
  projects/ipfw/sys/sparc64/sparc64/dump_machdep.c
  projects/ipfw/sys/sparc64/sparc64/pmap.c
  projects/ipfw/sys/sparc64/sparc64/vm_machdep.c
  projects/ipfw/sys/sys/buf.h
  projects/ipfw/sys/sys/bus.h
  projects/ipfw/sys/sys/capsicum.h
  projects/ipfw/sys/sys/cdefs.h
  projects/ipfw/sys/sys/conf.h
  projects/ipfw/sys/sys/cons.h
  projects/ipfw/sys/sys/cpuctl.h
  projects/ipfw/sys/sys/cpuset.h
  projects/ipfw/sys/sys/disklabel.h
  projects/ipfw/sys/sys/dtrace_bsd.h
  projects/ipfw/sys/sys/efi.h
  projects/ipfw/sys/sys/elf_common.h
  projects/ipfw/sys/sys/event.h
  projects/ipfw/sys/sys/exec.h
  projects/ipfw/sys/sys/fbio.h
  projects/ipfw/sys/sys/filedesc.h
  projects/ipfw/sys/sys/fnv_hash.h
  projects/ipfw/sys/sys/gpt.h
  projects/ipfw/sys/sys/imgact_elf.h
  projects/ipfw/sys/sys/kerneldump.h
  projects/ipfw/sys/sys/link_elf.h
  projects/ipfw/sys/sys/linker_set.h
  projects/ipfw/sys/sys/malloc.h
  projects/ipfw/sys/sys/mbpool.h
  projects/ipfw/sys/sys/mbuf.h
  projects/ipfw/sys/sys/mman.h
  projects/ipfw/sys/sys/mount.h
  projects/ipfw/sys/sys/param.h
  projects/ipfw/sys/sys/proc.h
  projects/ipfw/sys/sys/procdesc.h
  projects/ipfw/sys/sys/protosw.h
  projects/ipfw/sys/sys/rman.h
  projects/ipfw/sys/sys/sdt.h
  projects/ipfw/sys/sys/sf_buf.h
  projects/ipfw/sys/sys/signalvar.h
  projects/ipfw/sys/sys/syscallsubr.h
  projects/ipfw/sys/sys/sysctl.h
  projects/ipfw/sys/sys/sysent.h
  projects/ipfw/sys/sys/terminal.h
  projects/ipfw/sys/sys/time.h
  projects/ipfw/sys/sys/vnode.h
  projects/ipfw/sys/ufs/ffs/ffs_softdep.c
  projects/ipfw/sys/ufs/ffs/ffs_vfsops.c
  projects/ipfw/sys/ufs/ffs/softdep.h
  projects/ipfw/sys/ufs/ufs/ufs_vnops.c
  projects/ipfw/sys/vm/memguard.c
  projects/ipfw/sys/vm/pmap.h
  projects/ipfw/sys/vm/redzone.c
  projects/ipfw/sys/vm/uma_core.c
  projects/ipfw/sys/vm/vm_extern.h
  projects/ipfw/sys/vm/vm_fault.c
  projects/ipfw/sys/vm/vm_glue.c
  projects/ipfw/sys/vm/vm_init.c
  projects/ipfw/sys/vm/vm_kern.c
  projects/ipfw/sys/vm/vm_map.c
  projects/ipfw/sys/vm/vm_map.h
  projects/ipfw/sys/vm/vm_mmap.c
  projects/ipfw/sys/vm/vm_object.c
  projects/ipfw/sys/vm/vm_object.h
  projects/ipfw/sys/vm/vm_page.c
  projects/ipfw/sys/vm/vm_page.h
  projects/ipfw/sys/vm/vm_pageout.c
  projects/ipfw/sys/vm/vm_pager.h
  projects/ipfw/sys/vm/vm_phys.c
  projects/ipfw/sys/vm/vm_radix.c
  projects/ipfw/sys/vm/vm_unix.c
  projects/ipfw/sys/vm/vm_zeroidle.c
  projects/ipfw/sys/x86/acpica/madt.c
  projects/ipfw/sys/x86/cpufreq/hwpstate.c
  projects/ipfw/sys/x86/include/acpica_machdep.h   (contents, props changed)
  projects/ipfw/sys/x86/include/apicvar.h
  projects/ipfw/sys/x86/include/init.h
  projects/ipfw/sys/x86/include/segments.h
  projects/ipfw/sys/x86/include/specialreg.h
  projects/ipfw/sys/x86/iommu/intel_drv.c
  projects/ipfw/sys/x86/iommu/intel_utils.c
  projects/ipfw/sys/x86/isa/atpic.c
  projects/ipfw/sys/x86/isa/isa.c
  projects/ipfw/sys/x86/pci/pci_bus.c
  projects/ipfw/sys/x86/x86/dump_machdep.c
  projects/ipfw/sys/x86/x86/io_apic.c
  projects/ipfw/sys/x86/x86/local_apic.c
  projects/ipfw/sys/x86/x86/mca.c
  projects/ipfw/sys/x86/x86/tsc.c
  projects/ipfw/sys/x86/xen/hvm.c
  projects/ipfw/sys/x86/xen/pv.c
  projects/ipfw/sys/x86/xen/pvcpu_enum.c
  projects/ipfw/sys/x86/xen/xen_intr.c
  projects/ipfw/sys/xen/gnttab.c
  projects/ipfw/sys/xen/gnttab.h
  projects/ipfw/sys/xen/xen_intr.h
  projects/ipfw/sys/xen/xenstore/xenstore.c
  projects/ipfw/tools/bsdbox/Makefile
  projects/ipfw/tools/build/mk/OptionalObsoleteFiles.inc
  projects/ipfw/tools/ifnet/convert_drvapi.sh
  projects/ipfw/tools/regression/README
  projects/ipfw/tools/regression/file/flock/flock.c
  projects/ipfw/tools/regression/filemon/Makefile
  projects/ipfw/tools/regression/net80211/ccmp/test_ccmp.c
  projects/ipfw/tools/regression/net80211/wep/test_wep.c
  projects/ipfw/tools/test/dtrace/Makefile
  projects/ipfw/tools/test/netfibs/reflect.c
  projects/ipfw/tools/tools/README
  projects/ipfw/tools/tools/ath/Makefile
  projects/ipfw/tools/tools/ath/athalq/ar9300_ds.c
  projects/ipfw/tools/tools/ath/athdecode/main.c
  projects/ipfw/tools/tools/ath/athpoke/athpoke.c
  projects/ipfw/tools/tools/ath/athregs/dumpregs.c
  projects/ipfw/tools/tools/cxgbetool/cxgbetool.c
  projects/ipfw/tools/tools/ether_reflect/ether_reflect.1
  projects/ipfw/tools/tools/fixwhite/fixwhite.1
  projects/ipfw/tools/tools/mcgrab/mcgrab.1
  projects/ipfw/tools/tools/mctest/mctest.1
  projects/ipfw/tools/tools/nanobsd/dhcpd/README
  projects/ipfw/tools/tools/nanobsd/nanobsd.sh
  projects/ipfw/tools/tools/nanobsd/rescue/build.sh
  projects/ipfw/tools/tools/nanobsd/rescue/common
  projects/ipfw/tools/tools/nanobsd/rescue/merge.sh
  projects/ipfw/tools/tools/nanobsd/rescue/rescue_amd64.conf
  projects/ipfw/tools/tools/nanobsd/rescue/rescue_i386.conf
  projects/ipfw/tools/tools/net80211/stumbler/Makefile
  projects/ipfw/tools/tools/sysbuild/README
  projects/ipfw/tools/tools/sysdoc/sysdoc.sh
  projects/ipfw/tools/tools/vimage/vimage.8
  projects/ipfw/usr.bin/Makefile
  projects/ipfw/usr.bin/ar/ar.1
  projects/ipfw/usr.bin/at/at.man
  projects/ipfw/usr.bin/bluetooth/bthost/bthost.1
  projects/ipfw/usr.bin/bluetooth/btsockstat/btsockstat.1
  projects/ipfw/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.1
  projects/ipfw/usr.bin/bmake/Makefile
  projects/ipfw/usr.bin/bmake/config.h
  projects/ipfw/usr.bin/brandelf/brandelf.1
  projects/ipfw/usr.bin/bsdiff/bsdiff/bsdiff.1
  projects/ipfw/usr.bin/bsdiff/bspatch/bspatch.1
  projects/ipfw/usr.bin/calendar/calendars/calendar.freebsd
  projects/ipfw/usr.bin/calendar/calendars/calendar.holiday
  projects/ipfw/usr.bin/clang/clang.prog.mk
  projects/ipfw/usr.bin/cpuset/cpuset.1
  projects/ipfw/usr.bin/ctlstat/ctlstat.8
  projects/ipfw/usr.bin/drill/Makefile
  projects/ipfw/usr.bin/ee/Makefile
  projects/ipfw/usr.bin/elf2aout/elf2aout.1
  projects/ipfw/usr.bin/elfdump/elfdump.1
  projects/ipfw/usr.bin/elfdump/elfdump.c
  projects/ipfw/usr.bin/fetch/fetch.1
  projects/ipfw/usr.bin/file/Makefile
  projects/ipfw/usr.bin/fstat/fuser.1
  projects/ipfw/usr.bin/ftp/Makefile
  projects/ipfw/usr.bin/gcore/Makefile
  projects/ipfw/usr.bin/gcore/elfcore.c
  projects/ipfw/usr.bin/getconf/getconf.1
  projects/ipfw/usr.bin/gprof/gprof.h
  projects/ipfw/usr.bin/grep/grep.c
  projects/ipfw/usr.bin/grep/queue.c
  projects/ipfw/usr.bin/grep/util.c
  projects/ipfw/usr.bin/gzip/gzip.1
  projects/ipfw/usr.bin/gzip/zuncompress.c
  projects/ipfw/usr.bin/host/Makefile
  projects/ipfw/usr.bin/iconv/iconv.c
  projects/ipfw/usr.bin/ipcs/ipcs.1
  projects/ipfw/usr.bin/iscsictl/iscsictl.8
  projects/ipfw/usr.bin/iscsictl/iscsictl.c
  projects/ipfw/usr.bin/kdump/kdump.c
  projects/ipfw/usr.bin/ktrdump/ktrdump.8
  projects/ipfw/usr.bin/ldd/ldd.1
  projects/ipfw/usr.bin/less/Makefile
  projects/ipfw/usr.bin/lockf/lockf.1
  projects/ipfw/usr.bin/logins/logins.1
  projects/ipfw/usr.bin/look/look.1
  projects/ipfw/usr.bin/look/look.c
  projects/ipfw/usr.bin/m4/Makefile
  projects/ipfw/usr.bin/m4/eval.c
  projects/ipfw/usr.bin/m4/extern.h
  projects/ipfw/usr.bin/m4/gnum4.c
  projects/ipfw/usr.bin/m4/look.c
  projects/ipfw/usr.bin/m4/m4.1
  projects/ipfw/usr.bin/m4/main.c
  projects/ipfw/usr.bin/m4/misc.c
  projects/ipfw/usr.bin/make/Makefile
  projects/ipfw/usr.bin/mkcsmapper/mkcsmapper.1
  projects/ipfw/usr.bin/mkesdb/mkesdb.1
  projects/ipfw/usr.bin/mkimg/Makefile
  projects/ipfw/usr.bin/mkimg/apm.c
  projects/ipfw/usr.bin/mkimg/gpt.c
  projects/ipfw/usr.bin/mkimg/image.c
  projects/ipfw/usr.bin/mkimg/image.h
  projects/ipfw/usr.bin/mkimg/mkimg.1
  projects/ipfw/usr.bin/mkimg/mkimg.c
  projects/ipfw/usr.bin/mkimg/mkimg.h
  projects/ipfw/usr.bin/mkimg/raw.c
  projects/ipfw/usr.bin/mkimg/vmdk.c
  projects/ipfw/usr.bin/mkulzma/mkulzma.8
  projects/ipfw/usr.bin/mkuzip/mkuzip.8
  projects/ipfw/usr.bin/msgs/Makefile
  projects/ipfw/usr.bin/ncal/Makefile
  projects/ipfw/usr.bin/ncal/ncal.1
  projects/ipfw/usr.bin/opiekey/Makefile
  projects/ipfw/usr.bin/patch/patch.1
  projects/ipfw/usr.bin/patch/patch.c
  projects/ipfw/usr.bin/patch/pch.c
  projects/ipfw/usr.bin/patch/pch.h
  projects/ipfw/usr.bin/procstat/procstat.1
  projects/ipfw/usr.bin/procstat/procstat_files.c
  projects/ipfw/usr.bin/procstat/procstat_vm.c
  projects/ipfw/usr.bin/rctl/rctl.8
  projects/ipfw/usr.bin/revoke/revoke.1
  projects/ipfw/usr.bin/sed/defs.h
  projects/ipfw/usr.bin/sed/main.c
  projects/ipfw/usr.bin/sed/process.c
  projects/ipfw/usr.bin/sed/sed.1
  projects/ipfw/usr.bin/sed/tests/regress.y.out
  projects/ipfw/usr.bin/showmount/showmount.8
  projects/ipfw/usr.bin/sockstat/sockstat.1
  projects/ipfw/usr.bin/sort/sort.1.in
  projects/ipfw/usr.bin/ssh-copy-id/ssh-copy-id.1
  projects/ipfw/usr.bin/stat/stat.1
  projects/ipfw/usr.bin/svn/svn/Makefile
  projects/ipfw/usr.bin/svn/svn_private_config.h
  projects/ipfw/usr.bin/systat/systat.1
  projects/ipfw/usr.bin/tabs/Makefile
  projects/ipfw/usr.bin/telnet/Makefile
  projects/ipfw/usr.bin/tftp/Makefile
  projects/ipfw/usr.bin/top/machine.c
  projects/ipfw/usr.bin/tput/Makefile
  projects/ipfw/usr.bin/truncate/truncate.1
  projects/ipfw/usr.bin/truss/extern.h
  projects/ipfw/usr.bin/truss/main.c
  projects/ipfw/usr.bin/tset/Makefile
  projects/ipfw/usr.bin/ul/Makefile
  projects/ipfw/usr.bin/unifdef/unifdef.1
  projects/ipfw/usr.bin/units/Makefile
  projects/ipfw/usr.bin/units/units.1
  projects/ipfw/usr.bin/units/units.c
  projects/ipfw/usr.bin/units/units.lib
  projects/ipfw/usr.bin/unzip/unzip.1
  projects/ipfw/usr.bin/users/Makefile   (contents, props changed)
  projects/ipfw/usr.bin/vi/Makefile
  projects/ipfw/usr.bin/vmstat/vmstat.8
  projects/ipfw/usr.bin/vmstat/vmstat.c
  projects/ipfw/usr.bin/vtfontcvt/vtfontcvt.8
  projects/ipfw/usr.bin/vtfontcvt/vtfontcvt.c
  projects/ipfw/usr.bin/which/which.1
  projects/ipfw/usr.bin/whois/whois.c
  projects/ipfw/usr.bin/xlint/lint1/param.h
  projects/ipfw/usr.bin/yacc/tests/Makefile
  projects/ipfw/usr.bin/ypcat/ypcat.1
  projects/ipfw/usr.bin/ypmatch/ypmatch.1
  projects/ipfw/usr.sbin/acpi/acpiconf/acpiconf.8
  projects/ipfw/usr.sbin/acpi/acpidb/acpidb.8
  projects/ipfw/usr.sbin/acpi/acpidump/acpidump.8
  projects/ipfw/usr.sbin/adduser/adduser.8
  projects/ipfw/usr.sbin/adduser/adduser.conf.5
  projects/ipfw/usr.sbin/ancontrol/ancontrol.8
  projects/ipfw/usr.sbin/apm/apm.8
  projects/ipfw/usr.sbin/apmd/apmd.8
  projects/ipfw/usr.sbin/asf/asf.8
  projects/ipfw/usr.sbin/bhyve/Makefile
  projects/ipfw/usr.sbin/bhyve/acpi.c
  projects/ipfw/usr.sbin/bhyve/atkbdc.c
  projects/ipfw/usr.sbin/bhyve/bhyve.8
  projects/ipfw/usr.sbin/bhyve/bhyverun.c
  projects/ipfw/usr.sbin/bhyve/bhyverun.h
  projects/ipfw/usr.sbin/bhyve/block_if.c
  projects/ipfw/usr.sbin/bhyve/block_if.h
  projects/ipfw/usr.sbin/bhyve/inout.c
  projects/ipfw/usr.sbin/bhyve/inout.h
  projects/ipfw/usr.sbin/bhyve/mem.c
  projects/ipfw/usr.sbin/bhyve/mem.h
  projects/ipfw/usr.sbin/bhyve/pci_ahci.c
  projects/ipfw/usr.sbin/bhyve/pci_emul.c
  projects/ipfw/usr.sbin/bhyve/pci_emul.h
  projects/ipfw/usr.sbin/bhyve/pci_irq.c
  projects/ipfw/usr.sbin/bhyve/pm.c
  projects/ipfw/usr.sbin/bhyve/rtc.c
  projects/ipfw/usr.sbin/bhyve/smbiostbl.c
  projects/ipfw/usr.sbin/bhyve/virtio.c
  projects/ipfw/usr.sbin/bhyve/virtio.h
  projects/ipfw/usr.sbin/bhyvectl/bhyvectl.c
  projects/ipfw/usr.sbin/bhyveload/bhyveload.8
  projects/ipfw/usr.sbin/bhyveload/bhyveload.c
  projects/ipfw/usr.sbin/binmiscctl/binmiscctl.8
  projects/ipfw/usr.sbin/bluetooth/ath3kfw/ath3kfw.8
  projects/ipfw/usr.sbin/bluetooth/bcmfw/bcmfw.8
  projects/ipfw/usr.sbin/bluetooth/bt3cfw/bt3cfw.8
  projects/ipfw/usr.sbin/bluetooth/bthidcontrol/bthidcontrol.8
  projects/ipfw/usr.sbin/bluetooth/bthidd/bthidd.8
  projects/ipfw/usr.sbin/bluetooth/hccontrol/hccontrol.8
  projects/ipfw/usr.sbin/bluetooth/hcsecd/hcsecd.8
  projects/ipfw/usr.sbin/bluetooth/hcsecd/hcsecd.conf.5
  projects/ipfw/usr.sbin/bluetooth/hcseriald/hcseriald.8
  projects/ipfw/usr.sbin/bluetooth/l2control/l2control.8
  projects/ipfw/usr.sbin/bluetooth/l2ping/l2ping.8
  projects/ipfw/usr.sbin/bluetooth/rfcomm_pppd/rfcomm_pppd.8
  projects/ipfw/usr.sbin/bluetooth/sdpcontrol/sdpcontrol.8
  projects/ipfw/usr.sbin/bluetooth/sdpd/sdpd.8
  projects/ipfw/usr.sbin/boot0cfg/boot0cfg.8
  projects/ipfw/usr.sbin/bootparamd/bootparamd/bootparamd.8
  projects/ipfw/usr.sbin/bsdconfig/bsdconfig.8
  projects/ipfw/usr.sbin/bsdconfig/dot/dot
  projects/ipfw/usr.sbin/bsdconfig/dot/include/messages.subr
  projects/ipfw/usr.sbin/bsdconfig/examples/Makefile
  projects/ipfw/usr.sbin/bsdconfig/examples/browse_packages_http.sh
  projects/ipfw/usr.sbin/bsdconfig/include/messages.subr
  projects/ipfw/usr.sbin/bsdconfig/share/common.subr
  projects/ipfw/usr.sbin/bsdconfig/share/dialog.subr
  projects/ipfw/usr.sbin/bsdconfig/share/media/http.subr
  projects/ipfw/usr.sbin/bsdconfig/share/media/httpproxy.subr
  projects/ipfw/usr.sbin/bsdconfig/share/packages/Makefile
  projects/ipfw/usr.sbin/bsdconfig/share/packages/index.subr   (contents, props changed)
  projects/ipfw/usr.sbin/bsdconfig/share/packages/packages.subr   (contents, props changed)
  projects/ipfw/usr.sbin/bsdinstall/bsdinstall.8
  projects/ipfw/usr.sbin/bsdinstall/partedit/partedit_powerpc.c
  projects/ipfw/usr.sbin/bsdinstall/partedit/partedit_x86.c
  projects/ipfw/usr.sbin/bsdinstall/partedit/sade.8
  projects/ipfw/usr.sbin/bsdinstall/scripts/auto
  projects/ipfw/usr.sbin/bsdinstall/scripts/jail
  projects/ipfw/usr.sbin/bsdinstall/scripts/mirrorselect
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_sys.c
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_bridge/snmp_bridge.3
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_hast/snmp_hast.3
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_hostres/snmp_hostres.3
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_lm75/snmp_lm75.3
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_lm75/snmp_lm75.c
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_netgraph/snmp_netgraph.3
  projects/ipfw/usr.sbin/bsnmpd/modules/snmp_wlan/snmp_wlan.3
  projects/ipfw/usr.sbin/bsnmpd/tools/bsnmptools/bsnmpget.1
  projects/ipfw/usr.sbin/btxld/btxld.8
  projects/ipfw/usr.sbin/cdcontrol/Makefile
  projects/ipfw/usr.sbin/chkgrp/chkgrp.8
  projects/ipfw/usr.sbin/chown/Makefile
  projects/ipfw/usr.sbin/config/config.5
  projects/ipfw/usr.sbin/config/config.8
  projects/ipfw/usr.sbin/cpucontrol/cpucontrol.8
  projects/ipfw/usr.sbin/cpucontrol/cpucontrol.c
  projects/ipfw/usr.sbin/cron/cron/cron.8
  projects/ipfw/usr.sbin/cron/cron/do_command.c
  projects/ipfw/usr.sbin/cron/crontab/crontab.1
  projects/ipfw/usr.sbin/cron/crontab/crontab.5
  projects/ipfw/usr.sbin/crunch/crunchgen/crunchgen.1
  projects/ipfw/usr.sbin/crunch/crunchide/Makefile
  projects/ipfw/usr.sbin/crunch/crunchide/crunchide.1
  projects/ipfw/usr.sbin/crunch/crunchide/exec_elf32.c
  projects/ipfw/usr.sbin/ctladm/ctladm.8
  projects/ipfw/usr.sbin/ctladm/ctladm.c
  projects/ipfw/usr.sbin/ctld/ctl.conf.5
  projects/ipfw/usr.sbin/ctld/ctld.8
  projects/ipfw/usr.sbin/ctld/ctld.c
  projects/ipfw/usr.sbin/ctld/ctld.h
  projects/ipfw/usr.sbin/ctld/discovery.c
  projects/ipfw/usr.sbin/ctld/kernel.c
  projects/ipfw/usr.sbin/ctld/login.c
  projects/ipfw/usr.sbin/ctld/parse.y
  projects/ipfw/usr.sbin/ctld/token.l
  projects/ipfw/usr.sbin/ctm/ctm/ctm.1
  projects/ipfw/usr.sbin/ctm/ctm/ctm.5
  projects/ipfw/usr.sbin/ctm/ctm_rmail/ctm_rmail.1
  projects/ipfw/usr.sbin/dconschat/dconschat.8
  projects/ipfw/usr.sbin/devinfo/devinfo.8
  projects/ipfw/usr.sbin/dumpcis/dumpcis.8
  projects/ipfw/usr.sbin/eeprom/eeprom.8
  projects/ipfw/usr.sbin/etcupdate/etcupdate.8
  projects/ipfw/usr.sbin/fdwrite/fdwrite.1
  projects/ipfw/usr.sbin/flowctl/flowctl.8
  projects/ipfw/usr.sbin/freebsd-update/freebsd-update.8
  projects/ipfw/usr.sbin/fwcontrol/fwcontrol.8
  projects/ipfw/usr.sbin/gpioctl/gpioctl.8
  projects/ipfw/usr.sbin/gssd/gssd.8
  projects/ipfw/usr.sbin/gstat/gstat.8
  projects/ipfw/usr.sbin/gstat/gstat.c
  projects/ipfw/usr.sbin/i2c/i2c.8
  projects/ipfw/usr.sbin/iostat/iostat.8
  projects/ipfw/usr.sbin/ipfwpcap/ipfwpcap.8
  projects/ipfw/usr.sbin/iscsid/iscsid.8
  projects/ipfw/usr.sbin/iscsid/iscsid.c
  projects/ipfw/usr.sbin/iscsid/iscsid.h
  projects/ipfw/usr.sbin/iscsid/login.c
  projects/ipfw/usr.sbin/jail/command.c
  projects/ipfw/usr.sbin/jail/config.c
  projects/ipfw/usr.sbin/jail/jail.8
  projects/ipfw/usr.sbin/kbdcontrol/kbdcontrol.1
  projects/ipfw/usr.sbin/kbdcontrol/kbdcontrol.c
  projects/ipfw/usr.sbin/kbdmap/kbdmap.1
  projects/ipfw/usr.sbin/kgzip/kgzip.8
  projects/ipfw/usr.sbin/kldxref/kldxref.8
  projects/ipfw/usr.sbin/lmcconfig/lmcconfig.8
  projects/ipfw/usr.sbin/lpr/chkprintcap/chkprintcap.8
  projects/ipfw/usr.sbin/lpr/lpc/Makefile
  projects/ipfw/usr.sbin/mailwrapper/mailwrapper.8
  projects/ipfw/usr.sbin/makefs/makefs.8
  projects/ipfw/usr.sbin/mergemaster/mergemaster.8
  projects/ipfw/usr.sbin/mergemaster/mergemaster.sh
  projects/ipfw/usr.sbin/mixer/mixer.8
  projects/ipfw/usr.sbin/mlxcontrol/mlxcontrol.8
  projects/ipfw/usr.sbin/moused/moused.8
  projects/ipfw/usr.sbin/mptable/mptable.1
  projects/ipfw/usr.sbin/nandsim/nandsim.8
  projects/ipfw/usr.sbin/ndiscvt/ndiscvt.8
  projects/ipfw/usr.sbin/ndiscvt/ndisgen.8
  projects/ipfw/usr.sbin/ndp/ndp.c
  projects/ipfw/usr.sbin/nfsd/nfsd.8
  projects/ipfw/usr.sbin/ngctl/Makefile
  projects/ipfw/usr.sbin/ngctl/ngctl.8
  projects/ipfw/usr.sbin/nghook/nghook.8
  projects/ipfw/usr.sbin/nscd/nscd.8
  projects/ipfw/usr.sbin/nscd/nscd.conf.5
  projects/ipfw/usr.sbin/ntp/config.h
  projects/ipfw/usr.sbin/ntp/ntpdc/Makefile
  projects/ipfw/usr.sbin/ntp/ntpq/Makefile
  projects/ipfw/usr.sbin/nvram/nvram.8
  projects/ipfw/usr.sbin/ofwdump/ofwdump.8
  projects/ipfw/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.8
  projects/ipfw/usr.sbin/periodic/periodic.8
  projects/ipfw/usr.sbin/pkg/Makefile
  projects/ipfw/usr.sbin/pkg/elf_tables.h
  projects/ipfw/usr.sbin/pkg/pkg.c
  projects/ipfw/usr.sbin/pmcannotate/pmcannotate.8
  projects/ipfw/usr.sbin/pmccontrol/pmccontrol.8
  projects/ipfw/usr.sbin/pmcstat/Makefile
  projects/ipfw/usr.sbin/pmcstat/pmcstat.8
  projects/ipfw/usr.sbin/portsnap/portsnap/portsnap.8
  projects/ipfw/usr.sbin/ppp/ppp.8
  projects/ipfw/usr.sbin/pppctl/Makefile
  projects/ipfw/usr.sbin/pw/pw_user.c
  projects/ipfw/usr.sbin/pw/pwupd.c
  projects/ipfw/usr.sbin/rarpd/rarpd.8
  projects/ipfw/usr.sbin/rpc.umntall/rpc.umntall.8
  projects/ipfw/usr.sbin/rpc.yppasswdd/rpc.yppasswdd.8
  projects/ipfw/usr.sbin/rpc.ypxfrd/rpc.ypxfrd.8
  projects/ipfw/usr.sbin/rtadvctl/rtadvctl.8
  projects/ipfw/usr.sbin/rtprio/rtprio.1
  projects/ipfw/usr.sbin/rwhod/rwhod.c
  projects/ipfw/usr.sbin/sa/sa.8
  projects/ipfw/usr.sbin/service/service.8
  projects/ipfw/usr.sbin/service/service.sh
  projects/ipfw/usr.sbin/sicontrol/sicontrol.8
  projects/ipfw/usr.sbin/snapinfo/snapinfo.8
  projects/ipfw/usr.sbin/sysrc/sysrc
  projects/ipfw/usr.sbin/sysrc/sysrc.8
  projects/ipfw/usr.sbin/tcpdrop/tcpdrop.8
  projects/ipfw/usr.sbin/uhsoctl/uhsoctl.c
  projects/ipfw/usr.sbin/unbound/anchor/Makefile
  projects/ipfw/usr.sbin/unbound/checkconf/Makefile
  projects/ipfw/usr.sbin/unbound/control/Makefile
  projects/ipfw/usr.sbin/unbound/daemon/Makefile
  projects/ipfw/usr.sbin/unbound/local-setup/local-unbound-setup.sh
  projects/ipfw/usr.sbin/usbdump/usbdump.8
  projects/ipfw/usr.sbin/utx/utx.8
  projects/ipfw/usr.sbin/vidcontrol/vidcontrol.1
  projects/ipfw/usr.sbin/vidcontrol/vidcontrol.c
  projects/ipfw/usr.sbin/wake/wake.8
  projects/ipfw/usr.sbin/watch/Makefile
  projects/ipfw/usr.sbin/watch/watch.8
  projects/ipfw/usr.sbin/watchdogd/watchdog.8
  projects/ipfw/usr.sbin/watchdogd/watchdogd.8
  projects/ipfw/usr.sbin/wpa/hostapd/Makefile
  projects/ipfw/usr.sbin/wpa/hostapd/hostapd.8
  projects/ipfw/usr.sbin/wpa/hostapd/hostapd.conf.5
  projects/ipfw/usr.sbin/wpa/hostapd_cli/Makefile
  projects/ipfw/usr.sbin/wpa/hostapd_cli/hostapd_cli.8
  projects/ipfw/usr.sbin/wpa/ndis_events/ndis_events.8
  projects/ipfw/usr.sbin/wpa/wpa_cli/Makefile
  projects/ipfw/usr.sbin/wpa/wpa_cli/wpa_cli.8
  projects/ipfw/usr.sbin/wpa/wpa_passphrase/Makefile
  projects/ipfw/usr.sbin/wpa/wpa_passphrase/wpa_passphrase.8
  projects/ipfw/usr.sbin/wpa/wpa_supplicant/Makefile
  projects/ipfw/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.8
  projects/ipfw/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.conf.5
  projects/ipfw/usr.sbin/yp_mkdb/yp_mkdb.8
  projects/ipfw/usr.sbin/ypbind/ypbind.8
  projects/ipfw/usr.sbin/yppush/yppush.8
  projects/ipfw/usr.sbin/ypserv/ypinit.8
  projects/ipfw/usr.sbin/ypserv/ypserv.8
  projects/ipfw/usr.sbin/zzz/zzz.8
Directory Properties:
  projects/ipfw/   (props changed)
  projects/ipfw/cddl/   (props changed)
  projects/ipfw/cddl/contrib/opensolaris/   (props changed)
  projects/ipfw/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/   (props changed)
  projects/ipfw/cddl/contrib/opensolaris/cmd/zfs/   (props changed)
  projects/ipfw/cddl/contrib/opensolaris/lib/libzfs/   (props changed)
  projects/ipfw/contrib/binutils/   (props changed)
  projects/ipfw/contrib/bmake/   (props changed)
  projects/ipfw/contrib/byacc/   (props changed)
  projects/ipfw/contrib/file/   (props changed)
  projects/ipfw/contrib/gcc/   (props changed)
  projects/ipfw/contrib/ipfilter/   (props changed)
  projects/ipfw/contrib/libc++/   (props changed)
  projects/ipfw/contrib/libstdc++/   (props changed)
  projects/ipfw/contrib/libucl/   (props changed)
  projects/ipfw/contrib/llvm/   (props changed)
  projects/ipfw/contrib/llvm/tools/clang/   (props changed)
  projects/ipfw/contrib/llvm/tools/lldb/   (props changed)
  projects/ipfw/contrib/openbsm/   (props changed)
  projects/ipfw/contrib/serf/   (props changed)
  projects/ipfw/contrib/sqlite3/   (props changed)
  projects/ipfw/contrib/subversion/   (props changed)
  projects/ipfw/contrib/tzdata/   (props changed)
  projects/ipfw/contrib/unbound/   (props changed)
  projects/ipfw/contrib/wpa/   (props changed)
  projects/ipfw/crypto/openssl/   (props changed)
  projects/ipfw/etc/   (props changed)
  projects/ipfw/gnu/lib/   (props changed)
  projects/ipfw/gnu/usr.bin/binutils/   (props changed)
  projects/ipfw/gnu/usr.bin/gdb/   (props changed)
  projects/ipfw/include/   (props changed)
  projects/ipfw/lib/libc/   (props changed)
  projects/ipfw/lib/libc/stdtime/   (props changed)
  projects/ipfw/lib/libutil/   (props changed)
  projects/ipfw/lib/libvmmapi/   (props changed)
  projects/ipfw/sbin/   (props changed)
  projects/ipfw/sbin/ipfw/   (props changed)
  projects/ipfw/share/   (props changed)
  projects/ipfw/share/man/man4/   (props changed)
  projects/ipfw/sys/   (props changed)
  projects/ipfw/sys/amd64/vmm/   (props changed)
  projects/ipfw/sys/boot/   (props changed)
  projects/ipfw/sys/cddl/contrib/opensolaris/   (props changed)
  projects/ipfw/sys/conf/   (props changed)
  projects/ipfw/sys/contrib/dev/acpica/   (props changed)
  projects/ipfw/sys/contrib/ipfilter/   (props changed)
  projects/ipfw/sys/dev/usb/controller/   (props changed)
  projects/ipfw/sys/gnu/dts/   (props changed)
  projects/ipfw/sys/gnu/dts/include/dt-bindings/clock/imx6sl-clock.h   (props changed)
  projects/ipfw/usr.bin/calendar/   (props changed)
  projects/ipfw/usr.bin/mkimg/   (props changed)
  projects/ipfw/usr.bin/procstat/   (props changed)
  projects/ipfw/usr.sbin/bhyve/   (props changed)
  projects/ipfw/usr.sbin/bhyvectl/   (props changed)
  projects/ipfw/usr.sbin/bhyveload/   (props changed)
  projects/ipfw/usr.sbin/bsdconfig/share/packages/categories.subr   (props changed)
  projects/ipfw/usr.sbin/jail/   (props changed)
  projects/ipfw/usr.sbin/ndiscvt/   (props changed)
  projects/ipfw/usr.sbin/rtadvctl/   (props changed)

Modified: projects/ipfw/MAINTAINERS
==============================================================================
--- projects/ipfw/MAINTAINERS	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/MAINTAINERS	Wed Aug 13 16:20:41 2014	(r269947)
@@ -20,7 +20,7 @@ It is not a registry of 'turf' or privat
 
 subsystem	login	notes
 -----------------------------
-kqueue		jmg	Pre-commit review requested.
+kqueue		jmg	Pre-commit review requested.  Documentation Required.
 libc/posix1e	rwatson	Pre-commit review requested.
 POSIX.1e ACLs	rwatson	Pre-commit review requested.
 UFS EAs		rwatson	Pre-commit review requested.
@@ -102,13 +102,12 @@ linux emul	emulation	Please discuss chan
 bs{diff,patch}	cperciva	Pre-commit review requested.
 portsnap	cperciva	Pre-commit review requested.
 freebsd-update	cperciva	Pre-commit review requested.
-openssl		benl		Pre-commit review requested.
+openssl		benl,jkim	Pre-commit review requested.
 sys/netgraph/bluetooth	emax	Pre-commit review preferred.
 lib/libbluetooth	emax	Pre-commit review preferred.
 lib/libsdp		emax	Pre-commit review preferred.
 usr.bin/bluetooth	emax	Pre-commit review preferred.
 usr.sbin/bluetooth	emax	Pre-commit review preferred.
-gnu/usr.bin/send-pr	bugmaster	Pre-commit review requested.
 *env(3)		secteam	Due to the problematic security history of this
 			code, please have patches reviewed by secteam.
 share/zoneinfo		edwin	Heads-up appreciated, since our data is coming
@@ -133,3 +132,4 @@ release/release.sh	gjb	Pre-commit review
 				requested.
 nanobsd		imp	Pre-commit review requested for coordination.
 vmm(4)		neel,grehan	Pre-commit review requested.
+opencrypto	jmg	Pre-commit review requested.  Documentation Required.

Modified: projects/ipfw/Makefile
==============================================================================
--- projects/ipfw/Makefile	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/Makefile	Wed Aug 13 16:20:41 2014	(r269947)
@@ -36,6 +36,7 @@
 #                       specified with XDEV and XDEV_ARCH.
 # xdev-build          - Build cross-development tools.
 # xdev-install        - Install cross-development tools.
+# xdev-links          - Create traditional links in /usr/bin for cc, etc
 # 
 # "quick" way to test all kernel builds:
 # 	_jflag=`sysctl -n hw.ncpu`
@@ -82,7 +83,7 @@
 #
 # See src/UPDATING `COMMON ITEMS' for more complete information.
 #
-# If TARGET=machine (e.g. ia64, sparc64, ...) is specified you can
+# If TARGET=machine (e.g. powerpc, sparc64, ...) is specified you can
 # cross build world for other machine types using the buildworld target,
 # and once the world is built you can cross build a kernel using the
 # buildkernel target.
@@ -110,6 +111,7 @@ TGTS=	all all-man buildenv buildenvvars 
 	_worldtmp _legacy _bootstrap-tools _cleanobj _obj \
 	_build-tools _cross-tools _includes _libraries _depend \
 	build32 builddtb distribute32 install32 xdev xdev-build xdev-install \
+	xdev-links \
 
 TGTS+=	${SUBDIR_TARGETS}
 
@@ -172,6 +174,13 @@ _TARGET=${TARGET}
 .if defined(TARGET_ARCH) && !defined(_TARGET_ARCH)
 _TARGET_ARCH=${TARGET_ARCH}
 .endif
+# for historical compatibility for xdev targets
+.if defined(XDEV)
+_TARGET=	${XDEV}
+.endif
+.if defined(XDEV_ARCH)
+_TARGET_ARCH=	${XDEV_ARCH}
+.endif
 # Otherwise, default to current machine type and architecture.
 _TARGET?=	${MACHINE}
 _TARGET_ARCH?=	${MACHINE_ARCH}
@@ -329,6 +338,7 @@ MMAKEENV=	MAKEOBJDIRPREFIX=${MYMAKE:H} \
 MMAKE=		${MMAKEENV} ${MAKE} \
 		-DNO_MAN -DNO_SHARED \
 		-DNO_CPU_CFLAGS -DNO_WERROR \
+		MK_TESTS=no \
 		DESTDIR= PROGNAME=${MYMAKE:T}
 
 bmake: .PHONY
@@ -361,7 +371,7 @@ kernel-toolchains:
 # existing system is.
 #
 .if make(universe) || make(universe_kernels) || make(tinderbox) || make(targets)
-TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64
+TARGETS?=amd64 arm i386 mips pc98 powerpc sparc64
 TARGET_ARCHES_arm?=	arm armeb armv6 armv6hf
 TARGET_ARCHES_mips?=	mipsel mips mips64el mips64 mipsn32
 TARGET_ARCHES_powerpc?=	powerpc powerpc64

Modified: projects/ipfw/Makefile.inc1
==============================================================================
--- projects/ipfw/Makefile.inc1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/Makefile.inc1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -17,6 +17,7 @@
 #	-DNO_DOCUPDATE do not update doc in ${MAKE} update
 #	-DWITHOUT_CTF do not run the DTrace CTF conversion tools on built objects
 #	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
+#	LOCAL_ITOOLS="list of tools" to add additional tools to the ITOOLS list
 #	LOCAL_LIB_DIRS="list of dirs" to add additional dirs to libraries target
 #	LOCAL_MTREE="list of mtree files" to process to allow local directories
 #	    to be created before files are installed
@@ -139,7 +140,7 @@ SRCRELDATE!=	awk '/^\#define[[:space:]]*
 VERSION=	FreeBSD ${REVISION}-${BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDATE}
 .endif
 
-KNOWN_ARCHES?=	amd64 arm armeb/arm armv6/arm armv6hf/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64
+KNOWN_ARCHES?=	amd64 arm armeb/arm armv6/arm armv6hf/arm i386 i386/pc98 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64
 .if ${TARGET} == ${TARGET_ARCH}
 _t=		${TARGET}
 .else
@@ -394,7 +395,8 @@ LIB32WMAKEENV+=	MAKEOBJDIRPREFIX=${OBJTR
 		PATH=${TMPPATH} \
 		LIBDIR=/usr/lib32 \
 		SHLIBDIR=/usr/lib32 \
-		LIBPRIVATEDIR=/usr/lib32/private
+		LIBPRIVATEDIR=/usr/lib32/private \
+		DTRACE="${DTRACE} -32"
 LIB32WMAKEFLAGS+= CC="${XCC} ${LIB32FLAGS}" \
 		CXX="${XCXX} ${LIB32FLAGS}" \
 		DESTDIR=${LIB32TMP} \
@@ -756,7 +758,8 @@ _zoneinfo=	zic tzsetup
 ITOOLS=	[ awk cap_mkdb cat chflags chmod chown \
 	date echo egrep find grep id install ${_install-info} \
 	ln lockf make mkdir mtree mv pwd_mkdb \
-	rm sed services_mkdb sh sysctl test true uname wc ${_zoneinfo}
+	rm sed services_mkdb sh sysctl test true uname wc ${_zoneinfo} \
+	${LOCAL_ITOOLS}
 
 #
 # distributeworld
@@ -780,6 +783,11 @@ EXTRA_DISTRIBUTIONS+=	lib32
 EXTRA_DISTRIBUTIONS+=	tests
 .endif
 
+DEBUG_DISTRIBUTIONS=
+.if ${MK_DEBUG_FILES} != "no"
+DEBUG_DISTRIBUTIONS+=	base ${EXTRA_DISTRIBUTIONS:S,doc,,}
+.endif
+
 MTREE_MAGIC?=	mtree 2.0
 
 distributeworld installworld: _installcheck_world
@@ -856,8 +864,7 @@ distributeworld installworld: _installch
 	awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \
 	${DESTDIR}/${DISTDIR}/${dist}.meta
 .endfor
-.if ${MK_DEBUG_FILES} != "no"
-. for dist in base ${EXTRA_DISTRIBUTIONS}
+.for dist in ${DEBUG_DISTRIBUTIONS}
 	@# For each file that exists in this dist, print the corresponding
 	@# line from the METALOG.  This relies on the fact that
 	@# a line containing only the filename will sort immediatly before
@@ -866,8 +873,7 @@ distributeworld installworld: _installch
 	find ./${dist}/usr/lib/debug | sort -u ${METALOG} - | \
 	awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \
 	${DESTDIR}/${DISTDIR}/${dist}.debug.meta
-. endfor
-.endif
+.endfor
 .endif
 .endif
 
@@ -885,19 +891,17 @@ packageworld:
 .endif
 .endfor
 
-.if ${MK_DEBUG_FILES} != "no"
-. for dist in base ${EXTRA_DISTRIBUTIONS}
-.  if defined(NO_ROOT)
+.for dist in ${DEBUG_DISTRIBUTIONS}
+. if defined(NO_ROOT)
 	${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \
-	    tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.debug.txz \
+	    tar cvJf ${DESTDIR}/${DISTDIR}/${dist}-dbg.txz \
 	    @${DESTDIR}/${DISTDIR}/${dist}.debug.meta
-.  else
+. else
 	${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \
-	    tar cvJfL ${DESTDIR}/${DISTDIR}/${dist}.debug.txz \
+	    tar cvJfL ${DESTDIR}/${DISTDIR}/${dist}-dbg.txz \
 	    usr/lib/debug
-.  endif
-. endfor
-.endif
+. endif
+.endfor
 
 #
 # reinstall
@@ -1196,16 +1200,17 @@ _gperf=		gnu/usr.bin/gperf
 _groff=		gnu/usr.bin/groff
 .endif
 
-.if ${BOOTSTRAPPING} < 900002
-_sed=		usr.bin/sed
+.if ${MK_VT} != "no"
+_vtfontcvt=	usr.bin/vtfontcvt
 .endif
 
-.if ${BOOTSTRAPPING} < 900006
-_lex=		usr.bin/lex
+.if ${BOOTSTRAPPING} < 900002
+_sed=		usr.bin/sed
 .endif
 
 .if ${BOOTSTRAPPING} < 1000002
-_m4=		usr.bin/m4
+_m4=		lib/libohash \
+		usr.bin/m4
 .endif
 
 .if ${BOOTSTRAPPING} < 1000013
@@ -1226,6 +1231,10 @@ _nmtree=	lib/libnetbsd \
 _cat=		bin/cat
 .endif
 
+.if ${BOOTSTRAPPING} < 1000033
+_lex=		usr.bin/lex
+.endif
+
 .if ${BOOTSTRAPPING} >= 900040 && ${BOOTSTRAPPING} < 900041
 _awk=		usr.bin/awk
 .endif
@@ -1295,7 +1304,8 @@ bootstrap-tools: .MAKE
     ${_gensnmptree} \
     usr.sbin/config \
     ${_crunch} \
-    ${_nmtree}
+    ${_nmtree} \
+    ${_vtfontcvt}
 	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
 		cd ${.CURDIR}/${_tool} && \
 		${MAKE} DIRPRFX=${_tool}/ obj && \
@@ -1358,9 +1368,6 @@ kernel-tools: .MAKE
 #
 # cross-tools: Build cross-building tools
 #
-.if !defined(TARGET_ARCH) && defined(XDEV_ARCH)
-TARGET_ARCH=	${XDEV_ARCH}
-.endif
 .if ${TARGET_ARCH} != ${MACHINE_ARCH}
 .if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
 _btxld=		usr.sbin/btxld
@@ -1401,7 +1408,8 @@ cross-tools: .MAKE
     usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
     ${_btxld} \
     ${_crunchide} \
-    ${_kgzip}
+    ${_kgzip} \
+    sys/boot/usb/tools
 	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
 		cd ${.CURDIR}/${_tool} && \
 		${MAKE} DIRPRFX=${_tool}/ obj && \
@@ -1486,9 +1494,10 @@ _prebuild_libs=	${_kerberos5_lib_libasn1
 		lib/libutil lib/libpjdlog ${_lib_libypclnt} lib/libz lib/msun \
 		${_secure_lib_libcrypto} ${_lib_libldns} \
 		${_secure_lib_libssh} ${_secure_lib_libssl}
-.if ${MK_GNUCXX} != "no" && ${MK_CXX} != "no"
+.if ${MK_GNUCXX} != "no"
 _prebuild_libs+= gnu/lib/libstdc++ gnu/lib/libsupc++
 gnu/lib/libstdc++__L: lib/msun__L
+gnu/lib/libsupc++__L: gnu/lib/libstdc++__L
 .endif
 
 .if defined(WITH_ATF) || ${MK_TESTS} != "no"
@@ -1845,9 +1854,9 @@ builddtb:
 
 ###############
 
-.if defined(XDEV) && defined(XDEV_ARCH)
+.if defined(TARGET) && defined(TARGET_ARCH)
 
-.if ${XDEV} == ${MACHINE} && ${XDEV_ARCH} == ${MACHINE_ARCH}
+.if ${TARGET} == ${MACHINE} && ${TARGET_ARCH} == ${MACHINE_ARCH}
 XDEV_CPUTYPE?=${CPUTYPE}
 .else
 XDEV_CPUTYPE?=${TARGET_CPUTYPE}
@@ -1856,10 +1865,10 @@ XDEV_CPUTYPE?=${TARGET_CPUTYPE}
 NOFUN=-DNO_FSCHG MK_HTML=no MK_INFO=no -DNO_LINT \
 	MK_MAN=no MK_NLS=no MK_PROFILE=no \
 	MK_KERBEROS=no MK_RESCUE=no MK_TESTS=no MK_WARNS=no \
-	TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} \
+	TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
 	CPUTYPE=${XDEV_CPUTYPE}
 
-XDDIR=${XDEV_ARCH}-freebsd
+XDDIR=${TARGET_ARCH}-freebsd
 XDTP?=/usr/${XDDIR}
 .if ${XDTP:N/*}
 .error XDTP variable should be an absolute path
@@ -1875,7 +1884,7 @@ CD2CFLAGS=-isystem ${XDDESTDIR}/usr/incl
 	-B${XDDESTDIR}/usr/bin -B${XDDESTDIR}/usr/lib
 CD2ENV=${CDENV} CC="${CC} ${CD2CFLAGS}" CXX="${CXX} ${CD2CFLAGS}" \
 	CPP="${CPP} ${CD2CFLAGS}" \
-	MACHINE=${XDEV} MACHINE_ARCH=${XDEV_ARCH}
+	MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH}
 
 CDTMP=	${MAKEOBJDIRPREFIX}/${XDDIR}/${.CURDIR}/tmp
 CDMAKE=${CDENV} PATH=${CDTMP}/usr/bin:${PATH} ${MAKE} ${NOFUN}
@@ -1885,7 +1894,7 @@ XDDESTDIR=${DESTDIR}/${XDTP}
 OSREL!= uname -r | sed -e 's/[-(].*//'
 .endif
 
-.ORDER: xdev-build xdev-install
+.ORDER: xdev-build xdev-install xdev-links
 xdev: xdev-build xdev-install
 
 .ORDER: _xb-worldtmp _xb-bootstrap-tools _xb-build-tools _xb-cross-tools
@@ -1934,9 +1943,13 @@ _xi-mtree:
 	    -p ${XDDESTDIR}/usr >/dev/null
 	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
 	    -p ${XDDESTDIR}/usr/include >/dev/null
+.if ${MK_TESTS} != "no"
+	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
+	    -p ${XDDESTDIR}/usr >/dev/null
+.endif
 
-.ORDER: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links
-xdev-install: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links
+.ORDER: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries
+xdev-install: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries
 
 _xi-cross-tools:
 	@echo "_xi-cross-tools"
@@ -1959,9 +1972,9 @@ _xi-libraries:
 	${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 libraries \
 		DESTDIR=${XDDESTDIR}
 
-_xi-links:
+xdev-links:
 	${_+_}cd ${XDDESTDIR}/usr/bin; \
-       mkdir -p ../../../../usr/bin; \
+	mkdir -p ../../../../usr/bin; \
 		for i in *; do \
 			ln -sf ../../${XDTP}/usr/bin/$$i \
 			    ../../../../usr/bin/${XDDIR}-$$i; \
@@ -1969,6 +1982,6 @@ _xi-links:
 			    ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \
 		done
 .else
-xdev xdev-build xdev-install:
-	@echo "*** Error: Both XDEV and XDEV_ARCH must be defined for \"${.TARGET}\" target"
+xdev xdev-build xdev-install xdev-links:
+	@echo "*** Error: Both TARGET and TARGET_ARCH must be defined for \"${.TARGET}\" target"
 .endif

Modified: projects/ipfw/ObsoleteFiles.inc
==============================================================================
--- projects/ipfw/ObsoleteFiles.inc	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/ObsoleteFiles.inc	Wed Aug 13 16:20:41 2014	(r269947)
@@ -38,6 +38,94 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 20140811: otp-sha renamed to otp-sha1
+OLD_FILES+=usr/bin/otp-sha
+OLD_FILES+=usr/share/man/man1/otp-sha.1.gz
+# 20140807: Remove private lib files that should not be installed.
+OLD_FILES+=usr/lib/private/libatf-c.a
+OLD_FILES+=usr/lib/private/libatf-c.so
+OLD_FILES+=usr/lib/private/libatf-c_p.a
+OLD_FILES+=usr/lib/private/libatf-c++.a
+OLD_FILES+=usr/lib/private/libatf-c++.so
+OLD_FILES+=usr/lib/private/libatf-c++_p.a
+OLD_FILES+=usr/lib/private/libbsdstat.a
+OLD_FILES+=usr/lib/private/libbsdstat.so
+OLD_FILES+=usr/lib/private/libbsdstat_p.a
+OLD_FILES+=usr/lib/private/libheimipcc.a
+OLD_FILES+=usr/lib/private/libheimipcc.so
+OLD_FILES+=usr/lib/private/libheimipcc_p.a
+OLD_FILES+=usr/lib/private/libheimipcs.a
+OLD_FILES+=usr/lib/private/libheimipcs.so
+OLD_FILES+=usr/lib/private/libheimipcs_p.a
+OLD_FILES+=usr/lib/private/libldns.a
+OLD_FILES+=usr/lib/private/libldns.so
+OLD_FILES+=usr/lib/private/libldns_p.a
+OLD_FILES+=usr/lib/private/libssh.a
+OLD_FILES+=usr/lib/private/libssh.so
+OLD_FILES+=usr/lib/private/libssh.p.a
+OLD_FILES+=usr/lib/private/libunbound.a
+OLD_FILES+=usr/lib/private/libunbound.so
+OLD_FILES+=usr/lib/private/libunbound_p.a
+OLD_FILES+=usr/lib/private/libucl.a
+OLD_FILES+=usr/lib/private/libucl.so
+OLD_FILES+=usr/lib/private/libucl_p.a
+# 20140803: Remove an obsolete man page
+OLD_FILES+=usr/share/man/man9/pmap_change_wiring.9.gz
+# 20140728: libsbuf restored to old version.
+OLD_LIBS+=lib/libsbuf.so.7
+# 20140728: Remove an obsolete man page
+OLD_FILES+=usr/share/man/man9/VOP_GETVOBJECT.9.gz
+OLD_FILES+=usr/share/man/man9/VOP_CREATEVOBJECT.9.gz
+OLD_FILES+=usr/share/man/man9/VOP_DESTROYVOBJECT.9.gz
+# 20140723: renamed to PCBGROUP.9
+OLD_FILES+=usr/share/man/man9/PCBGROUPS.9.gz
+# 20140718: Remove obsolete man pages
+OLD_FILES+=usr/share/man/man9/zero_copy.9.gz
+OLD_FILES+=usr/share/man/man9/zero_copy_sockets.9.gz
+# 20140718: Remove an obsolete man page
+OLD_FILES+=usr/share/man/man9/pmap_page_protect.9.gz
+# 20140717: Remove an obsolete man page
+OLD_FILES+=usr/share/man/man9/pmap_clear_reference.9.gz
+# 20140716: Remove an incorrectly named man page
+OLD_FILES+=usr/share/man/man9/pmap_ts_modified.9.gz
+# 20140712: Removal of bsd.dtrace.mk
+OLD_FILES+=usr/share/mk/bsd.dtrace.mk
+# 20140705: turn libreadline into an internal lib
+OLD_LIBS+=lib/libreadline.so.8
+OLD_FILES+=usr/lib/libreadline.a
+OLD_FILES+=usr/lib/libreadline_p.a
+OLD_FILES+=usr/lib/libreadline.so
+OLD_FILES+=usr/lib/libhistory.a
+OLD_FILES+=usr/lib/libhistory_p.a
+OLD_FILES+=usr/lib/libhistory.so
+OLD_LIBS+=usr/lib/libhistory.so.8
+OLD_FILES+=usr/include/readline/chardefs.h
+OLD_FILES+=usr/include/readline/history.h
+OLD_FILES+=usr/include/readline/keymaps.h
+OLD_FILES+=usr/include/readline/readline.h
+OLD_FILES+=usr/include/readline/rlconf.h
+OLD_FILES+=usr/include/readline/rlstdc.h
+OLD_FILES+=usr/include/readline/rltypedefs.h
+OLD_FILES+=usr/include/readline/rltypedefs.h
+OLD_FILES+=usr/share/info/readline.info.gz
+OLD_FILES+=usr/share/man/man3/readline.3.gz
+# 20140625: csup removal
+OLD_FILES+=usr/bin/csup
+OLD_FILES+=usr/bin/cpasswd
+OLD_FILES+=usr/share/man/man1/csup.1.gz
+OLD_FILES+=usr/share/man/man1/cpasswd.1.gz
+OLD_FILES+=usr/share/examples/cvsup/README
+OLD_FILES+=usr/share/examples/cvsup/cvs-supfile
+OLD_FILES+=usr/share/examples/cvsup/stable-supfile
+OLD_FILES+=usr/share/examples/cvsup/standard-supfile
+OLD_DIRS+=usr/share/examples/cvsup
+# 20140614: send-pr removal
+OLD_FILES+=usr/bin/sendbug
+OLD_FILES+=usr/share/info/send-pr.info.gz
+OLD_FILES+=usr/share/man/man1/send-pr.1.gz
+OLD_FILES+=usr/share/man/man1/sendbug.1.gz
+OLD_FILES+=etc/gnats/freefall
+OLD_DIRS+=etc/gnats
 # 20140512: new clang import which bumps version from 3.4 to 3.4.1.
 OLD_FILES+=usr/include/clang/3.4/__wmmintrin_aes.h
 OLD_FILES+=usr/include/clang/3.4/__wmmintrin_pclmul.h
@@ -544,6 +632,7 @@ OLD_FILES+=usr/share/man/man9/vfs_mount.
 OLD_FILES+=usr/bin/cvs
 OLD_FILES+=usr/bin/cvsbug
 OLD_FILES+=usr/share/doc/psd/28.cvs/paper.ascii.gz
+OLD_FILES+=usr/share/doc/psd/28.cvs/paper.ps.gz
 OLD_DIRS+=usr/share/doc/psd/28.cvs
 OLD_FILES+=usr/share/examples/cvs/contrib/README
 OLD_FILES+=usr/share/examples/cvs/contrib/clmerge
@@ -1164,9 +1253,6 @@ OLD_FILES+=usr/include/xmmintrin.h
 .if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" || ${TARGET_ARCH} == "arm"
 OLD_FILES+=usr/include/mmintrin.h
 .endif
-.if ${TARGET_ARCH} == "ia64"
-OLD_FILES+=usr/include/ia64intrin.h
-.endif
 .if ${TARGET_ARCH} == "powerpc"
 OLD_FILES+=usr/include/altivec.h
 OLD_FILES+=usr/include/ppc-asm.h
@@ -1184,10 +1270,6 @@ OLD_FILES+=usr/include/machine/rm7000.h
 OLD_FILES+=usr/include/machine/defs.h
 OLD_FILES+=usr/include/machine/queue.h
 .endif
-# 20100326: [ia64] removed <machine/nexusvar.h>
-.if ${TARGET_ARCH} == "ia64"
-OLD_FILES+=usr/include/machine/nexusvar.h
-.endif
 # 20100326: gcpio removal
 OLD_FILES+=usr/bin/gcpio
 OLD_FILES+=usr/share/info/cpio.info.gz
@@ -1201,11 +1283,6 @@ OLD_FILES+=usr/share/man/man3/regexp.3.g
 OLD_FILES+=usr/share/man/man3/regsub.3.gz
 # 20100303: actual removal of utmp.h
 OLD_FILES+=usr/include/utmp.h
-# 20100227: [ia64] removed <machine/sapicreg.h> and <machine/sapicvar.h>
-.if ${TARGET_ARCH} == "ia64"
-OLD_FILES+=usr/include/machine/sapicreg.h
-OLD_FILES+=usr/include/machine/sapicvar.h
-.endif
 # 20100208: man pages moved
 .if ${TARGET_ARCH} == "i386"
 OLD_FILES+=usr/share/man/man4/i386/alpm.4.gz
@@ -1898,14 +1975,6 @@ OLD_FILES+=usr/share/man/man8/arlcontrol
 OLD_FILES+=sbin/sunlabel
 OLD_FILES+=usr/share/man/man8/sunlabel.8.gz
 .endif
-# 20080703: bsdlabel & fdisk removed on ia64
-.if ${TARGET_ARCH} == "ia64"
-OLD_FILES+=sbin/bsdlabel
-OLD_FILES+=usr/share/man/man8/bsdlabel.8.gz
-OLD_FILES+=usr/share/man/man8/disklabel.8.gz
-OLD_FILES+=sbin/fdisk
-OLD_FILES+=usr/share/man/man8/fdisk.8.gz
-.endif
 # 20080701: wpa_supplicant.conf moved to share/examples/etc/
 OLD_FILES+=usr/share/examples/wpa_supplicant/wpa_supplicant.conf
 OLD_DIRS+=usr/share/examples/wpa_supplicant
@@ -2114,12 +2183,6 @@ OLD_FILES+=usr/include/sys/_elf_solaris.
 OLD_FILES+=usr/share/man/man3/pmc_x86_get_msr.3.gz
 # 20071108: Removed very crunch OLDCARD support file
 OLD_FILES+=etc/defaults/pccard.conf
-# 20071104: Removed bsdlabel, fdisk and gpt from rescue on ia64.
-.if ${TARGET_ARCH} == "ia64"
-OLD_FILES+=rescue/bsdlabel
-OLD_FILES+=rescue/fdisk
-OLD_FILES+=rescue/gpt
-.endif
 # 20071025: rc.d/nfslocking superceeded by rc.d/lockd and rc.d/statd
 OLD_FILES+=etc/rc.d/nfslocking
 # 20070930: rename of cached to nscd
@@ -2780,10 +2843,6 @@ OLD_FILES+=usr/share/man/man8/mount_std.
 OLD_FILES+=usr/share/man/man4/uhidev.4.gz
 # 20061106: archive_write_prepare.3 removed
 OLD_FILES+=usr/share/man/man3/archive_write_prepare.3.gz
-.if ${TARGET_ARCH} == "ia64"
-# 20061104: skiload.help removed
-OLD_FILES+=boot/skiload.help
-.endif
 # 20061018: pccardc removed
 OLD_FILES+=usr/sbin/pccardc usr/share/man/man8/pccardc.8.gz
 # 20060930: demangle.h from contrib/libstdc++/include/ext/

Modified: projects/ipfw/UPDATING
==============================================================================
--- projects/ipfw/UPDATING	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/UPDATING	Wed Aug 13 16:20:41 2014	(r269947)
@@ -1,4 +1,4 @@
-Updating Information for FreeBSD current users
+Updating Information for FreeBSD current users.
 
 This file is maintained and copyrighted by M. Warner Losh <imp@freebsd.org>.
 See end of file for further details.  For commonly done items, please see the
@@ -31,6 +31,59 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
 
+20140729:
+	The ofwfb driver, used to provide a graphics console on PowerPC when
+	using vt(4), no longer allows mmap() of all of physical memory. This
+	will prevent Xorg on PowerPC with some ATI graphics cards from
+	initializing properly unless x11-servers/xorg-server is updated to
+	1.12.4_8 or newer.
+
+20140723:
+	The xdev targets have been converted to using TARGET and
+	TARGET_ARCH instead of XDEV and XDEV_ARCH.
+
+20140719:
+	The default unbound configuration has been modified to address
+	issues with reverse lookups on networks that use private
+	address ranges.  If you use the local_unbound service, run
+	"service local_unbound setup" as root to regenerate your
+	configuration, then "service local_unbound reload" to load the
+	new configuration.
+
+20140709:
+	The GNU texinfo and GNU info pages are not built and installed
+	anymore, WITH_INFO knob has been added to allow to built and install
+	them again.
+
+20140708:
+	The GNU readline library is now an INTERNALLIB - that is, it is
+	statically linked into consumers (GDB and variants) in the base
+	system, and the shared library is no longer installed.  The
+	devel/readline port is available for third party software that
+	requires readline.
+
+20140702:
+	The Itanium architecture (ia64) has been removed from the list of
+	known architectures. This is the first step in the removal of the
+	architecture.
+
+20140701:
+	Commit r268115 has added NFSv4.1 server support, merged from
+	projects/nfsv4.1-server.  Since this includes changes to the
+	internal interfaces between the NFS related modules, a full
+	build of the kernel and modules will be necessary.
+	__FreeBSD_version has been bumped.
+
+20140629:
+	The WITHOUT_VT_SUPPORT kernel config knob has been renamed
+	WITHOUT_VT.  (The other _SUPPORT knobs have a consistent meaning
+	which differs from the behaviour controlled by this knob.)
+
+20140619:
+	Maximal length of the serial number in CTL was increased from 16 to
+	64 chars, that breaks ABI.  All CTL-related tools, such as ctladm
+	and ctld, need to be rebuilt to work with a new kernel.
+
 20140606:
 	The libatf-c and libatf-c++ major versions were downgraded to 0 and
 	1 respectively to match the upstream numbers.  They were out of
@@ -71,7 +124,8 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
 	Although this has survived make universe and some upgrade scenarios,
 	other upgrade scenarios may have broken. At least one form of
 	temporary breakage was fixed with MAKESYSPATH settings for buildworld
-	as well...
+	as well... In cases where MAKESYSPATH isn't working with this
+	setting, you'll need to set it to the full path to your tree.
 
 	One side effect of all this cleaning up is that bsd.compiler.mk
 	is no longer implicitly included by bsd.own.mk. If you wish to

Modified: projects/ipfw/bin/chio/chio.1
==============================================================================
--- projects/ipfw/bin/chio/chio.1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/chio/chio.1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -151,7 +151,6 @@ This command will query the status of th
 will move it to the element specified in its source attribute.
 This is a convenient way to return media from a drive or portal
 to its previous element in the changer.
-.Pp
 .It Ic position Xo
 .Ar <to ET> <to EU>
 .Op Cm inv
@@ -173,7 +172,6 @@ Report which picker unit the changer is 
 .Xc
 Configure the changer to use picker
 .Ar <unit> .
-.Pp
 .It Ic ielem Xo
 .Op Ar <timeout>
 .Xc
@@ -292,13 +290,11 @@ Configure the changer to use picker 2 (t
 The
 .Nm
 program and SCSI changer driver were written by
-.An Jason R. Thorpe Aq thorpej@and.com
+.An Jason R. Thorpe Aq Mt thorpej@and.com
 for And Communications,
 .Pa http://www.and.com/ .
 .Pp
 Additional work by
-.An Hans Huebner
-.Aq hans@artcom.de
+.An Hans Huebner Aq Mt hans@artcom.de
 and
-.An Steve Gunn
-.Aq csg@waterspout.com .
+.An Steve Gunn Aq Mt csg@waterspout.com .

Modified: projects/ipfw/bin/csh/Makefile
==============================================================================
--- projects/ipfw/bin/csh/Makefile	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/csh/Makefile	Wed Aug 13 16:20:41 2014	(r269947)
@@ -40,8 +40,8 @@ MLINKS= csh.1 tcsh.1
 # utilities of the same name are handled with the associated manpage,
 # builtin.1 in share/man/man1/.
 
-DPADD=	${LIBTERMCAP} ${LIBCRYPT}
-LDADD=	-ltermcap -lcrypt
+DPADD=	${LIBTERMCAPW} ${LIBCRYPT}
+LDADD=	-ltermcapw -lcrypt
 
 LINKS=	${BINDIR}/csh ${BINDIR}/tcsh
 

Modified: projects/ipfw/bin/date/tests/Makefile
==============================================================================
--- projects/ipfw/bin/date/tests/Makefile	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/date/tests/Makefile	Wed Aug 13 16:20:41 2014	(r269947)
@@ -4,6 +4,6 @@
 
 TESTSDIR=	${TESTSBASE}/bin/date
 
-TAP_TESTS_SH=	legacy_test
+ATF_TESTS_SH=	format_string_test
 
 .include <bsd.test.mk>

Copied: projects/ipfw/bin/date/tests/format_string_test.sh (from r269943, head/bin/date/tests/format_string_test.sh)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/ipfw/bin/date/tests/format_string_test.sh	Wed Aug 13 16:20:41 2014	(r269947, copy of r269943, head/bin/date/tests/format_string_test.sh)
@@ -0,0 +1,92 @@
+#
+# Regression tests for date(1)
+#
+# Submitted by Edwin Groothuis <edwin@FreeBSD.org>
+#
+# $FreeBSD$
+#
+
+#
+# These two date/times have been chosen carefully -- they
+# create both the single digit and double/multidigit version of
+# the values.
+#
+# To create a new one, make sure you are using the UTC timezone!
+#
+
+TEST1=3222243		# 1970-02-07 07:04:03
+TEST2=1005600000	# 2001-11-12 21:11:12
+
+check()
+{
+	local format_string exp_output_1 exp_output_2
+
+	format_string=${1}
+	exp_output_1=${2}
+	exp_output_2=${3}
+
+	atf_check -o "inline:${exp_output_1}\n" \
+	    date -r ${TEST1} +%${format_string}
+	atf_check -o "inline:${exp_output_2}\n" \
+	    date -r ${TEST2} +%${format_string}
+}
+
+format_string_test()
+{
+	local desc exp_output_1 exp_output_2 flag
+
+	desc=${1}
+	flag=${2}
+	exp_output_1=${3}
+	exp_output_2=${4}
+
+	atf_test_case ${desc}_test
+	eval "
+${desc}_test_body() {
+	check ${flag} '${exp_output_1}' '${exp_output_2}';
+}"
+	atf_add_test_case ${desc}_test
+}
+
+atf_init_test_cases()
+{
+	format_string_test A A Saturday Monday
+	format_string_test a a Sat Mon
+	format_string_test B B February November
+	format_string_test b b Feb Nov
+	format_string_test C C 19 20
+	format_string_test c c "Sat Feb  7 07:04:03 1970" "Mon Nov 12 21:20:00 2001"
+	format_string_test D D 02/07/70 11/12/01
+	format_string_test d d 07 12
+	format_string_test e e " 7" 12
+	format_string_test F F "1970-02-07" "2001-11-12"
+	format_string_test G G 1970 2001
+	format_string_test g g 70 01
+	format_string_test H H 07 21
+	format_string_test h h Feb Nov
+	format_string_test I I 07 09
+	format_string_test j j 038 316
+	format_string_test k k " 7" 21
+	format_string_test l l " 7" " 9"
+	format_string_test M M 04 20
+	format_string_test m m 02 11
+	format_string_test p p AM PM
+	format_string_test R R 07:04 21:20
+	format_string_test r r "07:04:03 AM" "09:20:00 PM"
+	format_string_test S S 03 00
+	format_string_test s s ${TEST1} ${TEST2}
+	format_string_test U U 05 45
+	format_string_test u u 6 1
+	format_string_test V V 06 46
+	format_string_test v v " 7-Feb-1970" "12-Nov-2001"
+	format_string_test W W 05 46
+	format_string_test w w 6 1
+	format_string_test X X "07:04:03" "21:20:00"
+	format_string_test x x "02/07/70" "11/12/01"
+	format_string_test Y Y 1970 2001
+	format_string_test y y 70 01
+	format_string_test Z Z UTC UTC
+	format_string_test z z +0000 +0000
+	format_string_test percent % % %
+	format_string_test plus + "Sat Feb  7 07:04:03 UTC 1970" "Mon Nov 12 21:20:00 UTC 2001"
+}

Modified: projects/ipfw/bin/freebsd-version/freebsd-version.1
==============================================================================
--- projects/ipfw/bin/freebsd-version/freebsd-version.1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/freebsd-version/freebsd-version.1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -121,4 +121,4 @@ command appeared in
 The
 .Nm
 utility and this manual page were written by
-.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .

Modified: projects/ipfw/bin/ls/Makefile
==============================================================================
--- projects/ipfw/bin/ls/Makefile	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/ls/Makefile	Wed Aug 13 16:20:41 2014	(r269947)
@@ -11,8 +11,8 @@ LDADD=	-lutil
 .if !defined(RELEASE_CRUNCH) && \
 	${MK_LS_COLORS} != no
 CFLAGS+= -DCOLORLS
-DPADD+=	${LIBTERMCAP}
-LDADD+=	-ltermcap
+DPADD+=	${LIBTERMCAPW}
+LDADD+=	-ltermcapw
 .endif
 
 .include <bsd.prog.mk>

Modified: projects/ipfw/bin/mv/mv.c
==============================================================================
--- projects/ipfw/bin/mv/mv.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/mv/mv.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -278,6 +278,7 @@ fastcopy(const char *from, const char *t
 	static char *bp = NULL;
 	mode_t oldmode;
 	int nread, from_fd, to_fd;
+	struct stat tsb;
 
 	if ((from_fd = open(from, O_RDONLY, 0)) < 0) {
 		warn("fastcopy: open() failed (from): %s", from);
@@ -336,10 +337,18 @@ err:		if (unlink(to))
 	 * if the server supports flags and we were trying to *remove* flags
 	 * on a file that we copied, i.e., that we didn't create.)
 	 */
-	errno = 0;
-	if (fchflags(to_fd, sbp->st_flags))
-		if (errno != EOPNOTSUPP || sbp->st_flags != 0)
-			warn("%s: set flags (was: 0%07o)", to, sbp->st_flags);
+	if (fstat(to_fd, &tsb) == 0) {
+		if ((sbp->st_flags  & ~UF_ARCHIVE) !=
+		    (tsb.st_flags & ~UF_ARCHIVE)) {
+			if (fchflags(to_fd,
+			    sbp->st_flags | (tsb.st_flags & UF_ARCHIVE)))
+				if (errno != EOPNOTSUPP ||
+				    ((sbp->st_flags & ~UF_ARCHIVE) != 0))
+					warn("%s: set flags (was: 0%07o)",
+					    to, sbp->st_flags);
+		}
+	} else
+		warn("%s: cannot stat", to);
 
 	tval[0].tv_sec = sbp->st_atime;
 	tval[1].tv_sec = sbp->st_mtime;

Modified: projects/ipfw/bin/pkill/pkill.1
==============================================================================
--- projects/ipfw/bin/pkill/pkill.1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/pkill/pkill.1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -291,5 +291,4 @@ Solaris 7.
 They made their first appearance in
 .Fx 5.3 .
 .Sh AUTHORS
-.An Andrew Doran
-.Aq ad@NetBSD.org
+.An Andrew Doran Aq Mt ad@NetBSD.org

Modified: projects/ipfw/bin/ps/ps.1
==============================================================================
--- projects/ipfw/bin/ps/ps.1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/ps/ps.1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -29,7 +29,7 @@
 .\"     @(#)ps.1	8.3 (Berkeley) 4/18/94
 .\" $FreeBSD$
 .\"
-.Dd June 6, 2014
+.Dd August 7, 2014
 .Dt PS 1
 .Os
 .Sh NAME
@@ -332,7 +332,6 @@ the include file
 .It Dv "P_SINGLE_BOUNDARY" Ta No "0x400000" Ta "Threads should suspend at user boundary"
 .It Dv "P_HWPMC" Ta No "0x800000" Ta "Process is using HWPMCs"
 .It Dv "P_JAILED" Ta No "0x1000000" Ta "Process is in jail"
-.It Dv "P_ORPHAN" Ta No "0x2000000" Ta "Orphaned by original parent, reparented to debugger"
 .It Dv "P_INEXEC" Ta No "0x4000000" Ta "Process is in execve()"
 .It Dv "P_STATCHILD" Ta No "0x8000000" Ta "Child process stopped or exited"
 .It Dv "P_INMEM" Ta No "0x10000000" Ta "Loaded into memory"

Modified: projects/ipfw/bin/rm/rm.1
==============================================================================
--- projects/ipfw/bin/rm/rm.1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/rm/rm.1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -121,7 +121,6 @@ each directory's contents are processed 
 is made to remove the directory).
 If the user does not respond affirmatively, the file hierarchy rooted in
 that directory is skipped.
-.Pp
 .It Fl r
 Equivalent to
 .Fl R .

Modified: projects/ipfw/bin/rm/rm.c
==============================================================================
--- projects/ipfw/bin/rm/rm.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/rm/rm.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -335,7 +335,7 @@ err:
 		warn("%s", p->fts_path);
 		eval = 1;
 	}
-	if (errno)
+	if (!fflag && errno)
 		err(1, "fts_read");
 	fts_close(fts);
 }

Modified: projects/ipfw/bin/setfacl/setfacl.1
==============================================================================
--- projects/ipfw/bin/setfacl/setfacl.1	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/setfacl/setfacl.1	Wed Aug 13 16:20:41 2014	(r269947)
@@ -485,6 +485,6 @@ NFSv4 ACL support was introduced in
 The
 .Nm
 utility was written by
-.An Chris D. Faulhaber Aq jedgar@fxp.org .
+.An Chris D. Faulhaber Aq Mt jedgar@fxp.org .
 NFSv4 ACL support was implemented by
-.An Edward Tomasz Napierala Aq trasz@FreeBSD.org .
+.An Edward Tomasz Napierala Aq Mt trasz@FreeBSD.org .

Modified: projects/ipfw/bin/sh/Makefile
==============================================================================
--- projects/ipfw/bin/sh/Makefile	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/sh/Makefile	Wed Aug 13 16:20:41 2014	(r269947)
@@ -18,8 +18,8 @@ SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS}
 # utilities of the same name are handled with the associated manpage,
 # builtin.1 in share/man/man1/.
 
-DPADD= ${LIBEDIT} ${LIBTERMCAP}
-LDADD= -ledit -ltermcap
+DPADD= ${LIBEDIT} ${LIBTERMCAPW}
+LDADD= -ledit -ltermcapw
 
 CFLAGS+=-DSHELL -I. -I${.CURDIR}
 # for debug:

Modified: projects/ipfw/bin/sh/eval.c
==============================================================================
--- projects/ipfw/bin/sh/eval.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/sh/eval.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -1250,8 +1250,16 @@ bltincmd(int argc, char **argv)
 int
 breakcmd(int argc, char **argv)
 {
-	int n = argc > 1 ? number(argv[1]) : 1;
+	long n;
+	char *end;
 
+	if (argc > 1) {
+		/* Allow arbitrarily large numbers. */
+		n = strtol(argv[1], &end, 10);
+		if (!is_digit(argv[1][0]) || *end != '\0')
+			error("Illegal number: %s", argv[1]);
+	} else
+		n = 1;
 	if (n > loopnest)
 		n = loopnest;
 	if (n > 0) {

Modified: projects/ipfw/bin/sh/exec.c
==============================================================================
--- projects/ipfw/bin/sh/exec.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/sh/exec.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -365,7 +365,7 @@ find_command(const char *name, struct cm
 	for (;(fullname = padvance(&path, name)) != NULL; stunalloc(fullname)) {
 		idx++;
 		if (pathopt) {
-			if (prefix("func", pathopt)) {
+			if (strncmp(pathopt, "func", 4) == 0) {
 				/* handled below */
 			} else {
 				continue; /* ignore unimplemented options */

Modified: projects/ipfw/bin/sh/expand.c
==============================================================================
--- projects/ipfw/bin/sh/expand.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/sh/expand.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -846,9 +846,11 @@ varisset(const char *name, int nulok)
 		}
 	} else if (is_digit(*name)) {
 		char *ap;
-		int num = atoi(name);
+		long num;
 
-		if (num > shellparam.nparam)
+		errno = 0;
+		num = strtol(name, NULL, 10);
+		if (errno != 0 || num > shellparam.nparam)
 			return 0;
 
 		if (num == 0)
@@ -928,17 +930,16 @@ numvar:
 				STPUTC(sep, expdest);
 		}
 		break;
-	case '0':
-		p = arg0;
-		strtodest(p, flag, subtype, quoted);
-		break;
 	default:
 		if (is_digit(*name)) {
 			num = atoi(name);
-			if (num > 0 && num <= shellparam.nparam) {
+			if (num == 0)
+				p = arg0;
+			else if (num > 0 && num <= shellparam.nparam)
 				p = shellparam.p[num - 1];
-				strtodest(p, flag, subtype, quoted);
-			}
+			else
+				break;
+			strtodest(p, flag, subtype, quoted);
 		}
 		break;
 	}

Modified: projects/ipfw/bin/sh/jobs.c
==============================================================================
--- projects/ipfw/bin/sh/jobs.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/sh/jobs.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -562,6 +562,7 @@ getjob_nonotfound(const char *name)
 {
 	int jobno;
 	struct job *found, *jp;
+	size_t namelen;
 	pid_t pid;
 	int i;
 
@@ -603,10 +604,12 @@ currentjob:	if ((jp = getcurjob(NULL)) =
 			if (found != NULL)
 				return (found);
 		} else {
+			namelen = strlen(name);
 			found = NULL;
 			for (jp = jobtab, i = njobs ; --i >= 0 ; jp++) {
 				if (jp->used && jp->nprocs > 0
-				 && prefix(name + 1, jp->ps[0].cmd)) {
+				 && strncmp(jp->ps[0].cmd, name + 1,
+				 namelen - 1) == 0) {
 					if (found)
 						error("%s: ambiguous", name);
 					found = jp;

Modified: projects/ipfw/bin/sh/miscbltin.c
==============================================================================
--- projects/ipfw/bin/sh/miscbltin.c	Wed Aug 13 16:11:57 2014	(r269946)
+++ projects/ipfw/bin/sh/miscbltin.c	Wed Aug 13 16:20:41 2014	(r269947)
@@ -411,13 +411,32 @@ static const struct limits limits[] = {
 	{ (char *) 0,		(char *)0,	0,		   0, '\0' }
 };
 
+enum limithow { SOFT = 0x1, HARD = 0x2 };
+
+static void
+printlimit(enum limithow how, const struct rlimit *limit,
+    const struct limits *l)
+{
+	rlim_t val = 0;
+
+	if (how & SOFT)
+		val = limit->rlim_cur;
+	else if (how & HARD)
+		val = limit->rlim_max;
+	if (val == RLIM_INFINITY)
+		out1str("unlimited\n");
+	else
+	{
+		val /= l->factor;
+		out1fmt("%jd\n", (intmax_t)val);
+	}
+}
+

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Wed Aug 13 16:53:13 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 5C0E5F0A;
 Wed, 13 Aug 2014 16:53:13 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 48B3A20E1;
 Wed, 13 Aug 2014 16:53:13 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7DGrDXa027878;
 Wed, 13 Aug 2014 16:53:13 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7DGrD4X027877;
 Wed, 13 Aug 2014 16:53:13 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408131653.s7DGrD4X027877@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Wed, 13 Aug 2014 16:53:13 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269949 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Aug 2014 16:53:13 -0000

Author: melifaro
Date: Wed Aug 13 16:53:12 2014
New Revision: 269949
URL: http://svnweb.freebsd.org/changeset/base/269949

Log:
  Fix assertion.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Wed Aug 13 16:42:44 2014	(r269948)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Wed Aug 13 16:53:12 2014	(r269949)
@@ -2362,7 +2362,7 @@ ipfw_add_table_algo(struct ip_fw_chain *
 	if (sz > TA_BUF_SZ)
 		return (EINVAL);
 
-	KASSERT(ta->type >= IPFW_TABLE_MAXTYPE,("Increase IPFW_TABLE_MAXTYPE"));
+	KASSERT(ta->type <= IPFW_TABLE_MAXTYPE,("Increase IPFW_TABLE_MAXTYPE"));
 
 	/* Copy algorithm data to stable storage. */
 	ta_new = malloc(sizeof(struct table_algo), M_IPFW, M_WAITOK | M_ZERO);

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 08:21:23 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 BA548EF9;
 Thu, 14 Aug 2014 08:21:23 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 94A8623DD;
 Thu, 14 Aug 2014 08:21:23 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7E8LNCs056065;
 Thu, 14 Aug 2014 08:21:23 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7E8LMa3056062;
 Thu, 14 Aug 2014 08:21:22 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408140821.s7E8LMa3056062@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Thu, 14 Aug 2014 08:21:22 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269965 - in projects/ipfw/sys: netinet netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 08:21:23 -0000

Author: melifaro
Date: Thu Aug 14 08:21:22 2014
New Revision: 269965
URL: http://svnweb.freebsd.org/changeset/base/269965

Log:
  * Fix displaying dynamic rules for large rulesets.
  * Clean up some comments.

Modified:
  projects/ipfw/sys/netinet/ip_fw.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c

Modified: projects/ipfw/sys/netinet/ip_fw.h
==============================================================================
--- projects/ipfw/sys/netinet/ip_fw.h	Thu Aug 14 05:31:39 2014	(r269964)
+++ projects/ipfw/sys/netinet/ip_fw.h	Thu Aug 14 08:21:22 2014	(r269965)
@@ -72,8 +72,7 @@ typedef struct _ip_fw3_opheader {
 	uint16_t reserved[2];	/* Align to 64-bit boundary */
 } ip_fw3_opheader;
 
-
-/* IPFW extented tables support */
+/* IP_FW3 opcodes */
 #define	IP_FW_TABLE_XADD	86	/* add entry */
 #define	IP_FW_TABLE_XDEL	87	/* delete entry */
 #define	IP_FW_TABLE_XGETSIZE	88	/* get table size (deprecated) */
@@ -99,32 +98,6 @@ typedef struct _ip_fw3_opheader {
 #define	IP_FW_TABLE_XSWAP	109	/* swap two tables */
 
 /*
- * Usage guidelines:
- *
- * IP_FW_TABLE_XLIST(ver 1): Dumps all table data
- *   Request(getsockopt): [ ipfw_obj_lheader ], size = ipfw_xtable_info.size
- *   Reply: [ ipfw_obj_lheader ipfw_xtable_info ipfw_table_xentry x N ]
- *
- * IP_FW_TABLE_XDESTROY: Destroys given table
- *   Request(setsockopt): [ ipfw_obj_header ]
- *
- * IP_FW_TABLES_XGETSIZE: Get buffer size needed to list info for all tables.
- *   Request(getsockopt): [ empty ], size = sizeof(ipfw_obj_lheader)
- *   Reply: [ ipfw_obj_lheader ]
- *
- * IP_FW_TABLES_XLIST: Lists all tables currently available in kernel.
- *   Request(getsockopt): [ ipfw_obj_lheader ], size = ipfw_obj_lheader.size
- *   Reply: [ ipfw_obj_lheader ipfw_xtable_info x N ]
- *
- * IP_FW_TABLE_XINFO: Store table info to buffer.
- *   Request(getsockopt): [ ipfw_obj_header ipfw_xtable_info(empty)]
- *   Reply: [ ipfw_obj_header ipfw_xtable_info ]
- *
- * IP_FW_TABLE_XFLUSH: Removes all data from given table leaving type etc..
- *   Request(setsockopt): [ ipfw_obj_header ]
- */
-
-/*
  * The kernel representation of ipfw rules is made of a list of
  * 'instructions' (for all practical purposes equivalent to BPF
  * instructions), which specify which fields of the packet

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Thu Aug 14 05:31:39 2014	(r269964)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c	Thu Aug 14 08:21:22 2014	(r269965)
@@ -1927,7 +1927,8 @@ dump_config(struct ip_fw_chain *chain, s
 {
 	ipfw_cfg_lheader *hdr;
 	struct ip_fw *rule;
-	uint32_t sz, rnum;
+	size_t sz, rnum;
+	uint32_t hdr_flags;
 	int error, i;
 	struct dump_args da;
 	uint32_t *bmask;
@@ -1987,27 +1988,33 @@ dump_config(struct ip_fw_chain *chain, s
 		sz += ipfw_dyn_get_count() * sizeof(ipfw_obj_dyntlv) +
 		     sizeof(ipfw_obj_ctlv);
 
-	/* Fill header anyway */
+
+	/*
+	 * Fill header anyway.
+	 * Note we have to save header fields to stable storage
+	 * buffer inside @sd can be flushed after dumping rules
+	 */
 	hdr->size = sz;
 	hdr->set_mask = ~V_set_disable;
+	hdr_flags = hdr->flags;
+	hdr = NULL;
 
 	if (sd->valsize < sz) {
-		IPFW_UH_RUNLOCK(chain);
-		return (ENOMEM);
+		error = ENOMEM;
+		goto cleanup;
 	}
 
 	/* STAGE2: Store actual data */
-	if (hdr->flags & IPFW_CFG_GET_STATIC) {
+	if (hdr_flags & IPFW_CFG_GET_STATIC) {
 		error = dump_static_rules(chain, &da, bmask, sd);
-		if (error != 0) {
-			IPFW_UH_RUNLOCK(chain);
-			return (error);
-		}
+		if (error != 0)
+			goto cleanup;
 	}
 
-	if (hdr->flags & IPFW_CFG_GET_STATES)
+	if (hdr_flags & IPFW_CFG_GET_STATES)
 		error = ipfw_dump_states(chain, sd);
 
+cleanup:
 	IPFW_UH_RUNLOCK(chain);
 
 	if (bmask != NULL)

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 05:31:39 2014	(r269964)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 08:21:22 2014	(r269965)
@@ -107,7 +107,6 @@ static int create_table_internal(struct 
     struct table_algo **pta, uint16_t *pkidx, int ref);
 static void link_table(struct ip_fw_chain *ch, struct table_config *tc);
 static void unlink_table(struct ip_fw_chain *ch, struct table_config *tc);
-static void free_table_state(void **state, void **xstate, uint8_t type);
 static int export_tables(struct ip_fw_chain *ch, ipfw_obj_lheader *olh,
     struct sockopt_data *sd);
 static void export_table_info(struct ip_fw_chain *ch, struct table_config *tc,

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 08:42:17 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 871AD616;
 Thu, 14 Aug 2014 08:42:17 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 73E0E2625;
 Thu, 14 Aug 2014 08:42:17 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7E8gHlD065972;
 Thu, 14 Aug 2014 08:42:17 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7E8gHnE065971;
 Thu, 14 Aug 2014 08:42:17 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408140842.s7E8gHnE065971@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Thu, 14 Aug 2014 08:42:17 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269966 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 08:42:17 -0000

Author: melifaro
Date: Thu Aug 14 08:42:16 2014
New Revision: 269966
URL: http://svnweb.freebsd.org/changeset/base/269966

Log:
  Fix crash in case of iflist request on non-initialized tracker.

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c	Thu Aug 14 08:21:22 2014	(r269965)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c	Thu Aug 14 08:42:16 2014	(r269966)
@@ -489,6 +489,7 @@ export_iface_internal(struct namedobj_in
 int
 ipfw_list_ifaces(struct ip_fw_chain *ch, struct sockopt_data *sd)
 {
+	struct namedobj_instance *ii;
 	struct _ipfw_obj_lheader *olh;
 	struct dump_iface_args da;
 	uint32_t count, size;
@@ -500,7 +501,11 @@ ipfw_list_ifaces(struct ip_fw_chain *ch,
 		return (EINVAL);
 
 	IPFW_UH_RLOCK(ch);
-	count = ipfw_objhash_count(CHAIN_TO_II(ch));
+	ii = CHAIN_TO_II(ch);
+	if (ii != NULL)
+		count = ipfw_objhash_count(ii);
+	else
+		count = 0;
 	size = count * sizeof(ipfw_iface_info) + sizeof(ipfw_obj_lheader);
 
 	/* Fill in header regadless of buffer size */
@@ -517,10 +522,10 @@ ipfw_list_ifaces(struct ip_fw_chain *ch,
 	da.ch = ch;
 	da.sd = sd;
 
-	ipfw_objhash_foreach(CHAIN_TO_II(ch), export_iface_internal, &da);
+	if (ii != NULL)
+		ipfw_objhash_foreach(ii, export_iface_internal, &da);
 	IPFW_UH_RUNLOCK(ch);
 
 	return (0);
 }
 
-

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 13:25:00 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 B4725141;
 Thu, 14 Aug 2014 13:25:00 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id A0E3D2691;
 Thu, 14 Aug 2014 13:25:00 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EDP0Lh094979;
 Thu, 14 Aug 2014 13:25:00 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EDP0Fh094967;
 Thu, 14 Aug 2014 13:25:00 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408141325.s7EDP0Fh094967@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Thu, 14 Aug 2014 13:25:00 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269971 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 13:25:00 -0000

Author: melifaro
Date: Thu Aug 14 13:24:59 2014
New Revision: 269971
URL: http://svnweb.freebsd.org/changeset/base/269971

Log:
  Clean up kernel interaction in ip_fw_iface.c
  
  Suggested by:	ae

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw2.c	Thu Aug 14 12:50:25 2014	(r269970)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw2.c	Thu Aug 14 13:24:59 2014	(r269971)
@@ -102,10 +102,6 @@ __FBSDID("$FreeBSD$");
  * All ipfw global variables are here.
  */
 
-/* ipfw_vnet_ready controls when we are open for business */
-static VNET_DEFINE(int, ipfw_vnet_ready) = 0;
-#define	V_ipfw_vnet_ready	VNET(ipfw_vnet_ready)
-
 static VNET_DEFINE(int, fw_deny_unknown_exthdrs);
 #define	V_fw_deny_unknown_exthdrs	VNET(fw_deny_unknown_exthdrs)
 
@@ -152,6 +148,9 @@ VNET_DEFINE(int, verbose_limit);
 /* layer3_chain contains the list of rules for layer 3 */
 VNET_DEFINE(struct ip_fw_chain, layer3_chain);
 
+/* ipfw_vnet_ready controls when we are open for business */
+VNET_DEFINE(int, ipfw_vnet_ready) = 0;
+
 VNET_DEFINE(int, ipfw_nat_ready) = 0;
 
 ipfw_nat_t *ipfw_nat_ptr = NULL;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c	Thu Aug 14 12:50:25 2014	(r269970)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_iface.c	Thu Aug 14 13:24:59 2014	(r269971)
@@ -76,7 +76,7 @@ static void iface_khandler_deregister(vo
 
 static eventhandler_tag ipfw_ifdetach_event, ipfw_ifattach_event;
 static int num_vnets = 0;
-struct mtx vnet_mtx;
+static struct mtx vnet_mtx;
 
 /*
  * Checks if kernel interface is contained in our tracked
@@ -90,19 +90,20 @@ ipfw_kifhandler(void *arg, struct ifnet 
 	struct namedobj_instance *ii;
 	uintptr_t htype;
 
+	if (V_ipfw_vnet_ready == 0)
+		return;
+
 	ch = &V_layer3_chain;
 	htype = (uintptr_t)arg;
 
-	if (ch == NULL)
-		return;
-
 	IPFW_UH_WLOCK(ch);
 	ii = CHAIN_TO_II(ch);
 	if (ii == NULL) {
 		IPFW_UH_WUNLOCK(ch);
 		return;
 	}
-	iif = (struct ipfw_iface*)ipfw_objhash_lookup_name(ii, 0,ifp->if_xname);
+	iif = (struct ipfw_iface*)ipfw_objhash_lookup_name(ii, 0,
+	    if_name(ifp));
 	if (iif != NULL) {
 		if (htype == 1)
 			handle_ifattach(ch, iif, ifp->if_index);
@@ -154,8 +155,9 @@ iface_khandler_deregister()
 
 	destroy = 0;
 	mtx_lock(&vnet_mtx);
-	if (--num_vnets == 0)
+	if (num_vnets == 1)
 		destroy = 1;
+	num_vnets--;
 	mtx_unlock(&vnet_mtx);
 
 	if (destroy == 0)
@@ -242,14 +244,9 @@ static void
 destroy_iface(struct namedobj_instance *ii, struct named_object *no,
     void *arg)
 {
-	struct ipfw_iface *iif;
-	struct ip_fw_chain *ch;
-
-	ch = (struct ip_fw_chain *)arg;
-	iif = (struct ipfw_iface *)no;
 
 	/* Assume all consumers have been already detached */
-	free(iif, M_IPFW);
+	free(no, M_IPFW);
 }
 
 /*
@@ -376,7 +373,7 @@ ipfw_iface_add_notify(struct ip_fw_chain
 
 /*
  * Unlinks interface tracker object @ic from interface.
- * Must be called whi holding UH lock.
+ * Must be called while holding UH lock.
  */
 void
 ipfw_iface_del_notify(struct ip_fw_chain *ch, struct ipfw_ifc *ic)

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Thu Aug 14 12:50:25 2014	(r269970)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_private.h	Thu Aug 14 13:24:59 2014	(r269971)
@@ -207,6 +207,9 @@ VNET_DECLARE(int, fw_verbose);
 VNET_DECLARE(struct ip_fw_chain, layer3_chain);
 #define	V_layer3_chain		VNET(layer3_chain)
 
+VNET_DECLARE(int, ipfw_vnet_ready);
+#define	V_ipfw_vnet_ready	VNET(ipfw_vnet_ready)
+
 VNET_DECLARE(u_int32_t, set_disable);
 #define	V_set_disable		VNET(set_disable)
 

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 17:31:06 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 2787CBB4;
 Thu, 14 Aug 2014 17:31:06 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 134902507;
 Thu, 14 Aug 2014 17:31:06 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EHV5N8008144;
 Thu, 14 Aug 2014 17:31:05 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EHV5Gc007187;
 Thu, 14 Aug 2014 17:31:05 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408141731.s7EHV5Gc007187@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Thu, 14 Aug 2014 17:31:05 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269988 - in projects/ipfw: sbin/ipfw sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 17:31:06 -0000

Author: melifaro
Date: Thu Aug 14 17:31:04 2014
New Revision: 269988
URL: http://svnweb.freebsd.org/changeset/base/269988

Log:
  * Document internal commands.
  * Do not require/set default table type if algo name is specified.
  * Add TA_FLAG_READONLY option for algorithms.

Modified:
  projects/ipfw/sbin/ipfw/ipfw.8
  projects/ipfw/sbin/ipfw/tables.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c

Modified: projects/ipfw/sbin/ipfw/ipfw.8
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw.8	Thu Aug 14 16:45:02 2014	(r269987)
+++ projects/ipfw/sbin/ipfw/ipfw.8	Thu Aug 14 17:31:04 2014	(r269988)
@@ -113,6 +113,11 @@ in-kernel NAT.
 .Oc
 .Oc
 .Ar pathname
+.Ss INTERNAL DIAGNOSTICS
+.Nm
+.Cm internal iflist
+.Nm
+.Cm internal talist
 .Sh DESCRIPTION
 The
 .Nm
@@ -3181,6 +3186,22 @@ Controls whether bridged packets are pas
 .Nm .
 Default is no.
 .El
+.Sh INTERNAL DIAGNOSTICS
+There are some commands that may be useful to understand current state
+of certain subsystems inside kernel module.
+These commands provide debugging output which may change without notice.
+.Pp
+Currently the following commands are available as
+.Cm internal
+sub-options:
+.Bl -tag -width indent
+.It Cm iflist
+Lists all interface which are currently tracked by
+.Nm
+with their in-kernel status.
+.It Cm talist
+List all table lookup algorithms currently available.
+.El
 .Sh EXAMPLES
 There are far too many possible uses of
 .Nm

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Thu Aug 14 16:45:02 2014	(r269987)
+++ projects/ipfw/sbin/ipfw/tables.c	Thu Aug 14 17:31:04 2014	(r269988)
@@ -391,10 +391,6 @@ table_create(ipfw_obj_header *oh, int ac
 	sz = sizeof(tbuf);
 	memset(&xi, 0, sizeof(xi));
 
-	/* Set some defaults to preserve compability */
-	xi.type = IPFW_TABLE_CIDR;
-	xi.vtype = IPFW_VTYPE_U32;
-
 	while (ac > 0) {
 		tcmd = get_token(tablenewcmds, *av, "option");
 		ac--; av++;
@@ -464,6 +460,12 @@ table_create(ipfw_obj_header *oh, int ac
 		}
 	}
 
+	/* Set some defaults to preserve compability */
+	if (xi.algoname[0] == '\0' && xi.type == 0)
+		xi.type = IPFW_TABLE_CIDR;
+	if (xi.vtype == 0)
+		xi.vtype = IPFW_VTYPE_U32;
+
 	if ((error = table_do_create(oh, &xi)) != 0)
 		err(EX_OSERR, "Table creation failed");
 }

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 16:45:02 2014	(r269987)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 17:31:04 2014	(r269988)
@@ -667,6 +667,9 @@ check_table_space(struct ip_fw_chain *ch
 
 	error = 0;
 	ta = tc->ta;
+	if (ta->need_modify == NULL)
+		return (0);
+
 	/* Acquire reference not to loose @tc between locks/unlocks */
 	tc->no.refcnt++;
 
@@ -1051,6 +1054,11 @@ flush_table(struct ip_fw_chain *ch, stru
 		return (ESRCH);
 	}
 	ta = tc->ta;
+	/* Do not flush readonly tables */
+	if ((ta->flags & TA_FLAG_READONLY) != 0) {
+		IPFW_UH_WUNLOCK(ch);
+		return (EACCES);
+	}
 	tc->no.refcnt++;
 	/* Save startup algo parameters */
 	if (ta->print_config != NULL) {
@@ -1206,6 +1214,12 @@ swap_tables(struct ip_fw_chain *ch, stru
 		return (EFBIG);
 	}
 
+	/* Check if one of the tables is readonly */
+	if (((tc_a->ta->flags | tc_b->ta->flags) & TA_FLAG_READONLY) != 0) {
+		IPFW_UH_WUNLOCK(ch);
+		return (EACCES);
+	}
+
 	/* Everything is fine, prepare to swap */
 	tablestate = (struct table_info *)ch->tablestate;
 	ti = tablestate[tc_a->no.kidx];
@@ -1622,6 +1636,13 @@ ipfw_modify_table(struct ip_fw_chain *ch
 		IPFW_UH_WUNLOCK(ch);
 		return (ESRCH);
 	}
+
+	/* Do not support any modifications for readonly tables */
+	if ((tc->ta->flags & TA_FLAG_READONLY) != 0) {
+		IPFW_UH_WUNLOCK(ch);
+		return (EACCES);
+	}
+
 	if ((i->mflags & IPFW_TMFLAGS_FTYPE) != 0)
 		tc->vftype = i->vftype;
 	if ((i->mflags & IPFW_TMFLAGS_LIMIT) != 0)
@@ -1720,7 +1741,10 @@ create_table_internal(struct ip_fw_chain
 
 	tc->vftype = i->vftype;
 	tc->limit = i->limit;
-	tc->locked = (i->flags & IPFW_TGFLAGS_LOCKED) != 0;
+	if (ta->flags & TA_FLAG_READONLY)
+		tc->locked = 1;
+	else
+		tc->locked = (i->flags & IPFW_TGFLAGS_LOCKED) != 0;
 
 	IPFW_UH_WLOCK(ch);
 
@@ -2311,32 +2335,36 @@ find_table_algo(struct tables_config *tc
 		return (tcfg->algo[ti->atype]);
 	}
 
-	/* Search by name if supplied */
-	if (name != NULL) {
-		/* TODO: better search */
-		for (i = 1; i <= tcfg->algo_count; i++) {
-			ta = tcfg->algo[i];
+	if (name == NULL) {
+		/* Return default algorithm for given type if set */
+		return (tcfg->def_algo[ti->type]);
+	}
 
-			/*
-			 * One can supply additional algorithm
-			 * parameters so we compare only the first word
-			 * of supplied name:
-			 * 'hash_cidr hsize=32'
-			 * '^^^^^^^^^'
-			 *
-			 */
-			l = strlen(ta->name);
-			if (strncmp(name, ta->name, l) == 0) {
-				if (name[l] == '\0' || name[l] == ' ')
-					return (ta);
-			}
-		}
+	/* Search by name */
+	/* TODO: better search */
+	for (i = 1; i <= tcfg->algo_count; i++) {
+		ta = tcfg->algo[i];
 
-		return (NULL);
+		/*
+		 * One can supply additional algorithm
+		 * parameters so we compare only the first word
+		 * of supplied name:
+		 * 'hash_cidr hsize=32'
+		 * '^^^^^^^^^'
+		 *
+		 */
+		l = strlen(ta->name);
+		if (strncmp(name, ta->name, l) != 0)
+			continue;
+		if (name[l] != '\0' && name[l] != ' ')
+			continue;
+		/* Check if we're requesting proper table type */
+		if (ti->type != 0 && ti->type != ta->type)
+			return (NULL);
+		return (ta);
 	}
 
-	/* Return default algorithm for given type if set */
-	return (tcfg->def_algo[ti->type]);
+	return (NULL);
 }
 
 /*
@@ -2704,7 +2732,7 @@ alloc_table_config(struct ip_fw_chain *c
 
 	tc = malloc(sizeof(struct table_config), M_IPFW, M_WAITOK | M_ZERO);
 	tc->no.name = tc->tablename;
-	tc->no.type = ti->type;
+	tc->no.type = ta->type;
 	tc->no.set = set;
 	tc->tflags = tflags;
 	tc->ta = ta;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Thu Aug 14 16:45:02 2014	(r269987)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Thu Aug 14 17:31:04 2014	(r269988)
@@ -132,7 +132,8 @@ struct table_algo {
 	ta_print_config	*print_config;
 	ta_dump_tinfo	*dump_tinfo;
 };
-#define	TA_FLAG_DEFAULT	0x01	/* Algorithm is default for given type */
+#define	TA_FLAG_DEFAULT		0x01	/* Algo is default for given type */
+#define	TA_FLAG_READONLY	0x02	/* Algo does not support modifications*/
 
 int ipfw_add_table_algo(struct ip_fw_chain *ch, struct table_algo *ta,
     size_t size, int *idx);

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Thu Aug 14 16:45:02 2014	(r269987)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Thu Aug 14 17:31:04 2014	(r269988)
@@ -179,7 +179,7 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
  * -need_modify: checks if @ti has enough space to hold another @count items.
  *  typedef int (ta_need_modify)(void *ta_state, struct table_info *ti,
  *      uint32_t count, uint64_t *pflags);
- *  MANDATORY, locked (UH). (M_NOWAIT). Returns 0 if has.
+ *  OPTIONAL, locked (UH). (M_NOWAIT). Returns 0 if has.
  *
  *  Checks if given table has enough space to add @count items without
  *  resize. Caller may use @pflags to store desired modification data.
@@ -188,7 +188,7 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
  *
  * -prepare_mod: allocate structures for table modification.
  *  typedef int (ta_prepare_mod)(void *ta_buf, uint64_t *pflags);
- * MANDATORY, unlocked. (M_WAITOK). Returns 0 on success.
+ * OPTIONAL(need_modify), unlocked. (M_WAITOK). Returns 0 on success.
  *
  * Allocate all needed state for table modification. Caller
  * should use `struct mod_item` to store new state in @ta_buf.
@@ -199,7 +199,7 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
  * -fill_mod: copy some data to new state/
  *  typedef int (ta_fill_mod)(void *ta_state, struct table_info *ti,
  *      void *ta_buf, uint64_t *pflags);
- * MANDATORY, locked (UH). (M_NOWAIT). Returns 0 on success.
+ * OPTIONAL(need_modify), locked (UH). (M_NOWAIT). Returns 0 on success.
  *
  * Copy as much data as we can to minimize changes under WLOCK.
  * For example, array can be merged inside this callback.
@@ -209,7 +209,7 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
  * -modify: perform final modification.
  *  typedef void (ta_modify)(void *ta_state, struct table_info *ti,
  *      void *ta_buf, uint64_t pflags);
- * MANDATORY, locked (UH+WLOCK). (M_NOWAIT). 
+ * OPTIONAL(need_modify), locked (UH+WLOCK). (M_NOWAIT). 
  *
  * Performs all changes necessary to switch to new structures.
  * * Caller should save old pointers to @ta_buf storage.
@@ -218,7 +218,7 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
  *
  * -flush_mod: flush table modification state.
  *  typedef void (ta_flush_mod)(void *ta_buf);
- * MANDATORY, unlocked. (M_WAITOK).
+ * OPTIONAL(need_modify), unlocked. (M_WAITOK).
  *
  * Performs flush for the following:
  *   - prepare_mod (modification was not necessary)

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 18:08:51 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D2E4D5E8;
 Thu, 14 Aug 2014 18:08:51 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id B4F8928F7;
 Thu, 14 Aug 2014 18:08:51 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EI8pX0024564;
 Thu, 14 Aug 2014 18:08:51 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EI8pT4024562;
 Thu, 14 Aug 2014 18:08:51 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408141808.s7EI8pT4024562@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Thu, 14 Aug 2014 18:08:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269990 - projects/arm64/sys/arm64/include
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 18:08:51 -0000

Author: andrew
Date: Thu Aug 14 18:08:51 2014
New Revision: 269990
URL: http://svnweb.freebsd.org/changeset/base/269990

Log:
  Add two missing headers needed by userland.

Added:
  projects/arm64/sys/arm64/include/float.h
  projects/arm64/sys/arm64/include/reloc.h

Added: projects/arm64/sys/arm64/include/float.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/sys/arm64/include/float.h	Thu Aug 14 18:08:51 2014	(r269990)
@@ -0,0 +1,98 @@
+/*-
+ * Copyright (c) 1989 Regents of the University of California.
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+ *
+ *	from: @(#)float.h	7.1 (Berkeley) 5/8/90
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_FLOAT_H_
+#define _MACHINE_FLOAT_H_ 1
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+extern int __flt_rounds(void);
+__END_DECLS
+
+#define FLT_RADIX	2		/* b */
+#define	FLT_ROUNDS	__flt_rounds()
+#if __ISO_C_VISIBLE >= 1999
+#define	FLT_EVAL_METHOD	0
+#define	DECIMAL_DIG	17		/* max precision in decimal digits */
+#endif
+
+#define FLT_MANT_DIG	24		/* p */
+#define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
+#define FLT_DIG		6		/* floor((p-1)*log10(b))+(b == 10) */
+#define FLT_MIN_EXP	(-125)		/* emin */
+#define FLT_MIN		1.17549435E-38F	/* b**(emin-1) */
+#define FLT_MIN_10_EXP	(-37)		/* ceil(log10(b**(emin-1))) */
+#define FLT_MAX_EXP	128		/* emax */
+#define FLT_MAX		3.40282347E+38F	/* (1-b**(-p))*b**emax */
+#define FLT_MAX_10_EXP	38		/* floor(log10((1-b**(-p))*b**emax)) */
+#if __ISO_C_VISIBLE >= 2011
+#define	FLT_TRUE_MIN	1.40129846E-45F	/* b**(emin-p) */
+#define	FLT_DECIMAL_DIG	9		/* ceil(1+p*log10(b)) */
+#define	FLT_HAS_SUBNORM	1
+#endif /* __ISO_C_VISIBLE >= 2011 */
+
+#define DBL_MANT_DIG	53
+#define DBL_EPSILON	2.2204460492503131E-16
+#define DBL_DIG		15
+#define DBL_MIN_EXP	(-1021)
+#define DBL_MIN		2.2250738585072014E-308
+#define DBL_MIN_10_EXP	(-307)
+#define DBL_MAX_EXP	1024
+#define DBL_MAX		1.7976931348623157E+308
+#define DBL_MAX_10_EXP	308
+#if __ISO_C_VISIBLE >= 2011
+#define	DBL_TRUE_MIN	4.9406564584124654E-324
+#define	DBL_DECIMAL_DIG	17
+#define	DBL_HAS_SUBNORM	1
+#endif /* __ISO_C_VISIBLE >= 2011 */
+
+#define LDBL_MANT_DIG	113
+#define LDBL_EPSILON	1.925929944387235853055977942584927319E-34L
+#define LDBL_DIG	33
+#define LDBL_MIN_EXP	(-16381)
+#define LDBL_MIN	3.362103143112093506262677817321752603E-4932L
+#define LDBL_MIN_10_EXP	(-4931)
+#define LDBL_MAX_EXP	(+16384)
+#define LDBL_MAX	1.189731495357231765085759326628007016E+4932L
+#define LDBL_MAX_10_EXP	(+4932)
+#if __ISO_C_VISIBLE >= 2011
+#define	LDBL_TRUE_MIN	6.475175119438025110924438958227646552E-4966L
+#define	LDBL_DECIMAL_DIG 36
+#define	LDBL_HAS_SUBNORM 1
+#endif /* __ISO_C_VISIBLE >= 2011 */
+
+#endif /* _MACHINE_FLOAT_H_ */

Added: projects/arm64/sys/arm64/include/reloc.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/sys/arm64/include/reloc.h	Thu Aug 14 18:08:51 2014	(r269990)
@@ -0,0 +1 @@
+/* $FreeBSD$ */

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 18:39:13 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 C011D4D2;
 Thu, 14 Aug 2014 18:39:13 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id ACECC2D1A;
 Thu, 14 Aug 2014 18:39:13 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EIdD1E038277;
 Thu, 14 Aug 2014 18:39:13 GMT (envelope-from asomers@FreeBSD.org)
Received: (from asomers@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EIdDM2038276;
 Thu, 14 Aug 2014 18:39:13 GMT (envelope-from asomers@FreeBSD.org)
Message-Id: <201408141839.s7EIdDM2038276@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: asomers set sender to
 asomers@FreeBSD.org using -f
From: Alan Somers <asomers@FreeBSD.org>
Date: Thu, 14 Aug 2014 18:39:13 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269993 - projects/zfsd/head/sbin/devd
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 18:39:13 -0000

Author: asomers
Date: Thu Aug 14 18:39:13 2014
New Revision: 269993
URL: http://svnweb.freebsd.org/changeset/base/269993

Log:
  sbin/devd/devd.8
  	Fix grammar bug.
  
  Reported by:	ian
  Sponsored by:	Spectra Logic Corporation

Modified:
  projects/zfsd/head/sbin/devd/devd.8

Modified: projects/zfsd/head/sbin/devd/devd.8
==============================================================================
--- projects/zfsd/head/sbin/devd/devd.8	Thu Aug 14 18:29:55 2014	(r269992)
+++ projects/zfsd/head/sbin/devd/devd.8	Thu Aug 14 18:39:13 2014	(r269993)
@@ -148,7 +148,7 @@ The socket used by
 .Nm
 to communicate with its clients.
 .It Pa /var/run/devd.pipe
-An deprecated socket retained for use with old clients.
+A deprecated socket retained for use with old clients.
 .El
 .Sh SEE ALSO
 .Xr devctl 4 ,

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 18:44:10 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 1946472C;
 Thu, 14 Aug 2014 18:44:10 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id EC04D2E14;
 Thu, 14 Aug 2014 18:44:09 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EIi9Pf042145;
 Thu, 14 Aug 2014 18:44:09 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EIi9EY042140;
 Thu, 14 Aug 2014 18:44:09 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408141844.s7EIi9EY042140@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Thu, 14 Aug 2014 18:44:09 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269994 - projects/arm64/lib/csu/arm64
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 18:44:10 -0000

Author: andrew
Date: Thu Aug 14 18:44:08 2014
New Revision: 269994
URL: http://svnweb.freebsd.org/changeset/base/269994

Log:
  Add minimal csu support. Some bits are broken as they are just loops, but
  we are not in userland yet so wait until then to fix them.

Added:
  projects/arm64/lib/csu/arm64/crt1.c
  projects/arm64/lib/csu/arm64/crti.S
  projects/arm64/lib/csu/arm64/crtn.S
Modified:
  projects/arm64/lib/csu/arm64/Makefile

Modified: projects/arm64/lib/csu/arm64/Makefile
==============================================================================
--- projects/arm64/lib/csu/arm64/Makefile	Thu Aug 14 18:39:13 2014	(r269993)
+++ projects/arm64/lib/csu/arm64/Makefile	Thu Aug 14 18:44:08 2014	(r269994)
@@ -2,6 +2,43 @@
 
 .PATH: ${.CURDIR}/../common
 
-all:
+SRCS=		crt1.c crti.S crtn.S
+OBJS=		${SRCS:N*.h:R:S/$/.o/g}
+OBJS+=		Scrt1.o gcrt1.o
+CFLAGS+=	-I${.CURDIR}/../common \
+		-I${.CURDIR}/../../libc/include
+
+all: ${OBJS}
+
+CLEANFILES=	${OBJS}
+CLEANFILES+=	crt1.s gcrt1.s Scrt1.s
+
+# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
+# directly compiled to .o files.
+
+crt1.s: crt1.c
+	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
+	sed ${SED_FIX_NOTE} ${.TARGET}
+
+crt1.o: crt1.s
+	${CC} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+
+gcrt1.s: crt1.c
+	${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
+	sed ${SED_FIX_NOTE} ${.TARGET}
+
+gcrt1.o: gcrt1.s
+	${CC} ${ACFLAGS} -c -o ${.TARGET} gcrt1.s
+
+Scrt1.s: crt1.c
+	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
+	sed ${SED_FIX_NOTE} ${.TARGET}
+
+Scrt1.o: Scrt1.s
+	${CC} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
+
+realinstall:
+	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+	    ${OBJS} ${DESTDIR}${LIBDIR}
 
 .include <bsd.lib.mk>

Added: projects/arm64/lib/csu/arm64/crt1.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/csu/arm64/crt1.c	Thu Aug 14 18:44:08 2014	(r269994)
@@ -0,0 +1,146 @@
+/* LINTLIBRARY */
+/*-
+ * Copyright 2001 David E. O'Brien.
+ * All rights reserved.
+ * Copyright 1996-1998 John D. Polstra.
+ * All rights reserved.
+ * Copyright (c) 1997 Jason R. Thorpe.
+ * Copyright (c) 1995 Christopher G. Demetriou
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *          This product includes software developed for the
+ *          FreeBSD Project.  See http://www.freebsd.org/ for
+ *          information about FreeBSD.
+ *          This product includes software developed for the
+ *          NetBSD Project.  See http://www.netbsd.org/ for
+ *          information about NetBSD.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission
+ *
+ * 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$");
+
+#ifndef lint
+#ifndef __GNUC__
+#error "GCC is needed to compile this file"
+#endif
+#endif /* lint */
+
+#include <stdlib.h>
+
+#include "libc_private.h"
+#include "crtbrand.c"
+#include "ignore_init.c"
+
+struct Struct_Obj_Entry;
+struct ps_strings;
+
+extern void _start(int, char **, char **, const struct Struct_Obj_Entry *,
+    void (*)(void), struct ps_strings *);
+
+#ifdef GCRT
+extern void _mcleanup(void);
+extern void monstartup(void *, void *);
+extern int eprol;
+extern int etext;
+#endif
+
+struct ps_strings *__ps_strings;
+
+void __start(int, char **, char **, struct ps_strings *,
+    const struct Struct_Obj_Entry *, void (*)(void));
+
+/* The entry function. */
+__asm("	.text			\n"
+"	.align	0		\n"
+"	.globl	_start		\n"
+"	_start:			\n"
+/* TODO: Don't just pass NULL to __start */
+"	mov	x0, xzr		\n"
+"	mov	x1, xzr		\n"
+"	mov	x2, xzr		\n"
+"	mov	x3, xzr		\n"
+"	mov	x4, xzr		\n"
+"	mov	x5, xzr		\n"
+#if 0
+"	mov	r5, r2		/* cleanup */		\n"
+"	mov	r4, r1		/* obj_main */		\n"
+"	mov	r3, r0		/* ps_strings */	\n"
+"	/* Get argc, argv, and envp from stack */	\n"
+"	ldr	r0, [sp, #0x0000]	\n"
+"	add	r1, sp, #0x0004		\n"
+"	add	r2, r1, r0, lsl #2	\n"
+"	add	r2, r2, #0x0004		\n"
+"	/* Ensure the stack is properly aligned before calling C code. */\n"
+"	bic	sp, sp, #7	\n"
+"	sub	sp, sp, #8	\n"
+"	str	r5, [sp, #4]	\n"
+"	str	r4, [sp, #0]	\n"
+"\n"
+#endif
+"	b	 __start  ");
+
+/* ARGSUSED */
+void
+__start(int argc, char **argv, char **env, struct ps_strings *ps_strings,
+    const struct Struct_Obj_Entry *obj __unused, void (*cleanup)(void))
+{
+
+	handle_argv(argc, argv, env);
+
+	if (ps_strings != (struct ps_strings *)0)
+		__ps_strings = ps_strings;
+
+	if (&_DYNAMIC != NULL)
+		atexit(cleanup);
+	else
+		_init_tls();
+#ifdef GCRT
+	atexit(_mcleanup);
+	monstartup(&eprol, &etext);
+#endif
+	handle_static_init(argc, argv, env);
+	exit(main(argc, argv, env));
+}
+
+static const struct {
+	int32_t	namesz;
+	int32_t	descsz;
+	int32_t	type;
+	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
+	char	desc[sizeof(MACHINE_ARCH)];
+} archtag __attribute__ ((section (NOTE_SECTION), aligned(4))) __used = {
+	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
+	.descsz = sizeof(MACHINE_ARCH),
+	.type = ARCH_NOTETYPE,
+	.name = NOTE_FREEBSD_VENDOR,
+	.desc = MACHINE_ARCH
+};
+
+#ifdef GCRT
+__asm__(".text");
+__asm__("eprol:");
+__asm__(".previous");
+#endif

Added: projects/arm64/lib/csu/arm64/crti.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/csu/arm64/crti.S	Thu Aug 14 18:44:08 2014	(r269994)
@@ -0,0 +1,42 @@
+/*-
+ * Copyright 2001 David E. O'Brien
+ * 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 <machine/asm.h>
+__FBSDID("$FreeBSD$");
+
+	.section .init,"ax",@progbits
+	.align 4
+	.globl	_init
+	.type	_init,@function
+_init:
+	1: b 1b
+
+	.section .fini,"ax",@progbits
+	.align 4
+	.globl	_fini
+	.type	_fini,@function
+_fini:
+	1: b 1b
+

Added: projects/arm64/lib/csu/arm64/crtn.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/csu/arm64/crtn.S	Thu Aug 14 18:44:08 2014	(r269994)
@@ -0,0 +1,36 @@
+/*-
+ * Copyright 2001 David E. O'Brien
+ * 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 <machine/asm.h>
+__FBSDID("$FreeBSD$");
+
+	.section .init,"ax",@progbits
+	1: b 1b
+
+
+	.section .fini,"ax",@progbits
+	1: b 1b
+
+	.section .note.GNU-stack,"",%progbits

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 18:46:30 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 BA114993;
 Thu, 14 Aug 2014 18:46:30 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 9C4D22E33;
 Thu, 14 Aug 2014 18:46:30 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EIkUU5042687;
 Thu, 14 Aug 2014 18:46:30 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EIkU4v042685;
 Thu, 14 Aug 2014 18:46:30 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408141846.s7EIkU4v042685@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Thu, 14 Aug 2014 18:46:30 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269995 - projects/arm64/sys/arm64/include
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 18:46:30 -0000

Author: andrew
Date: Thu Aug 14 18:46:30 2014
New Revision: 269995
URL: http://svnweb.freebsd.org/changeset/base/269995

Log:
  Fix the PRI*64 and SCN*64 macros. We use long long for 64-bit typedefs.

Modified:
  projects/arm64/sys/arm64/include/_inttypes.h

Modified: projects/arm64/sys/arm64/include/_inttypes.h
==============================================================================
--- projects/arm64/sys/arm64/include/_inttypes.h	Thu Aug 14 18:44:08 2014	(r269994)
+++ projects/arm64/sys/arm64/include/_inttypes.h	Thu Aug 14 18:46:30 2014	(r269995)
@@ -42,32 +42,32 @@
 #define	PRId8		"d"	/* int8_t */
 #define	PRId16		"d"	/* int16_t */
 #define	PRId32		"d"	/* int32_t */
-#define	PRId64		"ld"	/* int64_t */
+#define	PRId64		"lld"	/* int64_t */
 #define	PRIdLEAST8	"d"	/* int_least8_t */
 #define	PRIdLEAST16	"d"	/* int_least16_t */
 #define	PRIdLEAST32	"d"	/* int_least32_t */
-#define	PRIdLEAST64	"ld"	/* int_least64_t */
+#define	PRIdLEAST64	"lld"	/* int_least64_t */
 #define	PRIdFAST8	"d"	/* int_fast8_t */
 #define	PRIdFAST16	"d"	/* int_fast16_t */
 #define	PRIdFAST32	"d"	/* int_fast32_t */
-#define	PRIdFAST64	"ld"	/* int_fast64_t */
+#define	PRIdFAST64	"lld"	/* int_fast64_t */
 #define	PRIdMAX		"jd"	/* intmax_t */
-#define	PRIdPTR		"ld"	/* intptr_t */
+#define	PRIdPTR		"lld"	/* intptr_t */
 
 #define	PRIi8		"i"	/* int8_t */
 #define	PRIi16		"i"	/* int16_t */
 #define	PRIi32		"i"	/* int32_t */
-#define	PRIi64		"li"	/* int64_t */
+#define	PRIi64		"lli"	/* int64_t */
 #define	PRIiLEAST8	"i"	/* int_least8_t  */
 #define	PRIiLEAST16	"i"	/* int_least16_t */
 #define	PRIiLEAST32	"i"	/* int_least32_t */
-#define	PRIiLEAST64	"li"	/* int_least64_t */
+#define	PRIiLEAST64	"lli"	/* int_least64_t */
 #define	PRIiFAST8	"i"	/* int_fast8_t */
 #define	PRIiFAST16	"i"	/* int_fast16_t */
 #define	PRIiFAST32	"i"	/* int_fast32_t */
-#define	PRIiFAST64	"li"	/* int_fast64_t */
+#define	PRIiFAST64	"lli"	/* int_fast64_t */
 #define	PRIiMAX		"ji"	/* intmax_t */
-#define	PRIiPTR		"li"	/* intptr_t */
+#define	PRIiPTR		"lli"	/* intptr_t */
 
 /* fprintf(3) macros for unsigned integers. */
 
@@ -78,90 +78,90 @@
 #define	PRIoLEAST8	"o"	/* uint_least8_t */
 #define	PRIoLEAST16	"o"	/* uint_least16_t */
 #define	PRIoLEAST32	"o"	/* uint_least32_t */
-#define	PRIoLEAST64	"lo"	/* uint_least64_t */
+#define	PRIoLEAST64	"llo"	/* uint_least64_t */
 #define	PRIoFAST8	"o"	/* uint_fast8_t */
 #define	PRIoFAST16	"o"	/* uint_fast16_t */
 #define	PRIoFAST32	"o"	/* uint_fast32_t */
-#define	PRIoFAST64	"lo"	/* uint_fast64_t */
+#define	PRIoFAST64	"llo"	/* uint_fast64_t */
 #define	PRIoMAX		"jo"	/* uintmax_t */
-#define	PRIoPTR		"lo"	/* uintptr_t */
+#define	PRIoPTR		"llo"	/* uintptr_t */
 
 #define	PRIu8		"u"	/* uint8_t */
 #define	PRIu16		"u"	/* uint16_t */
 #define	PRIu32		"u"	/* uint32_t */
-#define	PRIu64		"lu"	/* uint64_t */
+#define	PRIu64		"llu"	/* uint64_t */
 #define	PRIuLEAST8	"u"	/* uint_least8_t */
 #define	PRIuLEAST16	"u"	/* uint_least16_t */
 #define	PRIuLEAST32	"u"	/* uint_least32_t */
-#define	PRIuLEAST64	"lu"	/* uint_least64_t */
+#define	PRIuLEAST64	"llu"	/* uint_least64_t */
 #define	PRIuFAST8	"u"	/* uint_fast8_t */
 #define	PRIuFAST16	"u"	/* uint_fast16_t */
 #define	PRIuFAST32	"u"	/* uint_fast32_t */
-#define	PRIuFAST64	"lu"	/* uint_fast64_t */
+#define	PRIuFAST64	"llu"	/* uint_fast64_t */
 #define	PRIuMAX		"ju"	/* uintmax_t */
-#define	PRIuPTR		"lu"	/* uintptr_t */
+#define	PRIuPTR		"llu"	/* uintptr_t */
 
 #define	PRIx8		"x"	/* uint8_t */
 #define	PRIx16		"x"	/* uint16_t */
 #define	PRIx32		"x"	/* uint32_t */
-#define	PRIx64		"lx"	/* uint64_t */
+#define	PRIx64		"llx"	/* uint64_t */
 #define	PRIxLEAST8	"x"	/* uint_least8_t */
 #define	PRIxLEAST16	"x"	/* uint_least16_t */
 #define	PRIxLEAST32	"x"	/* uint_least32_t */
-#define	PRIxLEAST64	"lx"	/* uint_least64_t */
+#define	PRIxLEAST64	"llx"	/* uint_least64_t */
 #define	PRIxFAST8	"x"	/* uint_fast8_t */
 #define	PRIxFAST16	"x"	/* uint_fast16_t */
 #define	PRIxFAST32	"x"	/* uint_fast32_t */
-#define	PRIxFAST64	"lx"	/* uint_fast64_t */
+#define	PRIxFAST64	"llx"	/* uint_fast64_t */
 #define	PRIxMAX		"jx"	/* uintmax_t */
-#define	PRIxPTR		"lx"	/* uintptr_t */
+#define	PRIxPTR		"llx"	/* uintptr_t */
 
 #define	PRIX8		"X"	/* uint8_t */
 #define	PRIX16		"X"	/* uint16_t */
 #define	PRIX32		"X"	/* uint32_t */
-#define	PRIX64		"lX"	/* uint64_t */
+#define	PRIX64		"llX"	/* uint64_t */
 #define	PRIXLEAST8	"X"	/* uint_least8_t */
 #define	PRIXLEAST16	"X"	/* uint_least16_t */
 #define	PRIXLEAST32	"X"	/* uint_least32_t */
-#define	PRIXLEAST64	"lX"	/* uint_least64_t */
+#define	PRIXLEAST64	"llX"	/* uint_least64_t */
 #define	PRIXFAST8	"X"	/* uint_fast8_t */
 #define	PRIXFAST16	"X"	/* uint_fast16_t */
 #define	PRIXFAST32	"X"	/* uint_fast32_t */
-#define	PRIXFAST64	"lX"	/* uint_fast64_t */
+#define	PRIXFAST64	"llX"	/* uint_fast64_t */
 #define	PRIXMAX		"jX"	/* uintmax_t */
-#define	PRIXPTR		"lX"	/* uintptr_t */
+#define	PRIXPTR		"llX"	/* uintptr_t */
 
 /* fscanf(3) macros for signed integers. */
 
 #define	SCNd8		"hhd"	/* int8_t */
 #define	SCNd16		"hd"	/* int16_t */
 #define	SCNd32		"d"	/* int32_t */
-#define	SCNd64		"ld"	/* int64_t */
+#define	SCNd64		"lld"	/* int64_t */
 #define	SCNdLEAST8	"hhd"	/* int_least8_t */
 #define	SCNdLEAST16	"hd"	/* int_least16_t */
 #define	SCNdLEAST32	"d"	/* int_least32_t */
-#define	SCNdLEAST64	"ld"	/* int_least64_t */
+#define	SCNdLEAST64	"lld"	/* int_least64_t */
 #define	SCNdFAST8	"d"	/* int_fast8_t */
 #define	SCNdFAST16	"d"	/* int_fast16_t */
 #define	SCNdFAST32	"d"	/* int_fast32_t */
-#define	SCNdFAST64	"ld"	/* int_fast64_t */
+#define	SCNdFAST64	"lld"	/* int_fast64_t */
 #define	SCNdMAX		"jd"	/* intmax_t */
-#define	SCNdPTR		"ld"	/* intptr_t */
+#define	SCNdPTR		"lld"	/* intptr_t */
 
 #define	SCNi8		"hhi"	/* int8_t */
 #define	SCNi16		"hi"	/* int16_t */
 #define	SCNi32		"i"	/* int32_t */
-#define	SCNi64		"li"	/* int64_t */
+#define	SCNi64		"lli"	/* int64_t */
 #define	SCNiLEAST8	"hhi"	/* int_least8_t */
 #define	SCNiLEAST16	"hi"	/* int_least16_t */
 #define	SCNiLEAST32	"i"	/* int_least32_t */
-#define	SCNiLEAST64	"li"	/* int_least64_t */
+#define	SCNiLEAST64	"lli"	/* int_least64_t */
 #define	SCNiFAST8	"i"	/* int_fast8_t */
 #define	SCNiFAST16	"i"	/* int_fast16_t */
 #define	SCNiFAST32	"i"	/* int_fast32_t */
-#define	SCNiFAST64	"li"	/* int_fast64_t */
+#define	SCNiFAST64	"lli"	/* int_fast64_t */
 #define	SCNiMAX		"ji"	/* intmax_t */
-#define	SCNiPTR		"li"	/* intptr_t */
+#define	SCNiPTR		"lli"	/* intptr_t */
 
 /* fscanf(3) macros for unsigned integers. */
 
@@ -172,42 +172,42 @@
 #define	SCNoLEAST8	"hho"	/* uint_least8_t */
 #define	SCNoLEAST16	"ho"	/* uint_least16_t */
 #define	SCNoLEAST32	"o"	/* uint_least32_t */
-#define	SCNoLEAST64	"lo"	/* uint_least64_t */
+#define	SCNoLEAST64	"llo"	/* uint_least64_t */
 #define	SCNoFAST8	"o"	/* uint_fast8_t */
 #define	SCNoFAST16	"o"	/* uint_fast16_t */
 #define	SCNoFAST32	"o"	/* uint_fast32_t */
-#define	SCNoFAST64	"lo"	/* uint_fast64_t */
+#define	SCNoFAST64	"llo"	/* uint_fast64_t */
 #define	SCNoMAX		"jo"	/* uintmax_t */
-#define	SCNoPTR		"lo"	/* uintptr_t */
+#define	SCNoPTR		"llo"	/* uintptr_t */
 
 #define	SCNu8		"hhu"	/* uint8_t */
 #define	SCNu16		"hu"	/* uint16_t */
 #define	SCNu32		"u"	/* uint32_t */
-#define	SCNu64		"lu"	/* uint64_t */
+#define	SCNu64		"llu"	/* uint64_t */
 #define	SCNuLEAST8	"hhu"	/* uint_least8_t */
 #define	SCNuLEAST16	"hu"	/* uint_least16_t */
 #define	SCNuLEAST32	"u"	/* uint_least32_t */
-#define	SCNuLEAST64	"lu"	/* uint_least64_t */
+#define	SCNuLEAST64	"llu"	/* uint_least64_t */
 #define	SCNuFAST8	"u"	/* uint_fast8_t */
 #define	SCNuFAST16	"u"	/* uint_fast16_t */
 #define	SCNuFAST32	"u"	/* uint_fast32_t */
-#define	SCNuFAST64	"lu"	/* uint_fast64_t */
+#define	SCNuFAST64	"llu"	/* uint_fast64_t */
 #define	SCNuMAX		"ju"	/* uintmax_t */
-#define	SCNuPTR		"lu"	/* uintptr_t */
+#define	SCNuPTR		"llu"	/* uintptr_t */
 
 #define	SCNx8		"hhx"	/* uint8_t */
 #define	SCNx16		"hx"	/* uint16_t */
 #define	SCNx32		"x"	/* uint32_t */
-#define	SCNx64		"lx"	/* uint64_t */
+#define	SCNx64		"llx"	/* uint64_t */
 #define	SCNxLEAST8	"hhx"	/* uint_least8_t */
 #define	SCNxLEAST16	"hx"	/* uint_least16_t */
 #define	SCNxLEAST32	"x"	/* uint_least32_t */
-#define	SCNxLEAST64	"lx"	/* uint_least64_t */
+#define	SCNxLEAST64	"llx"	/* uint_least64_t */
 #define	SCNxFAST8	"x"	/* uint_fast8_t */
 #define	SCNxFAST16	"x"	/* uint_fast16_t */
 #define	SCNxFAST32	"x"	/* uint_fast32_t */
-#define	SCNxFAST64	"lx"	/* uint_fast64_t */
+#define	SCNxFAST64	"llx"	/* uint_fast64_t */
 #define	SCNxMAX		"jx"	/* uintmax_t */
-#define	SCNxPTR		"lx"	/* uintptr_t */
+#define	SCNxPTR		"llx"	/* uintptr_t */
 
 #endif /* !_MACHINE_INTTYPES_H_ */

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 18:46:37 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 60FBDA94;
 Thu, 14 Aug 2014 18:46:37 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id EFB802E36;
 Thu, 14 Aug 2014 18:46:36 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EIkavr042783;
 Thu, 14 Aug 2014 18:46:36 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EIka34042782;
 Thu, 14 Aug 2014 18:46:36 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408141846.s7EIka34042782@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Thu, 14 Aug 2014 18:46:36 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269997 - projects/arm64/sys/arm64/include
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 18:46:37 -0000

Author: andrew
Date: Thu Aug 14 18:46:36 2014
New Revision: 269997
URL: http://svnweb.freebsd.org/changeset/base/269997

Log:
  Add WEAK_REFERENCE to create a weak reference to a symbol in asm

Modified:
  projects/arm64/sys/arm64/include/asm.h

Modified: projects/arm64/sys/arm64/include/asm.h
==============================================================================
--- projects/arm64/sys/arm64/include/asm.h	Thu Aug 14 18:46:33 2014	(r269996)
+++ projects/arm64/sys/arm64/include/asm.h	Thu Aug 14 18:46:36 2014	(r269997)
@@ -41,6 +41,10 @@
 	.text; .globl sym; .align 2; sym:
 #define END(sym) .size sym, . - sym
 
+#define	WEAK_REFERENCE(sym, alias)				\
+	.weak alias;						\
+	.set alias,sym
+
 #define	UINT64_C(x)	(x)
 
 #endif /* _MACHINE_ASM_H_ */

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 18:46:34 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 25F859C3;
 Thu, 14 Aug 2014 18:46:34 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 130AF2E35;
 Thu, 14 Aug 2014 18:46:34 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EIkX2K042738;
 Thu, 14 Aug 2014 18:46:33 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EIkX23042737;
 Thu, 14 Aug 2014 18:46:33 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408141846.s7EIkX23042737@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Thu, 14 Aug 2014 18:46:33 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r269996 - projects/arm64/lib/msun/arm64
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 18:46:34 -0000

Author: andrew
Date: Thu Aug 14 18:46:33 2014
New Revision: 269996
URL: http://svnweb.freebsd.org/changeset/base/269996

Log:
  Allow us to build code that includes fenv.h

Modified:
  projects/arm64/lib/msun/arm64/fenv.h

Modified: projects/arm64/lib/msun/arm64/fenv.h
==============================================================================
--- projects/arm64/lib/msun/arm64/fenv.h	Thu Aug 14 18:46:30 2014	(r269995)
+++ projects/arm64/lib/msun/arm64/fenv.h	Thu Aug 14 18:46:33 2014	(r269996)
@@ -71,18 +71,18 @@ extern const fenv_t	__fe_dfl_env;
 #define _FPUSW_SHIFT	8
 #define	_ENABLE_MASK	(FE_ALL_EXCEPT << _FPUSW_SHIFT)
 
-#define	__mrs_fpcr(__r)	__asm __volatile("mrs %0, fpcr" : : "r" (__r))
-#define	__msr_fpcr(__r)	__asm __volatile("msr fpcr, %0" : "=r" (*(__r)))
+#define	__mrs_fpcr(__r)	__asm __volatile("mrs %0, fpcr" : "=r" (__r))
+#define	__msr_fpcr(__r)	__asm __volatile("msr fpcr, %0" : : "r" (__r))
 
-#define	__mrs_fpsr(__r)	__asm __volatile("mrs %0, fpsr" : : "r" (__r))
-#define	__msr_fpsr(__r)	__asm __volatile("msr fpsr, %0" : "=r" (*(__r)))
+#define	__mrs_fpsr(__r)	__asm __volatile("mrs %0, fpsr" : "=r" (__r))
+#define	__msr_fpsr(__r)	__asm __volatile("msr fpsr, %0" : : "r" (__r))
 
 __fenv_static __inline int
 feclearexcept(int __excepts)
 {
 	fexcept_t __r;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	__r &= ~__excepts;
 	__msr_fpsr(__r);
 	return (0);
@@ -93,7 +93,7 @@ fegetexceptflag(fexcept_t *__flagp, int 
 {
 	fexcept_t __r;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	*__flagp = __r & __excepts;
 	return (0);
 }
@@ -103,7 +103,7 @@ fesetexceptflag(const fexcept_t *__flagp
 {
 	fexcept_t __r;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	__r &= ~__excepts;
 	__r |= *__flagp & __excepts;
 	__msr_fpsr(__r);
@@ -115,7 +115,7 @@ feraiseexcept(int __excepts)
 {
 	fexcept_t __r;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	__r |= __excepts;
 	__msr_fpsr(__r);
 	return (0);
@@ -126,7 +126,7 @@ fetestexcept(int __excepts)
 {
 	fexcept_t __r;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	return (__r & __excepts);
 }
 
@@ -135,7 +135,7 @@ fegetround(void)
 {
 	fenv_t __r;
 
-	__mrs_fpcr(&__r);
+	__mrs_fpcr(__r);
 	return ((__r >> _ROUND_SHIFT) & _ROUND_MASK);
 }
 
@@ -146,7 +146,7 @@ fesetround(int __round)
 
 	if (__round & ~_ROUND_MASK)
 		return (-1);
-	__mrs_fpcr(&__r);
+	__mrs_fpcr(__r);
 	__r &= ~(_ROUND_MASK << _ROUND_SHIFT);
 	__r |= __round << _ROUND_SHIFT;
 	__msr_fpcr(__r);
@@ -156,11 +156,12 @@ fesetround(int __round)
 __fenv_static inline int
 fegetenv(fenv_t *__envp)
 {
+	fenv_t __r;
 
-	__mrs_fpcr(&__r);
+	__mrs_fpcr(__r);
 	*__envp = __r & _ENABLE_MASK;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	*__envp |= __r & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT));
 
 	return (0);
@@ -171,14 +172,14 @@ feholdexcept(fenv_t *__envp)
 {
 	fenv_t __r;
 
-	__mrs_fpcr(&__r);
+	__mrs_fpcr(__r);
 	*__envp = __r & _ENABLE_MASK;
 	__r &= ~(_ENABLE_MASK);
 	__msr_fpcr(__r);
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	*__envp |= __r & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT));
-	r &= ~(_ENABLE_MASK);
+	__r &= ~(_ENABLE_MASK);
 	__msr_fpsr(__r);
 	return (0);
 }
@@ -188,7 +189,7 @@ fesetenv(const fenv_t *__envp)
 {
 
 	__msr_fpcr((*__envp) & _ENABLE_MASK);
-	__msr_fpsr((*__envp) & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT));
+	__msr_fpsr((*__envp) & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT)));
 	return (0);
 }
 
@@ -197,7 +198,7 @@ feupdateenv(const fenv_t *__envp)
 {
 	fexcept_t __r;
 
-	__mrs_fpsr(&__r);
+	__mrs_fpsr(__r);
 	fesetenv(__envp);
 	feraiseexcept(__r & FE_ALL_EXCEPT);
 	return (0);
@@ -212,7 +213,7 @@ feenableexcept(int __mask)
 {
 	fenv_t __old_r, __new_r;
 
-	__mrs_fpcr(&__old_r);
+	__mrs_fpcr(__old_r);
 	__new_r = __old_r | ((__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT);
 	__msr_fpcr(__new_r);
 	return ((__old_r >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
@@ -223,7 +224,7 @@ fedisableexcept(int __mask)
 {
 	fenv_t __old_r, __new_r;
 
-	__mrs_fpcr(&__old_r);
+	__mrs_fpcr(__old_r);
 	__new_r = __old_r & ~((__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT);
 	__msr_fpcr(__new_r);
 	return ((__old_r >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
@@ -234,7 +235,7 @@ fegetexcept(void)
 {
 	fenv_t __r;
 
-	__mrs_fpcr(&__r);
+	__mrs_fpcr(__r);
 	return ((__r & _ENABLE_MASK) >> _FPUSW_SHIFT);
 }
 

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 22:00:19 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 D33A52CB;
 Thu, 14 Aug 2014 22:00:19 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id CB840429C;
 Thu, 14 Aug 2014 21:43:21 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7ELhLNQ024451;
 Thu, 14 Aug 2014 21:43:21 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7ELhKmC024443;
 Thu, 14 Aug 2014 21:43:20 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408142143.s7ELhKmC024443@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Thu, 14 Aug 2014 21:43:20 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270003 - in projects/ipfw: sbin/ipfw sys/netinet
 sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 22:00:19 -0000

Author: melifaro
Date: Thu Aug 14 21:43:20 2014
New Revision: 270003
URL: http://svnweb.freebsd.org/changeset/base/270003

Log:
  Replace "cidr" table type with "addr" type.
  
  Suggested by:	luigi

Modified:
  projects/ipfw/sbin/ipfw/ipfw.8
  projects/ipfw/sbin/ipfw/tables.c
  projects/ipfw/sys/netinet/ip_fw.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c

Modified: projects/ipfw/sbin/ipfw/ipfw.8
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw.8	Thu Aug 14 20:20:21 2014	(r270002)
+++ projects/ipfw/sbin/ipfw/ipfw.8	Thu Aug 14 21:43:20 2014	(r270003)
@@ -1886,11 +1886,11 @@ There may be up to 65535 different looku
 .Pp
 The following table types are supported:
 .Bl -tag -width indent
-.It Ar table-type : Ar cidr | iface | number | flow
+.It Ar table-type : Ar addr | iface | number | flow
 .It Ar table-key : Ar addr Ns Oo / Ns Ar masklen Oc | iface-name | number | flow-spec
 .It Ar flow-spec : Ar flow-field Ns Op , Ns Ar flow-spec
 .It Ar flow-field : src-ip | proto | src-port | dst-ip | dst-port
-.It Cm cidr
+.It Cm addr
 matches IPv4 or IPv6 address.
 Each entry is represented by an
 .Ar addr Ns Op / Ns Ar masklen
@@ -2030,18 +2030,18 @@ Shows generic table information and algo
 The following lookup algorithms are supported:
 .Bl -tag -width indent
 .It Ar algo-desc : algo-name | "algo-name algo-data"
-.It Ar algo-name: Ar cidr:radix | cidr:hash | iface:arrray | number:array | flow:hash
-.It Cm cidr:radix
+.It Ar algo-name: Ar addr:radix | addr:hash | iface:arrray | number:array | flow:hash
+.It Cm addr:radix
 Separate Radix trees for IPv4 and IPv6, the same way as the routing table (see
 .Xr route 4 ) .
 Default choice for
 .Ar
-cidr
+addr
 type.
-.It Cm cidr:hash
+.It Cm addr:hash
 Separate auto-growing hashes for IPv4 and IPv6.
 Accepts entries with the same mask length specified initially via
-.Cm "cidr:hash masks=/v4,/v6"
+.Cm "addr:hash masks=/v4,/v6"
 algorithm creation options.
 Assume /32 and /128 masks by default.
 Search removes host bits (according to mask) from supplied address and checks
@@ -3454,7 +3454,7 @@ Then we classify traffic using a single 
 .Dl "ipfw pipe 1 config bw 1000Kbyte/s"
 .Dl "ipfw pipe 4 config bw 4000Kbyte/s"
 .Dl "..."
-.Dl "ipfw table T1 create type cidr"
+.Dl "ipfw table T1 create type addr"
 .Dl "ipfw table T1 add 192.168.2.0/24 1"
 .Dl "ipfw table T1 add 192.168.0.0/27 4"
 .Dl "ipfw table T1 add 192.168.0.2 1"
@@ -3465,7 +3465,7 @@ Using the
 .Cm fwd
 action, the table entries may include hostnames and IP addresses.
 .Pp
-.Dl "ipfw table T2 create type cidr ftype ip"
+.Dl "ipfw table T2 create type addr ftype ip"
 .Dl "ipfw table T2 add 192.168.2.0/24 10.23.2.1"
 .Dl "ipfw table T21 add 192.168.0.0/27 router1.dmz"
 .Dl "..."

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Thu Aug 14 20:20:21 2014	(r270002)
+++ projects/ipfw/sbin/ipfw/tables.c	Thu Aug 14 21:43:20 2014	(r270003)
@@ -79,7 +79,7 @@ static int tables_foreach(table_cb_t *f,
 #endif
 
 static struct _s_x tabletypes[] = {
-      { "cidr",		IPFW_TABLE_CIDR },
+      { "addr",		IPFW_TABLE_ADDR },
       { "iface",	IPFW_TABLE_INTERFACE },
       { "number",	IPFW_TABLE_NUMBER },
       { "flow",		IPFW_TABLE_FLOW },
@@ -375,8 +375,7 @@ table_print_type(char *tbuf, size_t size
 /*
  * Creates new table
  *
- * ipfw table NAME create [ type { cidr | iface | u32 } ]
- *     [ valtype { number | ip | dscp } ]
+ * ipfw table NAME create [ type { addr | iface | number | flow } ]
  *     [ algo algoname ]
  */
 static void
@@ -462,7 +461,7 @@ table_create(ipfw_obj_header *oh, int ac
 
 	/* Set some defaults to preserve compability */
 	if (xi.algoname[0] == '\0' && xi.type == 0)
-		xi.type = IPFW_TABLE_CIDR;
+		xi.type = IPFW_TABLE_ADDR;
 	if (xi.vtype == 0)
 		xi.vtype = IPFW_VTYPE_U32;
 
@@ -1142,7 +1141,7 @@ tentry_fill_key_type(char *arg, ipfw_obj
 	paddr = (struct in6_addr *)&tentry->k;
 
 	switch (type) {
-	case IPFW_TABLE_CIDR:
+	case IPFW_TABLE_ADDR:
 		/* Remove / if exists */
 		if ((p = strchr(arg, '/')) != NULL) {
 			*p = '\0';
@@ -1172,7 +1171,7 @@ tentry_fill_key_type(char *arg, ipfw_obj
 				errx(EX_NOHOST, "hostname ``%s'' unknown", arg);
 
 			masklen = 32;
-			type = IPFW_TABLE_CIDR;
+			type = IPFW_TABLE_ADDR;
 			af = AF_INET;
 		}
 		break;
@@ -1351,7 +1350,7 @@ tentry_fill_key(ipfw_obj_header *oh, ipf
 			    oh->ntlv.name);
 		/*
 		 * Table does not exist.
-		 * Compability layer: try to interpret data as CIDR
+		 * Compability layer: try to interpret data as ADDR
 		 * before failing.
 		 */
 		if ((del = strchr(key, '/')) != NULL)
@@ -1359,7 +1358,7 @@ tentry_fill_key(ipfw_obj_header *oh, ipf
 		if (inet_pton(AF_INET, key, &tent->k.addr6) == 1 ||
 		    inet_pton(AF_INET6, key, &tent->k.addr6) == 1) {
 			/* OK Prepare and send */
-			type = IPFW_TABLE_CIDR;
+			type = IPFW_TABLE_ADDR;
 			/*
 			 * XXX: Value type is forced to be u32.
 			 * This should be changed for MFC.
@@ -1575,7 +1574,7 @@ table_show_entry(ipfw_xtable_info *i, ip
 		snprintf(pval, sizeof(pval), "%u", tval);
 
 	switch (i->type) {
-	case IPFW_TABLE_CIDR:
+	case IPFW_TABLE_ADDR:
 		/* IPv4 or IPv6 prefixes */
 		inet_ntop(tent->subtype, &tent->k, tbuf, sizeof(tbuf));
 		printf("%s/%u %s\n", tbuf, tent->masklen, pval);

Modified: projects/ipfw/sys/netinet/ip_fw.h
==============================================================================
--- projects/ipfw/sys/netinet/ip_fw.h	Thu Aug 14 20:20:21 2014	(r270002)
+++ projects/ipfw/sys/netinet/ip_fw.h	Thu Aug 14 21:43:20 2014	(r270003)
@@ -654,12 +654,14 @@ struct _ipfw_dyn_rule {
  * These are used for lookup tables.
  */
 
-#define	IPFW_TABLE_CIDR		1	/* Table for holding IPv4/IPv6 prefixes */
+#define	IPFW_TABLE_ADDR		1	/* Table for holding IPv4/IPv6 prefixes */
 #define	IPFW_TABLE_INTERFACE	2	/* Table for holding interface names */
 #define	IPFW_TABLE_NUMBER	3	/* Table for holding ports/uid/gid/etc */
 #define	IPFW_TABLE_FLOW		4	/* Table for holding flow data */
 #define	IPFW_TABLE_MAXTYPE	4	/* Maximum valid number */
 
+#define	IPFW_TABLE_CIDR	IPFW_TABLE_ADDR	/* compat */
+
 /* Value types */
 #define	IPFW_VTYPE_U32		1	/* Skipto/tablearg integer */
 
@@ -833,7 +835,7 @@ typedef struct _ipfw_ta_tinfo {
 #define	IPFW_TATFLAGS_AFITEM	0x0004		/* diff. items per AF	*/
 
 typedef struct _ipfw_xtable_info {
-	uint8_t		type;		/* table type (cidr,iface,..)	*/
+	uint8_t		type;		/* table type (addr,iface,..)	*/
 	uint8_t		tflags;		/* type flags			*/
 	uint8_t		vtype;		/* value type (u32)		*/
 	uint8_t		vftype;		/* value format type (ip,number)*/

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 20:20:21 2014	(r270002)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 21:43:20 2014	(r270003)
@@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$");
  /*
  * Table has the following `type` concepts:
  *
- * `no.type` represents lookup key type (cidr, ifp, uid, etc..)
+ * `no.type` represents lookup key type (addr, ifp, uid, etc..)
  * `vtype` represents table value type (currently U32)
  * `ftype` (at the moment )is pure userland field helping to properly
  *     format value data e.g. "value is IPv4 nexthop" or "value is DSCP"
@@ -784,7 +784,7 @@ ipfw_manage_table_ent_v0(struct ip_fw_ch
 	tei.value = xent->value;
 	/* Old requests compability */
 	tei.flags = TEI_FLAGS_COMPAT;
-	if (xent->type == IPFW_TABLE_CIDR) {
+	if (xent->type == IPFW_TABLE_ADDR) {
 		if (xent->len - hdrlen == sizeof(in_addr_t))
 			tei.subtype = AF_INET;
 		else
@@ -2268,7 +2268,7 @@ ipfw_dump_table_legacy(struct ip_fw_chai
 	ta = tc->ta;
 
 	/* This dump format supports IPv4 only */
-	if (tc->no.type != IPFW_TABLE_CIDR)
+	if (tc->no.type != IPFW_TABLE_ADDR)
 		return (0);
 
 	memset(&da, 0, sizeof(da));
@@ -2347,7 +2347,7 @@ dump_table_xentry(void *e, void *arg)
 	xent->masklen = tent->masklen;
 	xent->value = tent->value;
 	/* Apply some hacks */
-	if (tc->no.type == IPFW_TABLE_CIDR && tent->subtype == AF_INET) {
+	if (tc->no.type == IPFW_TABLE_ADDR && tent->subtype == AF_INET) {
 		xent->k.addr6.s6_addr32[3] = tent->k.addr.s_addr;
 		xent->flags = IPFW_TCF_INET;
 	} else
@@ -2395,7 +2395,7 @@ find_table_algo(struct tables_config *tc
 		 * One can supply additional algorithm
 		 * parameters so we compare only the first word
 		 * of supplied name:
-		 * 'hash_cidr hsize=32'
+		 * 'addr:chash hsize=32'
 		 * '^^^^^^^^^'
 		 *
 		 */
@@ -2559,8 +2559,8 @@ classify_table_opcode(ipfw_insn *cmd, ui
 	case O_IP_DST_LOOKUP:
 		/* Basic IPv4/IPv6 or u32 lookups */
 		*puidx = cmd->arg1;
-		/* Assume CIDR by default */
-		*ptype = IPFW_TABLE_CIDR;
+		/* Assume ADDR by default */
+		*ptype = IPFW_TABLE_ADDR;
 		skip = 0;
 		
 		if (F_LEN(cmd) > F_INSN_SIZE(ipfw_insn_u32)) {

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Thu Aug 14 20:20:21 2014	(r270002)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Thu Aug 14 21:43:20 2014	(r270003)
@@ -65,8 +65,8 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
  *
  * Algo init:
  * * struct table_algo has to be filled with:
- *   name: "type:algoname" format, e.g. "cidr:radix". Currently
- *     there are the following types: "cidr", "iface", "number" and "flow".
+ *   name: "type:algoname" format, e.g. "addr:radix". Currently
+ *     there are the following types: "addr", "iface", "number" and "flow".
  *   type: one of IPFW_TABLE_* types
  *   flags: one or more TA_FLAGS_*
  *   ta_buf_size: size of structure used to store add/del item state.
@@ -292,7 +292,7 @@ static int bdel(const void *key, void *b
 
 
 /*
- * CIDR implementation using radix
+ * ADDR implementation using radix
  *
  */
 
@@ -315,7 +315,7 @@ static int bdel(const void *key, void *b
 #define OFF_LEN_INET	(8 * offsetof(struct sockaddr_in, sin_addr))
 #define OFF_LEN_INET6	(8 * offsetof(struct sa_in6, sin6_addr))
 
-struct radix_cidr_entry {
+struct radix_addr_entry {
 	struct radix_node	rn[2];
 	struct sockaddr_in	addr;
 	uint32_t		value;
@@ -329,7 +329,7 @@ struct sa_in6 {
 	struct in6_addr		sin6_addr;
 };
 
-struct radix_cidr_xentry {
+struct radix_addr_xentry {
 	struct radix_node	rn[2];
 	struct sa_in6		addr6;
 	uint32_t		value;
@@ -343,7 +343,7 @@ struct radix_cfg {
 	size_t			count6;
 };
 
-struct ta_buf_cidr 
+struct ta_buf_radix
 {
 	void *ent_ptr;
 	struct sockaddr	*addr_ptr;
@@ -367,23 +367,23 @@ ta_lookup_radix(struct table_info *ti, v
 	struct radix_node_head *rnh;
 
 	if (keylen == sizeof(in_addr_t)) {
-		struct radix_cidr_entry *ent;
+		struct radix_addr_entry *ent;
 		struct sockaddr_in sa;
 		KEY_LEN(sa) = KEY_LEN_INET;
 		sa.sin_addr.s_addr = *((in_addr_t *)key);
 		rnh = (struct radix_node_head *)ti->state;
-		ent = (struct radix_cidr_entry *)(rnh->rnh_matchaddr(&sa, rnh));
+		ent = (struct radix_addr_entry *)(rnh->rnh_matchaddr(&sa, rnh));
 		if (ent != NULL) {
 			*val = ent->value;
 			return (1);
 		}
 	} else {
-		struct radix_cidr_xentry *xent;
+		struct radix_addr_xentry *xent;
 		struct sa_in6 sa6;
 		KEY_LEN(sa6) = KEY_LEN_INET6;
 		memcpy(&sa6.sin6_addr, key, sizeof(struct in6_addr));
 		rnh = (struct radix_node_head *)ti->xstate;
-		xent = (struct radix_cidr_xentry *)(rnh->rnh_matchaddr(&sa6, rnh));
+		xent = (struct radix_addr_xentry *)(rnh->rnh_matchaddr(&sa6, rnh));
 		if (xent != NULL) {
 			*val = xent->value;
 			return (1);
@@ -421,9 +421,9 @@ static int
 flush_radix_entry(struct radix_node *rn, void *arg)
 {
 	struct radix_node_head * const rnh = arg;
-	struct radix_cidr_entry *ent;
+	struct radix_addr_entry *ent;
 
-	ent = (struct radix_cidr_entry *)
+	ent = (struct radix_addr_entry *)
 	    rnh->rnh_deladdr(rn->rn_key, rn->rn_mask, rnh);
 	if (ent != NULL)
 		free(ent, M_IPFW_TBL);
@@ -462,20 +462,20 @@ ta_dump_radix_tinfo(void *ta_state, stru
 	tinfo->flags = IPFW_TATFLAGS_AFDATA | IPFW_TATFLAGS_AFITEM;
 	tinfo->taclass4 = IPFW_TACLASS_RADIX;
 	tinfo->count4 = cfg->count4;
-	tinfo->itemsize4 = sizeof(struct radix_cidr_entry);
+	tinfo->itemsize4 = sizeof(struct radix_addr_entry);
 	tinfo->taclass6 = IPFW_TACLASS_RADIX;
 	tinfo->count6 = cfg->count6;
-	tinfo->itemsize6 = sizeof(struct radix_cidr_xentry);
+	tinfo->itemsize6 = sizeof(struct radix_addr_xentry);
 }
 
 static int
 ta_dump_radix_tentry(void *ta_state, struct table_info *ti, void *e,
     ipfw_obj_tentry *tent)
 {
-	struct radix_cidr_entry *n;
-	struct radix_cidr_xentry *xn;
+	struct radix_addr_entry *n;
+	struct radix_addr_xentry *xn;
 
-	n = (struct radix_cidr_entry *)e;
+	n = (struct radix_addr_entry *)e;
 
 	/* Guess IPv4/IPv6 radix by sockaddr family */
 	if (n->addr.sin_family == AF_INET) {
@@ -485,7 +485,7 @@ ta_dump_radix_tentry(void *ta_state, str
 		tent->value = n->value;
 #ifdef INET6
 	} else {
-		xn = (struct radix_cidr_xentry *)e;
+		xn = (struct radix_addr_xentry *)e;
 		memcpy(&tent->k, &xn->addr6.sin6_addr, sizeof(struct in6_addr));
 		tent->masklen = xn->masklen;
 		tent->subtype = AF_INET6;
@@ -604,13 +604,13 @@ static int
 ta_prepare_add_radix(struct ip_fw_chain *ch, struct tentry_info *tei,
     void *ta_buf)
 {
-	struct ta_buf_cidr *tb;
-	struct radix_cidr_entry *ent;
-	struct radix_cidr_xentry *xent;
+	struct ta_buf_radix *tb;
+	struct radix_addr_entry *ent;
+	struct radix_addr_xentry *xent;
 	struct sockaddr *addr, *mask;
 	int mlen, set_mask;
 
-	tb = (struct ta_buf_cidr *)ta_buf;
+	tb = (struct ta_buf_radix *)ta_buf;
 
 	mlen = tei->masklen;
 	set_mask = 0;
@@ -661,11 +661,11 @@ ta_add_radix(void *ta_state, struct tabl
 	struct radix_cfg *cfg;
 	struct radix_node_head *rnh;
 	struct radix_node *rn;
-	struct ta_buf_cidr *tb;
+	struct ta_buf_radix *tb;
 	uint32_t *old_value, value;
 
 	cfg = (struct radix_cfg *)ta_state;
-	tb = (struct ta_buf_cidr *)ta_buf;
+	tb = (struct ta_buf_radix *)ta_buf;
 
 	if (tei->subtype == AF_INET)
 		rnh = ti->state;
@@ -679,9 +679,9 @@ ta_add_radix(void *ta_state, struct tabl
 			return (EEXIST);
 		/* Record already exists. Update value if we're asked to */
 		if (tei->subtype == AF_INET)
-			old_value = &((struct radix_cidr_entry *)rn)->value;
+			old_value = &((struct radix_addr_entry *)rn)->value;
 		else
-			old_value = &((struct radix_cidr_xentry *)rn)->value;
+			old_value = &((struct radix_addr_xentry *)rn)->value;
 
 		value = *old_value;
 		*old_value = tei->value;
@@ -717,11 +717,11 @@ static int
 ta_prepare_del_radix(struct ip_fw_chain *ch, struct tentry_info *tei,
     void *ta_buf)
 {
-	struct ta_buf_cidr *tb;
+	struct ta_buf_radix *tb;
 	struct sockaddr *addr, *mask;
 	int mlen, set_mask;
 
-	tb = (struct ta_buf_cidr *)ta_buf;
+	tb = (struct ta_buf_radix *)ta_buf;
 
 	mlen = tei->masklen;
 	set_mask = 0;
@@ -758,10 +758,10 @@ ta_del_radix(void *ta_state, struct tabl
 	struct radix_cfg *cfg;
 	struct radix_node_head *rnh;
 	struct radix_node *rn;
-	struct ta_buf_cidr *tb;
+	struct ta_buf_radix *tb;
 
 	cfg = (struct radix_cfg *)ta_state;
-	tb = (struct ta_buf_cidr *)ta_buf;
+	tb = (struct ta_buf_radix *)ta_buf;
 
 	if (tei->subtype == AF_INET)
 		rnh = ti->state;
@@ -775,9 +775,9 @@ ta_del_radix(void *ta_state, struct tabl
 
 	/* Save entry value to @tei */
 	if (tei->subtype == AF_INET)
-		tei->value = ((struct radix_cidr_entry *)rn)->value;
+		tei->value = ((struct radix_addr_entry *)rn)->value;
 	else
-		tei->value = ((struct radix_cidr_xentry *)rn)->value;
+		tei->value = ((struct radix_addr_xentry *)rn)->value;
 
 	tb->ent_ptr = rn;
 	
@@ -794,9 +794,9 @@ static void
 ta_flush_radix_entry(struct ip_fw_chain *ch, struct tentry_info *tei,
     void *ta_buf)
 {
-	struct ta_buf_cidr *tb;
+	struct ta_buf_radix *tb;
 
-	tb = (struct ta_buf_cidr *)ta_buf;
+	tb = (struct ta_buf_radix *)ta_buf;
 
 	if (tb->ent_ptr != NULL)
 		free(tb->ent_ptr, M_IPFW_TBL);
@@ -816,11 +816,11 @@ ta_need_modify_radix(void *ta_state, str
 	return (0);
 }
 
-struct table_algo cidr_radix = {
-	.name		= "cidr:radix",
-	.type		= IPFW_TABLE_CIDR,
+struct table_algo addr_radix = {
+	.name		= "addr:radix",
+	.type		= IPFW_TABLE_ADDR,
 	.flags		= TA_FLAG_DEFAULT,
-	.ta_buf_size	= sizeof(struct ta_buf_cidr),
+	.ta_buf_size	= sizeof(struct ta_buf_radix),
 	.init		= ta_init_radix,
 	.destroy	= ta_destroy_radix,
 	.prepare_add	= ta_prepare_add_radix,
@@ -837,7 +837,7 @@ struct table_algo cidr_radix = {
 
 
 /*
- * cidr:hash cmds
+ * addr:hash cmds
  *
  *
  * ti->data:
@@ -1124,10 +1124,10 @@ ta_print_chash_config(void *ta_state, st
 	cfg = (struct chash_cfg *)ta_state;
 
 	if (cfg->mask4 != 32 || cfg->mask6 != 128)
-		snprintf(buf, bufsize, "%s masks=/%d,/%d", "cidr:hash",
+		snprintf(buf, bufsize, "%s masks=/%d,/%d", "addr:hash",
 		    cfg->mask4, cfg->mask6);
 	else
-		snprintf(buf, bufsize, "%s", "cidr:hash");
+		snprintf(buf, bufsize, "%s", "addr:hash");
 }
 
 static int
@@ -1145,7 +1145,7 @@ log2(uint32_t v)
 /*
  * New table.
  * We assume 'data' to be either NULL or the following format:
- * 'cidr:hash [masks=/32[,/128]]'
+ * 'addr:hash [masks=/32[,/128]]'
  */
 static int
 ta_init_chash(struct ip_fw_chain *ch, void **ta_state, struct table_info *ti,
@@ -1728,9 +1728,9 @@ ta_flush_mod_chash(void *ta_buf)
 		free(mi->main_ptr6, M_IPFW);
 }
 
-struct table_algo cidr_hash = {
-	.name		= "cidr:hash",
-	.type		= IPFW_TABLE_CIDR,
+struct table_algo addr_hash = {
+	.name		= "addr:hash",
+	.type		= IPFW_TABLE_ADDR,
 	.ta_buf_size	= sizeof(struct ta_buf_chash),
 	.init		= ta_init_chash,
 	.destroy	= ta_destroy_chash,
@@ -3605,9 +3605,9 @@ ta_print_kfib_config(void *ta_state, str
 {
 
 	if (ti->data != 0)
-		snprintf(buf, bufsize, "%s fib=%lu", "cidr:kfib", ti->data);
+		snprintf(buf, bufsize, "%s fib=%lu", "addr:kfib", ti->data);
 	else
-		snprintf(buf, bufsize, "%s", "cidr:kfib");
+		snprintf(buf, bufsize, "%s", "addr:kfib");
 }
 
 static int
@@ -3763,9 +3763,9 @@ ta_foreach_kfib(void *ta_state, struct t
 	}
 }
 
-struct table_algo cidr_kfib = {
-	.name		= "cidr:kfib",
-	.type		= IPFW_TABLE_CIDR,
+struct table_algo addr_kfib = {
+	.name		= "addr:kfib",
+	.type		= IPFW_TABLE_ADDR,
 	.flags		= TA_FLAG_READONLY,
 	.ta_buf_size	= 0,
 	.init		= ta_init_kfib,
@@ -3786,24 +3786,24 @@ ipfw_table_algo_init(struct ip_fw_chain 
 	 * Register all algorithms presented here.
 	 */
 	sz = sizeof(struct table_algo);
-	ipfw_add_table_algo(ch, &cidr_radix, sz, &cidr_radix.idx);
-	ipfw_add_table_algo(ch, &cidr_hash, sz, &cidr_hash.idx);
+	ipfw_add_table_algo(ch, &addr_radix, sz, &addr_radix.idx);
+	ipfw_add_table_algo(ch, &addr_hash, sz, &addr_hash.idx);
 	ipfw_add_table_algo(ch, &iface_idx, sz, &iface_idx.idx);
 	ipfw_add_table_algo(ch, &number_array, sz, &number_array.idx);
 	ipfw_add_table_algo(ch, &flow_hash, sz, &flow_hash.idx);
-	ipfw_add_table_algo(ch, &cidr_kfib, sz, &cidr_kfib.idx);
+	ipfw_add_table_algo(ch, &addr_kfib, sz, &addr_kfib.idx);
 }
 
 void
 ipfw_table_algo_destroy(struct ip_fw_chain *ch)
 {
 
-	ipfw_del_table_algo(ch, cidr_radix.idx);
-	ipfw_del_table_algo(ch, cidr_hash.idx);
+	ipfw_del_table_algo(ch, addr_radix.idx);
+	ipfw_del_table_algo(ch, addr_hash.idx);
 	ipfw_del_table_algo(ch, iface_idx.idx);
 	ipfw_del_table_algo(ch, number_array.idx);
 	ipfw_del_table_algo(ch, flow_hash.idx);
-	ipfw_del_table_algo(ch, cidr_kfib.idx);
+	ipfw_del_table_algo(ch, addr_kfib.idx);
 }
 
 

From owner-svn-src-projects@FreeBSD.ORG  Thu Aug 14 22:01:29 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 1E0F2C16;
 Thu, 14 Aug 2014 22:01:29 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3BBF62B3F;
 Thu, 14 Aug 2014 20:17:24 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7EKHObw083985;
 Thu, 14 Aug 2014 20:17:24 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7EKHN5W083982;
 Thu, 14 Aug 2014 20:17:23 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408142017.s7EKHN5W083982@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Thu, 14 Aug 2014 20:17:23 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270001 - projects/ipfw/sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Aug 2014 22:01:29 -0000

Author: melifaro
Date: Thu Aug 14 20:17:23 2014
New Revision: 270001
URL: http://svnweb.freebsd.org/changeset/base/270001

Log:
  * Add cidr:kfib algo type just for fun. It binds kernel fib
  of given number to a table.
  
  Example:
  # ipfw table fib2 create algo "cidr:kfib fib=2"
  # ipfw table fib2 info
  +++ table(fib2), set(0) +++
   kindex: 2, type: cidr, locked
   valtype: number, references: 0
   algorithm: cidr:kfib fib=2
   items: 11, size: 288
  # ipfw table fib2 list
  +++ table(fib2), set(0) +++
  10.0.0.0/24 0
  127.0.0.1/32 0
  ::/96 0
  ::1/128 0
  ::ffff:0.0.0.0/96 0
  2a02:978:2::/112 0
  fe80::/10 0
  fe80:1::/64 0
  fe80:2::/64 0
  fe80:3::/64 0
  ff02::/16 0
  # ipfw table fib2 lookup 10.0.0.5
  10.0.0.0/24 0
  # ipfw table fib2 lookup 2a02:978:2::11
  2a02:978:2::/112 0
  # ipfw table fib2 detail
  +++ table(fib2), set(0) +++
   kindex: 2, type: cidr, locked
   valtype: number, references: 0
   algorithm: cidr:kfib fib=2
   items: 11, size: 288
   IPv4 algorithm radix info
    items: 0 itemsize: 200
   IPv6 algorithm radix info
    items: 0 itemsize: 200

Modified:
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 19:15:20 2014	(r270000)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Thu Aug 14 20:17:23 2014	(r270001)
@@ -1885,6 +1885,60 @@ ipfw_mark_table_kidx(struct ip_fw_chain 
 	return (count);
 }
 
+struct dump_args {
+	struct table_info *ti;
+	struct table_config *tc;
+	struct sockopt_data *sd;
+	uint32_t cnt;
+	uint16_t uidx;
+	int error;
+	ipfw_table_entry *ent;
+	uint32_t size;
+	ipfw_obj_tentry tent;
+};
+
+static int
+count_ext_entries(void *e, void *arg)
+{
+	struct dump_args *da;
+
+	da = (struct dump_args *)arg;
+	da->cnt++;
+
+	return (0);
+}
+
+/*
+ * Gets number of items from table either using
+ * internal counter or calling algo callback for
+ * externally-managed tables.
+ *
+ * Returns number of records.
+ */
+static uint32_t
+table_get_count(struct ip_fw_chain *ch, struct table_config *tc)
+{
+	struct table_info *ti;
+	struct table_algo *ta;
+	struct dump_args da;
+
+	ti = KIDX_TO_TI(ch, tc->no.kidx);
+	ta = tc->ta;
+
+	/* Use internal counter for self-managed tables */
+	if ((ta->flags & TA_FLAG_READONLY) == 0)
+		return (tc->count);
+
+	/* Use callback to quickly get number of items */
+	if ((ta->flags & TA_FLAG_EXTCOUNTER) != 0)
+		return (ta->get_count(tc->astate, ti));
+
+	/* Count number of iterms ourselves */
+	memset(&da, 0, sizeof(da));
+	ta->foreach(tc->astate, ti, count_ext_entries, &da);
+
+	return (da.cnt);
+}
 
 /*
  * Exports table @tc info into standard ipfw_xtable_info format.
@@ -1903,7 +1957,7 @@ export_table_info(struct ip_fw_chain *ch
 	i->set = tc->no.set;
 	i->kidx = tc->no.kidx;
 	i->refcnt = tc->no.refcnt;
-	i->count = tc->count;
+	i->count = table_get_count(ch, tc);
 	i->limit = tc->limit;
 	i->flags |= (tc->locked != 0) ? IPFW_TGFLAGS_LOCKED : 0;
 	i->size = tc->count * sizeof(ipfw_obj_tentry);
@@ -1982,18 +2036,6 @@ export_tables(struct ip_fw_chain *ch, ip
 	return (0);
 }
 
-struct dump_args {
-	struct table_info *ti;
-	struct table_config *tc;
-	struct sockopt_data *sd;
-	uint32_t cnt;
-	uint16_t uidx;
-	int error;
-	ipfw_table_entry *ent;
-	uint32_t size;
-	ipfw_obj_tentry tent;
-};
-
 int
 ipfw_dump_table(struct ip_fw_chain *ch, ip_fw3_opheader *op3,
     struct sockopt_data *sd)
@@ -2092,7 +2134,7 @@ ipfw_dump_table_v0(struct ip_fw_chain *c
 	struct table_config *tc;
 	struct table_algo *ta;
 	struct dump_args da;
-	size_t sz;
+	size_t sz, count;
 
 	xtbl = (ipfw_xtable *)ipfw_get_sopt_header(sd, sizeof(ipfw_xtable));
 	if (xtbl == NULL)
@@ -2106,9 +2148,10 @@ ipfw_dump_table_v0(struct ip_fw_chain *c
 		IPFW_UH_RUNLOCK(ch);
 		return (0);
 	}
-	sz = tc->count * sizeof(ipfw_table_xentry) + sizeof(ipfw_xtable);
+	count = table_get_count(ch, tc);
+	sz = count * sizeof(ipfw_table_xentry) + sizeof(ipfw_xtable);
 
-	xtbl->cnt = tc->count;
+	xtbl->cnt = count;
 	xtbl->size = sz;
 	xtbl->type = tc->no.type;
 	xtbl->tbl = ti.uidx;
@@ -2149,7 +2192,7 @@ ipfw_count_table(struct ip_fw_chain *ch,
 
 	if ((tc = find_table(CHAIN_TO_NI(ch), ti)) == NULL)
 		return (ESRCH);
-	*cnt = tc->count;
+	*cnt = table_get_count(ch, tc);
 	return (0);
 }
 
@@ -2160,13 +2203,16 @@ int
 ipfw_count_xtable(struct ip_fw_chain *ch, struct tid_info *ti, uint32_t *cnt)
 {
 	struct table_config *tc;
+	uint32_t count;
 
 	if ((tc = find_table(CHAIN_TO_NI(ch), ti)) == NULL) {
 		*cnt = 0;
 		return (0); /* 'table all list' requires success */
 	}
-	*cnt = tc->count * sizeof(ipfw_table_xentry);
-	if (tc->count > 0)
+
+	count = table_get_count(ch, tc);
+	*cnt = count * sizeof(ipfw_table_xentry);
+	if (count > 0)
 		*cnt += sizeof(ipfw_xtable);
 	return (0);
 }

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Thu Aug 14 19:15:20 2014	(r270000)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.h	Thu Aug 14 20:17:23 2014	(r270001)
@@ -105,6 +105,7 @@ typedef int ta_find_tentry(void *ta_stat
     ipfw_obj_tentry *tent);
 typedef void ta_dump_tinfo(void *ta_state, struct table_info *ti, 
     ipfw_ta_tinfo *tinfo);
+typedef uint32_t ta_get_count(void *ta_state, struct table_info *ti);
 
 struct table_algo {
 	char		name[16];
@@ -131,9 +132,11 @@ struct table_algo {
 	ta_dump_tentry	*dump_tentry;
 	ta_print_config	*print_config;
 	ta_dump_tinfo	*dump_tinfo;
+	ta_get_count	*get_count;
 };
 #define	TA_FLAG_DEFAULT		0x01	/* Algo is default for given type */
 #define	TA_FLAG_READONLY	0x02	/* Algo does not support modifications*/
+#define	TA_FLAG_EXTCOUNTER	0x04	/* Algo has external counter available*/
 
 int ipfw_add_table_algo(struct ip_fw_chain *ch, struct table_algo *ta,
     size_t size, int *idx);

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Thu Aug 14 19:15:20 2014	(r270000)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Thu Aug 14 20:17:23 2014	(r270001)
@@ -48,6 +48,7 @@ __FBSDID("$FreeBSD: projects/ipfw/sys/ne
 #include <sys/queue.h>
 #include <net/if.h>	/* ip_fw.h requires IFNAMSIZ */
 #include <net/radix.h>
+#include <net/route.h>
 
 #include <netinet/in.h>
 #include <netinet/ip_var.h>	/* struct ipfw_rule_ref */
@@ -3519,6 +3520,263 @@ struct table_algo flow_hash = {
 	.flush_mod	= ta_flush_mod_fhash,
 };
 
+/*
+ * Kernel fibs bindings.
+ *
+ * Implementation:
+ *
+ * Runtime part:
+ * - fully relies on route API
+ * - fib number is stored in ti->data
+ *
+ */
+
+static struct rtentry *
+lookup_kfib(void *key, int keylen, int fib)
+{
+	struct sockaddr *s;
+
+	if (keylen == 4) {
+		struct sockaddr_in sin;
+		bzero(&sin, sizeof(sin));
+		sin.sin_len = sizeof(struct sockaddr_in);
+		sin.sin_family = AF_INET;
+		sin.sin_addr.s_addr = *(in_addr_t *)key;
+		s = (struct sockaddr *)&sin;
+	} else {
+		struct sockaddr_in6 sin6;
+		bzero(&sin6, sizeof(sin6));
+		sin6.sin6_len = sizeof(struct sockaddr_in6);
+		sin6.sin6_family = AF_INET6;
+		sin6.sin6_addr = *(struct in6_addr *)key;
+		s = (struct sockaddr *)&sin6;
+	}
+
+	return (rtalloc1_fib(s, 0, 0, fib));
+}
+
+static int
+ta_lookup_kfib(struct table_info *ti, void *key, uint32_t keylen,
+    uint32_t *val)
+{
+	struct rtentry *rte;
+
+	if ((rte = lookup_kfib(key, keylen, ti->data)) == NULL)
+		return (0);
+
+	*val = 0;
+	RTFREE_LOCKED(rte);
+
+	return (1);
+}
+
+/* Parse 'fib=%d' */
+static int
+kfib_parse_opts(int *pfib, char *data)
+{
+	char *pdel, *pend, *s;
+	int fibnum;
+
+	if (data == NULL)
+		return (0);
+	if ((pdel = strchr(data, ' ')) == NULL)
+		return (0);
+	while (*pdel == ' ')
+		pdel++;
+	if (strncmp(pdel, "fib=", 4) != 0)
+		return (EINVAL);
+	if ((s = strchr(pdel, ' ')) != NULL)
+		*s++ = '\0';
+
+	pdel += 4;
+	/* Need \d+ */
+	fibnum = strtol(pdel, &pend, 10);
+	if (*pend != '\0')
+		return (EINVAL);
+
+	*pfib = fibnum;
+
+	return (0);
+}
+
+static void
+ta_print_kfib_config(void *ta_state, struct table_info *ti, char *buf,
+    size_t bufsize)
+{
+
+	if (ti->data != 0)
+		snprintf(buf, bufsize, "%s fib=%lu", "cidr:kfib", ti->data);
+	else
+		snprintf(buf, bufsize, "%s", "cidr:kfib");
+}
+
+static int
+ta_init_kfib(struct ip_fw_chain *ch, void **ta_state, struct table_info *ti,
+    char *data, uint8_t tflags)
+{
+	int error, fibnum;
+
+	fibnum = 0;
+	if ((error = kfib_parse_opts(&fibnum, data)) != 0)
+		return (error);
+
+	if (fibnum >= rt_numfibs)
+		return (E2BIG);
+
+	ti->data = fibnum;
+	ti->lookup = ta_lookup_kfib;
+
+	return (0);
+}
+
+/*
+ * Destroys table @ti
+ */
+static void
+ta_destroy_kfib(void *ta_state, struct table_info *ti)
+{
+
+}
+
+/*
+ * Provide algo-specific table info
+ */
+static void
+ta_dump_kfib_tinfo(void *ta_state, struct table_info *ti, ipfw_ta_tinfo *tinfo)
+{
+
+	tinfo->flags = IPFW_TATFLAGS_AFDATA;
+	tinfo->taclass4 = IPFW_TACLASS_RADIX;
+	tinfo->count4 = 0;
+	tinfo->itemsize4 = sizeof(struct rtentry);
+	tinfo->taclass6 = IPFW_TACLASS_RADIX;
+	tinfo->count6 = 0;
+	tinfo->itemsize6 = sizeof(struct rtentry);
+}
+
+static int
+contigmask(uint8_t *p, int len)
+{
+	int i, n;
+
+	for (i = 0; i < len ; i++)
+		if ( (p[i/8] & (1 << (7 - (i%8)))) == 0) /* first bit unset */
+			break;
+	for (n= i + 1; n < len; n++)
+		if ( (p[n/8] & (1 << (7 - (n % 8)))) != 0)
+			return (-1); /* mask not contiguous */
+	return (i);
+}
+
+
+static int
+ta_dump_kfib_tentry(void *ta_state, struct table_info *ti, void *e,
+    ipfw_obj_tentry *tent)
+{
+	struct rtentry *rte;
+	struct sockaddr_in *addr, *mask;
+	struct sockaddr_in6 *addr6, *mask6;
+	int len;
+
+	rte = (struct rtentry *)e;
+	addr = (struct sockaddr_in *)rt_key(rte);
+	mask = (struct sockaddr_in *)rt_mask(rte);
+	len = 0;
+
+	/* Guess IPv4/IPv6 radix by sockaddr family */
+	if (addr->sin_family == AF_INET) {
+		tent->k.addr.s_addr = addr->sin_addr.s_addr;
+		len = 32;
+		if (mask != NULL)
+			len = contigmask((uint8_t *)&mask->sin_addr, 32);
+		if (len == -1)
+			len = 0;
+		tent->masklen = len;
+		tent->subtype = AF_INET;
+		tent->value = 0; /* Do we need to put GW here? */
+#ifdef INET6
+	} else if (addr->sin_family == AF_INET6) {
+		addr6 = (struct sockaddr_in6 *)addr;
+		mask6 = (struct sockaddr_in6 *)mask;
+		memcpy(&tent->k, &addr6->sin6_addr, sizeof(struct in6_addr));
+		len = 128;
+		if (mask6 != NULL)
+			len = contigmask((uint8_t *)&mask6->sin6_addr, 128);
+		if (len == -1)
+			len = 0;
+		tent->masklen = len;
+		tent->subtype = AF_INET6;
+		tent->value = 0;
+#endif
+	}
+
+	return (0);
+}
+
+static int
+ta_find_kfib_tentry(void *ta_state, struct table_info *ti,
+    ipfw_obj_tentry *tent)
+{
+	struct rtentry *rte;
+	void *key;
+	int keylen;
+
+	if (tent->subtype == AF_INET) {
+		key = &tent->k.addr;
+		keylen = sizeof(struct in_addr);
+	} else {
+		key = &tent->k.addr6;
+		keylen = sizeof(struct in6_addr);
+	}
+
+	if ((rte = lookup_kfib(key, keylen, ti->data)) == NULL)
+		return (0);
+
+	if (rte != NULL) {
+		ta_dump_kfib_tentry(ta_state, ti, rte, tent);
+		RTFREE_LOCKED(rte);
+		return (0);
+	}
+
+	return (ENOENT);
+}
+
+static void
+ta_foreach_kfib(void *ta_state, struct table_info *ti, ta_foreach_f *f,
+    void *arg)
+{
+	struct radix_node_head *rnh;
+	int error;
+
+	rnh = rt_tables_get_rnh(ti->data, AF_INET);
+	if (rnh != NULL) {
+		RADIX_NODE_HEAD_RLOCK(rnh); 
+		error = rnh->rnh_walktree(rnh, (walktree_f_t *)f, arg);
+		RADIX_NODE_HEAD_RUNLOCK(rnh);
+	}
+
+	rnh = rt_tables_get_rnh(ti->data, AF_INET6);
+	if (rnh != NULL) {
+		RADIX_NODE_HEAD_RLOCK(rnh); 
+		error = rnh->rnh_walktree(rnh, (walktree_f_t *)f, arg);
+		RADIX_NODE_HEAD_RUNLOCK(rnh);
+	}
+}
+
+struct table_algo cidr_kfib = {
+	.name		= "cidr:kfib",
+	.type		= IPFW_TABLE_CIDR,
+	.flags		= TA_FLAG_READONLY,
+	.ta_buf_size	= 0,
+	.init		= ta_init_kfib,
+	.destroy	= ta_destroy_kfib,
+	.foreach	= ta_foreach_kfib,
+	.dump_tentry	= ta_dump_kfib_tentry,
+	.find_tentry	= ta_find_kfib_tentry,
+	.dump_tinfo	= ta_dump_kfib_tinfo,
+	.print_config	= ta_print_kfib_config,
+};
+
 void
 ipfw_table_algo_init(struct ip_fw_chain *ch)
 {
@@ -3533,6 +3791,7 @@ ipfw_table_algo_init(struct ip_fw_chain 
 	ipfw_add_table_algo(ch, &iface_idx, sz, &iface_idx.idx);
 	ipfw_add_table_algo(ch, &number_array, sz, &number_array.idx);
 	ipfw_add_table_algo(ch, &flow_hash, sz, &flow_hash.idx);
+	ipfw_add_table_algo(ch, &cidr_kfib, sz, &cidr_kfib.idx);
 }
 
 void
@@ -3544,6 +3803,7 @@ ipfw_table_algo_destroy(struct ip_fw_cha
 	ipfw_del_table_algo(ch, iface_idx.idx);
 	ipfw_del_table_algo(ch, number_array.idx);
 	ipfw_del_table_algo(ch, flow_hash.idx);
+	ipfw_del_table_algo(ch, cidr_kfib.idx);
 }
 
 

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 01:34:56 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 E521B615;
 Fri, 15 Aug 2014 01:34:55 +0000 (UTC)
Received: from mail107.syd.optusnet.com.au (mail107.syd.optusnet.com.au
 [211.29.132.53])
 by mx1.freebsd.org (Postfix) with ESMTP id 749892CCB;
 Fri, 15 Aug 2014 01:34:55 +0000 (UTC)
Received: from c122-106-147-133.carlnfd1.nsw.optusnet.com.au
 (c122-106-147-133.carlnfd1.nsw.optusnet.com.au [122.106.147.133])
 by mail107.syd.optusnet.com.au (Postfix) with ESMTPS id 9F4A9D48960;
 Fri, 15 Aug 2014 11:34:47 +1000 (EST)
Date: Fri, 15 Aug 2014 11:34:46 +1000 (EST)
From: Bruce Evans <brde@optusnet.com.au>
X-X-Sender: bde@besplex.bde.org
To: Andrew Turner <andrew@freebsd.org>
Subject: Re: svn commit: r269995 - projects/arm64/sys/arm64/include
In-Reply-To: <201408141846.s7EIkU4v042685@svn.freebsd.org>
Message-ID: <20140815105202.C1151@besplex.bde.org>
References: <201408141846.s7EIkU4v042685@svn.freebsd.org>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
X-Optus-CM-Score: 0
X-Optus-CM-Analysis: v=2.1 cv=AOuw8Gd4 c=1 sm=1 tr=0
 a=7NqvjVvQucbO2RlWB8PEog==:117 a=PO7r1zJSAAAA:8 a=MjG9SfkE-rEA:10
 a=jIW9Tjywsa0A:10 a=kj9zAlcOel0A:10 a=JzwRw_2MAAAA:8
 a=T4yEQg16rXpWJAJiFJ4A:9 a=CjuIK1q_8ugA:10
Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 01:34:56 -0000

On Thu, 14 Aug 2014, Andrew Turner wrote:

> Log:
>  Fix the PRI*64 and SCN*64 macros. We use long long for 64-bit typedefs.

Why not fix the typedefs?  They should use the minimal rank that works,
although this gives the weirdness that intmax_t has lower rank than
long long.  All other 64-bit arches follow this rule.  Following this
rule minimises use of the long long abomination, and may expose broken
code slightly less.

> Modified: projects/arm64/sys/arm64/include/_inttypes.h
> ==============================================================================
> --- projects/arm64/sys/arm64/include/_inttypes.h	Thu Aug 14 18:44:08 2014	(r269994)
> +++ projects/arm64/sys/arm64/include/_inttypes.h	Thu Aug 14 18:46:30 2014	(r269995)
> @@ -42,32 +42,32 @@
> #define	PRId8		"d"	/* int8_t */
> #define	PRId16		"d"	/* int16_t */
> #define	PRId32		"d"	/* int32_t */
> -#define	PRId64		"ld"	/* int64_t */
> +#define	PRId64		"lld"	/* int64_t */

No one should notice this change, since the existence of PRI* is an even
larger bug than the existence of long long.

Broken code that might be exposed more by unnecessary use of long long
include things like hard-coding virtual addresses as u_long and printing
them with %lx.  This hard-coding works on all arches supported by FreeBSD.
However, FreeBSD is supposed to use vm_offset_t for virtual addresses, so
just printing them correcety requires casting to uintmax_t.  (One reason
the PRI* mistake is negatively useful is that converting from vm_offset_t
to a minimal type that works with PRI* is even harder that converting it
to a minimal basic types).  Most MD code doesn't bother with this, and
just hard-codes a format that works with the given arch.  E.g., in pmap.
vm_offset is normally defined as a uintN_t, so the rule about using the
minimal rank that works applies to it too.  E.g., on i386, uint32_t is
declared as u_int, not u_long.  This minimises unnecessary use of u_long.
Old code in i386 pmap depends on this -- it hard-codes the format as %x.
64-bit pmap normally hard-codes it as %lx instead.  arm64 would have to
use %llx instead.

Printf formats are relatively unimportant, especially in the kernel, and
wrong ones are not required to be detected, and the detection is even
more broken than it used to be since some compilers don't support
kernel format extensions and the "fix" for that is to turn off all
format checking.  You could get similar type errors that must be
detected by mixing APIs or hacking with u_long when you should really
use vm_offset_t.  One API might use vm_offset_t == uintN_t ==
[ u_long on all arches except arm64; u_long_long on arm64 ] and another
API might use u_long.  Then passing pointers between these APIs causes
type mismatches that must be detected if a prototype is in scope, although
everything is either 32 bits or 64 bits so there is no ABI mismatch.

Bruce

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:10:18 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 7D6AEAE4;
 Fri, 15 Aug 2014 09:10:18 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 692A92E2D;
 Fri, 15 Aug 2014 09:10:18 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9AIno041317;
 Fri, 15 Aug 2014 09:10:18 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9AHhZ041308;
 Fri, 15 Aug 2014 09:10:17 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150910.s7F9AHhZ041308@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:10:17 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270012 - in projects/arm64: contrib/gcc gnu/lib/csu
 gnu/lib/libgcc gnu/lib/libgcc/arm64
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:10:18 -0000

Author: andrew
Date: Fri Aug 15 09:10:17 2014
New Revision: 270012
URL: http://svnweb.freebsd.org/changeset/base/270012

Log:
  Port the GNU parts of CSU and libgcc_s to arm64. Unfortunately
  execute_cfa_program causes the following with clang. As the backend
  has changed significantly in 3.5 no effort to diagnose or fix the
  problem will take place.
  
  Assertion failed: (Scavenged[SI].FrameIndex >= 0 &&
   "Cannot scavenge register without an emergency spill slot!"),
   function scavengeRegister, file
   <llvm location>/lib/CodeGen/RegisterScavenging.cpp, line 415.
  Stack dump:
  0.	Program arguments: <compiler command>
  1.	<eof> parser at end of file
  2.	Code generation
  3.	Running pass 'Function Pass Manager' on module <file location>
  4.	Running pass 'Prologue/Epilogue Insertion & Frame Finalization'
   on function '@execute_cfa_program'

Added:
  projects/arm64/gnu/lib/libgcc/arm64/
  projects/arm64/gnu/lib/libgcc/arm64/arm64.h
  projects/arm64/gnu/lib/libgcc/arm64/freebsd.h
Modified:
  projects/arm64/contrib/gcc/unwind-dw2.c
  projects/arm64/gnu/lib/csu/Makefile
  projects/arm64/gnu/lib/libgcc/Makefile

Modified: projects/arm64/contrib/gcc/unwind-dw2.c
==============================================================================
--- projects/arm64/contrib/gcc/unwind-dw2.c	Fri Aug 15 07:30:14 2014	(r270011)
+++ projects/arm64/contrib/gcc/unwind-dw2.c	Fri Aug 15 09:10:17 2014	(r270012)
@@ -849,6 +849,8 @@ execute_cfa_program (const unsigned char
 		     struct _Unwind_Context *context,
 		     _Unwind_FrameState *fs)
 {
+  abort();
+#if 0 /* Broken woth clang 3.4 for arm64 */
   struct frame_state_reg_info *unused_rs = NULL;
 
   /* Don't allow remember/restore between CIE and FDE programs.  */
@@ -1082,6 +1084,7 @@ execute_cfa_program (const unsigned char
 	  gcc_unreachable ();
 	}
     }
+#endif
 }
 
 /* Given the _Unwind_Context CONTEXT for a stack frame, look up the FDE for

Modified: projects/arm64/gnu/lib/csu/Makefile
==============================================================================
--- projects/arm64/gnu/lib/csu/Makefile	Fri Aug 15 07:30:14 2014	(r270011)
+++ projects/arm64/gnu/lib/csu/Makefile	Fri Aug 15 09:10:17 2014	(r270012)
@@ -20,7 +20,7 @@ CFLAGS+=	-fno-inline-functions -fno-exce
 		-fno-zero-initialized-in-bss -fno-asynchronous-unwind-tables \
 		-fno-omit-frame-pointer
 CFLAGS+=	-I${GCCLIB}/include -I${GCCDIR}/config -I${GCCDIR} -I. \
-		-I${CCDIR}/cc_tools
+		-I${CCDIR}/cc_tools -I${.CURDIR}/../libgcc
 CRTS_CFLAGS=	-DCRTSTUFFS_O -DSHARED ${PICFLAG}
 MKDEP=		-DCRT_BEGIN
 

Modified: projects/arm64/gnu/lib/libgcc/Makefile
==============================================================================
--- projects/arm64/gnu/lib/libgcc/Makefile	Fri Aug 15 07:30:14 2014	(r270011)
+++ projects/arm64/gnu/lib/libgcc/Makefile	Fri Aug 15 09:10:17 2014	(r270012)
@@ -25,7 +25,8 @@ CFLAGS+=	-DIN_GCC -DIN_LIBGCC2 -D__GCC_F
 		-DHAVE_GTHR_DEFAULT \
 		-I${GCCLIB}/include \
 		-I${GCCDIR}/config -I${GCCDIR} -I. \
-		-I${.CURDIR}/../../usr.bin/cc/cc_tools
+		-I${.CURDIR}/../../usr.bin/cc/cc_tools \
+		-I${.CURDIR}
 
 LDFLAGS+=	-nodefaultlibs
 LDADD+=		-lc
@@ -55,7 +56,8 @@ LIB2FUNCS+= _fixuns${mode}si
 .endfor
 
 # Likewise double-word routines.
-.if ${TARGET_CPUARCH} != "arm" || ${MK_ARM_EABI} == "no"
+.if (${TARGET_CPUARCH} != "arm" || ${MK_ARM_EABI} == "no") && \
+    ${TARGET_CPUARCH} != "arm64"
 # These are implemented in an ARM specific file but will not be filtered out
 .for mode in sf df xf tf
 LIB2FUNCS+= _fix${mode}di _fixuns${mode}di

Added: projects/arm64/gnu/lib/libgcc/arm64/arm64.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/gnu/lib/libgcc/arm64/arm64.h	Fri Aug 15 09:10:17 2014	(r270012)
@@ -0,0 +1,3 @@
+
+/* Mostly made up */
+#define FIRST_PSEUDO_REGISTER   96

Added: projects/arm64/gnu/lib/libgcc/arm64/freebsd.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/gnu/lib/libgcc/arm64/freebsd.h	Fri Aug 15 09:10:17 2014	(r270012)
@@ -0,0 +1,5 @@
+
+#undef INIT_SECTION_ASM_OP
+#undef FINI_SECTION_ASM_OP
+#define INIT_ARRAY_SECTION_ASM_OP "\t.section\t.init_array,\"aw\",%init_array"
+#define FINI_ARRAY_SECTION_ASM_OP "\t.section\t.fini_array,\"aw\",%fini_array"

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:31:48 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 EF3BA1000;
 Fri, 15 Aug 2014 09:31:48 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id DBD3A215A;
 Fri, 15 Aug 2014 09:31:48 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9Vms2053532;
 Fri, 15 Aug 2014 09:31:48 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9Vmdx053531;
 Fri, 15 Aug 2014 09:31:48 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150931.s7F9Vmdx053531@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:31:48 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270013 - projects/arm64/sys/sys
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:31:49 -0000

Author: andrew
Date: Fri Aug 15 09:31:48 2014
New Revision: 270013
URL: http://svnweb.freebsd.org/changeset/base/270013

Log:
  There is no tls support on arm64 yet.

Modified:
  projects/arm64/sys/sys/cdefs.h

Modified: projects/arm64/sys/sys/cdefs.h
==============================================================================
--- projects/arm64/sys/sys/cdefs.h	Fri Aug 15 09:10:17 2014	(r270012)
+++ projects/arm64/sys/sys/cdefs.h	Fri Aug 15 09:31:48 2014	(r270013)
@@ -735,7 +735,7 @@
 #endif
 #endif
 
-#if defined(__mips) || defined(__powerpc64__)
+#if defined(__aarch64__) || defined(__mips) || defined(__powerpc64__)
 #define __NO_TLS 1
 #endif
 

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:31:52 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 3F6EF168;
 Fri, 15 Aug 2014 09:31:52 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 2C290215C;
 Fri, 15 Aug 2014 09:31:52 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9VqB1053577;
 Fri, 15 Aug 2014 09:31:52 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9Vqdp053576;
 Fri, 15 Aug 2014 09:31:52 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150931.s7F9Vqdp053576@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:31:52 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270014 - projects/arm64/sys/arm64/include
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:31:52 -0000

Author: andrew
Date: Fri Aug 15 09:31:51 2014
New Revision: 270014
URL: http://svnweb.freebsd.org/changeset/base/270014

Log:
  Add the needed MCOUNT macros

Modified:
  projects/arm64/sys/arm64/include/profile.h

Modified: projects/arm64/sys/arm64/include/profile.h
==============================================================================
--- projects/arm64/sys/arm64/include/profile.h	Fri Aug 15 09:31:48 2014	(r270013)
+++ projects/arm64/sys/arm64/include/profile.h	Fri Aug 15 09:31:51 2014	(r270014)
@@ -66,6 +66,13 @@ void user(void);
 
 void	mcount(uintfptr_t frompc, uintfptr_t selfpc);
 
+#else /* !_KERNEL */
+
+typedef unsigned long long	uintfptr_t;
+
+#define	_MCOUNT_DECL	void mcount
+#define	MCOUNT
+
 #endif /* _KERNEL */
 
 #endif /* !_MACHINE_PROFILE_H_ */

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:31:56 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 2539124F;
 Fri, 15 Aug 2014 09:31: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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 119E3215E;
 Fri, 15 Aug 2014 09:31:56 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9Vt58053622;
 Fri, 15 Aug 2014 09:31:55 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9Vt0C053621;
 Fri, 15 Aug 2014 09:31:55 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150931.s7F9Vt0C053621@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:31:55 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270015 - projects/arm64/contrib/jemalloc/include/jemalloc
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:31:56 -0000

Author: andrew
Date: Fri Aug 15 09:31:55 2014
New Revision: 270015
URL: http://svnweb.freebsd.org/changeset/base/270015

Log:
  Add support for arm64 to jemalloc

Modified:
  projects/arm64/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h

Modified: projects/arm64/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h
==============================================================================
--- projects/arm64/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h	Fri Aug 15 09:31:51 2014	(r270014)
+++ projects/arm64/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h	Fri Aug 15 09:31:55 2014	(r270015)
@@ -40,6 +40,9 @@
 #ifdef __arm__
 #  define LG_SIZEOF_PTR		2
 #endif
+#ifdef __aarch64__
+#  define LG_SIZEOF_PTR		3
+#endif
 #ifdef __mips__
 #ifdef __mips_n64
 #  define LG_SIZEOF_PTR		3

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:40:03 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 62C08494;
 Fri, 15 Aug 2014 09:40:03 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 4DABD21B4;
 Fri, 15 Aug 2014 09:40:03 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9e3N0054719;
 Fri, 15 Aug 2014 09:40:03 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9e0nX054688;
 Fri, 15 Aug 2014 09:40:00 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150940.s7F9e0nX054688@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:40:00 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270016 - in projects/arm64/lib/libc: . arm64 arm64/gen
 arm64/sys gen xdr
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:40:03 -0000

Author: andrew
Date: Fri Aug 15 09:40:00 2014
New Revision: 270016
URL: http://svnweb.freebsd.org/changeset/base/270016

Log:
  Initial port of libc to arm64, just enough to get init compiling.
  
  As only static libraries are supported the arm64/Symbol.map file has
  not been created.
  
  System calls are not implemented as the kernel is missing the code to
  handle them.

Added:
  projects/arm64/lib/libc/arm64/SYS.h
  projects/arm64/lib/libc/arm64/_fpmath.h
  projects/arm64/lib/libc/arm64/arith.h
  projects/arm64/lib/libc/arm64/gd_qnan.h
  projects/arm64/lib/libc/arm64/gen/Makefile.inc
  projects/arm64/lib/libc/arm64/gen/_set_tp.c
  projects/arm64/lib/libc/arm64/gen/flt_rounds.c
  projects/arm64/lib/libc/arm64/sys/
  projects/arm64/lib/libc/arm64/sys/Makefile.inc
  projects/arm64/lib/libc/arm64/sys/__vdso_gettc.c
Modified:
  projects/arm64/lib/libc/Makefile
  projects/arm64/lib/libc/arm64/Makefile.inc
  projects/arm64/lib/libc/gen/tls.c
  projects/arm64/lib/libc/xdr/xdr_float.c

Modified: projects/arm64/lib/libc/Makefile
==============================================================================
--- projects/arm64/lib/libc/Makefile	Fri Aug 15 09:31:55 2014	(r270015)
+++ projects/arm64/lib/libc/Makefile	Fri Aug 15 09:40:00 2014	(r270016)
@@ -80,6 +80,7 @@ NOASM=
 .include "${LIBC_SRCTOP}/nls/Makefile.inc"
 .include "${LIBC_SRCTOP}/posix1e/Makefile.inc"
 .if ${LIBC_ARCH} != "amd64" && \
+    ${LIBC_ARCH} != "arm64" && \
     ${LIBC_ARCH} != "powerpc64" && \
     ${LIBC_ARCH} != "sparc64" && \
     ${MACHINE_ARCH:Mmipsn32*} == "" && \

Modified: projects/arm64/lib/libc/arm64/Makefile.inc
==============================================================================
--- projects/arm64/lib/libc/arm64/Makefile.inc	Fri Aug 15 09:31:55 2014	(r270015)
+++ projects/arm64/lib/libc/arm64/Makefile.inc	Fri Aug 15 09:40:00 2014	(r270016)
@@ -3,3 +3,6 @@
 # Machine dependent definitions for the arm 64-bit architecture.
 #
 
+# Long double is quad precision
+GDTOASRCS+=strtorQ.c
+MDSRCS+=machdep_ldisQ.c

Added: projects/arm64/lib/libc/arm64/SYS.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/SYS.h	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c) 2002 Benno Rice.  All rights reserved.
+ * Copyright (c) 2002 David E. O'Brien.  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.
+ * 3. Neither the name of the author nor the names of any contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * 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 REGENTS 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$
+ */
+
+#include <sys/syscall.h>
+#include <machine/asm.h>
+
+#define	_SYSCALL(name)						\
+	1: b 1b;
+
+#define	SYSCALL(name)						\
+ENTRY(__sys_##name);						\
+	WEAK_REFERENCE(__sys_##name, name);			\
+	WEAK_REFERENCE(__sys_##name, _##name);			\
+	_SYSCALL(name);						\
+	ret;							\
+END(__sys_##name)
+
+#define	PSEUDO(name)						\
+ENTRY(__sys_##name);						\
+	WEAK_REFERENCE(__sys_##name, _##name);			\
+	_SYSCALL(name)						\
+	ret;							\
+END(__sys_##name)
+
+#define	RSYSCALL(name)						\
+ENTRY(__sys_##name);						\
+	WEAK_REFERENCE(__sys_##name, name);			\
+	WEAK_REFERENCE(__sys_##name, _##name);			\
+	_SYSCALL(name)						\
+	ret;							\
+END(__sys_##name)

Added: projects/arm64/lib/libc/arm64/_fpmath.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/_fpmath.h	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2003 David Schultz <das@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 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$
+ */
+
+union IEEEl2bits {
+	long double	e;
+	struct {
+		unsigned int		sign	:1;
+		unsigned int		exp	:11;
+		unsigned int		manh	:20;
+		unsigned int		manl	:32;
+	} bits;
+};
+
+#define	mask_nbit_l(u)	((void)0)
+#define	LDBL_IMPLICIT_NBIT
+#define	LDBL_NBIT	0
+
+#define	LDBL_MANH_SIZE	20
+#define	LDBL_MANL_SIZE	32
+
+#define	LDBL_TO_ARRAY32(u, a) do {			\
+	(a)[0] = (uint32_t)(u).bits.manl;		\
+	(a)[1] = (uint32_t)(u).bits.manh;		\
+} while(0)

Added: projects/arm64/lib/libc/arm64/arith.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/arith.h	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,16 @@
+/*
+ * MD header for contrib/gdtoa
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * NOTE: The definitions in this file must be correct or strtod(3) and
+ * floating point formats in printf(3) will break!  The file can be
+ * generated by running contrib/gdtoa/arithchk.c on the target
+ * architecture.  See contrib/gdtoa/gdtoaimp.h for details.
+ */
+
+#define IEEE_8087
+#define Arith_Kind_ASL 1
+#define Double_Align

Added: projects/arm64/lib/libc/arm64/gd_qnan.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/gd_qnan.h	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,23 @@
+/*
+ * MD header for contrib/gdtoa
+ *
+ * This file can be generated by compiling and running contrib/gdtoa/qnan.c
+ * on the target architecture after arith.h has been generated.
+ *
+ * XXX I don't have ARM hardware, so I just guessed.  --das
+ *
+ * $FreeBSD$
+ */
+
+#define f_QNAN 0x7fc00000
+#define d_QNAN0 0x0
+#define d_QNAN1 0x7ff80000
+#define ld_QNAN0 0x0
+#define ld_QNAN1 0xc0000000
+#define ld_QNAN2 0x7fff
+#define ld_QNAN3 0x0
+#define ldus_QNAN0 0x0
+#define ldus_QNAN1 0x0
+#define ldus_QNAN2 0x0
+#define ldus_QNAN3 0xc000
+#define ldus_QNAN4 0x7fff

Added: projects/arm64/lib/libc/arm64/gen/Makefile.inc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/gen/Makefile.inc	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+SRCS+=	flt_rounds.c _setjmp.S _set_tp.c

Added: projects/arm64/lib/libc/arm64/gen/_set_tp.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/gen/_set_tp.c	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,42 @@
+/*-
+ * Copyright (c) 2004 Doug Rabson
+ * 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$
+ */
+
+#include <string.h>
+#include <sys/types.h>
+
+#include <machine/sysarch.h>
+
+#include <stdlib.h>
+
+void
+_set_tp(void *tp)
+{
+
+	abort();
+	//sysarch(ARM_SET_TP, tp);
+}

Added: projects/arm64/lib/libc/arm64/gen/flt_rounds.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/gen/flt_rounds.c	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2012 Ian Lepore <freebsd@damnhippie.dyndns.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 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <fenv.h>
+#include <float.h>
+
+int
+__flt_rounds(void)
+{
+	return (-1);
+}

Added: projects/arm64/lib/libc/arm64/sys/Makefile.inc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/sys/Makefile.inc	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+SRCS+=	__vdso_gettc.c
+
+#MDASM= Ovfork.S brk.S cerror.S pipe.S ptrace.S sbrk.S shmat.S sigreturn.S syscall.S
+
+# Don't generate default code for these syscalls:
+NOASM=	break.o exit.o getlogin.o openbsd_poll.o sstk.o vfork.o yield.o
+
+PSEUDO= _exit.o _getlogin.o
+.if ${MK_SYSCALL_COMPAT} != "no"
+PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o
+.endif

Added: projects/arm64/lib/libc/arm64/sys/__vdso_gettc.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/arm64/lib/libc/arm64/sys/__vdso_gettc.c	Fri Aug 15 09:40:00 2014	(r270016)
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2013 Konstantin Belousov <kib@FreeBSD.org>
+ *
+ * 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/vdso.h>
+#include <errno.h>
+
+#pragma weak __vdso_gettc
+u_int
+__vdso_gettc(const struct vdso_timehands *th)
+{
+
+	return (0);
+}
+
+#pragma weak __vdso_gettimekeep
+int
+__vdso_gettimekeep(struct vdso_timekeep **tk)
+{
+
+	return (ENOSYS);
+}

Modified: projects/arm64/lib/libc/gen/tls.c
==============================================================================
--- projects/arm64/lib/libc/gen/tls.c	Fri Aug 15 09:31:55 2014	(r270015)
+++ projects/arm64/lib/libc/gen/tls.c	Fri Aug 15 09:40:00 2014	(r270016)
@@ -65,13 +65,14 @@ void __libc_free_tls(void *tls, size_t t
 #if defined(__amd64__)
 #define TLS_TCB_ALIGN 16
 #elif defined(__powerpc__) || defined(__i386__) || defined(__arm__) || \
-    defined(__sparc64__) || defined(__mips__)
+    defined(__sparc64__) || defined(__mips__) || defined(__aarch64__)
 #define TLS_TCB_ALIGN sizeof(void *)
 #else
 #error TLS_TCB_ALIGN undefined for target architecture
 #endif
 
-#if defined(__arm__) || defined(__mips__) || defined(__powerpc__)
+#if defined(__arm__) || defined(__mips__) || defined(__powerpc__) || \
+    defined(__aarch64__)
 #define TLS_VARIANT_I
 #endif
 #if defined(__i386__) || defined(__amd64__) || defined(__sparc64__)

Modified: projects/arm64/lib/libc/xdr/xdr_float.c
==============================================================================
--- projects/arm64/lib/libc/xdr/xdr_float.c	Fri Aug 15 09:31:55 2014	(r270015)
+++ projects/arm64/lib/libc/xdr/xdr_float.c	Fri Aug 15 09:40:00 2014	(r270016)
@@ -64,7 +64,8 @@ __FBSDID("$FreeBSD$");
 #if defined(__m68k__) || defined(__sparc__) || defined(__i386__) || \
     defined(__mips__) || defined(__ns32k__) || defined(__alpha__) || \
     defined(__arm__) || defined(__ppc__) || \
-    defined(__arm26__) || defined(__sparc64__) || defined(__amd64__)
+    defined(__arm26__) || defined(__sparc64__) || defined(__amd64__) || \
+    defined(__aarch64__)
 #include <machine/endian.h>
 #define IEEEFP
 #endif

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:50:06 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 3E28F7AF;
 Fri, 15 Aug 2014 09:50:06 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 1065C22A9;
 Fri, 15 Aug 2014 09:50:06 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9o5PR059734;
 Fri, 15 Aug 2014 09:50:05 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9o5ZP059733;
 Fri, 15 Aug 2014 09:50:05 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150950.s7F9o5ZP059733@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:50:05 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270017 - projects/arm64/lib/libcompiler_rt
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:50:06 -0000

Author: andrew
Date: Fri Aug 15 09:50:05 2014
New Revision: 270017
URL: http://svnweb.freebsd.org/changeset/base/270017

Log:
  Don't attempt to compile files in compiler-rt that crash llvm.
  
  These cause an error like the following (long lines wrapped).
  
  fatal error: error in backend: Cannot select: 0x802a5db10: \
     i64,i64 = srl_parts 0x802a5e710, 0x802a5ee10, 0x802a5e310 [ORD=19] [ID=13]
   0x802a5e710: i64,ch = CopyFromReg 0x8029f1fb8, 0x802a5e210 [ORD=19] [ID=9]
    0x802a5e210: i64 = Register %vreg5 [ID=4]
   0x802a5ee10: i64 = Constant<0> [ID=5]
   0x802a5e310: i64 = zero_extend 0x802a5d210 [ORD=19] [ID=12]
    0x802a5d210: i32 = sub 0x802a5c010, 0x802a5d710 [ORD=17] [ID=11]
     0x802a5c010: i32 = Constant<1075> [ID=1]
     0x802a5d710: i32 = AssertSext 0x802a5c910, 0x802a5c310 [ORD=17] [ID=10]
      0x802a5c910: i32,ch = CopyFromReg 0x8029f1fb8, 0x802a5e610 [ORD=17] [ID=8]
       0x802a5e610: i32 = Register %vreg1 [ID=2]
  In function: __fixdfti

Modified:
  projects/arm64/lib/libcompiler_rt/Makefile

Modified: projects/arm64/lib/libcompiler_rt/Makefile
==============================================================================
--- projects/arm64/lib/libcompiler_rt/Makefile	Fri Aug 15 09:40:00 2014	(r270016)
+++ projects/arm64/lib/libcompiler_rt/Makefile	Fri Aug 15 09:50:05 2014	(r270017)
@@ -51,34 +51,22 @@ SRCF=	absvdi2 \
 	ffsdi2 \
 	ffsti2 \
 	fixdfdi \
-	fixdfti \
 	fixsfdi \
-	fixsfti \
 	fixunsdfdi \
 	fixunsdfsi \
-	fixunsdfti \
 	fixunssfdi \
 	fixunssfsi \
-	fixunssfti \
 	fixunsxfdi \
 	fixunsxfsi \
-	fixunsxfti \
 	fixxfdi \
-	fixxfti \
 	floatdidf \
 	floatdisf \
 	floatdixf \
-	floattidf \
-	floattisf \
-	floattixf \
 	floatundidf \
 	floatundisf \
 	floatundixf \
 	floatunsidf \
 	floatunsisf \
-	floatuntidf \
-	floatuntisf \
-	floatuntixf \
 	int_util \
 	lshrdi3 \
 	lshrti3 \
@@ -88,12 +76,10 @@ SRCF=	absvdi2 \
 	muldi3 \
 	mulodi4 \
 	mulosi4 \
-	muloti4 \
 	mulsc3 \
 	multi3 \
 	mulvdi3 \
 	mulvsi3 \
-	mulvti3 \
 	mulxc3 \
 	negdf2 \
 	negdi2 \

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 09:50:09 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 8D893890;
 Fri, 15 Aug 2014 09:50:09 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 79F2822AB;
 Fri, 15 Aug 2014 09:50:09 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7F9o92Z059888;
 Fri, 15 Aug 2014 09:50:09 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7F9o9sY059868;
 Fri, 15 Aug 2014 09:50:09 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408150950.s7F9o9sY059868@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 09:50:09 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270018 - projects/arm64/contrib/elftoolchain/libelf
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 09:50:09 -0000

Author: andrew
Date: Fri Aug 15 09:50:09 2014
New Revision: 270018
URL: http://svnweb.freebsd.org/changeset/base/270018

Log:
  Add the config for libelf to be used on arm64.

Modified:
  projects/arm64/contrib/elftoolchain/libelf/_libelf_config.h

Modified: projects/arm64/contrib/elftoolchain/libelf/_libelf_config.h
==============================================================================
--- projects/arm64/contrib/elftoolchain/libelf/_libelf_config.h	Fri Aug 15 09:50:05 2014	(r270017)
+++ projects/arm64/contrib/elftoolchain/libelf/_libelf_config.h	Fri Aug 15 09:50:09 2014	(r270018)
@@ -53,6 +53,12 @@
 #define	LIBELF_BYTEORDER	ELFDATA2LSB
 #define	LIBELF_CLASS		ELFCLASS64
 
+#elif	defined(__aarch64__)
+
+#define	LIBELF_ARCH		EM_AARCH64
+#define	LIBELF_BYTEORDER	ELFDATA2LSB
+#define	LIBELF_CLASS		ELFCLASS64
+
 #elif	defined(__arm__)
 
 #define	LIBELF_ARCH		EM_ARM

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 11:07:09 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 346D549A;
 Fri, 15 Aug 2014 11:07:09 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 209372D54;
 Fri, 15 Aug 2014 11:07:09 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7FB7853095898;
 Fri, 15 Aug 2014 11:07:08 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7FB78xI095897;
 Fri, 15 Aug 2014 11:07:08 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408151107.s7FB78xI095897@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 15 Aug 2014 11:07:08 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270020 - projects/arm64/sys/arm64/arm64
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 11:07:09 -0000

Author: andrew
Date: Fri Aug 15 11:07:08 2014
New Revision: 270020
URL: http://svnweb.freebsd.org/changeset/base/270020

Log:
  Setup the correct struct in cpu_fork

Modified:
  projects/arm64/sys/arm64/arm64/vm_machdep.c

Modified: projects/arm64/sys/arm64/arm64/vm_machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/vm_machdep.c	Fri Aug 15 10:01:33 2014	(r270019)
+++ projects/arm64/sys/arm64/arm64/vm_machdep.c	Fri Aug 15 11:07:08 2014	(r270020)
@@ -64,14 +64,14 @@ cpu_fork(struct thread *td1, struct proc
 	bcopy(td1->td_pcb, pcb2, sizeof(*pcb2));
 
 	/* Set the return value registers for fork() */
-	td1->td_pcb->pcb_x[8] = (uintptr_t)fork_return;
-	td1->td_pcb->pcb_x[9] = (uintptr_t)td2;
-	td1->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline;
-	td1->td_pcb->pcb_sp = (uintptr_t)td1->td_frame;
+	td2->td_pcb->pcb_x[8] = (uintptr_t)fork_return;
+	td2->td_pcb->pcb_x[9] = (uintptr_t)td2;
+	td2->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline;
+	td2->td_pcb->pcb_sp = (uintptr_t)td2->td_frame;
 
 	/* Setup to release spin count in fork_exit(). */
-	td1->td_md.md_spinlock_count = 1;
-	td1->td_md.md_saved_daif = 0;
+	td2->td_md.md_spinlock_count = 1;
+	td2->td_md.md_saved_daif = 0;
 }
 
 void

From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 15 12:58:33 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@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 5322726B;
 Fri, 15 Aug 2014 12:58:33 +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))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3E78229F4;
 Fri, 15 Aug 2014 12:58:33 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7FCwXix046789;
 Fri, 15 Aug 2014 12:58:33 GMT (envelope-from melifaro@FreeBSD.org)
Received: (from melifaro@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7FCwWY4046785;
 Fri, 15 Aug 2014 12:58:32 GMT (envelope-from melifaro@FreeBSD.org)
Message-Id: <201408151258.s7FCwWY4046785@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: melifaro set sender to
 melifaro@FreeBSD.org using -f
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Date: Fri, 15 Aug 2014 12:58:32 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270021 - in projects/ipfw: sbin/ipfw sys/netinet
 sys/netpfil/ipfw
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 Aug 2014 12:58:33 -0000

Author: melifaro
Date: Fri Aug 15 12:58:32 2014
New Revision: 270021
URL: http://svnweb.freebsd.org/changeset/base/270021

Log:
  Make room for multi-type values in struct tentry.

Modified:
  projects/ipfw/sbin/ipfw/tables.c
  projects/ipfw/sys/netinet/ip_fw.h
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c

Modified: projects/ipfw/sbin/ipfw/tables.c
==============================================================================
--- projects/ipfw/sbin/ipfw/tables.c	Fri Aug 15 11:07:08 2014	(r270020)
+++ projects/ipfw/sbin/ipfw/tables.c	Fri Aug 15 12:58:32 2014	(r270021)
@@ -1387,15 +1387,15 @@ tentry_fill_value(ipfw_obj_header *oh, i
 	char *p;
 
 	/* Try to interpret as number first */
-	tent->value = strtoul(arg, &p, 0);
+	tent->v.value = strtoul(arg, &p, 0);
 	if (*p == '\0')
 		return;
 	if (inet_pton(AF_INET, arg, &val) == 1) {
-		tent->value = ntohl(val);
+		tent->v.value = ntohl(val);
 		return;
 	}
 	/* Try hostname */
-	if (lookup_host(arg, (struct in_addr *)&tent->value) == 0)
+	if (lookup_host(arg, (struct in_addr *)&tent->v.value) == 0)
 		return;
 	errx(EX_OSERR, "Unable to parse value %s", arg);
 #if 0
@@ -1565,7 +1565,7 @@ table_show_entry(ipfw_xtable_info *i, ip
 	uint32_t tval;
 	struct tflow_entry *tfe;
 
-	tval = tent->value;
+	tval = tent->v.value;
 
 	if (co.do_value_as_ip || i->vftype == IPFW_VFTYPE_IP) {
 		tval = htonl(tval);

Modified: projects/ipfw/sys/netinet/ip_fw.h
==============================================================================
--- projects/ipfw/sys/netinet/ip_fw.h	Fri Aug 15 11:07:08 2014	(r270020)
+++ projects/ipfw/sys/netinet/ip_fw.h	Fri Aug 15 12:58:32 2014	(r270021)
@@ -756,12 +756,10 @@ typedef struct	_ipfw_obj_tentry {
 	ipfw_obj_tlv	head;		/* TLV header			*/
 	uint8_t		subtype;	/* subtype (IPv4,IPv6)		*/
 	uint8_t		masklen;	/* mask length			*/
-	uint16_t	idx;		/* Table name index		*/
-	uint32_t	value;		/* value			*/
 	uint8_t		result;		/* request result		*/
 	uint8_t		spare0;
+	uint16_t	idx;		/* Table name index		*/
 	uint16_t	spare1;
-	uint32_t	spare2;
 	union {
 		/* Longest field needs to be aligned by 8-byte boundary	*/
 		struct in_addr		addr;	/* IPv4 address		*/
@@ -770,6 +768,10 @@ typedef struct	_ipfw_obj_tentry {
 		char	iface[IF_NAMESIZE];	/* interface name	*/
 		struct tflow_entry	flow;	
 	} k;
+	union {
+		uint32_t		value;	/* 32-bit value */
+		char			storage[64]; /* Future needs	*/
+	} v;
 } ipfw_obj_tentry;
 #define	IPFW_TF_UPDATE	0x01		/* Update record if exists	*/
 /* Container TLV */

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Fri Aug 15 11:07:08 2014	(r270020)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c	Fri Aug 15 12:58:32 2014	(r270021)
@@ -888,7 +888,7 @@ ipfw_manage_table_ent_v1(struct ip_fw_ch
 		ptei->masklen = ptent->masklen;
 		if (ptent->head.flags & IPFW_TF_UPDATE)
 			ptei->flags |= TEI_FLAGS_UPDATE;
-		ptei->value = ptent->value;
+		ptei->value = ptent->v.value;
 	}
 
 	error = (oh->opheader.opcode == IP_FW_TABLE_XADD) ?
@@ -2244,7 +2244,7 @@ dump_table_entry(void *e, void *arg)
 
 	ent->addr = da->tent.k.addr.s_addr;
 	ent->masklen = da->tent.masklen;
-	ent->value = da->tent.value;
+	ent->value = da->tent.v.value;
 
 	return (0);
 }
@@ -2345,7 +2345,7 @@ dump_table_xentry(void *e, void *arg)
 
 	/* Convert current format to previous one */
 	xent->masklen = tent->masklen;
-	xent->value = tent->value;
+	xent->value = tent->v.value;
 	/* Apply some hacks */
 	if (tc->no.type == IPFW_TABLE_ADDR && tent->subtype == AF_INET) {
 		xent->k.addr6.s6_addr32[3] = tent->k.addr.s_addr;

Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c
==============================================================================
--- projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Fri Aug 15 11:07:08 2014	(r270020)
+++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c	Fri Aug 15 12:58:32 2014	(r270021)
@@ -482,14 +482,14 @@ ta_dump_radix_tentry(void *ta_state, str
 		tent->k.addr.s_addr = n->addr.sin_addr.s_addr;
 		tent->masklen = n->masklen;
 		tent->subtype = AF_INET;
-		tent->value = n->value;
+		tent->v.value = n->value;
 #ifdef INET6
 	} else {
 		xn = (struct radix_addr_xentry *)e;
 		memcpy(&tent->k, &xn->addr6.sin6_addr, sizeof(struct in6_addr));
 		tent->masklen = xn->masklen;
 		tent->subtype = AF_INET6;
-		tent->value = xn->value;
+		tent->v.value = xn->value;
 #endif
 	}
 
@@ -1257,13 +1257,13 @@ ta_dump_chash_tentry(void *ta_state, str
 		tent->k.addr.s_addr = htonl(ent->a.a4 << (32 - cfg->mask4));
 		tent->masklen = cfg->mask4;
 		tent->subtype = AF_INET;
-		tent->value = ent->value;
+		tent->v.value = ent->value;
 #ifdef INET6
 	} else {
 		memcpy(&tent->k, &ent->a.a6, sizeof(struct in6_addr));
 		tent->masklen = cfg->mask6;
 		tent->subtype = AF_INET6;
-		tent->value = ent->value;
+		tent->v.value = ent->value;
 #endif
 	}
 
@@ -2354,7 +2354,7 @@ ta_dump_ifidx_tentry(void *ta_state, str
 
 	tent->masklen = 8 * IF_NAMESIZE;
 	memcpy(&tent->k, ife->no.name, IF_NAMESIZE);
-	tent->value = ife->value;
+	tent->v.value = ife->value;
 
 	return (0);
 }
@@ -2778,7 +2778,7 @@ ta_dump_numarray_tentry(void *ta_state, 
 	na = (struct numarray *)e;
 
 	tent->k.key = na->number;
-	tent->value = na->value;
+	tent->v.value = na->value;
 
 	return (0);
 }
@@ -3124,7 +3124,7 @@ ta_dump_fhash_tentry(void *ta_state, str
 	tfe->proto = ent->proto;
 	tfe->dport = htons(ent->dport);
 	tfe->sport = htons(ent->sport);
-	tent->value = ent->value;
+	tent->v.value = ent->value;
 	tent->subtype = ent->af;
 
 	if (ent->af == AF_INET) {
@@ -3693,7 +3693,7 @@ ta_dump_kfib_tentry(void *ta_state, stru
 			len = 0;
 		tent->masklen = len;
 		tent->subtype = AF_INET;
-		tent->value = 0; /* Do we need to put GW here? */
+		tent->v.value = 0; /* Do we need to put GW here? */
 #ifdef INET6
 	} else if (addr->sin_family == AF_INET6) {
 		addr6 = (struct sockaddr_in6 *)addr;
@@ -3706,7 +3706,7 @@ ta_dump_kfib_tentry(void *ta_state, stru
 			len = 0;
 		tent->masklen = len;
 		tent->subtype = AF_INET6;
-		tent->value = 0;
+		tent->v.value = 0;
 #endif
 	}