From owner-freebsd-ipfw@FreeBSD.ORG Wed Jan 14 13:01:53 2004 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E86B316A4CE for ; Wed, 14 Jan 2004 13:01:53 -0800 (PST) Received: from xorpc.icir.org (xorpc.icir.org [192.150.187.68]) by mx1.FreeBSD.org (Postfix) with ESMTP id D33FA43D41 for ; Wed, 14 Jan 2004 13:01:23 -0800 (PST) (envelope-from rizzo@icir.org) Received: from xorpc.icir.org (localhost [127.0.0.1]) by xorpc.icir.org (8.12.9p1/8.12.8) with ESMTP id i0EL1NAF087145; Wed, 14 Jan 2004 13:01:23 -0800 (PST) (envelope-from rizzo@xorpc.icir.org) Received: (from rizzo@localhost) by xorpc.icir.org (8.12.9p1/8.12.3/Submit) id i0EL1N3d087144; Wed, 14 Jan 2004 13:01:23 -0800 (PST) (envelope-from rizzo) Date: Wed, 14 Jan 2004 13:01:22 -0800 From: Luigi Rizzo To: ipfw@freebsd.org Message-ID: <20040114130122.A86000@xorpc.icir.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="ReaqsoxgOBHFXBhH" Content-Disposition: inline User-Agent: Mutt/1.2.5.1i Subject: Request for review: ipfw2 for IPV6 X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Jan 2004 21:01:54 -0000 --ReaqsoxgOBHFXBhH Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, I am attaching some very experimental (and only partly functional) code to use ipfw2/dummynet with IPV6. THIS IS NOT RECOMMENDED FOR REGULAR USE, JUST FOR EVALUATION. The code has been developed by two students of mine, Mariano Tortoriello and Raffaele De Lorenzo, and I only revised it briefly. I think the overall architecture is reasonably close to the final one, although there are some optimizations and changes to improve compatibility with other kernel options. We would really appreciate testing by someone who is a kernel programmer who has access to ipv6 network and some knowledge of the ipv6 code, and thus can give advice on how to improve this code, and possibly suggest fixes for the trivial bugs that are there. Installation instructions: + the patch is based on 4.9_RELEASE + move just above your src/ directory and do a gzcat ipfw6.040114a.diff.gz | patch + install the patched copy of netinet/ip_dummynet.h and ip_fw2.h into /usr/include/netinet + add the IPFIREWALL and IPFW2 options in the kernel, together with the IPV6 options (no IPV6FIREWALL) + rebuild and reinstall the kernel and /sbin/ipfw, remember to use "make -DIPFW2" for the latter At this point you should be able to use ipv6 addresses in ipfw instruction, the new option "ipv6" which only matches ipv6 packets. The system _will_ panic if you are trying to use dummynet on output packets, the reasons of the panic are still to investigate. Dummynet on the input path seems to work, as well as on layer2. There might be other bugs, which I would be happy to hear about as i only did very limited testing. cheers luigi --ReaqsoxgOBHFXBhH Content-Type: application/octet-stream Content-Disposition: attachment; filename="ipfw6.040114a.diff.gz" Content-Transfer-Encoding: base64 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 --ReaqsoxgOBHFXBhH--