From owner-svn-src-projects@FreeBSD.ORG Sun Aug 10 00:03:41 2014 Return-Path: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include +#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 . + * 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 +__FBSDID("$FreeBSD$"); +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: Andrew Turner , 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 To: Nathan Whitehorn 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Aug 2014 17:44:14 -0000 On Mon, 11 Aug 2014 10:24:43 -0700 Nathan Whitehorn 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 > > 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: 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 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: Andrew Turner 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 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 >>> 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include - /* * 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. + * 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include + +/* + * 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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 _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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include #include -#include /* offsetof */ #include #include #include #include -#define IPFW_INTERNAL /* Access to protected structures in ip_fw.h. */ - #include -#include -#include /* def. of struct route */ #include #include #include -#include #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: 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 ; 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 ; 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 */ + /* Handle */ 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 */ 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 */ 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 */ 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 */ 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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include -#include +//#include #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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include #include +#include #include #include #include @@ -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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 -.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 and -.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 . 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 .Op Cm inv @@ -173,7 +172,6 @@ Report which picker unit the changer is .Xc Configure the changer to use picker .Ar . -.Pp .It Ic ielem Xo .Op Ar .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 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 +# +# $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 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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 + +__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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 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 +__FBSDID("$FreeBSD$"); + +#ifndef lint +#ifndef __GNUC__ +#error "GCC is needed to compile this file" +#endif +#endif /* lint */ + +#include + +#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 +__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 +__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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 #include /* ip_fw.h requires IFNAMSIZ */ #include +#include #include #include /* 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: 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 X-X-Sender: bde@besplex.bde.org To: Andrew Turner 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 /lib/CodeGen/RegisterScavenging.cpp, line 415. Stack dump: 0. Program arguments: 1. parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module 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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 +#include + +#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 + * 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 +#include + +#include + +#include + +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 + * 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 +__FBSDID("$FreeBSD$"); + +#include +#include + +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 + * + * 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#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 #define IEEEFP #endif From owner-svn-src-projects@FreeBSD.ORG Fri Aug 15 09:50:06 2014 Return-Path: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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: 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" 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 " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 }