From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1BeVUr-0002rr-0F for qemu-devel@nongnu.org; Sun, 27 Jun 2004 04:58:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1BeVUp-0002rf-VG for qemu-devel@nongnu.org; Sun, 27 Jun 2004 04:58:44 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BeVUp-0002rc-7c for qemu-devel@nongnu.org; Sun, 27 Jun 2004 04:58:43 -0400 Received: from [62.253.162.41] (helo=mta01-svc.ntlworld.com) by monty-python.gnu.org with esmtp (Exim 4.34) id 1BeVSn-0003US-QR for qemu-devel@nongnu.org; Sun, 27 Jun 2004 04:56:38 -0400 Received: from [10.10.10.100] ([81.107.87.144]) by mta01-svc.ntlworld.com (InterMail vM.4.01.03.37 201-229-121-137-20020806) with ESMTP id <20040627085604.VJUJ19746.mta01-svc.ntlworld.com@[10.10.10.100]> for ; Sun, 27 Jun 2004 09:56:04 +0100 From: Antony T Curtis In-Reply-To: <1088269034.5517.48.camel@pcgem.rdg.cyberkinetica.com> References: <1088269034.5517.48.camel@pcgem.rdg.cyberkinetica.com> Content-Type: multipart/mixed; boundary="=-lvVcuJH3HZRV3NsdiLgF" Message-Id: <1088326594.5517.59.camel@pcgem.rdg.cyberkinetica.com> Mime-Version: 1.0 Date: Sun, 27 Jun 2004 09:56:35 +0100 Subject: [Qemu-devel] Busmaster NIC emulation Re: AMD PC-Net emulation Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org --=-lvVcuJH3HZRV3NsdiLgF Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, 2004-06-26 at 17:57, Antony T Curtis wrote: > I have a partially working emulation of a AMD PCNet PCI ethernet > adaptor.. It currently works with FreeBSD guest > > So far, it looks a little better than the current NE2000 NIC... ping > times are more consistant and (when its working) no dropped packets. Fixed the problems with it working with WinXP... Ping times from another machine to a FreeBSD QEMU instance averages as low as 0.7mS ... And without the packet loss I have been experiencing with the previous NIC implementation. A ping flood against a WinXP QEMU instance doesn't drop a packet with an average response of 25mS (but it does max out the CPU) Attached is the source... A nicer patch will be available soon. -- Antony T Curtis --=-lvVcuJH3HZRV3NsdiLgF Content-Disposition: attachment; filename=qemu-pcnet.tgz Content-Type: application/x-compressed-tar; name=qemu-pcnet.tgz Content-Transfer-Encoding: base64 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 --=-lvVcuJH3HZRV3NsdiLgF--