From owner-freebsd-net@FreeBSD.ORG Thu Jul 20 09:32:06 2006 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 778DE16A500 for ; Thu, 20 Jul 2006 09:32:06 +0000 (UTC) (envelope-from gnn@neville-neil.com) Received: from mrout1-b.corp.dcn.yahoo.com (mrout1-b.corp.dcn.yahoo.com [216.109.112.27]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9F56943D53 for ; Thu, 20 Jul 2006 09:32:05 +0000 (GMT) (envelope-from gnn@neville-neil.com) Received: from minion.local.neville-neil.com (proxy7.corp.yahoo.com [216.145.48.98]) by mrout1-b.corp.dcn.yahoo.com (8.13.6/8.13.6/y.out) with ESMTP id k6K9Vn7p046543 for ; Thu, 20 Jul 2006 02:31:50 -0700 (PDT) Date: Thu, 20 Jul 2006 18:31:46 +0900 Message-ID: From: gnn@freebsd.org To: freebsd-net@freebsd.org User-Agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (=?ISO-8859-4?Q?Shij=F2?=) APEL/10.6 Emacs/22.0.50 (i386-apple-darwin8.6.1) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Subject: Packet Construction and Protocol Testing... X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Jul 2006 09:32:06 -0000 Hi, Sorry for the length of this email but I figured I'd get this out early in case there was anyone else who wanted to play with this. I have now gotten out version 0.1 of the Packet Construction Set. This is a set of Python libraries which make writing protocol testing software much easier. Of course, you have to know Python, but many people do, and I favor it strongly over other scripting choices. The Summer of Code student I'm working with has also been using this library, with favorable results. The Source Forge page is here: http://sourceforge.net/projects/pcs and the shar files submitted to get the ports created are now on: http://www.freebsd.org/~gnn/pcs.port.shar http://www.freebsd.org/~gnn/py-pypcap.shar The point of all this is to be able to write better protocol level tests for our network stack. Examples are in the scripts/ and tests/ directories of the package but a quick snippet may give a good idea of what I'm getting at: def test_icmpv4_ping(self): ip = ipv4() ip.version = 4 ip.hlen = 5 ip.tos = 0 ip.length = 84 ip.id = 1 ip.flags = 0 ip.offset = 0 ip.ttl = 33 ip.protocol = IPPROTO_ICMP ip.src = 2130706433 ip.dst = 2130706433 icmp = icmpv4() icmp.type = 8 icmp.code = 0 icmp.cksum = 0 echo = icmpv4echo() echo.id = 32767 echo.seq = 1 lo = localhost() lo.type = 2 packet = Chain([lo, ip, icmp, echo]) input = PcapConnector("lo0") input.setfilter("icmp") output = PcapConnector("lo0") assert (ip != None) out = output.write(packet.bytes, 88) assert (out == 88) This code sends a quick and dirty, ICMPv4 ping packet on localhost. The point of all this is to be able to specify packets easly (see pcs/packets/xxx.py) and then to treat the packet as an object. I intend to write up a paper on this stuff as well. There is currently a simple manual (PDF and LaTeX) in the package. Later, George