From owner-freebsd-ipfw@FreeBSD.ORG Mon Mar 31 11:07:02 2008 Return-Path: Delivered-To: freebsd-ipfw@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C667C106575D for ; Mon, 31 Mar 2008 11:07:02 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B75958FC1F for ; Mon, 31 Mar 2008 11:07:02 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m2VB72sR038936 for ; Mon, 31 Mar 2008 11:07:02 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m2VB72uq038932 for freebsd-ipfw@FreeBSD.org; Mon, 31 Mar 2008 11:07:02 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 31 Mar 2008 11:07:02 GMT Message-Id: <200803311107.m2VB72uq038932@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-ipfw@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-ipfw@FreeBSD.org X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Mar 2008 11:07:03 -0000 Current FreeBSD problem reports Critical problems Serious problems S Tracker Resp. Description -------------------------------------------------------------------------------- o kern/51274 ipfw [ipfw] [patch] ipfw2 create dynamic rules with parent o kern/73910 ipfw [ipfw] serious bug on forwarding of packets after NAT o kern/74104 ipfw [ipfw] ipfw2/1 conflict not detected or reported, manp o kern/88659 ipfw [modules] ipfw and ip6fw do not work properly as modul o kern/93300 ipfw [ipfw] ipfw pipe lost packets o kern/95084 ipfw [ipfw] [patch] IPFW2 ignores "recv/xmit/via any" (IPFW o kern/97504 ipfw [ipfw] IPFW Rules bug o kern/97951 ipfw [ipfw] [patch] ipfw does not tie interface details to o kern/98831 ipfw [ipfw] ipfw has UDP hickups o kern/102471 ipfw [ipfw] [patch] add tos and dscp support o kern/103454 ipfw [ipfw] [patch] [request] add a facility to modify DF b o kern/106534 ipfw [ipfw] [panic] ipfw + dummynet o kern/112708 ipfw [ipfw] ipfw is seems to be broken to limit number of c o kern/117234 ipfw [ipfw] [patch] ipfw send_pkt() and ipfw_tick() don't s o kern/118993 ipfw [ipfw] page fault - probably it's a locking problem o kern/121955 ipfw [ipfw] [panic] freebsd 7.0 panic with mpd 16 problems total. Non-critical problems S Tracker Resp. Description -------------------------------------------------------------------------------- a kern/26534 ipfw [ipfw] Add an option to ipfw to log gid/uid of who cau o kern/46159 ipfw [ipfw] [patch] [request] ipfw dynamic rules lifetime f o kern/48172 ipfw [ipfw] [patch] ipfw does not log size and flags o kern/55984 ipfw [ipfw] [patch] time based firewalling support for ipfw o kern/60719 ipfw [ipfw] Headerless fragments generate cryptic error mes o kern/69963 ipfw [ipfw] install_state warning about already existing en o kern/71366 ipfw [ipfw] "ipfw fwd" sometimes rewrites destination mac a o kern/72987 ipfw [ipfw] ipfw/dummynet pipe/queue 'queue [BYTES]KBytes ( o bin/78785 ipfw [ipfw] [patch] ipfw verbosity locks machine if /etc/rc s kern/80642 ipfw [ipfw] [patch] ipfw small patch - new RULE OPTION o kern/82724 ipfw [ipfw] [patch] [request] Add setnexthop and defaultrou o kern/86957 ipfw [ipfw] [patch] ipfw mac logging o kern/87032 ipfw [ipfw] [patch] ipfw ioctl interface implementation o kern/91847 ipfw [ipfw] ipfw with vlanX as the device o kern/103328 ipfw [ipfw] [request] sugestions about ipfw table o kern/104682 ipfw [ipfw] [patch] Some minor language consistency fixes a o bin/104921 ipfw [patch] ipfw(8) sometimes treats ipv6 input as ipv4 (a o kern/105330 ipfw [ipfw] [patch] ipfw (dummynet) does not allow to set q o kern/107305 ipfw [ipfw] ipfw fwd doesn't seem to work o kern/111713 ipfw [dummynet] [request] Too few dummynet queue slots o kern/112561 ipfw [ipfw] ipfw fwd does not work with some TCP packets p kern/113388 ipfw [ipfw][patch] Addition actions with rules within speci o docs/113803 ipfw [patch] ipfw(8) - don't get bitten by the fwd rule o bin/115172 ipfw [patch] ipfw(8) list show some rules with a wrong form p kern/115755 ipfw [ipfw][patch] unify message and add a rule number wher o kern/116009 ipfw [ipfw] [patch] Ignore errors when loading ruleset from o kern/121122 ipfw [ipfw] [patch] add support to ToS IP PRECEDENCE fields o kern/121382 ipfw [dummynet]: 6.3-RELEASE-p1 page fault in dummynet (cor s kern/121807 ipfw [request] TCP and UDP port_table in ipfw 29 problems total. From owner-freebsd-ipfw@FreeBSD.ORG Mon Mar 31 14:36:30 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D3A971065672 for ; Mon, 31 Mar 2008 14:36:30 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from yw-out-2324.google.com (yw-out-2324.google.com [74.125.46.31]) by mx1.freebsd.org (Postfix) with ESMTP id D66038FC24 for ; Mon, 31 Mar 2008 14:36:29 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by yw-out-2324.google.com with SMTP id 2so145628ywt.13 for ; Mon, 31 Mar 2008 07:36:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:reply-to:organization:user-agent:mime-version:to:cc:subject:references:in-reply-to:x-enigmail-version:openpgp:content-type:from; bh=u7e9b9FgK8BfGMtx0XG3UKZcYaJRoJE8nPCF67PmiVo=; b=HBUSy0jaZBwU+daDnEPcWyMdixDSw5h5BpQzV3MeWtODYfP3Rx8t07xcF7du45JvQu1ctfTSEBhZRgmvi44wBrrHmcwyEJRF+qeD2rx/xIrIdpheFYlLUkQpZB3ONLXzLaKWxMmSGzpmnvUlFSabVNn/Vk5FIiSY2rSHW3TLGNI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=message-id:date:reply-to:organization:user-agent:mime-version:to:cc:subject:references:in-reply-to:x-enigmail-version:openpgp:content-type:from; b=VHKRe0H2I49CPP+nyd0RMQzs4VRHDOiRgGqgb1S7eMIrn5AyyCujxTBKSQ09qcQujrxUV97bBiCh7TD9HS5FwWgDQGUJQmcTK3Ex8oTwGcrZRtmiyDhnyoqfM/ddVfIcJdEj6xoRybCn00YEBodvpI8B7utNU8OY92GvGDp5WJQ= Received: by 10.142.49.4 with SMTP id w4mr3725250wfw.220.1206974188170; Mon, 31 Mar 2008 07:36:28 -0700 (PDT) Received: from island.freebsd.org ( [200.247.114.5]) by mx.google.com with ESMTPS id 3sm9490716wrs.22.2008.03.31.07.36.25 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 31 Mar 2008 07:36:26 -0700 (PDT) Message-ID: <47F0F6D7.4060409@FreeBSD.org> Date: Mon, 31 Mar 2008 11:36:07 -0300 Organization: FreeBSD User-Agent: Thunderbird 2.0.0.0 (X11/20070521) MIME-Version: 1.0 To: vadim_nuclight@mail.ru References: <47E79636.1000909@FreeBSD.org> <47EA3EEC.2040007@FreeBSD.org> In-Reply-To: X-Enigmail-Version: 0.95.0 OpenPGP: id=53E4CFA8 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig93155528AF50DACFD0900E1F" From: Marcelo Araujo Cc: freebsd-ipfw@freebsd.org Subject: Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: araujo@FreeBSD.org List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Mar 2008 14:36:30 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig93155528AF50DACFD0900E1F Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Vadim Goncharov wrote: > I continue to my research and if I've some time to work with ipfw or >> another mechanism that have some relation with my project degree, I'll= ma=3D >> ke. >> =20 > > OK, I'll take it. > > =20 Hi dear Vadim, We have some progression about modip()? You see some time to work with hi= m? I've some time again to work around modip(), you can help me? Tell me more in what you worked on last week, you did some tests, I can start again the work of where I stoped? Best Regards, --=20 Marcelo Araujo (__) araujo@FreeBSD.org \\\'',) http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) --------------enig93155528AF50DACFD0900E1F Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (FreeBSD) iD8DBQFH8PbcovxJd1Pkz6gRAu4OAJ9E/WFW4F4fdva/IydLFsarzYAF8QCePd9k 5TuFV/mgH3qd+JLDxnhagaM= =n1rQ -----END PGP SIGNATURE----- --------------enig93155528AF50DACFD0900E1F-- From owner-freebsd-ipfw@FreeBSD.ORG Tue Apr 1 04:37:15 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20F29106567D; Tue, 1 Apr 2008 04:37:15 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: from staff.cyber.mmu.edu.my (staff.cyber.mmu.edu.my [203.106.62.12]) by mx1.freebsd.org (Postfix) with ESMTP id 09C0B8FC28; Tue, 1 Apr 2008 04:37:14 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: by staff.cyber.mmu.edu.my (Postfix, from userid 0) id A4B014D49DB; Tue, 1 Apr 2008 12:04:27 +0800 (MYT) Received: from mx2.freebsd.org (mx2.freebsd.org [69.147.83.53]) by mmu.edu.my (Postfix) with ESMTP id 2B21A55E48B for ; Wed, 26 Mar 2008 20:59:17 +0800 (MYT) Received: from hub.freebsd.org (hub.freebsd.org [IPv6:2001:4f8:fff6::36]) by mx2.freebsd.org (Postfix) with ESMTP id BD1CD1A5EBD; Wed, 26 Mar 2008 12:58:50 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Received: from hub.freebsd.org (localhost [127.0.0.1]) by hub.freebsd.org (Postfix) with ESMTP id 5111910656C3; Wed, 26 Mar 2008 12:58:50 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 788BC106566B for ; Wed, 26 Mar 2008 12:17:59 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.242]) by mx1.freebsd.org (Postfix) with ESMTP id 2A1C98FC19 for ; Wed, 26 Mar 2008 12:17:58 +0000 (UTC) (envelope-from araujobsdport@gmail.com) Received: by an-out-0708.google.com with SMTP id c14so1269918anc.13 for ; Wed, 26 Mar 2008 05:17:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:reply-to:organization:user-agent:mime-version:to:cc:subject:references:in-reply-to:x-enigmail-version:openpgp:content-type:from; bh=2E+K1OiPuhppx/jgA7oWBwJ9gpc3xQIVbP+UGZVDbqI=; b=OeiJfvDZPtCjOl/cLcGBdiQ7OFzVKJAFQM5uMBfElNT8GY/3LELPdVnNpMyKXdgWT9JGGzpnq3abH/S0fzYJBR97BAxpavQU3y96PJ1ERekanghjSkvXn+R2oqlIDxPbSWSuPdbZDSKObYk4jjLkhUaaEfsUN0hWOnu0t1wndwI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=message-id:date:reply-to:organization:user-agent:mime-version:to:cc:subject:references:in-reply-to:x-enigmail-version:openpgp:content-type:from; b=Z21UJ73JzkzC/CJoILjv7mCzGLt3htvOVQfFBARuDneiqqZhrblEuV/2+oadJVgc8W/7Jo723WZJCd2aYQlrt+PHQdso/F9VJ1/H3rIZamh3a9bBn7cheC7uwnSix+1S+fMM1WZbDHbE9cjgyU+wk55o6uPUTX7V+GVIWBt7zVI= Received: by 10.100.225.19 with SMTP id x19mr21822777ang.5.1206533877834; Wed, 26 Mar 2008 05:17:57 -0700 (PDT) Received: from island.freebsd.org ( [200.247.114.5]) by mx.google.com with ESMTPS id c23sm15775511ana.15.2008.03.26.05.17.54 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 26 Mar 2008 05:17:56 -0700 (PDT) Message-ID: <47EA3EEC.2040007@FreeBSD.org> Date: Wed, 26 Mar 2008 09:17:48 -0300 Organization: FreeBSD User-Agent: Thunderbird 2.0.0.0 (X11/20070521) MIME-Version: 1.0 To: vadim_nuclight@mail.ru References: <47E79636.1000909@FreeBSD.org> In-Reply-To: X-Enigmail-Version: 0.95.0 OpenPGP: id=53E4CFA8 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigF38EA32A2BFA59820860D170" From: Marcelo Araujo X-Mailman-Approved-At: Wed, 26 Mar 2008 12:58:43 +0000 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Sender: owner-freebsd-hackers@freebsd.org Errors-To: owner-freebsd-hackers@freebsd.org Cc: freebsd-ipfw@freebsd.org, freebsd-hackers@freebsd.org Subject: Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate X-BeenThere: freebsd-ipfw@freebsd.org Reply-To: araujo@FreeBSD.org List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Apr 2008 04:37:15 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigF38EA32A2BFA59820860D170 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Vadim Goncharov wrote: > > Looked at the patch. Some line are changed e.g. in NAT definitions with= out any > visible changes, strange. > > Also, you're adding 7 opcode in the kernel, 2 for match and 5 for setti= ng, > while having single "modip" action in userland. In the case of signific= antly > changing compilation rulesm, etc., we may need many new opcodes so we s= hould > not waste them. For example, your O_IPTOSPRE is redundant because we al= ready > have O_IPPRECEDENCE which compiler could utilize while retainig more AB= I > compatibility. > > I can correct and extend your patch for DSCP/TTL/any bytes (not forgett= ing > credits, of course), if you're too busy... > > =20 Of course, I've interest in any external support, because I need to finish my degree project and I'm a bit busy. Any help are welcome and please feel free to re-work the patch. Just like the really the most important thing is the *modip*, I'm happy that you work within this idea.= I'd like to see *modip* committed. I continue to my research and if I've some time to work with ipfw or another mechanism that have some relation with my project degree, I'll ma= ke. Best Regards, --=20 Marcelo Araujo (__) araujo@FreeBSD.org \\\'',) http://www.FreeBSD.org \/ \ ^ Power To Server. .\. /_) --------------enigF38EA32A2BFA59820860D170 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (FreeBSD) iD8DBQFH6j7wovxJd1Pkz6gRAsRtAJ4iFpSbKPiW8fIH6ynJ4wi5JZTU/wCfW3F0 qxGd8431PJTvgvZg3eQ7Ilk= =P/KB -----END PGP SIGNATURE----- --------------enigF38EA32A2BFA59820860D170-- From owner-freebsd-ipfw@FreeBSD.ORG Tue Apr 1 04:47:28 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 446ED1065675; Tue, 1 Apr 2008 04:47:28 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: from staff.cyber.mmu.edu.my (staff.cyber.mmu.edu.my [203.106.62.12]) by mx1.freebsd.org (Postfix) with ESMTP id 2F97D8FC16; Tue, 1 Apr 2008 04:47:27 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: by staff.cyber.mmu.edu.my (Postfix, from userid 0) id B7E854D5D43; Tue, 1 Apr 2008 12:28:23 +0800 (MYT) Received: from mx2.freebsd.org (mx2.freebsd.org [69.147.83.53]) by mmu.edu.my (Postfix) with ESMTP id 4500255E497 for ; Thu, 27 Mar 2008 01:32:48 +0800 (MYT) Received: from hub.freebsd.org (hub.freebsd.org [IPv6:2001:4f8:fff6::36]) by mx2.freebsd.org (Postfix) with ESMTP id 670131A7408; Wed, 26 Mar 2008 17:31:25 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Received: from hub.freebsd.org (localhost [127.0.0.1]) by hub.freebsd.org (Postfix) with ESMTP id 402ED1065677; Wed, 26 Mar 2008 17:31:25 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 30E3C1065670 for ; Wed, 26 Mar 2008 17:31:14 +0000 (UTC) (envelope-from julian@elischer.org) Received: from outP.internet-mail-service.net (outp.internet-mail-service.net [216.240.47.239]) by mx1.freebsd.org (Postfix) with ESMTP id 1D5008FC23 for ; Wed, 26 Mar 2008 17:31:13 +0000 (UTC) (envelope-from julian@elischer.org) Received: from mx0.idiom.com (HELO idiom.com) (216.240.32.160) by out.internet-mail-service.net (qpsmtpd/0.40) with ESMTP; Wed, 26 Mar 2008 13:17:41 -0700 Received: from julian-mac.elischer.org (localhost [127.0.0.1]) by idiom.com (Postfix) with ESMTP id A6DEA2D600D; Wed, 26 Mar 2008 10:31:12 -0700 (PDT) Message-ID: <47EA8860.3060709@elischer.org> Date: Wed, 26 Mar 2008 10:31:12 -0700 From: Julian Elischer User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: vadim_nuclight@mail.ru References: <47E79636.1000909@FreeBSD.org> <47E7EAA8.7020101@elischer.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Sender: owner-freebsd-hackers@freebsd.org Errors-To: owner-freebsd-hackers@freebsd.org Cc: freebsd-hackers@freebsd.org, freebsd-ipfw@freebsd.org Subject: Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate X-BeenThere: freebsd-ipfw@freebsd.org List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Apr 2008 04:47:28 -0000 Vadim Goncharov wrote: > Hi Julian Elischer! > > On Mon, 24 Mar 2008 10:53:44 -0700; Julian Elischer wrote about 'Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate': > >> here are some of my ideas for ipfw changes: > >> 1/ redo locking so that packets do not have to get locks on the >> structure... I have several ideas on this > > Currently the main need for locking arises for rule byte/packet counters. The > easiest short-term solution The main need for locking is that the rules can be changed while a processor is traversing the rule set. > >> 2/ allow separate firewalls to be used at different parts of the >> network stack (i.e allow multiple taboe sto co-exist) there are many places that ipfw is currently callable from. ip_input(), ip_output(), ether_demux(), if_brige, ether_output() it would be interesting tobe able to have differnt firewalls in these places (possibly per interface) so that state (e.g. keep_state) can be kept seprately for one place then from another. for example you may not want the result of 'keep state' on an external interface to necessarily affect what happens to packets from the same session when viewed traversing an internal interface. Currently on my more complex ipfw rule sets I break the rule sets out so that packets in different places traverse different rules but it would be nice to have it explicitly supported. > > Umm, could you explain it a little?.. > >> 3/ possibly keeping per CPU stats.. > > How that would be represented to user? it wouldn't.. you'd add them together before presenting them. but every time a packet changes a counter that is shared, there is a chance that it is being altered by another processor, so if you have fine grained locking in ipfw, you really should use atomic adds, which are slow, or accept possibl collisions (which might be ok) but still cause a lot of cross cpu TLB flushing. > _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-ipfw@FreeBSD.ORG Tue Apr 1 04:51:46 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0EAA41065672; Tue, 1 Apr 2008 04:51:46 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: from staff.cyber.mmu.edu.my (staff.cyber.mmu.edu.my [203.106.62.12]) by mx1.freebsd.org (Postfix) with ESMTP id 138368FC15; Tue, 1 Apr 2008 04:51:45 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: by staff.cyber.mmu.edu.my (Postfix, from userid 0) id 3C97B4D60D0; Tue, 1 Apr 2008 12:32:02 +0800 (MYT) Received: from mx2.freebsd.org (mx2.freebsd.org [69.147.83.53]) by mmu.edu.my (Postfix) with ESMTP id 70D2855E4A6 for ; Thu, 27 Mar 2008 14:47:56 +0800 (MYT) Received: from hub.freebsd.org (hub.freebsd.org [IPv6:2001:4f8:fff6::36]) by mx2.freebsd.org (Postfix) with ESMTP id 87AD21A54A5; Thu, 27 Mar 2008 06:47:17 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Received: from hub.freebsd.org (localhost [127.0.0.1]) by hub.freebsd.org (Postfix) with ESMTP id 7AD461065740; Thu, 27 Mar 2008 06:47:17 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F3E56106566B for ; Thu, 27 Mar 2008 06:47:06 +0000 (UTC) (envelope-from freebsd-hackers@m.gmane.org) Received: from ciao.gmane.org (main.gmane.org [80.91.229.2]) by mx1.freebsd.org (Postfix) with ESMTP id 7F0348FC18 for ; Thu, 27 Mar 2008 06:47:06 +0000 (UTC) (envelope-from freebsd-hackers@m.gmane.org) Received: from list by ciao.gmane.org with local (Exim 4.43) id 1JeltB-0006zQ-2t for freebsd-hackers@freebsd.org; Thu, 27 Mar 2008 06:47:05 +0000 Received: from 195.208.174.178 ([195.208.174.178]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 27 Mar 2008 06:47:05 +0000 Received: from vadim_nuclight by 195.208.174.178 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 27 Mar 2008 06:47:05 +0000 X-Injected-Via-Gmane: http://gmane.org/ To: freebsd-hackers@freebsd.org From: Vadim Goncharov Followup-To: gmane.os.freebsd.devel.ipfw Date: Thu, 27 Mar 2008 06:46:54 +0000 (UTC) Organization: Nuclear Lightning @ Tomsk, TPU AVTF Hostel Lines: 68 Message-ID: References: <47E79636.1000909@FreeBSD.org> <47E7EAA8.7020101@elischer.org> <47EA8860.3060709@elischer.org> X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: 195.208.174.178 X-Comment-To: Julian Elischer User-Agent: slrn/0.9.8.1 (FreeBSD) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Sender: owner-freebsd-hackers@freebsd.org Errors-To: owner-freebsd-hackers@freebsd.org Cc: freebsd-ipfw@freebsd.org Subject: Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate X-BeenThere: freebsd-ipfw@freebsd.org Reply-To: vadim_nuclight@mail.ru List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Apr 2008 04:51:46 -0000 Hi Julian Elischer! On Wed, 26 Mar 2008 10:31:12 -0700; Julian Elischer wrote about 'Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate': >>> here are some of my ideas for ipfw changes: >> >>> 1/ redo locking so that packets do not have to get locks on the >>> structure... I have several ideas on this >> >> Currently the main need for locking arises for rule byte/packet counters. The >> easiest short-term solution > The main need for locking is that the rules can be changed while a > processor is traversing the rule set. Oh, I haven't finished the letter. I wanted to say that easiest short-term solution would be splitting main ruleset lock into 2 locks: one for ruleset and one for counters, and wrap the only "f->*cnt +=" with that locks. >>> 2/ allow separate firewalls to be used at different parts of the >>> network stack (i.e allow multiple taboe sto co-exist) > there are many places that ipfw is currently callable from. > ip_input(), ip_output(), ether_demux(), if_brige, ether_output() > it would be interesting tobe able to have differnt firewalls in these > places (possibly per interface) so that state (e.g. keep_state) > can be kept seprately for one place then from another. > for example you may not want the result of 'keep state' on an > external interface to necessarily affect what happens to > packets from the same session when viewed traversing an internal > interface. > Currently on my more complex ipfw rule sets I break the rule sets out > so that packets in different places traverse different rules > but it would be nice to have it explicitly supported. Good. That should be added to proposal in part of creation of dynamic rules in any state: by default all-shared dynamic rules should be used (to preserve POLA), and an option in rule can be specified for a specific pass/layer. >> Umm, could you explain it a little?.. >> >>> 3/ possibly keeping per CPU stats.. >> >> How that would be represented to user? > it wouldn't.. you'd add them together before presenting them. > but every time a packet changes a counter that is shared, there is a > chance that it is being altered by another processor, so if you have > fine grained locking in ipfw, you really should use atomic adds, > which are slow, or accept possibl collisions (which might be ok) > but still cause a lot of cross cpu TLB flushing. Looked at the code... oh... I was wrong above with splitting for two locks into second for counters. It merely doen't exist and counters can get corrupted just now :-) The idea to keep separate per-CPU counters *could* be just reasonable, but as O_COUNTERLIMIT is likely to be introduced, it will need to access to already combined values, which now can be just for every packet, thus invalidating whole idea. The possible solution can again lie in ruleset compiled to single area of opcodes rather than linked list. In this case counters can be made a separate from opcodes array of int64's which will be contiguous and much smaller than current opcodes/counters mix, so chances for cache misses/flushes will be much smaller too. -- WBR, Vadim Goncharov. ICQ#166852181 mailto:vadim_nuclight@mail.ru [Moderator of RU.ANTI-ECOLOGY][FreeBSD][http://antigreen.org][LJ:/nuclight] _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-ipfw@FreeBSD.ORG Tue Apr 1 04:55:15 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2C58A1065670; Tue, 1 Apr 2008 04:55:15 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: from staff.cyber.mmu.edu.my (staff.cyber.mmu.edu.my [203.106.62.12]) by mx1.freebsd.org (Postfix) with ESMTP id 6B7808FC14; Tue, 1 Apr 2008 04:55:14 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: by staff.cyber.mmu.edu.my (Postfix, from userid 0) id C5DAE4D64FF; Tue, 1 Apr 2008 12:35:27 +0800 (MYT) Received: from mx2.freebsd.org (mx2.freebsd.org [69.147.83.53]) by mmu.edu.my (Postfix) with ESMTP id 97D8A55E498 for ; Thu, 27 Mar 2008 17:16:05 +0800 (MYT) Received: from hub.freebsd.org (hub.freebsd.org [IPv6:2001:4f8:fff6::36]) by mx2.freebsd.org (Postfix) with ESMTP id BC7FF1A7363; Thu, 27 Mar 2008 09:15:35 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Received: from hub.freebsd.org (localhost [127.0.0.1]) by hub.freebsd.org (Postfix) with ESMTP id 42D6C1065746; Thu, 27 Mar 2008 09:15:33 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D147A1065673; Thu, 27 Mar 2008 09:15:22 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.freebsd.org (Postfix) with ESMTP id A58998FC13; Thu, 27 Mar 2008 09:15:22 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id EBB7346B8F; Thu, 27 Mar 2008 05:15:21 -0400 (EDT) Date: Thu, 27 Mar 2008 09:15:21 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Julian Elischer In-Reply-To: <47EA8860.3060709@elischer.org> Message-ID: <20080327090909.T34007@fledge.watson.org> References: <47E79636.1000909@FreeBSD.org> <47E7EAA8.7020101@elischer.org> <47EA8860.3060709@elischer.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Sender: owner-freebsd-hackers@freebsd.org Errors-To: owner-freebsd-hackers@freebsd.org Cc: vadim_nuclight@mail.ru, freebsd-hackers@freebsd.org, freebsd-ipfw@freebsd.org Subject: Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate X-BeenThere: freebsd-ipfw@freebsd.org List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Apr 2008 04:55:15 -0000 On Wed, 26 Mar 2008, Julian Elischer wrote: > it wouldn't.. you'd add them together before presenting them. but every time > a packet changes a counter that is shared, there is a chance that it is > being altered by another processor, so if you have fine grained locking in > ipfw, you really should use atomic adds, which are slow, or accept possibl > collisions (which might be ok) but still cause a lot of cross cpu TLB > flushing. In malloc(9) and uma(9), we maintain per-CPU stats, coalescing only for presentation, relying on soft critical sections rather than locks to pretect consistency. What's worth remembering, however, is that recent multicore machines have significantly optimized the cost of atomic operations on cache lines held for write by the current CPU, and so the cost of locking has dramatically fallen in the last few years. This re-emphasizes the importance of careful cacheline management for per-CPU data structures (particularly, don't put data written by multiple CPUs in the same cacheline if you want the benefits of per-CPU access). Where read-write locking is the best model, Stephan's recent work on rmlocks looks quite promising. In my micro-benchmarks, on recent hardware it performs extremely well on SMP for read locks, but still requires optimization for UP-compiled kernels. For stats and writable structures, such as per-CPU caches, rmlocks aren't very helpful, but when compared with replicating infrequently written data structures across many CPUs, rwlocks/rmlocks offer a much simpler and less error-prone programming model. We need to see more optimization and measurement done on rmlocks for 8.x, and the lack of full priority propagation for rwlocks has to be kept in mind. Robert N M Watson Computer Laboratory University of Cambridge _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-ipfw@FreeBSD.ORG Tue Apr 1 05:07:23 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D03761065E5F; Tue, 1 Apr 2008 05:07:23 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: from staff.cyber.mmu.edu.my (staff.cyber.mmu.edu.my [203.106.62.12]) by mx1.freebsd.org (Postfix) with ESMTP id 0DB888FC19; Tue, 1 Apr 2008 05:07:22 +0000 (UTC) (envelope-from root@mmu.edu.my) Received: by staff.cyber.mmu.edu.my (Postfix, from userid 0) id E56AB4D4B5F; Tue, 1 Apr 2008 13:02:35 +0800 (MYT) Received: from mx2.freebsd.org (mx2.freebsd.org [69.147.83.53]) by mmu.edu.my (Postfix) with ESMTP id 0A11755E4AC for ; Fri, 28 Mar 2008 01:11:46 +0800 (MYT) Received: from hub.freebsd.org (hub.freebsd.org [IPv6:2001:4f8:fff6::36]) by mx2.freebsd.org (Postfix) with ESMTP id 57CDB1A6D78; Thu, 27 Mar 2008 17:11:09 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Received: from hub.freebsd.org (localhost [127.0.0.1]) by hub.freebsd.org (Postfix) with ESMTP id 816FD106572C; Thu, 27 Mar 2008 17:11:07 +0000 (UTC) (envelope-from owner-freebsd-hackers@freebsd.org) Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 788F7106566C for ; Thu, 27 Mar 2008 17:10:58 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.freebsd.org (Postfix) with ESMTP id DF4B38FC29 for ; Thu, 27 Mar 2008 17:10:57 +0000 (UTC) (envelope-from andre@freebsd.org) Received: (qmail 27041 invoked from network); 27 Mar 2008 16:20:24 -0000 Received: from dotat.atdotat.at (HELO [62.48.0.47]) ([62.48.0.47]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 27 Mar 2008 16:20:24 -0000 Message-ID: <47EBD520.8050305@freebsd.org> Date: Thu, 27 Mar 2008 18:10:56 +0100 From: Andre Oppermann User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b) Gecko/20050217 MIME-Version: 1.0 To: Robert Watson References: <47E79636.1000909@FreeBSD.org> <47E7EAA8.7020101@elischer.org> <20080325094400.I6905@fledge.watson.org> In-Reply-To: <20080325094400.I6905@fledge.watson.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Sender: owner-freebsd-hackers@freebsd.org Errors-To: owner-freebsd-hackers@freebsd.org Cc: Sepherosa Ziehau , freebsd-hackers@freebsd.org, araujo@freebsd.org, vadim_nuclight@mail.ru, freebsd-ipfw@freebsd.org, Julian Elischer Subject: Re: [HEADS UP!] IPFW Ideas: possible SoC 2008 candidate X-BeenThere: freebsd-ipfw@freebsd.org List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Apr 2008 05:07:24 -0000 Robert Watson wrote: > > On Tue, 25 Mar 2008, Sepherosa Ziehau wrote: > >> On Tue, Mar 25, 2008 at 1:53 AM, Julian Elischer >> wrote: >> >>> 3/ possibly keeping per CPU stats.. >> >> >> This probably is the trickest part, not difficult for non-fastforward >> case. But if fastforward is enabled, I could only imagine full >> cross-cpu states duplication. > > > FWIW, there is decreasing difference between IP fast forwarding and > regular IP processing in FreeBSD 7.x, as we perform direct dispatch by > default, so it's not just the fast forward case where full input > parallelism is possible for the firewall, and parallel firewall > processing has occurred for output since 5.3. The regular forwarding path still does a (partial) copy of each packet it forwards. This is done for the ICMP redirect functionality. Additionally it has a much larger I-cache footprint due to the full ip_input(), ip_forward() and ip_output() functions being executed. Yes, the delta is shrinking but still quite big. I think regular forwarding still hits the wall at around 300-350kpps whereas fastforward can do 500kpps up to 1mpps with a good hardware base. -- Andre _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" From owner-freebsd-ipfw@FreeBSD.ORG Wed Apr 2 06:47:44 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A1B78106566B for ; Wed, 2 Apr 2008 06:47:44 +0000 (UTC) (envelope-from shulikov@gmail.com) Received: from fk-out-0910.google.com (fk-out-0910.google.com [209.85.128.188]) by mx1.freebsd.org (Postfix) with ESMTP id ED34A8FC1A for ; Wed, 2 Apr 2008 06:47:43 +0000 (UTC) (envelope-from shulikov@gmail.com) Received: by fk-out-0910.google.com with SMTP id b27so3839420fka.11 for ; Tue, 01 Apr 2008 23:47:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=pMT2scXO12BCT0c0UPDSG/QBZRq63ogC7HaADRL+2aw=; b=NyKElnSTyxeqGFO03IPjQCbCXOu/z3XyjZcl7G37ikJceeO/ZTNEd+NH3qxQPndyM/VzvvVlPxXudJAd951Ix+OBDZ/RCugqxDcYvOqoIg4h49FGt9u+nbYH4KBmGS8RNiOz2TbiZUf/brXx3GHWtPPEsU4xlplesegYEyxc7OE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=VT7RPKOacUELjXlwETeYRmy0kdo7aeM18pPnlWFBy1ZTYQ79ihNU7f+Ief/x8guDI1tCDRNQp8LyUGjvO8MsHA5QCjl9SK+Mym/OyO+uOsMhi27BwkeXRdW6zTB+R3OSfssiPWNwTqAuSi+atc5jqfuSXVjYo9EOjBGlkUwonw4= Received: by 10.82.188.14 with SMTP id l14mr21509383buf.37.1207118860623; Tue, 01 Apr 2008 23:47:40 -0700 (PDT) Received: by 10.82.154.1 with HTTP; Tue, 1 Apr 2008 23:47:40 -0700 (PDT) Message-ID: <18292fe60804012347m3bf7746dga85621adc8eda3b2@mail.gmail.com> Date: Wed, 2 Apr 2008 09:47:40 +0300 From: "Alexander Shulikov" To: freebsd-ipfw@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: dummynet panics after 6.2 (kern/121955) X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Apr 2008 06:47:44 -0000 See bug: kern/121955 I have received panics with the same configuration of ipfw and dummynet in 6.3, 7.0-RELEASE, 7.0-STABLE. But I don't received it in 6.2. In all panics was corrupted stack. I use mpd-5.0 for pptp connections and shape traffic with ng_car or dummynet for different clients. In 7.0-STABLE on netgraph was added patches, that decreasing using stack by netgraph. And when I updated from 7.0-RELEASE to 7.0-STABLE, I received panic rare. Not after 3-5 minutes, but after minimum 3 hours, maximum 2,5 days. I saw cvsweb, and ip_dummynet in 6.2 and in 6.3. Between it's two releases was done next changes: Revision 1.93.2.6: download - view: text, markup, annotated - select for diffs Wed Mar 21 17:25:15 2007 UTC (12 months, 1 week ago) by oleg Branches: RELENG_6 CVS tags: RELENG_6_3_BP, RELENG_6_3_0_RELEASE, RELENG_6_3 Diff to: previous 1.93.2.5: preferred, colored; branchpoint 1.93: preferred, colored; next MAIN 1.94: preferred, colored Changes since revision 1.93.2.5: +481 -375 lines MFC rev. 1.102-1.105 - style(9) cleanup - Use separate thread for servicing dummynet(4). Utilize taskqueue(9) API. - Convert net.inet.ip.dummynet.curr_time net.inet.ip.dummynet.searches net.inet.ip.dummynet.search_steps to SYSCTL_LONG nodes. It will prevent frequent wrap around on 64bit archs. - Implement simple mechanics for dummynet(4) internal time correction. Under certain circumstances (system high load, dummynet lock contention, etc) dummynet's tick counter can be significantly slower than it should be. (I've observed up to 25% difference on one of my production servers). Since this counter used for packet scheduling, it's accuracy is vital for precise bandwidth limitation. Introduce new sysctl nodes: net.inet.ip.dummynet. tick_lost - number of ticks coalesced by taskqueue thread. tick_adjustment - number of time corrections done. tick_diff - adjusted vs non-adjusted tick counter difference tick_delta - last vs 'standard' tick differnece (usec). tick_delta_sum - accumulated (and not corrected yet) time difference (usec). - Use non-recursive mutex. MTX_RECURSE is unnecessary since rev. 1.70 - Pay respect to net.isr.direct: use netisr_dispatch() instead of ip_input() - purge_flow_set(): Do not leak memory while purging queues which are not bound to pipe. Diff between files see in file. After this changes (that mfced from 1.102-1.105) system became working unstable. I think, that it's changes must be rereaded, because panics on my server with 6.3 or 7.0, 7.0-STABLE don't repeated in 6.2 with same configuration. Last panics was: # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.11 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address = 0xf2a9864 fault code = supervisor read, page not present instruction pointer = 0x20:0xc3f96a9f stack pointer = 0x28:0xe4614a88 frame pointer = 0x28:0xe4614b7c code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 40 (dummynet) trap number = 12 panic: page fault Uptime: 3h55m10s Physical memory: 1015 MB Dumping 173 MB: 158 142 126 110 94 78 62 46 30 14 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:409 #2 0xc056ddef in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=0xe4614a48, eva=254449764) at /usr/src/sys/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=0xe4614a48, usermode=0, eva=254449764) at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=0xe4614a48) at /usr/src/sys/i386/i386/trap.c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f96a9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.10 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address = 0xcd fault code = supervisor read, page not present instruction pointer = 0x20:0xc3f8ba9f stack pointer = 0x28:0xe4614a88 frame pointer = 0x28:0xe4614b7c code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 40 (dummynet) trap number = 12 panic: page fault Uptime: 3h21m49s Physical memory: 1015 MB Dumping 171 MB: 156 140 124 108 92 76 60 44 28 12 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:409 #2 0xc056ddef in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=0xe4614a48, eva=205) at /usr/src/sys/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=0xe4614a48, usermode=0, eva=205) at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=0xe4614a48) at /usr/src/sys/i386/i386/trap.c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f8ba9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.9 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address = 0xf4 fault code = supervisor read, page not present instruction pointer = 0x20:0xc3f8ca9f stack pointer = 0x28:0xe4614a88 frame pointer = 0x28:0xe4614b7c code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 40 (dummynet) trap number = 12 panic: page fault Uptime: 2d19h13m24s Physical memory: 1015 MB Dumping 199 MB: 184 168 152 136 120 104 88 72 56 40 24 8 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:409 #2 0xc056ddef in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=0xe4614a48, eva=244) at /usr/src/sys/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=0xe4614a48, usermode=0, eva=244) at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=0xe4614a48) at /usr/src/sys/i386/i386/trap.c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f8ca9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.8 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address = 0xc2 fault code = supervisor read, page not present instruction pointer = 0x20:0xc3f93a9f stack pointer = 0x28:0xe4614a88 frame pointer = 0x28:0xe4614b7c code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 40 (dummynet) trap number = 12 panic: page fault Uptime: 11h35m35s Physical memory: 1015 MB Dumping 217 MB: 202 186 170 154 138 122 106 90 74 58 42 26 10 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:409 #2 0xc056ddef in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=0xe4614a48, eva=194) at /usr/src/sys/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=0xe4614a48, usermode=0, eva=194) at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=0xe4614a48) at /usr/src/sys/i386/i386/trap.c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f93a9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.7 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address = 0xef fault code = supervisor read, page not present instruction pointer = 0x20:0xc3f85a9f stack pointer = 0x28:0xe4614a88 frame pointer = 0x28:0xe4614b7c code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 40 (dummynet) trap number = 12 panic: page fault Uptime: 1d1h54m1s Physical memory: 1015 MB Dumping 227 MB: 212 196 180 164 148 132 116 100 84 68 52 36 20 4 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:409 #2 0xc056ddef in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=0xe4614a48, eva=239) at /usr/src/sys/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=0xe4614a48, usermode=0, eva=239) at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=0xe4614a48) at /usr/src/sys/i386/i386/trap.c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f85a9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) My sysctl.conf: # cat /etc/sysctl.conf net.inet.ip.fw.autoinc_step=1 net.inet.ip.intr_queue_maxlen=256 net.inet.ip.dummynet.hash_size=16384 net.inet.ip.fw.dyn_buckets=1024 net.inet.ip.fastforwarding=1 kern.ipc.somaxconn=2048 kern.ipc.nmbclusters=32768 net.inet.tcp.recvspace=65536 net.inet.tcp.sendspace=131072 net.inet.ip.fw.one_pass=0 Between panic I try change variables: net.inet.ip.fw.one_pass to 1, but panic repetated after this My system now: FreeBSD myhost.mydom 7.0-STABLE FreeBSD 7.0-STABLE #0: Wed Mar 26 07:56:32 EET 2008 root@myhost.mydom:/usr/obj/usr/src/sys/myhost i386 From owner-freebsd-ipfw@FreeBSD.ORG Wed Apr 2 06:49:13 2008 Return-Path: Delivered-To: freebsd-ipfw@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9547F106566B for ; Wed, 2 Apr 2008 06:49:13 +0000 (UTC) (envelope-from shulikov@i.ua) Received: from web01.mi6.kiev.ua (web01.mi6.kiev.ua [91.198.36.2]) by mx1.freebsd.org (Postfix) with ESMTP id 5C41F8FC25 for ; Wed, 2 Apr 2008 06:49:11 +0000 (UTC) (envelope-from shulikov@i.ua) Received: from web06.mi6 ([10.0.0.17] helo=web06.mi6.kiev.ua) by web01.mi6.kiev.ua with esmtp (Exim 4.43) id 1JgwmQ-0002ZE-Cs for freebsd-ipfw@freebsd.org; Wed, 02 Apr 2008 09:49:06 +0300 Received: from web by web06.mi6.kiev.ua with local (Exim 4.63) (envelope-from ) id 1JgwmP-0004UL-Eo for freebsd-ipfw@freebsd.org; Wed, 02 Apr 2008 09:49:05 +0300 To: freebsd-ipfw@freebsd.org Date: Wed, 02 Apr 2008 09:49:05 +0300 From: Alexander Shulikov MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-408138819-1207118945=:31340" X-User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.8.1.13) Gecko/20080316 SUSE/2.0.0.13-0.1 Firefox/2.0.0.13 X-Sender-IP: 91.193.253.233 X-Mailer: I.UA Mail System Message-Id: Subject: dummynet panics after 6.2 (kern/121955) X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Apr 2008 06:49:13 -0000 --8323328-408138819-1207118945=:31340 Content-Type: TEXT/PLAIN; CHARSET=windows-1251 Content-Transfer-Encoding: QUOTED-PRINTABLE See bug: kern/121955 I have received panics with the same configuration of ipfw and dummynet in = 6.3, 7.0-RELEASE, 7.0-STABLE. But I don't received it in 6.2. In all panics was corrupted stack. I use mpd-5.0 for pptp connections and shape traffic with ng_car or dummyne= t for different clients. In 7.0-STABLE on netgraph was added patches, that decreasing using stack by= netgraph. And when I updated from 7.0-RELEASE to 7.0-STABLE, I received pa= nic rare. Not after 3-5 minutes, but after minimum 3 hours, maximum 2,5 day= s. I saw cvsweb, and ip_dummynet in 6.2 and in 6.3. Between it's two releases was done next changes: Revision 1.93.2.6: download - view: text, markup, annotated - select for di= ffs Wed Mar 21 17:25:15 2007 UTC (12 months, 1 week ago) by oleg Branches: RELENG_6 CVS tags: RELENG_6_3_BP, RELENG_6_3_0_RELEASE, RELENG_6_3 Diff to: previous 1.93.2.5: preferred, colored; branchpoint 1.93: preferred= , colored; next MAIN 1.94: preferred, colored Changes since revision 1.93.2.5: +481 -375 lines MFC rev. 1.102-1.105 - style(9) cleanup - Use separate thread for servicing dummynet(4). Utilize taskqueue(9) API. - Convert net.inet.ip.dummynet.curr_time net.inet.ip.dummynet.searches net.inet.ip.dummynet.search_steps to SYSCTL_LONG nodes. It will prevent frequent wrap around on 64bit archs. - Implement simple mechanics for dummynet(4) internal time correction. Under certain circumstances (system high load, dummynet lock contention, et= c) dummynet's tick counter can be significantly slower than it should be. (I've observed up to 25% difference on one of my production servers). Since this counter used for packet scheduling, it's accuracy is vital for precise bandwidth limitation. Introduce new sysctl nodes: net.inet.ip.dummynet. tick_lost - number of ticks coalesced by taskqueue thread. tick_adjustment - number of time corrections done. tick_diff - adjusted vs non-adjusted tick counter difference tick_delta - last vs 'standard' tick differnece (usec). tick_delta_sum - accumulated (and not corrected yet) time difference (usec). - Use non-recursive mutex. MTX_RECURSE is unnecessary since rev. 1.70 - Pay respect to net.isr.direct: use netisr_dispatch() instead of ip_input(= ) - purge_flow_set(): Do not leak memory while purging queues which are not bound to pipe. Diff between files see in file. After this changes (that mfced from 1.102-1.105) system became working unst= able. I think, that it's changes must be rereaded, because panics on my server wi= th 6.3 or 7.0, 7.0-STABLE don't repeated in 6.2 with same configuration. Last panics was: # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.11 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:= Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you ar= e welcome to change it and/or distribute copies of it under certain condition= s. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address =3D 0xf2a9864 fault code =3D supervisor read, page not present instruction pointer =3D 0x20:0xc3f96a9f stack pointer =3D 0x28:0xe4614a88 frame pointer =3D 0x28:0xe4614b7c code segment =3D base 0x0, limit 0xfffff, type 0x1b =3D DPL 0, pres 1, def32 1, gran 1 processor eflags =3D interrupt enabled, resume, IOPL =3D 0 current process =3D 40 (dummynet) trap number =3D 12 panic: page fault Uptime: 3h55m10s Physical memory: 1015 MB Dumping 173 MB: 158 142 126 110 94 78 62 46 30 14 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4= 09 #2 0xc056ddef in panic (fmt=3DVariable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D254449764) at /usr/= src/sys/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D2544= 49764) at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.= c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f96a9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.10 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:= Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you ar= e welcome to change it and/or distribute copies of it under certain condition= s. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address =3D 0xcd fault code =3D supervisor read, page not present instruction pointer =3D 0x20:0xc3f8ba9f stack pointer =3D 0x28:0xe4614a88 frame pointer =3D 0x28:0xe4614b7c code segment =3D base 0x0, limit 0xfffff, type 0x1b =3D DPL 0, pres 1, def32 1, gran 1 processor eflags =3D interrupt enabled, resume, IOPL =3D 0 current process =3D 40 (dummynet) trap number =3D 12 panic: page fault Uptime: 3h21m49s Physical memory: 1015 MB Dumping 171 MB: 156 140 124 108 92 76 60 44 28 12 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4= 09 #2 0xc056ddef in panic (fmt=3DVariable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D205) at /usr/src/sy= s/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D205)= at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.= c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f8ba9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.9 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:= Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you ar= e welcome to change it and/or distribute copies of it under certain condition= s. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address =3D 0xf4 fault code =3D supervisor read, page not present instruction pointer =3D 0x20:0xc3f8ca9f stack pointer =3D 0x28:0xe4614a88 frame pointer =3D 0x28:0xe4614b7c code segment =3D base 0x0, limit 0xfffff, type 0x1b =3D DPL 0, pres 1, def32 1, gran 1 processor eflags =3D interrupt enabled, resume, IOPL =3D 0 current process =3D 40 (dummynet) trap number =3D 12 panic: page fault Uptime: 2d19h13m24s Physical memory: 1015 MB Dumping 199 MB: 184 168 152 136 120 104 88 72 56 40 24 8 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4= 09 #2 0xc056ddef in panic (fmt=3DVariable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D244) at /usr/src/sy= s/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D244)= at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.= c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f8ca9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.8 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:= Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you ar= e welcome to change it and/or distribute copies of it under certain condition= s. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address =3D 0xc2 fault code =3D supervisor read, page not present instruction pointer =3D 0x20:0xc3f93a9f stack pointer =3D 0x28:0xe4614a88 frame pointer =3D 0x28:0xe4614b7c code segment =3D base 0x0, limit 0xfffff, type 0x1b =3D DPL 0, pres 1, def32 1, gran 1 processor eflags =3D interrupt enabled, resume, IOPL =3D 0 current process =3D 40 (dummynet) trap number =3D 12 panic: page fault Uptime: 11h35m35s Physical memory: 1015 MB Dumping 217 MB: 202 186 170 154 138 122 106 90 74 58 42 26 10 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4= 09 #2 0xc056ddef in panic (fmt=3DVariable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D194) at /usr/src/sy= s/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D194)= at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.= c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f93a9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) # kgdb /root/29.03.08/kernel.debug /var/crash/vmcore.7 kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so:= Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you ar= e welcome to change it and/or distribute copies of it under certain condition= s. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: Fatal trap 12: page fault while in kernel mode fault virtual address =3D 0xef fault code =3D supervisor read, page not present instruction pointer =3D 0x20:0xc3f85a9f stack pointer =3D 0x28:0xe4614a88 frame pointer =3D 0x28:0xe4614b7c code segment =3D base 0x0, limit 0xfffff, type 0x1b =3D DPL 0, pres 1, def32 1, gran 1 processor eflags =3D interrupt enabled, resume, IOPL =3D 0 current process =3D 40 (dummynet) trap number =3D 12 panic: page fault Uptime: 1d1h54m1s Physical memory: 1015 MB Dumping 227 MB: 212 196 180 164 148 132 116 100 84 68 52 36 20 4 #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) bt #0 doadump () at pcpu.h:195 #1 0xc056dbf3 in boot (howto=3D260) at /usr/src/sys/kern/kern_shutdown.c:4= 09 #2 0xc056ddef in panic (fmt=3DVariable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:563 #3 0xc07bccac in trap_fatal (frame=3D0xe4614a48, eva=3D239) at /usr/src/sy= s/i386/i386/trap.c:899 #4 0xc07bcf10 in trap_pfault (frame=3D0xe4614a48, usermode=3D0, eva=3D239)= at /usr/src/sys/i386/i386/trap.c:812 #5 0xc07bd869 in trap (frame=3D0xe4614a48) at /usr/src/sys/i386/i386/trap.= c:490 #6 0xc07a786b in calltrap () at /usr/src/sys/i386/i386/exception.s:139 #7 0xc3f85a9f in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) My sysctl.conf: # cat /etc/sysctl.conf net.inet.ip.fw.autoinc_step=3D1 net.inet.ip.intr_queue_maxlen=3D256 net.inet.ip.dummynet.hash_size=3D16384 net.inet.ip.fw.dyn_buckets=3D1024 net.inet.ip.fastforwarding=3D1 kern.ipc.somaxconn=3D2048 kern.ipc.nmbclusters=3D32768 net.inet.tcp.recvspace=3D65536 net.inet.tcp.sendspace=3D131072 net.inet.ip.fw.one_pass=3D0 Between panic I try change variables: net.inet.ip.fw.one_pass to 1, but panic repetated after this My system now: FreeBSD myhost.mydom 7.0-STABLE FreeBSD 7.0-STABLE #0: Wed Mar 26 07:56:32 = EET 2008 root@myhost.mydom:/usr/obj/usr/src/sys/myhost i386 -- =F0=E5=EA=EB=E0=EC=E0 --------------------------------------------------= --------- http://FREEhost.com.ua - =E4=EE=F1=F2=F3=EF=ED=FB=E9 =F5=EE=F1=F2=E8=ED=E3,= =E4=EE=EC=E5=ED =E2 =EF=EE=E4=E0=F0=EE=EA --8323328-408138819-1207118945=:31340 Content-Type: TEXT/x-patch; name=ip_dummynet.c.diff Content-Transfer-Encoding: BASE64 Content-Disposition: attachment; filename=ip_dummynet.c.diff LS0tIGlwX2R1bW15bmV0LmMJU2F0IEp1bCAyOSAxMToyNDoxMiAyMDA2Cisr KyBpcF9kdW1teW5ldC5jLjYuMy5jCUZyaSBKYW4gMTggMjI6NTA6NTUgMjAw OApAQCAtMjQsNyArMjQsNyBAQAogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgogICogU1VDSCBEQU1BR0UuCiAgKgotICogJEZyZWVCU0Q6IHNyYy9z eXMvbmV0aW5ldC9pcF9kdW1teW5ldC5jLHYgMS45My4yLjUgMjAwNi8wNy8y OSAwODoyNDoxMiBvbGVnIEV4cCAkCisgKiAkRnJlZUJTRDogc3JjL3N5cy9u ZXRpbmV0L2lwX2R1bW15bmV0LmMsdiAxLjkzLjIuNiAyMDA3LzAzLzIxIDE3 OjI1OjE1IG9sZWcgRXhwICQKICAqLwogCiAjZGVmaW5lCURVTU1ZTkVUX0RF QlVHCkBAIC02Niw3ICs2Niw5IEBACiAjaW5jbHVkZSA8c3lzL3NvY2tldHZh ci5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3N5 c2N0bC5oPgorI2luY2x1ZGUgPHN5cy90YXNrcXVldWUuaD4KICNpbmNsdWRl IDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvbmV0aXNyLmg+CiAjaW5jbHVk ZSA8bmV0L3JvdXRlLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2lu Y2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KQEAgLTkxLDcgKzkzLDcgQEAK IHN0YXRpYyBpbnQgZG5faGFzaF9zaXplID0gNjQgOwkvKiBkZWZhdWx0IGhh c2ggc2l6ZSAqLwogCiAvKiBzdGF0aXN0aWNzIG9uIG51bWJlciBvZiBxdWV1 ZSBzZWFyY2hlcyBhbmQgc2VhcmNoIHN0ZXBzICovCi1zdGF0aWMgaW50IHNl YXJjaGVzLCBzZWFyY2hfc3RlcHMgOworc3RhdGljIGxvbmcgc2VhcmNoZXMs IHNlYXJjaF9zdGVwcyA7CiBzdGF0aWMgaW50IHBpcGVfZXhwaXJlID0gMSA7 ICAgLyogZXhwaXJlIHF1ZXVlIGlmIGVtcHR5ICovCiBzdGF0aWMgaW50IGRu X21heF9yYXRpbyA9IDE2IDsgLyogbWF4IHF1ZXVlcy9idWNrZXRzIHJhdGlv ICovCiAKQEAgLTk5LDYgKzEwMSwxNSBAQAogc3RhdGljIGludCByZWRfYXZn X3BrdF9zaXplID0gNTEyOyAgICAgIC8qIFJFRCAtIGRlZmF1bHQgbWVkaXVt IHBhY2tldCBzaXplICovCiBzdGF0aWMgaW50IHJlZF9tYXhfcGt0X3NpemUg PSAxNTAwOyAgICAgLyogUkVEIC0gZGVmYXVsdCBtYXggcGFja2V0IHNpemUg Ki8KIAorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByZXZfdCwgdDsKK3N0YXRp YyBsb25nIHRpY2tfbGFzdDsJCQkvKiBMYXN0IHRpY2sgZHVyYXRpb24gKHVz ZWMpLiAqLworc3RhdGljIGxvbmcgdGlja19kZWx0YTsJCQkvKiBMYXN0IHZz IHN0YW5kYXJkIHRpY2sgZGlmZiAodXNlYykuICovCitzdGF0aWMgbG9uZyB0 aWNrX2RlbHRhX3N1bTsJCS8qIEFjY3VtdWxhdGVkIHRpY2sgZGlmZmVyZW5j ZSAodXNlYykuKi8KK3N0YXRpYyBsb25nIHRpY2tfYWRqdXN0bWVudDsJCS8q IFRpY2sgYWRqdXN0bWVudHMgZG9uZS4gKi8KK3N0YXRpYyBsb25nIHRpY2tf bG9zdDsJCQkvKiBMb3N0KGNvYWxlc2NlZCkgdGlja3MgbnVtYmVyLiAqLwor LyogQWRqdXN0ZWQgdnMgbm9uLWFkanVzdGVkIGN1cnJfdGltZSBkaWZmZXJl bmNlICh0aWNrcykuICovCitzdGF0aWMgbG9uZyB0aWNrX2RpZmY7CisKIC8q CiAgKiBUaHJlZSBoZWFwcyBjb250YWluIHF1ZXVlcyBhbmQgcGlwZXMgdGhh dCB0aGUgc2NoZWR1bGVyIGhhbmRsZXM6CiAgKgpAQCAtMTM0LDMxICsxNDUs NDIgQEAKIGV4dGVybgl2b2lkICgqYnJpZGdlX2RuX3ApKHN0cnVjdCBtYnVm ICosIHN0cnVjdCBpZm5ldCAqKTsKIAogI2lmZGVmIFNZU0NUTF9OT0RFCi1T WVNDVExfTk9ERShfbmV0X2luZXRfaXAsIE9JRF9BVVRPLCBkdW1teW5ldCwK LQkJQ1RMRkxBR19SVywgMCwgIkR1bW15bmV0Iik7CitTWVNDVExfTk9ERShf bmV0X2luZXRfaXAsIE9JRF9BVVRPLCBkdW1teW5ldCwgQ1RMRkxBR19SVywg MCwgIkR1bW15bmV0Iik7CiBTWVNDVExfSU5UKF9uZXRfaW5ldF9pcF9kdW1t eW5ldCwgT0lEX0FVVE8sIGhhc2hfc2l6ZSwKLQkgICAgQ1RMRkxBR19SVywg JmRuX2hhc2hfc2l6ZSwgMCwgIkRlZmF1bHQgaGFzaCB0YWJsZSBzaXplIik7 Ci1TWVNDVExfSU5UKF9uZXRfaW5ldF9pcF9kdW1teW5ldCwgT0lEX0FVVE8s IGN1cnJfdGltZSwKLQkgICAgQ1RMRkxBR19SRCwgJmN1cnJfdGltZSwgMCwg IkN1cnJlbnQgdGljayIpOworICAgIENUTEZMQUdfUlcsICZkbl9oYXNoX3Np emUsIDAsICJEZWZhdWx0IGhhc2ggdGFibGUgc2l6ZSIpOworU1lTQ1RMX0xP TkcoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURfQVVUTywgY3Vycl90aW1l LAorICAgIENUTEZMQUdfUkQsICZjdXJyX3RpbWUsIDAsICJDdXJyZW50IHRp Y2siKTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURf QVVUTywgcmVhZHlfaGVhcCwKLQkgICAgQ1RMRkxBR19SRCwgJnJlYWR5X2hl YXAuc2l6ZSwgMCwgIlNpemUgb2YgcmVhZHkgaGVhcCIpOworICAgIENUTEZM QUdfUkQsICZyZWFkeV9oZWFwLnNpemUsIDAsICJTaXplIG9mIHJlYWR5IGhl YXAiKTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURf QVVUTywgZXh0cmFjdF9oZWFwLAotCSAgICBDVExGTEFHX1JELCAmZXh0cmFj dF9oZWFwLnNpemUsIDAsICJTaXplIG9mIGV4dHJhY3QgaGVhcCIpOwotU1lT Q1RMX0lOVChfbmV0X2luZXRfaXBfZHVtbXluZXQsIE9JRF9BVVRPLCBzZWFy Y2hlcywKLQkgICAgQ1RMRkxBR19SRCwgJnNlYXJjaGVzLCAwLCAiTnVtYmVy IG9mIHF1ZXVlIHNlYXJjaGVzIik7Ci1TWVNDVExfSU5UKF9uZXRfaW5ldF9p cF9kdW1teW5ldCwgT0lEX0FVVE8sIHNlYXJjaF9zdGVwcywKLQkgICAgQ1RM RkxBR19SRCwgJnNlYXJjaF9zdGVwcywgMCwgIk51bWJlciBvZiBxdWV1ZSBz ZWFyY2ggc3RlcHMiKTsKKyAgICBDVExGTEFHX1JELCAmZXh0cmFjdF9oZWFw LnNpemUsIDAsICJTaXplIG9mIGV4dHJhY3QgaGVhcCIpOworU1lTQ1RMX0xP TkcoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURfQVVUTywgc2VhcmNoZXMs CisgICAgQ1RMRkxBR19SRCwgJnNlYXJjaGVzLCAwLCAiTnVtYmVyIG9mIHF1 ZXVlIHNlYXJjaGVzIik7CitTWVNDVExfTE9ORyhfbmV0X2luZXRfaXBfZHVt bXluZXQsIE9JRF9BVVRPLCBzZWFyY2hfc3RlcHMsCisgICAgQ1RMRkxBR19S RCwgJnNlYXJjaF9zdGVwcywgMCwgIk51bWJlciBvZiBxdWV1ZSBzZWFyY2gg c3RlcHMiKTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBP SURfQVVUTywgZXhwaXJlLAotCSAgICBDVExGTEFHX1JXLCAmcGlwZV9leHBp cmUsIDAsICJFeHBpcmUgcXVldWUgaWYgZW1wdHkiKTsKKyAgICBDVExGTEFH X1JXLCAmcGlwZV9leHBpcmUsIDAsICJFeHBpcmUgcXVldWUgaWYgZW1wdHki KTsKIFNZU0NUTF9JTlQoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURfQVVU TywgbWF4X2NoYWluX2xlbiwKLQkgICAgQ1RMRkxBR19SVywgJmRuX21heF9y YXRpbywgMCwKLQkiTWF4IHJhdGlvIGJldHdlZW4gZHluYW1pYyBxdWV1ZXMg YW5kIGJ1Y2tldHMiKTsKKyAgICBDVExGTEFHX1JXLCAmZG5fbWF4X3JhdGlv LCAwLAorICAgICJNYXggcmF0aW8gYmV0d2VlbiBkeW5hbWljIHF1ZXVlcyBh bmQgYnVja2V0cyIpOwogU1lTQ1RMX0lOVChfbmV0X2luZXRfaXBfZHVtbXlu ZXQsIE9JRF9BVVRPLCByZWRfbG9va3VwX2RlcHRoLAotCUNUTEZMQUdfUkQs ICZyZWRfbG9va3VwX2RlcHRoLCAwLCAiRGVwdGggb2YgUkVEIGxvb2t1cCB0 YWJsZSIpOworICAgIENUTEZMQUdfUkQsICZyZWRfbG9va3VwX2RlcHRoLCAw LCAiRGVwdGggb2YgUkVEIGxvb2t1cCB0YWJsZSIpOwogU1lTQ1RMX0lOVChf bmV0X2luZXRfaXBfZHVtbXluZXQsIE9JRF9BVVRPLCByZWRfYXZnX3BrdF9z aXplLAotCUNUTEZMQUdfUkQsICZyZWRfYXZnX3BrdF9zaXplLCAwLCAiUkVE IE1lZGl1bSBwYWNrZXQgc2l6ZSIpOworICAgIENUTEZMQUdfUkQsICZyZWRf YXZnX3BrdF9zaXplLCAwLCAiUkVEIE1lZGl1bSBwYWNrZXQgc2l6ZSIpOwog U1lTQ1RMX0lOVChfbmV0X2luZXRfaXBfZHVtbXluZXQsIE9JRF9BVVRPLCBy ZWRfbWF4X3BrdF9zaXplLAotCUNUTEZMQUdfUkQsICZyZWRfbWF4X3BrdF9z aXplLCAwLCAiUkVEIE1heCBwYWNrZXQgc2l6ZSIpOworICAgIENUTEZMQUdf UkQsICZyZWRfbWF4X3BrdF9zaXplLCAwLCAiUkVEIE1heCBwYWNrZXQgc2l6 ZSIpOworU1lTQ1RMX0xPTkcoX25ldF9pbmV0X2lwX2R1bW15bmV0LCBPSURf QVVUTywgdGlja19kZWx0YSwKKyAgICBDVExGTEFHX1JELCAmdGlja19kZWx0 YSwgMCwgIkxhc3QgdnMgc3RhbmRhcmQgdGljayBkaWZmZXJlbmNlICh1c2Vj KS4iKTsKK1NZU0NUTF9MT05HKF9uZXRfaW5ldF9pcF9kdW1teW5ldCwgT0lE X0FVVE8sIHRpY2tfZGVsdGFfc3VtLAorICAgIENUTEZMQUdfUkQsICZ0aWNr X2RlbHRhX3N1bSwgMCwgIkFjY3VtdWxhdGVkIHRpY2sgZGlmZmVyZW5jZSAo dXNlYykuIik7CitTWVNDVExfTE9ORyhfbmV0X2luZXRfaXBfZHVtbXluZXQs IE9JRF9BVVRPLCB0aWNrX2FkanVzdG1lbnQsCisgICAgQ1RMRkxBR19SRCwg JnRpY2tfYWRqdXN0bWVudCwgMCwgIlRpY2sgYWRqdXN0bWVudHMgZG9uZS4i KTsKK1NZU0NUTF9MT05HKF9uZXRfaW5ldF9pcF9kdW1teW5ldCwgT0lEX0FV VE8sIHRpY2tfZGlmZiwKKyAgICBDVExGTEFHX1JELCAmdGlja19kaWZmLCAw LAorICAgICJBZGp1c3RlZCB2cyBub24tYWRqdXN0ZWQgY3Vycl90aW1lIGRp ZmZlcmVuY2UgKHRpY2tzKS4iKTsKK1NZU0NUTF9MT05HKF9uZXRfaW5ldF9p cF9kdW1teW5ldCwgT0lEX0FVVE8sIHRpY2tfbG9zdCwKKyAgICBDVExGTEFH X1JELCAmdGlja19sb3N0LCAwLAorICAgICJOdW1iZXIgb2YgdGlja3MgY29h bGVzY2VkIGJ5IGR1bW15bmV0IHRhc2txdWV1ZS4iKTsKICNlbmRpZgogCiAj aWZkZWYgRFVNTVlORVRfREVCVUcKQEAgLTE3MiwxNCArMTk0LDEzIEBACiAj ZGVmaW5lCURQUklOVEYoWCkKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHRh c2sJZG5fdGFzazsKK3N0YXRpYyBzdHJ1Y3QgdGFza3F1ZXVlCSpkbl90cSA9 IE5VTEw7CitzdGF0aWMgdm9pZCBkdW1teW5ldF90YXNrKHZvaWQgKiwgaW50 KTsKKwogc3RhdGljIHN0cnVjdCBtdHggZHVtbXluZXRfbXR4OwotLyoKLSAq IE5COiBSZWN1cnNpb24gaXMgbmVlZGVkIHRvIGRlYWwgd2l0aCByZS1lbnRy eSB2aWEgSUNNUC4gIFRoYXQgaXMsCi0gKiAgICAgYSBwYWNrZXQgbWF5IGJl IGRpc3BhdGNoZWQgdmlhIGlwX2lucHV0IGZyb20gZHVtbXluZXRfaW8gYW5k Ci0gKiAgICAgcmUtZW50ZXIgdGhyb3VnaCBpcF9vdXRwdXQuICBZZWNoLgot ICovCiAjZGVmaW5lCURVTU1ZTkVUX0xPQ0tfSU5JVCgpIFwKLQltdHhfaW5p dCgmZHVtbXluZXRfbXR4LCAiZHVtbXluZXQiLCBOVUxMLCBNVFhfREVGIHwg TVRYX1JFQ1VSU0UpCisJbXR4X2luaXQoJmR1bW15bmV0X210eCwgImR1bW15 bmV0IiwgTlVMTCwgTVRYX0RFRikKICNkZWZpbmUJRFVNTVlORVRfTE9DS19E RVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJmR1bW15bmV0X210eCkKICNkZWZpbmUJ RFVNTVlORVRfTE9DSygpCQltdHhfbG9jaygmZHVtbXluZXRfbXR4KQogI2Rl ZmluZQlEVU1NWU5FVF9VTkxPQ0soKQltdHhfdW5sb2NrKCZkdW1teW5ldF9t dHgpCkBAIC02OTUsNjQgKzcxNiwxMTggQEAKIH0KIAogLyoKLSAqIFRoaXMg aXMgY2FsbGVkIG9uY2UgcGVyIHRpY2ssIG9yIEhaIHRpbWVzIHBlciBzZWNv bmQuIEl0IGlzIHVzZWQgdG8KLSAqIGluY3JlbWVudCB0aGUgY3VycmVudCB0 aWNrIGNvdW50ZXIgYW5kIHNjaGVkdWxlIGV4cGlyZWQgZXZlbnRzLgorICog VGhpcyBpcyBjYWxsZWQgb25lIHRpY2ssIGFmdGVyIHByZXZpb3VzIHJ1bi4g SXQgaXMgdXNlZCB0bworICogc2NoZWR1bGUgbmV4dCBydW4uCiAgKi8KIHN0 YXRpYyB2b2lkCiBkdW1teW5ldCh2b2lkICogX191bnVzZWQgdW51c2VkKQog ewotICAgIHN0cnVjdCBtYnVmICpoZWFkID0gTlVMTCwgKnRhaWwgPSBOVUxM OwotICAgIHN0cnVjdCBkbl9waXBlICpwaXBlOwotICAgIHN0cnVjdCBkbl9o ZWFwICpoZWFwc1szXTsKLSAgICBzdHJ1Y3QgZG5faGVhcCAqaDsKLSAgICB2 b2lkICpwOyAvKiBnZW5lcmljIHBhcmFtZXRlciB0byBoYW5kbGVyICovCi0g ICAgaW50IGk7CisJdGFza3F1ZXVlX2VucXVldWUoZG5fdHEsICZkbl90YXNr KTsKK30KIAotICAgIGhlYXBzWzBdID0gJnJlYWR5X2hlYXAgOwkJLyogZml4 ZWQtcmF0ZSBxdWV1ZXMgKi8KLSAgICBoZWFwc1sxXSA9ICZ3ZnFfcmVhZHlf aGVhcCA7CS8qIHdmcSBxdWV1ZXMgKi8KLSAgICBoZWFwc1syXSA9ICZleHRy YWN0X2hlYXAgOwkJLyogZGVsYXkgbGluZSAqLworLyoKKyAqIFRoZSBtYWlu IGR1bW15bmV0IHByb2Nlc3NpbmcgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2 b2lkCitkdW1teW5ldF90YXNrKHZvaWQgKmNvbnRleHQsIGludCBwZW5kaW5n KQorewogCi0gICAgRFVNTVlORVRfTE9DSygpOwotICAgIGN1cnJfdGltZSsr IDsKLSAgICBmb3IgKGk9MDsgaSA8IDMgOyBpKyspIHsKLQloID0gaGVhcHNb aV07Ci0Jd2hpbGUgKGgtPmVsZW1lbnRzID4gMCAmJiBETl9LRVlfTEVRKGgt PnBbMF0ua2V5LCBjdXJyX3RpbWUpICkgewotCSAgICBpZiAoaC0+cFswXS5r ZXkgPiBjdXJyX3RpbWUpCi0JCXByaW50ZigiZHVtbXluZXQ6IHdhcm5pbmcs IGhlYXAgJWQgaXMgJWQgdGlja3MgbGF0ZVxuIiwKLQkJICAgIGksIChpbnQp KGN1cnJfdGltZSAtIGgtPnBbMF0ua2V5KSk7Ci0JICAgIHAgPSBoLT5wWzBd Lm9iamVjdCA7IC8qIHN0b3JlIGEgY29weSBiZWZvcmUgaGVhcF9leHRyYWN0 ICovCi0JICAgIGhlYXBfZXh0cmFjdChoLCBOVUxMKTsgLyogbmVlZCB0byBl eHRyYWN0IGJlZm9yZSBwcm9jZXNzaW5nICovCi0JICAgIGlmIChpID09IDAp Ci0JCXJlYWR5X2V2ZW50KHAsICZoZWFkLCAmdGFpbCk7Ci0JICAgIGVsc2Ug aWYgKGkgPT0gMSkgewotCQlzdHJ1Y3QgZG5fcGlwZSAqcGlwZSA9IHA7Ci0J CWlmIChwaXBlLT5pZl9uYW1lWzBdICE9ICdcMCcpCi0JCSAgICBwcmludGYo ImR1bW15bmV0OiBiYWQgcmVhZHlfZXZlbnRfd2ZxIGZvciBwaXBlICVzXG4i LAotCQkJcGlwZS0+aWZfbmFtZSk7Ci0JCWVsc2UKLQkJICAgIHJlYWR5X2V2 ZW50X3dmcShwLCAmaGVhZCwgJnRhaWwpOwotCSAgICB9IGVsc2UKLQkJdHJh bnNtaXRfZXZlbnQocCwgJmhlYWQsICZ0YWlsKTsKLQl9Ci0gICAgfQotICAg IC8qIFN3ZWVwIHBpcGVzIHRyeWluZyB0byBleHBpcmUgaWRsZSBmbG93X3F1 ZXVlcy4gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgSEFTSFNJWkU7IGkrKykK LQlTTElTVF9GT1JFQUNIKHBpcGUsICZwaXBlaGFzaFtpXSwgbmV4dCkKLQkJ aWYgKHBpcGUtPmlkbGVfaGVhcC5lbGVtZW50cyA+IDAgJiYKLQkJICAgIERO X0tFWV9MVChwaXBlLT5pZGxlX2hlYXAucFswXS5rZXksIHBpcGUtPlYpICkg ewotCQkJc3RydWN0IGRuX2Zsb3dfcXVldWUgKnEgPSBwaXBlLT5pZGxlX2hl YXAucFswXS5vYmplY3Q7Ci0KLQkJCWhlYXBfZXh0cmFjdCgmKHBpcGUtPmlk bGVfaGVhcCksIE5VTEwpOwotCQkJcS0+UyA9IHEtPkYgKyAxOyAvKiBNYXJr IHRpbWVzdGFtcCBhcyBpbnZhbGlkLiAqLwotCQkJcGlwZS0+c3VtIC09IHEt PmZzLT53ZWlnaHQ7CisJc3RydWN0IG1idWYgKmhlYWQgPSBOVUxMLCAqdGFp bCA9IE5VTEw7CisJc3RydWN0IGRuX3BpcGUgKnBpcGU7CisJc3RydWN0IGRu X2hlYXAgKmhlYXBzWzNdOworCXN0cnVjdCBkbl9oZWFwICpoOworCXZvaWQg KnA7CS8qIGdlbmVyaWMgcGFyYW1ldGVyIHRvIGhhbmRsZXIgKi8KKwlpbnQg aTsKKworCU5FVF9MT0NLX0dJQU5UKCk7CisJRFVNTVlORVRfTE9DSygpOwor CisJaGVhcHNbMF0gPSAmcmVhZHlfaGVhcDsJCQkvKiBmaXhlZC1yYXRlIHF1 ZXVlcyAqLworCWhlYXBzWzFdID0gJndmcV9yZWFkeV9oZWFwOwkJLyogd2Zx IHF1ZXVlcyAqLworCWhlYXBzWzJdID0gJmV4dHJhY3RfaGVhcDsJCS8qIGRl bGF5IGxpbmUgKi8KKworIAkvKiBVcGRhdGUgbnVtYmVyIG9mIGxvc3QoY29h bGVzY2VkKSB0aWNrcy4gKi8KKyAJdGlja19sb3N0ICs9IHBlbmRpbmcgLSAx OworIAorIAlnZXRtaWNyb3VwdGltZSgmdCk7CisgCS8qIExhc3QgdGljayBk dXJhdGlvbiAodXNlYykuICovCisgCXRpY2tfbGFzdCA9ICh0LnR2X3NlYyAt IHByZXZfdC50dl9zZWMpICogMTAwMDAwMCArCisgCSAgICAodC50dl91c2Vj IC0gcHJldl90LnR2X3VzZWMpOworIAkvKiBMYXN0IHRpY2sgdnMgc3RhbmRh cmQgdGljayBkaWZmZXJlbmNlICh1c2VjKS4gKi8KKyAJdGlja19kZWx0YSA9 ICh0aWNrX2xhc3QgKiBoeiAtIDEwMDAwMDApIC8gaHo7CisgCS8qIEFjY3Vt dWxhdGVkIHRpY2sgZGlmZmVyZW5jZSAodXNlYykuICovCisgCXRpY2tfZGVs dGFfc3VtICs9IHRpY2tfZGVsdGE7CisgCisgCXByZXZfdCA9IHQ7CisgCisg CS8qCisgCSAqIEFkanVzdCBjdXJyX3RpbWUgaWYgYWNjdW11bGF0ZWQgdGlj ayBkaWZmZXJlbmNlIGdyZWF0ZXIgdGhhbgorIAkgKiAnc3RhbmRhcmQnIHRp Y2suIFNpbmNlIGN1cnJfdGltZSBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBp bmNyZWFzaW5nLAorIAkgKiB3ZSBkbyBwb3NpdGl2ZSBhZGp1c3RtZW50IGFz IHJlcXVpcmVkIGFuZCB0aHJvdHRsZSBjdXJyX3RpbWUgaW4KKyAJICogY2Fz ZSBvZiBuZWdhdGl2ZSBhZGp1c3RtZW50LgorIAkgKi8KKyAgCWN1cnJfdGlt ZSsrOworIAlpZiAodGlja19kZWx0YV9zdW0gLSB0aWNrID49IDApIHsKKyAJ CWludCBkaWZmID0gdGlja19kZWx0YV9zdW0gLyB0aWNrOworIAorIAkJY3Vy cl90aW1lICs9IGRpZmY7CisgCQl0aWNrX2RpZmYgKz0gZGlmZjsKKyAJCXRp Y2tfZGVsdGFfc3VtICU9IHRpY2s7CisgCQl0aWNrX2FkanVzdG1lbnQrKzsK KyAJfSBlbHNlIGlmICh0aWNrX2RlbHRhX3N1bSArIHRpY2sgPD0gMCkgewor IAkJY3Vycl90aW1lLS07CisgCQl0aWNrX2RpZmYtLTsKKyAJCXRpY2tfZGVs dGFfc3VtICs9IHRpY2s7CisgCQl0aWNrX2FkanVzdG1lbnQrKzsKKyAJfQor CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQloID0gaGVhcHNbaV07 CisJCXdoaWxlIChoLT5lbGVtZW50cyA+IDAgJiYgRE5fS0VZX0xFUShoLT5w WzBdLmtleSwgY3Vycl90aW1lKSkgeworCQkJaWYgKGgtPnBbMF0ua2V5ID4g Y3Vycl90aW1lKQorCQkJCXByaW50ZigiZHVtbXluZXQ6IHdhcm5pbmcsICIK KwkJCQkgICAgImhlYXAgJWQgaXMgJWQgdGlja3MgbGF0ZVxuIiwKKwkJCQkg ICAgaSwgKGludCkoY3Vycl90aW1lIC0gaC0+cFswXS5rZXkpKTsKKwkJCS8q IHN0b3JlIGEgY29weSBiZWZvcmUgaGVhcF9leHRyYWN0ICovCisJCQlwID0g aC0+cFswXS5vYmplY3Q7CisJCQkvKiBuZWVkIHRvIGV4dHJhY3QgYmVmb3Jl IHByb2Nlc3NpbmcgKi8KKwkJCWhlYXBfZXh0cmFjdChoLCBOVUxMKTsKKwkJ CWlmIChpID09IDApCisJCQkJcmVhZHlfZXZlbnQocCwgJmhlYWQsICZ0YWls KTsKKwkJCWVsc2UgaWYgKGkgPT0gMSkgeworCQkJCXN0cnVjdCBkbl9waXBl ICpwaXBlID0gcDsKKwkJCQlpZiAocGlwZS0+aWZfbmFtZVswXSAhPSAnXDAn KQorCQkJCQlwcmludGYoImR1bW15bmV0OiBiYWQgcmVhZHlfZXZlbnRfd2Zx ICIKKwkJCQkJICAgICJmb3IgcGlwZSAlc1xuIiwgcGlwZS0+aWZfbmFtZSk7 CisJCQkJZWxzZQorCQkJCQlyZWFkeV9ldmVudF93ZnEocCwgJmhlYWQsICZ0 YWlsKTsKKwkJCX0gZWxzZQorCQkJCXRyYW5zbWl0X2V2ZW50KHAsICZoZWFk LCAmdGFpbCk7CiAJCX0KKwl9CiAKLSAgICBEVU1NWU5FVF9VTkxPQ0soKTsK KwkvKiBTd2VlcCBwaXBlcyB0cnlpbmcgdG8gZXhwaXJlIGlkbGUgZmxvd19x dWV1ZXMuICovCisJZm9yIChpID0gMDsgaSA8IEhBU0hTSVpFOyBpKyspCisJ CVNMSVNUX0ZPUkVBQ0gocGlwZSwgJnBpcGVoYXNoW2ldLCBuZXh0KQorCQkJ aWYgKHBpcGUtPmlkbGVfaGVhcC5lbGVtZW50cyA+IDAgJiYKKwkJCSAgICBE Tl9LRVlfTFQocGlwZS0+aWRsZV9oZWFwLnBbMF0ua2V5LCBwaXBlLT5WKSkg eworCQkJCXN0cnVjdCBkbl9mbG93X3F1ZXVlICpxID0KKwkJCQkgICAgcGlw ZS0+aWRsZV9oZWFwLnBbMF0ub2JqZWN0OworCisJCQkJaGVhcF9leHRyYWN0 KCYocGlwZS0+aWRsZV9oZWFwKSwgTlVMTCk7CisJCQkJLyogTWFyayB0aW1l c3RhbXAgYXMgaW52YWxpZC4gKi8KKwkJCQlxLT5TID0gcS0+RiArIDE7CisJ CQkJcGlwZS0+c3VtIC09IHEtPmZzLT53ZWlnaHQ7CisJCQl9CiAKLSAgICBp ZiAoaGVhZCAhPSBOVUxMKQotCWR1bW15bmV0X3NlbmQoaGVhZCk7CisJRFVN TVlORVRfVU5MT0NLKCk7CisKKwlpZiAoaGVhZCAhPSBOVUxMKQorCQlkdW1t eW5ldF9zZW5kKGhlYWQpOworCisJY2FsbG91dF9yZXNldCgmZG5fdGltZW91 dCwgMSwgZHVtbXluZXQsIE5VTEwpOwogCi0gICAgY2FsbG91dF9yZXNldCgm ZG5fdGltZW91dCwgMSwgZHVtbXluZXQsIE5VTEwpOworCU5FVF9VTkxPQ0tf R0lBTlQoKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTc3NCwxMSArODQ5LDEx IEBACiAJCQlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOwogCQkJaXAtPmlw X2xlbiA9IGh0b25zKGlwLT5pcF9sZW4pOwogCQkJaXAtPmlwX29mZiA9IGh0 b25zKGlwLT5pcF9vZmYpOwotCQkJaXBfaW5wdXQobSk7CisJCQluZXRpc3Jf ZGlzcGF0Y2goTkVUSVNSX0lQLCBtKTsKIAkJCWJyZWFrOwogI2lmZGVmIElO RVQ2CiAJCWNhc2UgRE5fVE9fSVA2X0lOOgotCQkJaXA2X2lucHV0KG0pOwor CQkJbmV0aXNyX2Rpc3BhdGNoKE5FVElTUl9JUFY2LCBtKTsKIAkJCWJyZWFr OwogCiAJCWNhc2UgRE5fVE9fSVA2X09VVDoKQEAgLTEwMjEsMTAzICsxMDk2 LDEwNiBAQAogc3RhdGljIGludAogcmVkX2Ryb3BzKHN0cnVjdCBkbl9mbG93 X3NldCAqZnMsIHN0cnVjdCBkbl9mbG93X3F1ZXVlICpxLCBpbnQgbGVuKQog ewotICAgIC8qCi0gICAgICogUkVEIGFsZ29yaXRobQotICAgICAqCi0gICAg ICogUkVEIGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgcXVldWUgc2l6ZSAoYXZn KSB1c2luZyBhIGxvdy1wYXNzIGZpbHRlcgotICAgICAqIHdpdGggYW4gZXhw b25lbnRpYWwgd2VpZ2h0ZWQgKHdfcSkgbW92aW5nIGF2ZXJhZ2U6Ci0gICAg ICogCWF2ZyAgPC0gICgxLXdfcSkgKiBhdmcgKyB3X3EgKiBxX3NpemUKLSAg ICAgKiB3aGVyZSBxX3NpemUgaXMgdGhlIHF1ZXVlIGxlbmd0aCAobWVhc3Vy ZWQgaW4gYnl0ZXMgb3IgKiBwYWNrZXRzKS4KLSAgICAgKgotICAgICAqIElm IHFfc2l6ZSA9PSAwLCB3ZSBjb21wdXRlIHRoZSBpZGxlIHRpbWUgZm9yIHRo ZSBsaW5rLCBhbmQgc2V0Ci0gICAgICoJYXZnID0gKDEgLSB3X3EpXihpZGxl L3MpCi0gICAgICogd2hlcmUgcyBpcyB0aGUgdGltZSBuZWVkZWQgZm9yIHRy YW5zbWl0dGluZyBhIG1lZGl1bS1zaXplZCBwYWNrZXQuCi0gICAgICoKLSAg ICAgKiBOb3csIGlmIGF2ZyA8IG1pbl90aCB0aGUgcGFja2V0IGlzIGVucXVl dWVkLgotICAgICAqIElmIGF2ZyA+IG1heF90aCB0aGUgcGFja2V0IGlzIGRy b3BwZWQuIE90aGVyd2lzZSwgdGhlIHBhY2tldCBpcwotICAgICAqIGRyb3Bw ZWQgd2l0aCBwcm9iYWJpbGl0eSBQIGZ1bmN0aW9uIG9mIGF2Zy4KLSAgICAg KgotICAgICAqLworCS8qCisJICogUkVEIGFsZ29yaXRobQorCSAqCisJICog UkVEIGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgcXVldWUgc2l6ZSAoYXZnKSB1 c2luZyBhIGxvdy1wYXNzIGZpbHRlcgorCSAqIHdpdGggYW4gZXhwb25lbnRp YWwgd2VpZ2h0ZWQgKHdfcSkgbW92aW5nIGF2ZXJhZ2U6CisJICogCWF2ZyAg PC0gICgxLXdfcSkgKiBhdmcgKyB3X3EgKiBxX3NpemUKKwkgKiB3aGVyZSBx X3NpemUgaXMgdGhlIHF1ZXVlIGxlbmd0aCAobWVhc3VyZWQgaW4gYnl0ZXMg b3IgKiBwYWNrZXRzKS4KKwkgKgorCSAqIElmIHFfc2l6ZSA9PSAwLCB3ZSBj b21wdXRlIHRoZSBpZGxlIHRpbWUgZm9yIHRoZSBsaW5rLCBhbmQgc2V0CisJ ICoJYXZnID0gKDEgLSB3X3EpXihpZGxlL3MpCisJICogd2hlcmUgcyBpcyB0 aGUgdGltZSBuZWVkZWQgZm9yIHRyYW5zbWl0dGluZyBhIG1lZGl1bS1zaXpl ZCBwYWNrZXQuCisJICoKKwkgKiBOb3csIGlmIGF2ZyA8IG1pbl90aCB0aGUg cGFja2V0IGlzIGVucXVldWVkLgorCSAqIElmIGF2ZyA+IG1heF90aCB0aGUg cGFja2V0IGlzIGRyb3BwZWQuIE90aGVyd2lzZSwgdGhlIHBhY2tldCBpcwor CSAqIGRyb3BwZWQgd2l0aCBwcm9iYWJpbGl0eSBQIGZ1bmN0aW9uIG9mIGF2 Zy4KKwkgKi8KIAotICAgIGludDY0X3QgcF9iID0gMDsKLSAgICAvKiBxdWV1 ZSBpbiBieXRlcyBvciBwYWNrZXRzID8gKi8KLSAgICB1X2ludCBxX3NpemUg PSAoZnMtPmZsYWdzX2ZzICYgRE5fUVNJWkVfSVNfQllURVMpID8gcS0+bGVu X2J5dGVzIDogcS0+bGVuOworCWludDY0X3QgcF9iID0gMDsKIAotICAgIERQ UklOVEYoKCJcbmR1bW15bmV0OiAlZCBxOiAlMnUgIiwgKGludCkgY3Vycl90 aW1lLCBxX3NpemUpKTsKKwkvKiBRdWV1ZSBpbiBieXRlcyBvciBwYWNrZXRz PyAqLworCXVfaW50IHFfc2l6ZSA9IChmcy0+ZmxhZ3NfZnMgJiBETl9RU0la RV9JU19CWVRFUykgPworCSAgICBxLT5sZW5fYnl0ZXMgOiBxLT5sZW47CiAK LSAgICAvKiBhdmVyYWdlIHF1ZXVlIHNpemUgZXN0aW1hdGlvbiAqLwotICAg IGlmIChxX3NpemUgIT0gMCkgewotCS8qCi0JICogcXVldWUgaXMgbm90IGVt cHR5LCBhdmcgPC0gYXZnICsgKHFfc2l6ZSAtIGF2ZykgKiB3X3EKLQkgKi8K LQlpbnQgZGlmZiA9IFNDQUxFKHFfc2l6ZSkgLSBxLT5hdmc7Ci0JaW50NjRf dCB2ID0gU0NBTEVfTVVMKChpbnQ2NF90KSBkaWZmLCAoaW50NjRfdCkgZnMt PndfcSk7CisJRFBSSU5URigoIlxuZHVtbXluZXQ6ICVkIHE6ICUydSAiLCAo aW50KWN1cnJfdGltZSwgcV9zaXplKSk7CiAKLQlxLT5hdmcgKz0gKGludCkg djsKLSAgICB9IGVsc2UgewotCS8qCi0JICogcXVldWUgaXMgZW1wdHksIGZp bmQgZm9yIGhvdyBsb25nIHRoZSBxdWV1ZSBoYXMgYmVlbgotCSAqIGVtcHR5 IGFuZCB1c2UgYSBsb29rdXAgdGFibGUgZm9yIGNvbXB1dGluZwotCSAqICgx IC0gKiB3X3EpXihpZGxlX3RpbWUvcykgd2hlcmUgcyBpcyB0aGUgdGltZSB0 byBzZW5kIGEKLQkgKiAoc21hbGwpIHBhY2tldC4KLQkgKiBYWFggY2hlY2sg d3JhcHMuLi4KLQkgKi8KLQlpZiAocS0+YXZnKSB7Ci0JICAgIHVfaW50IHQg PSAoY3Vycl90aW1lIC0gcS0+cV90aW1lKSAvIGZzLT5sb29rdXBfc3RlcDsK KwkvKiBBdmVyYWdlIHF1ZXVlIHNpemUgZXN0aW1hdGlvbi4gKi8KKwlpZiAo cV9zaXplICE9IDApIHsKKwkJLyogUXVldWUgaXMgbm90IGVtcHR5LCBhdmcg PC0gYXZnICsgKHFfc2l6ZSAtIGF2ZykgKiB3X3EgKi8KKwkJaW50IGRpZmYg PSBTQ0FMRShxX3NpemUpIC0gcS0+YXZnOworCQlpbnQ2NF90IHYgPSBTQ0FM RV9NVUwoKGludDY0X3QpZGlmZiwgKGludDY0X3QpZnMtPndfcSk7CiAKLQkg ICAgcS0+YXZnID0gKHQgPCBmcy0+bG9va3VwX2RlcHRoKSA/Ci0JCSAgICBT Q0FMRV9NVUwocS0+YXZnLCBmcy0+d19xX2xvb2t1cFt0XSkgOiAwOworCQlx LT5hdmcgKz0gKGludCl2OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFF1ZXVl IGlzIGVtcHR5LCBmaW5kIGZvciBob3cgbG9uZyB0aGUgcXVldWUgaGFzIGJl ZW4KKwkJICogZW1wdHkgYW5kIHVzZSBhIGxvb2t1cCB0YWJsZSBmb3IgY29t cHV0aW5nCisJCSAqICgxIC0gKiB3X3EpXihpZGxlX3RpbWUvcykgd2hlcmUg cyBpcyB0aGUgdGltZSB0byBzZW5kIGEKKwkJICogKHNtYWxsKSBwYWNrZXQu CisJCSAqIFhYWCBjaGVjayB3cmFwcy4uLgorCQkgKi8KKwkJaWYgKHEtPmF2 ZykgeworCQkJdV9pbnQgdCA9IChjdXJyX3RpbWUgLSBxLT5xX3RpbWUpIC8g ZnMtPmxvb2t1cF9zdGVwOworCisJCQlxLT5hdmcgPSAodCA8IGZzLT5sb29r dXBfZGVwdGgpID8KKwkJCSAgICBTQ0FMRV9NVUwocS0+YXZnLCBmcy0+d19x X2xvb2t1cFt0XSkgOiAwOworCQl9CiAJfQotICAgIH0KLSAgICBEUFJJTlRG KCgiZHVtbXluZXQ6IGF2ZzogJXUgIiwgU0NBTEVfVkFMKHEtPmF2ZykpKTsK KwlEUFJJTlRGKCgiZHVtbXluZXQ6IGF2ZzogJXUgIiwgU0NBTEVfVkFMKHEt PmF2ZykpKTsKIAotICAgIC8qIHNob3VsZCBpIGRyb3AgPyAqLwotCi0gICAg aWYgKHEtPmF2ZyA8IGZzLT5taW5fdGgpIHsKLQlxLT5jb3VudCA9IC0xOwot CXJldHVybiAwOyAvKiBhY2NlcHQgcGFja2V0IDsgKi8KLSAgICB9Ci0gICAg aWYgKHEtPmF2ZyA+PSBmcy0+bWF4X3RoKSB7IC8qIGF2ZXJhZ2UgcXVldWUg Pj0gIG1heCB0aHJlc2hvbGQgKi8KLQlpZiAoZnMtPmZsYWdzX2ZzICYgRE5f SVNfR0VOVExFX1JFRCkgewotCSAgICAvKgotCSAgICAgKiBBY2NvcmRpbmcg dG8gR2VudGxlLVJFRCwgaWYgYXZnIGlzIGdyZWF0ZXIgdGhhbiBtYXhfdGgg dGhlCi0JICAgICAqIHBhY2tldCBpcyBkcm9wcGVkIHdpdGggYSBwcm9iYWJp bGl0eQotCSAgICAgKglwX2IgPSBjXzMgKiBhdmcgLSBjXzQKLQkgICAgICog d2hlcmUgY18zID0gKDEgLSBtYXhfcCkgLyBtYXhfdGgsIGFuZCBjXzQgPSAx IC0gMiAqIG1heF9wCi0JICAgICAqLwotCSAgICBwX2IgPSBTQ0FMRV9NVUwo KGludDY0X3QpIGZzLT5jXzMsIChpbnQ2NF90KSBxLT5hdmcpIC0gZnMtPmNf NDsKLQl9IGVsc2UgewotCSAgICBxLT5jb3VudCA9IC0xOwotCSAgICBEUFJJ TlRGKCgiZHVtbXluZXQ6IC0gZHJvcCIpKTsKLQkgICAgcmV0dXJuIDEgOwor CS8qIFNob3VsZCBpIGRyb3A/ICovCisJaWYgKHEtPmF2ZyA8IGZzLT5taW5f dGgpIHsKKwkJcS0+Y291bnQgPSAtMTsKKwkJcmV0dXJuICgwKTsJLyogYWNj ZXB0IHBhY2tldCAqLwogCX0KLSAgICB9IGVsc2UgaWYgKHEtPmF2ZyA+IGZz LT5taW5fdGgpIHsKLQkvKgotCSAqIHdlIGNvbXB1dGUgcF9iIHVzaW5nIHRo ZSBsaW5lYXIgZHJvcHBpbmcgZnVuY3Rpb24gcF9iID0gY18xICoKLQkgKiBh dmcgLSBjXzIsIHdoZXJlIGNfMSA9IG1heF9wIC8gKG1heF90aCAtIG1pbl90 aCksIGFuZCBjXzIgPQotCSAqIG1heF9wICogbWluX3RoIC8gKG1heF90aCAt IG1pbl90aCkKLQkgKi8KLQlwX2IgPSBTQ0FMRV9NVUwoKGludDY0X3QpIGZz LT5jXzEsIChpbnQ2NF90KSBxLT5hdmcpIC0gZnMtPmNfMjsKLSAgICB9Ci0g ICAgaWYgKGZzLT5mbGFnc19mcyAmIEROX1FTSVpFX0lTX0JZVEVTKQotCXBf YiA9IChwX2IgKiBsZW4pIC8gZnMtPm1heF9wa3Rfc2l6ZTsKLSAgICBpZiAo KytxLT5jb3VudCA9PSAwKQotCXEtPnJhbmRvbSA9IHJhbmRvbSgpICYgMHhm ZmZmOwotICAgIGVsc2UgewotCS8qCi0JICogcS0+Y291bnQgY291bnRzIHBh Y2tldHMgYXJyaXZlZCBzaW5jZSBsYXN0IGRyb3AsIHNvIGEgZ3JlYXRlcgot CSAqIHZhbHVlIG9mIHEtPmNvdW50IG1lYW5zIGEgZ3JlYXRlciBwYWNrZXQg ZHJvcCBwcm9iYWJpbGl0eS4KLQkgKi8KLQlpZiAoU0NBTEVfTVVMKHBfYiwg U0NBTEUoKGludDY0X3QpIHEtPmNvdW50KSkgPiBxLT5yYW5kb20pIHsKLQkg ICAgcS0+Y291bnQgPSAwOwotCSAgICBEUFJJTlRGKCgiZHVtbXluZXQ6IC0g cmVkIGRyb3AiKSk7Ci0JICAgIC8qIGFmdGVyIGEgZHJvcCB3ZSBjYWxjdWxh dGUgYSBuZXcgcmFuZG9tIHZhbHVlICovCi0JICAgIHEtPnJhbmRvbSA9IHJh bmRvbSgpICYgMHhmZmZmOwotCSAgICByZXR1cm4gMTsgICAgLyogZHJvcCAq LworCWlmIChxLT5hdmcgPj0gZnMtPm1heF90aCkgewkvKiBhdmVyYWdlIHF1 ZXVlID49ICBtYXggdGhyZXNob2xkICovCisJCWlmIChmcy0+ZmxhZ3NfZnMg JiBETl9JU19HRU5UTEVfUkVEKSB7CisJCQkvKgorCQkJICogQWNjb3JkaW5n IHRvIEdlbnRsZS1SRUQsIGlmIGF2ZyBpcyBncmVhdGVyIHRoYW4KKwkJCSAq IG1heF90aCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBhIHByb2JhYmls aXR5CisJCQkgKgkgcF9iID0gY18zICogYXZnIC0gY180CisJCQkgKiB3aGVy ZSBjXzMgPSAoMSAtIG1heF9wKSAvIG1heF90aAorCQkJICogICAgICAgY180 ID0gMSAtIDIgKiBtYXhfcAorCQkJICovCisJCQlwX2IgPSBTQ0FMRV9NVUwo KGludDY0X3QpZnMtPmNfMywgKGludDY0X3QpcS0+YXZnKSAtCisJCQkgICAg ZnMtPmNfNDsKKwkJfSBlbHNlIHsKKwkJCXEtPmNvdW50ID0gLTE7CisJCQlE UFJJTlRGKCgiZHVtbXluZXQ6IC0gZHJvcCIpKTsKKwkJCXJldHVybiAoMSk7 CisJCX0KKwl9IGVsc2UgaWYgKHEtPmF2ZyA+IGZzLT5taW5fdGgpIHsKKwkJ LyoKKwkJICogV2UgY29tcHV0ZSBwX2IgdXNpbmcgdGhlIGxpbmVhciBkcm9w cGluZyBmdW5jdGlvbgorCQkgKgkgcF9iID0gY18xICogYXZnIC0gY18yCisJ CSAqIHdoZXJlIGNfMSA9IG1heF9wIC8gKG1heF90aCAtIG1pbl90aCkKKwkJ ICogCSBjXzIgPSBtYXhfcCAqIG1pbl90aCAvIChtYXhfdGggLSBtaW5fdGgp CisJCSAqLworCQlwX2IgPSBTQ0FMRV9NVUwoKGludDY0X3QpZnMtPmNfMSwg KGludDY0X3QpcS0+YXZnKSAtIGZzLT5jXzI7CiAJfQotICAgIH0KLSAgICAv KiBlbmQgb2YgUkVEIGFsZ29yaXRobSAqLwotICAgIHJldHVybiAwIDsgLyog YWNjZXB0ICovCisKKwlpZiAoZnMtPmZsYWdzX2ZzICYgRE5fUVNJWkVfSVNf QllURVMpCisJCXBfYiA9IChwX2IgKiBsZW4pIC8gZnMtPm1heF9wa3Rfc2l6 ZTsKKwlpZiAoKytxLT5jb3VudCA9PSAwKQorCQlxLT5yYW5kb20gPSByYW5k b20oKSAmIDB4ZmZmZjsKKwllbHNlIHsKKwkJLyoKKwkJICogcS0+Y291bnQg Y291bnRzIHBhY2tldHMgYXJyaXZlZCBzaW5jZSBsYXN0IGRyb3AsIHNvIGEg Z3JlYXRlcgorCQkgKiB2YWx1ZSBvZiBxLT5jb3VudCBtZWFucyBhIGdyZWF0 ZXIgcGFja2V0IGRyb3AgcHJvYmFiaWxpdHkuCisJCSAqLworCQlpZiAoU0NB TEVfTVVMKHBfYiwgU0NBTEUoKGludDY0X3QpcS0+Y291bnQpKSA+IHEtPnJh bmRvbSkgeworCQkJcS0+Y291bnQgPSAwOworCQkJRFBSSU5URigoImR1bW15 bmV0OiAtIHJlZCBkcm9wIikpOworCQkJLyogQWZ0ZXIgYSBkcm9wIHdlIGNh bGN1bGF0ZSBhIG5ldyByYW5kb20gdmFsdWUuICovCisJCQlxLT5yYW5kb20g PSByYW5kb20oKSAmIDB4ZmZmZjsKKwkJCXJldHVybiAoMSk7CS8qIGRyb3Ag Ki8KKwkJfQorCX0KKwkvKiBFbmQgb2YgUkVEIGFsZ29yaXRobS4gKi8KKwor CXJldHVybiAoMCk7CS8qIGFjY2VwdCAqLwogfQogCiBzdGF0aWMgX19pbmxp bmUgc3RydWN0IGRuX2Zsb3dfc2V0ICoKQEAgLTEzNTMsMzYgKzE0MzEsMzcg QEAKIHN0YXRpYyB2b2lkCiBwdXJnZV9mbG93X3NldChzdHJ1Y3QgZG5fZmxv d19zZXQgKmZzLCBpbnQgYWxsKQogewotICAgIHN0cnVjdCBkbl9mbG93X3F1 ZXVlICpxLCAqcW4gOwotICAgIGludCBpIDsKKwlzdHJ1Y3QgZG5fZmxvd19x dWV1ZSAqcSwgKnFuOworCWludCBpOwogCi0gICAgRFVNTVlORVRfTE9DS19B U1NFUlQoKTsKKwlEVU1NWU5FVF9MT0NLX0FTU0VSVCgpOwogCi0gICAgZm9y IChpID0gMCA7IGkgPD0gZnMtPnJxX3NpemUgOyBpKysgKSB7Ci0JZm9yIChx ID0gZnMtPnJxW2ldIDsgcSA7IHEgPSBxbiApIHsKLQkgICAgc3RydWN0IG1i dWYgKm0sICptbmV4dDsKLQotCSAgICBtbmV4dCA9IHEtPmhlYWQ7Ci0JICAg IHdoaWxlICgobSA9IG1uZXh0KSAhPSBOVUxMKSB7Ci0JCW1uZXh0ID0gbS0+ bV9uZXh0cGt0OwotCQlETl9GUkVFX1BLVChtKTsKLQkgICAgfQotCSAgICBx biA9IHEtPm5leHQgOwotCSAgICBmcmVlKHEsIE1fRFVNTVlORVQpOworCWZv ciAoaSA9IDA7IGkgPD0gZnMtPnJxX3NpemU7IGkrKykgeworCQlmb3IgKHEg PSBmcy0+cnFbaV07IHEgIT0gTlVMTDsgcSA9IHFuKSB7CisJCQlzdHJ1Y3Qg bWJ1ZiAqbSwgKm1uZXh0OworCisJCQltbmV4dCA9IHEtPmhlYWQ7CisJCQl3 aGlsZSAoKG0gPSBtbmV4dCkgIT0gTlVMTCkgeworCQkJCW1uZXh0ID0gbS0+ bV9uZXh0cGt0OworCQkJCUROX0ZSRUVfUEtUKG0pOworCQkJfQorCQkJcW4g PSBxLT5uZXh0OworCQkJZnJlZShxLCBNX0RVTU1ZTkVUKTsKKwkJfQorCQlm cy0+cnFbaV0gPSBOVUxMOworCX0KKworCWZzLT5ycV9lbGVtZW50cyA9IDA7 CisJaWYgKGFsbCkgeworCQkvKiBSRUQgLSBmcmVlIGxvb2t1cCB0YWJsZS4g Ki8KKwkJaWYgKGZzLT53X3FfbG9va3VwICE9IE5VTEwpCisJCQlmcmVlKGZz LT53X3FfbG9va3VwLCBNX0RVTU1ZTkVUKTsKKwkJaWYgKGZzLT5ycSAhPSBO VUxMKQorCQkJZnJlZShmcy0+cnEsIE1fRFVNTVlORVQpOworCQkvKiBJZiB0 aGlzIGZzIGlzIG5vdCBwYXJ0IG9mIGEgcGlwZSwgZnJlZSBpdC4gKi8KKwkJ aWYgKGZzLT5waXBlID09IE5VTEwgfHwgZnMgIT0gJihmcy0+cGlwZS0+ZnMp KQorCQkJZnJlZShmcywgTV9EVU1NWU5FVCk7CiAJfQotCWZzLT5ycVtpXSA9 IE5VTEwgOwotICAgIH0KLSAgICBmcy0+cnFfZWxlbWVudHMgPSAwIDsKLSAg ICBpZiAoYWxsKSB7Ci0JLyogUkVEIC0gZnJlZSBsb29rdXAgdGFibGUgKi8K LQlpZiAoZnMtPndfcV9sb29rdXApCi0JICAgIGZyZWUoZnMtPndfcV9sb29r dXAsIE1fRFVNTVlORVQpOwotCWlmIChmcy0+cnEpCi0JICAgIGZyZWUoZnMt PnJxLCBNX0RVTU1ZTkVUKTsKLQkvKiBpZiB0aGlzIGZzIGlzIG5vdCBwYXJ0 IG9mIGEgcGlwZSwgZnJlZSBpdCAqLwotCWlmIChmcy0+cGlwZSAmJiBmcyAh PSAmKGZzLT5waXBlLT5mcykgKQotCSAgICBmcmVlKGZzLCBNX0RVTU1ZTkVU KTsKLSAgICB9CiB9CiAKIC8qCkBAIC0xNTAyLDUyICsxNTgxLDU3IEBACiBz dGF0aWMgaW50CiBjb25maWdfcmVkKHN0cnVjdCBkbl9mbG93X3NldCAqcCwg c3RydWN0IGRuX2Zsb3dfc2V0ICogeCkKIHsKLSAgICBpbnQgaTsKKwlpbnQg aTsKIAotICAgIHgtPndfcSA9IHAtPndfcTsKLSAgICB4LT5taW5fdGggPSBT Q0FMRShwLT5taW5fdGgpOwotICAgIHgtPm1heF90aCA9IFNDQUxFKHAtPm1h eF90aCk7Ci0gICAgeC0+bWF4X3AgPSBwLT5tYXhfcDsKLQotICAgIHgtPmNf MSA9IHAtPm1heF9wIC8gKHAtPm1heF90aCAtIHAtPm1pbl90aCk7Ci0gICAg eC0+Y18yID0gU0NBTEVfTVVMKHgtPmNfMSwgU0NBTEUocC0+bWluX3RoKSk7 Ci0gICAgaWYgKHgtPmZsYWdzX2ZzICYgRE5fSVNfR0VOVExFX1JFRCkgewot CXgtPmNfMyA9IChTQ0FMRSgxKSAtIHAtPm1heF9wKSAvIHAtPm1heF90aDsK LQl4LT5jXzQgPSAoU0NBTEUoMSkgLSAyICogcC0+bWF4X3ApOwotICAgIH0K LQotICAgIC8qIGlmIHRoZSBsb29rdXAgdGFibGUgYWxyZWFkeSBleGlzdCwg ZnJlZSBhbmQgY3JlYXRlIGl0IGFnYWluICovCi0gICAgaWYgKHgtPndfcV9s b29rdXApIHsKLQlmcmVlKHgtPndfcV9sb29rdXAsIE1fRFVNTVlORVQpOwot CXgtPndfcV9sb29rdXAgPSBOVUxMIDsKLSAgICB9Ci0gICAgaWYgKHJlZF9s b29rdXBfZGVwdGggPT0gMCkgewotCXByaW50ZigiXG5kdW1teW5ldDogbmV0 LmluZXQuaXAuZHVtbXluZXQucmVkX2xvb2t1cF9kZXB0aCBtdXN0IGJlID4g MFxuIik7Ci0JZnJlZSh4LCBNX0RVTU1ZTkVUKTsKLQlyZXR1cm4gRUlOVkFM OwotICAgIH0KLSAgICB4LT5sb29rdXBfZGVwdGggPSByZWRfbG9va3VwX2Rl cHRoOwotICAgIHgtPndfcV9sb29rdXAgPSAodV9pbnQgKikgbWFsbG9jKHgt Pmxvb2t1cF9kZXB0aCAqIHNpemVvZihpbnQpLAorCXgtPndfcSA9IHAtPndf cTsKKwl4LT5taW5fdGggPSBTQ0FMRShwLT5taW5fdGgpOworCXgtPm1heF90 aCA9IFNDQUxFKHAtPm1heF90aCk7CisJeC0+bWF4X3AgPSBwLT5tYXhfcDsK KworCXgtPmNfMSA9IHAtPm1heF9wIC8gKHAtPm1heF90aCAtIHAtPm1pbl90 aCk7CisJeC0+Y18yID0gU0NBTEVfTVVMKHgtPmNfMSwgU0NBTEUocC0+bWlu X3RoKSk7CisKKwlpZiAoeC0+ZmxhZ3NfZnMgJiBETl9JU19HRU5UTEVfUkVE KSB7CisJCXgtPmNfMyA9IChTQ0FMRSgxKSAtIHAtPm1heF9wKSAvIHAtPm1h eF90aDsKKwkJeC0+Y180ID0gU0NBTEUoMSkgLSAyICogcC0+bWF4X3A7CisJ fQorCisJLyogSWYgdGhlIGxvb2t1cCB0YWJsZSBhbHJlYWR5IGV4aXN0LCBm cmVlIGFuZCBjcmVhdGUgaXQgYWdhaW4uICovCisJaWYgKHgtPndfcV9sb29r dXApIHsKKwkJZnJlZSh4LT53X3FfbG9va3VwLCBNX0RVTU1ZTkVUKTsKKwkJ eC0+d19xX2xvb2t1cCA9IE5VTEw7CisJfQorCWlmIChyZWRfbG9va3VwX2Rl cHRoID09IDApIHsKKwkJcHJpbnRmKCJcbmR1bW15bmV0OiBuZXQuaW5ldC5p cC5kdW1teW5ldC5yZWRfbG9va3VwX2RlcHRoIgorCQkgICAgIm11c3QgYmUg PiAwXG4iKTsKKwkJZnJlZSh4LCBNX0RVTU1ZTkVUKTsKKwkJcmV0dXJuIChF SU5WQUwpOworCX0KKwl4LT5sb29rdXBfZGVwdGggPSByZWRfbG9va3VwX2Rl cHRoOworCXgtPndfcV9sb29rdXAgPSAodV9pbnQgKiltYWxsb2MoeC0+bG9v a3VwX2RlcHRoICogc2l6ZW9mKGludCksCiAJICAgIE1fRFVNTVlORVQsIE1f Tk9XQUlUKTsKLSAgICBpZiAoeC0+d19xX2xvb2t1cCA9PSBOVUxMKSB7Ci0J cHJpbnRmKCJkdW1teW5ldDogc29ycnksIGNhbm5vdCBhbGxvY2F0ZSByZWQg bG9va3VwIHRhYmxlXG4iKTsKLQlmcmVlKHgsIE1fRFVNTVlORVQpOwotCXJl dHVybiBFTk9TUEM7Ci0gICAgfQotCi0gICAgLyogZmlsbCB0aGUgbG9va3Vw IHRhYmxlIHdpdGggKDEgLSB3X3EpXnggKi8KLSAgICB4LT5sb29rdXBfc3Rl cCA9IHAtPmxvb2t1cF9zdGVwIDsKLSAgICB4LT5sb29rdXBfd2VpZ2h0ID0g cC0+bG9va3VwX3dlaWdodCA7Ci0gICAgeC0+d19xX2xvb2t1cFswXSA9IFND QUxFKDEpIC0geC0+d19xOwotICAgIGZvciAoaSA9IDE7IGkgPCB4LT5sb29r dXBfZGVwdGg7IGkrKykKLQl4LT53X3FfbG9va3VwW2ldID0gU0NBTEVfTVVM KHgtPndfcV9sb29rdXBbaSAtIDFdLCB4LT5sb29rdXBfd2VpZ2h0KTsKLSAg ICBpZiAocmVkX2F2Z19wa3Rfc2l6ZSA8IDEpCi0JcmVkX2F2Z19wa3Rfc2l6 ZSA9IDUxMiA7Ci0gICAgeC0+YXZnX3BrdF9zaXplID0gcmVkX2F2Z19wa3Rf c2l6ZSA7Ci0gICAgaWYgKHJlZF9tYXhfcGt0X3NpemUgPCAxKQotCXJlZF9t YXhfcGt0X3NpemUgPSAxNTAwIDsKLSAgICB4LT5tYXhfcGt0X3NpemUgPSBy ZWRfbWF4X3BrdF9zaXplIDsKLSAgICByZXR1cm4gMCA7CisJaWYgKHgtPndf cV9sb29rdXAgPT0gTlVMTCkgeworCQlwcmludGYoImR1bW15bmV0OiBzb3Jy eSwgY2Fubm90IGFsbG9jYXRlIHJlZCBsb29rdXAgdGFibGVcbiIpOworCQlm cmVlKHgsIE1fRFVNTVlORVQpOworCQlyZXR1cm4oRU5PU1BDKTsKKwl9CisK KwkvKiBGaWxsIHRoZSBsb29rdXAgdGFibGUgd2l0aCAoMSAtIHdfcSleeCAq LworCXgtPmxvb2t1cF9zdGVwID0gcC0+bG9va3VwX3N0ZXA7CisJeC0+bG9v a3VwX3dlaWdodCA9IHAtPmxvb2t1cF93ZWlnaHQ7CisJeC0+d19xX2xvb2t1 cFswXSA9IFNDQUxFKDEpIC0geC0+d19xOworCisJZm9yIChpID0gMTsgaSA8 IHgtPmxvb2t1cF9kZXB0aDsgaSsrKQorCQl4LT53X3FfbG9va3VwW2ldID0K KwkJICAgIFNDQUxFX01VTCh4LT53X3FfbG9va3VwW2kgLSAxXSwgeC0+bG9v a3VwX3dlaWdodCk7CisKKwlpZiAocmVkX2F2Z19wa3Rfc2l6ZSA8IDEpCisJ CXJlZF9hdmdfcGt0X3NpemUgPSA1MTI7CisJeC0+YXZnX3BrdF9zaXplID0g cmVkX2F2Z19wa3Rfc2l6ZTsKKwlpZiAocmVkX21heF9wa3Rfc2l6ZSA8IDEp CisJCXJlZF9tYXhfcGt0X3NpemUgPSAxNTAwOworCXgtPm1heF9wa3Rfc2l6 ZSA9IHJlZF9tYXhfcGt0X3NpemU7CisJcmV0dXJuICgwKTsKIH0KIAogc3Rh dGljIGludApAQCAtMTU3OCwxMzcgKzE2NjIsMTQ2IEBACiBzdGF0aWMgdm9p ZAogc2V0X2ZzX3Bhcm1zKHN0cnVjdCBkbl9mbG93X3NldCAqeCwgc3RydWN0 IGRuX2Zsb3dfc2V0ICpzcmMpCiB7Ci0gICAgeC0+ZmxhZ3NfZnMgPSBzcmMt PmZsYWdzX2ZzOwotICAgIHgtPnFzaXplID0gc3JjLT5xc2l6ZTsKLSAgICB4 LT5wbHIgPSBzcmMtPnBscjsKLSAgICB4LT5mbG93X21hc2sgPSBzcmMtPmZs b3dfbWFzazsKLSAgICBpZiAoeC0+ZmxhZ3NfZnMgJiBETl9RU0laRV9JU19C WVRFUykgewotCWlmICh4LT5xc2l6ZSA+IDEwMjQqMTAyNCkKLQkgICAgeC0+ cXNpemUgPSAxMDI0KjEwMjQgOwotICAgIH0gZWxzZSB7Ci0JaWYgKHgtPnFz aXplID09IDApCi0JICAgIHgtPnFzaXplID0gNTAgOwotCWlmICh4LT5xc2l6 ZSA+IDEwMCkKLQkgICAgeC0+cXNpemUgPSA1MCA7Ci0gICAgfQotICAgIC8q IGNvbmZpZ3VyaW5nIFJFRCAqLwotICAgIGlmICggeC0+ZmxhZ3NfZnMgJiBE Tl9JU19SRUQgKQotCWNvbmZpZ19yZWQoc3JjLCB4KSA7ICAgIC8qIFhYWCBz aG91bGQgY2hlY2sgZXJyb3JzICovCisJeC0+ZmxhZ3NfZnMgPSBzcmMtPmZs YWdzX2ZzOworCXgtPnFzaXplID0gc3JjLT5xc2l6ZTsKKwl4LT5wbHIgPSBz cmMtPnBscjsKKwl4LT5mbG93X21hc2sgPSBzcmMtPmZsb3dfbWFzazsKKwlp ZiAoeC0+ZmxhZ3NfZnMgJiBETl9RU0laRV9JU19CWVRFUykgeworCQlpZiAo eC0+cXNpemUgPiAxMDI0ICogMTAyNCkKKwkJCXgtPnFzaXplID0gMTAyNCAq IDEwMjQ7CisJfSBlbHNlIHsKKwkJaWYgKHgtPnFzaXplID09IDApCisJCQl4 LT5xc2l6ZSA9IDUwOworCQlpZiAoeC0+cXNpemUgPiAxMDApCisJCQl4LT5x c2l6ZSA9IDUwOworCX0KKwkvKiBDb25maWd1cmluZyBSRUQuICovCisJaWYg KHgtPmZsYWdzX2ZzICYgRE5fSVNfUkVEKQorCQljb25maWdfcmVkKHNyYywg eCk7CS8qIFhYWCBzaG91bGQgY2hlY2sgZXJyb3JzICovCiB9CiAKIC8qCi0g KiBzZXR1cCBwaXBlIG9yIHF1ZXVlIHBhcmFtZXRlcnMuCisgKiBTZXR1cCBw aXBlIG9yIHF1ZXVlIHBhcmFtZXRlcnMuCiAgKi8KLQogc3RhdGljIGludAog Y29uZmlnX3BpcGUoc3RydWN0IGRuX3BpcGUgKnApCiB7Ci0gICAgc3RydWN0 IGRuX2Zsb3dfc2V0ICpwZnMgPSAmKHAtPmZzKTsKLSAgICBzdHJ1Y3QgZG5f Zmxvd19xdWV1ZSAqcTsKLSAgICBpbnQgaSwgZXJyb3I7Ci0KLSAgICAvKgot ICAgICAqIFRoZSBjb25maWcgcHJvZ3JhbSBwYXNzZXMgcGFyYW1ldGVycyBh cyBmb2xsb3dzOgotICAgICAqIGJ3ID0gYml0cy9zZWNvbmQgKDAgbWVhbnMg bm8gbGltaXRzKSwKLSAgICAgKiBkZWxheSA9IG1zLCBtdXN0IGJlIHRyYW5z bGF0ZWQgaW50byB0aWNrcy4KLSAgICAgKiBxc2l6ZSA9IHNsb3RzL2J5dGVz Ci0gICAgICovCi0gICAgcC0+ZGVsYXkgPSAoIHAtPmRlbGF5ICogaHogKSAv IDEwMDAgOwotICAgIC8qIFdlIG5lZWQgZWl0aGVyIGEgcGlwZSBudW1iZXIg b3IgYSBmbG93X3NldCBudW1iZXIgKi8KLSAgICBpZiAocC0+cGlwZV9uciA9 PSAwICYmIHBmcy0+ZnNfbnIgPT0gMCkKLQlyZXR1cm4gRUlOVkFMIDsKLSAg ICBpZiAocC0+cGlwZV9uciAhPSAwICYmIHBmcy0+ZnNfbnIgIT0gMCkKLQly ZXR1cm4gRUlOVkFMIDsKLSAgICBpZiAocC0+cGlwZV9uciAhPSAwKSB7IC8q IHRoaXMgaXMgYSBwaXBlICovCi0Jc3RydWN0IGRuX3BpcGUgKnBpcGU7CisJ c3RydWN0IGRuX2Zsb3dfc2V0ICpwZnMgPSAmKHAtPmZzKTsKKwlzdHJ1Y3Qg ZG5fZmxvd19xdWV1ZSAqcTsKKwlpbnQgaSwgZXJyb3I7CiAKLQlEVU1NWU5F VF9MT0NLKCk7Ci0JcGlwZSA9IGxvY2F0ZV9waXBlKHAtPnBpcGVfbnIpOwkv KiBsb2NhdGUgcGlwZSAqLwotCi0JaWYgKHBpcGUgPT0gTlVMTCkgewkvKiBu ZXcgcGlwZSAqLwotCSAgICBwaXBlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qg ZG5fcGlwZSksIE1fRFVNTVlORVQsCi0JICAgICAgICBNX05PV0FJVCB8IE1f WkVSTyk7Ci0JICAgIGlmIChwaXBlID09IE5VTEwpIHsKLQkgICAgCURVTU1Z TkVUX1VOTE9DSygpOwotCQlwcmludGYoImR1bW15bmV0OiBubyBtZW1vcnkg Zm9yIG5ldyBwaXBlXG4iKTsKLQkJcmV0dXJuIChFTk9NRU0pOwotCSAgICB9 Ci0JICAgIHBpcGUtPnBpcGVfbnIgPSBwLT5waXBlX25yOwotCSAgICBwaXBl LT5mcy5waXBlID0gcGlwZSA7Ci0JICAgIC8qIGlkbGVfaGVhcCBpcyB0aGUg b25seSBvbmUgZnJvbSB3aGljaCB3ZSBleHRyYWN0IGZyb20gdGhlIG1pZGRs ZS4KLQkgICAgICovCi0JICAgIHBpcGUtPmlkbGVfaGVhcC5zaXplID0gcGlw ZS0+aWRsZV9oZWFwLmVsZW1lbnRzID0gMCA7Ci0JICAgIHBpcGUtPmlkbGVf aGVhcC5vZmZzZXQ9T0ZGU0VUX09GKHN0cnVjdCBkbl9mbG93X3F1ZXVlLCBo ZWFwX3Bvcyk7Ci0JfSBlbHNlCi0JICAgIC8qIEZsdXNoIGFjY3VtdWxhdGVk IGNyZWRpdCBmb3IgYWxsIHF1ZXVlcyAqLwotCSAgICBmb3IgKGkgPSAwOyBp IDw9IHBpcGUtPmZzLnJxX3NpemU7IGkrKykKLQkJZm9yIChxID0gcGlwZS0+ ZnMucnFbaV07IHE7IHEgPSBxLT5uZXh0KQotCQkgICAgcS0+bnVtYnl0ZXMg PSAwOwotCi0JcGlwZS0+YmFuZHdpZHRoID0gcC0+YmFuZHdpZHRoIDsKLQlw aXBlLT5udW1ieXRlcyA9IDA7IC8qIGp1c3QgaW4gY2FzZS4uLiAqLwotCWJj b3B5KHAtPmlmX25hbWUsIHBpcGUtPmlmX25hbWUsIHNpemVvZihwLT5pZl9u YW1lKSApOwotCXBpcGUtPmlmcCA9IE5VTEwgOyAvKiByZXNldCBpbnRlcmZh Y2UgcHRyICovCi0JcGlwZS0+ZGVsYXkgPSBwLT5kZWxheSA7Ci0Jc2V0X2Zz X3Bhcm1zKCYocGlwZS0+ZnMpLCBwZnMpOwotCi0KLQlpZiAocGlwZS0+ZnMu cnEgPT0gTlVMTCkgewkvKiBhIG5ldyBwaXBlICovCi0JICAgIGVycm9yID0g YWxsb2NfaGFzaCgmKHBpcGUtPmZzKSwgcGZzKTsKLQkgICAgaWYgKGVycm9y KSB7CisJLyoKKwkgKiBUaGUgY29uZmlnIHByb2dyYW0gcGFzc2VzIHBhcmFt ZXRlcnMgYXMgZm9sbG93czoKKwkgKiBidyA9IGJpdHMvc2Vjb25kICgwIG1l YW5zIG5vIGxpbWl0cyksCisJICogZGVsYXkgPSBtcywgbXVzdCBiZSB0cmFu c2xhdGVkIGludG8gdGlja3MuCisJICogcXNpemUgPSBzbG90cy9ieXRlcwor CSAqLworCXAtPmRlbGF5ID0gKHAtPmRlbGF5ICogaHopIC8gMTAwMDsKKwkv KiBXZSBuZWVkIGVpdGhlciBhIHBpcGUgbnVtYmVyIG9yIGEgZmxvd19zZXQg bnVtYmVyLiAqLworCWlmIChwLT5waXBlX25yID09IDAgJiYgcGZzLT5mc19u ciA9PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJaWYgKHAtPnBpcGVfbnIg IT0gMCAmJiBwZnMtPmZzX25yICE9IDApCisJCXJldHVybiAoRUlOVkFMKTsK KwlpZiAocC0+cGlwZV9uciAhPSAwKSB7CQkJLyogdGhpcyBpcyBhIHBpcGUg Ki8KKwkJc3RydWN0IGRuX3BpcGUgKnBpcGU7CisKKwkJRFVNTVlORVRfTE9D SygpOworCQlwaXBlID0gbG9jYXRlX3BpcGUocC0+cGlwZV9ucik7CS8qIGxv Y2F0ZSBwaXBlICovCisKKwkJaWYgKHBpcGUgPT0gTlVMTCkgewkJLyogbmV3 IHBpcGUgKi8KKwkJCXBpcGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbl9w aXBlKSwgTV9EVU1NWU5FVCwKKwkJCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7 CisJCQlpZiAocGlwZSA9PSBOVUxMKSB7CisJCQkJRFVNTVlORVRfVU5MT0NL KCk7CisJCQkJcHJpbnRmKCJkdW1teW5ldDogbm8gbWVtb3J5IGZvciBuZXcg cGlwZVxuIik7CisJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJfQorCQkJcGlw ZS0+cGlwZV9uciA9IHAtPnBpcGVfbnI7CisJCQlwaXBlLT5mcy5waXBlID0g cGlwZTsKKwkJCS8qCisJCQkgKiBpZGxlX2hlYXAgaXMgdGhlIG9ubHkgb25l IGZyb20gd2hpY2gKKwkJCSAqIHdlIGV4dHJhY3QgZnJvbSB0aGUgbWlkZGxl LgorCQkJICovCisJCQlwaXBlLT5pZGxlX2hlYXAuc2l6ZSA9IHBpcGUtPmlk bGVfaGVhcC5lbGVtZW50cyA9IDA7CisJCQlwaXBlLT5pZGxlX2hlYXAub2Zm c2V0ID0KKwkJCSAgICBPRkZTRVRfT0Yoc3RydWN0IGRuX2Zsb3dfcXVldWUs IGhlYXBfcG9zKTsKKwkJfSBlbHNlCisJCQkvKiBGbHVzaCBhY2N1bXVsYXRl ZCBjcmVkaXQgZm9yIGFsbCBxdWV1ZXMuICovCisJCQlmb3IgKGkgPSAwOyBp IDw9IHBpcGUtPmZzLnJxX3NpemU7IGkrKykKKwkJCQlmb3IgKHEgPSBwaXBl LT5mcy5ycVtpXTsgcTsgcSA9IHEtPm5leHQpCisJCQkJCXEtPm51bWJ5dGVz ID0gMDsKKworCQlwaXBlLT5iYW5kd2lkdGggPSBwLT5iYW5kd2lkdGg7CisJ CXBpcGUtPm51bWJ5dGVzID0gMDsJCS8qIGp1c3QgaW4gY2FzZS4uLiAqLwor CQliY29weShwLT5pZl9uYW1lLCBwaXBlLT5pZl9uYW1lLCBzaXplb2YocC0+ aWZfbmFtZSkpOworCQlwaXBlLT5pZnAgPSBOVUxMOwkJLyogcmVzZXQgaW50 ZXJmYWNlIHB0ciAqLworCQlwaXBlLT5kZWxheSA9IHAtPmRlbGF5OworCQlz ZXRfZnNfcGFybXMoJihwaXBlLT5mcyksIHBmcyk7CisKKwkJaWYgKHBpcGUt PmZzLnJxID09IE5VTEwpIHsJLyogYSBuZXcgcGlwZSAqLworCQkJZXJyb3Ig PSBhbGxvY19oYXNoKCYocGlwZS0+ZnMpLCBwZnMpOworCQkJaWYgKGVycm9y KSB7CisJCQkJRFVNTVlORVRfVU5MT0NLKCk7CisJCQkJZnJlZShwaXBlLCBN X0RVTU1ZTkVUKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJCVNM SVNUX0lOU0VSVF9IRUFEKCZwaXBlaGFzaFtIQVNIKHBpcGUtPnBpcGVfbnIp XSwKKwkJCSAgICBwaXBlLCBuZXh0KTsKKwkJfQogCQlEVU1NWU5FVF9VTkxP Q0soKTsKLQkJZnJlZShwaXBlLCBNX0RVTU1ZTkVUKTsKLQkJcmV0dXJuIChl cnJvcik7Ci0JICAgIH0KLQkgICAgU0xJU1RfSU5TRVJUX0hFQUQoJnBpcGVo YXNoW0hBU0gocGlwZS0+cGlwZV9ucildLCBwaXBlLCBuZXh0KTsKLQl9Ci0J RFVNTVlORVRfVU5MT0NLKCk7Ci0gICAgfSBlbHNlIHsgLyogY29uZmlnIHF1 ZXVlICovCi0Jc3RydWN0IGRuX2Zsb3dfc2V0ICpmczsKKwl9IGVsc2UgewkJ CQkvKiBjb25maWcgcXVldWUgKi8KKwkJc3RydWN0IGRuX2Zsb3dfc2V0ICpm czsKIAotCURVTU1ZTkVUX0xPQ0soKTsKLQlmcyA9IGxvY2F0ZV9mbG93c2V0 KHBmcy0+ZnNfbnIpOyAvKiBsb2NhdGUgZmxvd19zZXQgKi8KKwkJRFVNTVlO RVRfTE9DSygpOworCQlmcyA9IGxvY2F0ZV9mbG93c2V0KHBmcy0+ZnNfbnIp OyAvKiBsb2NhdGUgZmxvd19zZXQgKi8KIAotCWlmIChmcyA9PSBOVUxMKSB7 CS8qIG5ldyAqLwotCSAgICBpZiAocGZzLT5wYXJlbnRfbnIgPT0gMCkgewkv KiBuZWVkIGxpbmsgdG8gYSBwaXBlICovCi0JICAgIAlEVU1NWU5FVF9VTkxP Q0soKTsKLQkJcmV0dXJuIEVJTlZBTCA7Ci0JICAgIH0KLQkgICAgZnMgPSBt YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbl9mbG93X3NldCksIE1fRFVNTVlORVQs Ci0JCU1fTk9XQUlUfE1fWkVSTyk7Ci0JICAgIGlmIChmcyA9PSBOVUxMKSB7 Ci0JCURVTU1ZTkVUX1VOTE9DSygpOwotCQlwcmludGYoImR1bW15bmV0OiBu byBtZW1vcnkgZm9yIG5ldyBmbG93X3NldFxuIik7Ci0JCXJldHVybiAoRU5P TUVNKTsKLQkgICAgfQotCSAgICBmcy0+ZnNfbnIgPSBwZnMtPmZzX25yOwot CSAgICBmcy0+cGFyZW50X25yID0gcGZzLT5wYXJlbnRfbnI7Ci0JICAgIGZz LT53ZWlnaHQgPSBwZnMtPndlaWdodDsKLQkgICAgaWYgKGZzLT53ZWlnaHQg PT0gMCkKLQkJZnMtPndlaWdodCA9IDE7Ci0JICAgIGVsc2UgaWYgKGZzLT53 ZWlnaHQgPiAxMDApCi0JCWZzLT53ZWlnaHQgPSAxMDA7Ci0JfSBlbHNlIHsK LQkgICAgLyogQ2hhbmdlIHBhcmVudCBwaXBlIG5vdCBhbGxvd2VkOyBtdXN0 IGRlbGV0ZSBhbmQgcmVjcmVhdGUgKi8KLQkgICAgaWYgKHBmcy0+cGFyZW50 X25yICE9IDAgJiYgZnMtPnBhcmVudF9uciAhPSBwZnMtPnBhcmVudF9ucikg ewotCSAgICAJRFVNTVlORVRfVU5MT0NLKCk7Ci0JCXJldHVybiBFSU5WQUwg OwotCSAgICB9Ci0JfQotCXNldF9mc19wYXJtcyhmcywgcGZzKTsKKwkJaWYg KGZzID09IE5VTEwpIHsJCS8qIG5ldyAqLworCQkJaWYgKHBmcy0+cGFyZW50 X25yID09IDApIHsgLyogbmVlZCBsaW5rIHRvIGEgcGlwZSAqLworCQkJCURV TU1ZTkVUX1VOTE9DSygpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0K KwkJCWZzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG5fZmxvd19zZXQpLCBN X0RVTU1ZTkVULAorCQkJICAgIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwkJCWlm IChmcyA9PSBOVUxMKSB7CisJCQkJRFVNTVlORVRfVU5MT0NLKCk7CisJCQkJ cHJpbnRmKAorCQkJCSAgICAiZHVtbXluZXQ6IG5vIG1lbW9yeSBmb3IgbmV3 IGZsb3dfc2V0XG4iKTsKKwkJCQlyZXR1cm4gKEVOT01FTSk7CisJCQl9CisJ CQlmcy0+ZnNfbnIgPSBwZnMtPmZzX25yOworCQkJZnMtPnBhcmVudF9uciA9 IHBmcy0+cGFyZW50X25yOworCQkJZnMtPndlaWdodCA9IHBmcy0+d2VpZ2h0 OworCQkJaWYgKGZzLT53ZWlnaHQgPT0gMCkKKwkJCQlmcy0+d2VpZ2h0ID0g MTsKKwkJCWVsc2UgaWYgKGZzLT53ZWlnaHQgPiAxMDApCisJCQkJZnMtPndl aWdodCA9IDEwMDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBDaGFuZ2Ug cGFyZW50IHBpcGUgbm90IGFsbG93ZWQ7CisJCQkgKiBtdXN0IGRlbGV0ZSBh bmQgcmVjcmVhdGUuCisJCQkgKi8KKwkJCWlmIChwZnMtPnBhcmVudF9uciAh PSAwICYmCisJCQkgICAgZnMtPnBhcmVudF9uciAhPSBwZnMtPnBhcmVudF9u cikgeworCQkJCURVTU1ZTkVUX1VOTE9DSygpOworCQkJCXJldHVybiAoRUlO VkFMKTsKKwkJCX0KKwkJfQorCisJCXNldF9mc19wYXJtcyhmcywgcGZzKTsK IAotCWlmIChmcy0+cnEgPT0gTlVMTCkgewkvKiBhIG5ldyBmbG93X3NldCAq LwotCSAgICBlcnJvciA9IGFsbG9jX2hhc2goZnMsIHBmcyk7Ci0JICAgIGlm IChlcnJvcikgeworCQlpZiAoZnMtPnJxID09IE5VTEwpIHsJCS8qIGEgbmV3 IGZsb3dfc2V0ICovCisJCQllcnJvciA9IGFsbG9jX2hhc2goZnMsIHBmcyk7 CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlEVU1NWU5FVF9VTkxPQ0soKTsKKwkJ CQlmcmVlKGZzLCBNX0RVTU1ZTkVUKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsK KwkJCX0KKwkJCVNMSVNUX0lOU0VSVF9IRUFEKCZmbG93c2V0aGFzaFtIQVNI KGZzLT5mc19ucildLAorCQkJICAgIGZzLCBuZXh0KTsKKwkJfQogCQlEVU1N WU5FVF9VTkxPQ0soKTsKLQkJZnJlZShmcywgTV9EVU1NWU5FVCk7Ci0JCXJl dHVybiAoZXJyb3IpOwotCSAgICB9Ci0JICAgIFNMSVNUX0lOU0VSVF9IRUFE KCZmbG93c2V0aGFzaFtIQVNIKGZzLT5mc19ucildLCBmcywgbmV4dCk7CiAJ fQotCURVTU1ZTkVUX1VOTE9DSygpOwotICAgIH0KLSAgICByZXR1cm4gMCA7 CisJcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTIwNDYsNDYgKzIxMzksNTkg QEAKIHN0YXRpYyB2b2lkCiBpcF9kbl9pbml0KHZvaWQpCiB7Ci0gICAgaW50 IGk7CisJaW50IGk7CiAKLSAgICBpZiAoYm9vdHZlcmJvc2UpCi0JICAgIHBy aW50ZigiRFVNTVlORVQgd2l0aCBJUHY2IGluaXRpYWxpemVkICgwNDA4MjYp XG4iKTsKKwlpZiAoYm9vdHZlcmJvc2UpCisJCXByaW50ZigiRFVNTVlORVQg d2l0aCBJUHY2IGluaXRpYWxpemVkICgwNDA4MjYpXG4iKTsKIAotICAgIERV TU1ZTkVUX0xPQ0tfSU5JVCgpOworCURVTU1ZTkVUX0xPQ0tfSU5JVCgpOwog Ci0gICAgZm9yIChpID0gMDsgaSA8IEhBU0hTSVpFOyBpKyspIHsKLQlTTElT VF9JTklUKCZwaXBlaGFzaFtpXSk7Ci0JU0xJU1RfSU5JVCgmZmxvd3NldGhh c2hbaV0pOwotICAgIH0KLSAgICByZWFkeV9oZWFwLnNpemUgPSByZWFkeV9o ZWFwLmVsZW1lbnRzID0gMCA7Ci0gICAgcmVhZHlfaGVhcC5vZmZzZXQgPSAw IDsKKwlmb3IgKGkgPSAwOyBpIDwgSEFTSFNJWkU7IGkrKykgeworCQlTTElT VF9JTklUKCZwaXBlaGFzaFtpXSk7CisJCVNMSVNUX0lOSVQoJmZsb3dzZXRo YXNoW2ldKTsKKwl9CisJcmVhZHlfaGVhcC5zaXplID0gcmVhZHlfaGVhcC5l bGVtZW50cyA9IDA7CisJcmVhZHlfaGVhcC5vZmZzZXQgPSAwOworCisJd2Zx X3JlYWR5X2hlYXAuc2l6ZSA9IHdmcV9yZWFkeV9oZWFwLmVsZW1lbnRzID0g MDsKKwl3ZnFfcmVhZHlfaGVhcC5vZmZzZXQgPSAwOwogCi0gICAgd2ZxX3Jl YWR5X2hlYXAuc2l6ZSA9IHdmcV9yZWFkeV9oZWFwLmVsZW1lbnRzID0gMCA7 Ci0gICAgd2ZxX3JlYWR5X2hlYXAub2Zmc2V0ID0gMCA7CisJZXh0cmFjdF9o ZWFwLnNpemUgPSBleHRyYWN0X2hlYXAuZWxlbWVudHMgPSAwOworCWV4dHJh Y3RfaGVhcC5vZmZzZXQgPSAwOwogCi0gICAgZXh0cmFjdF9oZWFwLnNpemUg PSBleHRyYWN0X2hlYXAuZWxlbWVudHMgPSAwIDsKLSAgICBleHRyYWN0X2hl YXAub2Zmc2V0ID0gMCA7CisJaXBfZG5fY3RsX3B0ciA9IGlwX2RuX2N0bDsK KwlpcF9kbl9pb19wdHIgPSBkdW1teW5ldF9pbzsKKwlpcF9kbl9ydWxlZGVs X3B0ciA9IGRuX3J1bGVfZGVsZXRlOwogCi0gICAgaXBfZG5fY3RsX3B0ciA9 IGlwX2RuX2N0bDsKLSAgICBpcF9kbl9pb19wdHIgPSBkdW1teW5ldF9pbzsK LSAgICBpcF9kbl9ydWxlZGVsX3B0ciA9IGRuX3J1bGVfZGVsZXRlOworCVRB U0tfSU5JVCgmZG5fdGFzaywgMCwgZHVtbXluZXRfdGFzaywgTlVMTCk7CisJ ZG5fdHEgPSB0YXNrcXVldWVfY3JlYXRlX2Zhc3QoImR1bW15bmV0IiwgTV9O T1dBSVQsCisJICAgIHRhc2txdWV1ZV90aHJlYWRfZW5xdWV1ZSwgJmRuX3Rx KTsKKwl0YXNrcXVldWVfc3RhcnRfdGhyZWFkcygmZG5fdHEsIDEsIFBJX05F VCwgImR1bW15bmV0Iik7CiAKLSAgICBjYWxsb3V0X2luaXQoJmRuX3RpbWVv dXQsIE5FVF9DQUxMT1VUX01QU0FGRSk7Ci0gICAgY2FsbG91dF9yZXNldCgm ZG5fdGltZW91dCwgMSwgZHVtbXluZXQsIE5VTEwpOworCWNhbGxvdXRfaW5p dCgmZG5fdGltZW91dCwgTkVUX0NBTExPVVRfTVBTQUZFKTsKKwljYWxsb3V0 X3Jlc2V0KCZkbl90aW1lb3V0LCAxLCBkdW1teW5ldCwgTlVMTCk7CisKKwkv KiBJbml0aWFsaXplIGN1cnJfdGltZSBhZGp1c3RtZW50IG1lY2hhbmljcy4g Ki8KKwlnZXRtaWNyb3VwdGltZSgmcHJldl90KTsKIH0KIAogI2lmZGVmIEtM RF9NT0RVTEUKIHN0YXRpYyB2b2lkCiBpcF9kbl9kZXN0cm95KHZvaWQpCiB7 Ci0gICAgaXBfZG5fY3RsX3B0ciA9IE5VTEw7Ci0gICAgaXBfZG5faW9fcHRy ID0gTlVMTDsKLSAgICBpcF9kbl9ydWxlZGVsX3B0ciA9IE5VTEw7CisJaXBf ZG5fY3RsX3B0ciA9IE5VTEw7CisJaXBfZG5faW9fcHRyID0gTlVMTDsKKwlp cF9kbl9ydWxlZGVsX3B0ciA9IE5VTEw7CisKKwlEVU1NWU5FVF9MT0NLKCk7 CisJY2FsbG91dF9zdG9wKCZkbl90aW1lb3V0KTsKKwlEVU1NWU5FVF9VTkxP Q0soKTsKKwl0YXNrcXVldWVfZHJhaW4oZG5fdHEsICZkbl90YXNrKTsKKwl0 YXNrcXVldWVfZnJlZShkbl90cSk7CiAKLSAgICBjYWxsb3V0X3N0b3AoJmRu X3RpbWVvdXQpOwotICAgIGR1bW15bmV0X2ZsdXNoKCk7CisJZHVtbXluZXRf Zmx1c2goKTsKIAotICAgIERVTU1ZTkVUX0xPQ0tfREVTVFJPWSgpOworCURV TU1ZTkVUX0xPQ0tfREVTVFJPWSgpOwogfQogI2VuZGlmIC8qIEtMRF9NT0RV TEUgKi8KIAo= --8323328-408138819-1207118945=:31340-- From owner-freebsd-ipfw@FreeBSD.ORG Thu Apr 3 14:30:03 2008 Return-Path: Delivered-To: freebsd-ipfw@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B979F106564A for ; Thu, 3 Apr 2008 14:30:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id A22F68FC15 for ; Thu, 3 Apr 2008 14:30:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m33EU3OH005333 for ; Thu, 3 Apr 2008 14:30:03 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m33EU3DN005330; Thu, 3 Apr 2008 14:30:03 GMT (envelope-from gnats) Date: Thu, 3 Apr 2008 14:30:03 GMT Message-Id: <200804031430.m33EU3DN005330@freefall.freebsd.org> To: freebsd-ipfw@FreeBSD.org From: Oleg Bulyzhin Cc: Subject: Re: kern/121955: dummynet panics after 6.2 X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Oleg Bulyzhin List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Apr 2008 14:30:03 -0000 The following reply was made to PR kern/121955; it has been noted by GNATS. From: Oleg Bulyzhin To: bug-followup@FreeBSD.org Cc: Subject: Re: kern/121955: dummynet panics after 6.2 Date: Wed, 2 Apr 2008 20:47:47 +0400 --rwEMma7ioTxnRzrJ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Please test attached patch and let me know if it changes anything for you. -- Oleg. ================================================================ === Oleg Bulyzhin -- OBUL-RIPN -- OBUL-RIPE -- oleg@rinet.ru === ================================================================ --rwEMma7ioTxnRzrJ Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="dummynet_iofast.diff" Index: sys/netinet/ip_dummynet.h =================================================================== RCS file: /home/ncvs/src/sys/netinet/ip_dummynet.h,v retrieving revision 1.40 diff -u -r1.40 ip_dummynet.h --- sys/netinet/ip_dummynet.h 17 Jun 2007 00:33:34 -0000 1.40 +++ sys/netinet/ip_dummynet.h 27 Mar 2008 17:19:00 -0000 @@ -343,7 +343,7 @@ #ifdef _KERNEL typedef int ip_dn_ctl_t(struct sockopt *); /* raw_ip.c */ typedef void ip_dn_ruledel_t(void *); /* ip_fw.c */ -typedef int ip_dn_io_t(struct mbuf *m, int dir, struct ip_fw_args *fwa); +typedef int ip_dn_io_t(struct mbuf **m, int dir, struct ip_fw_args *fwa); extern ip_dn_ctl_t *ip_dn_ctl_ptr; extern ip_dn_ruledel_t *ip_dn_ruledel_ptr; extern ip_dn_io_t *ip_dn_io_ptr; Index: sys/netinet/ip_dummynet.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/ip_dummynet.c,v retrieving revision 1.110 diff -u -r1.110 ip_dummynet.c --- sys/netinet/ip_dummynet.c 7 Oct 2007 20:44:22 -0000 1.110 +++ sys/netinet/ip_dummynet.c 27 Mar 2008 17:19:03 -0000 @@ -56,6 +56,7 @@ * include files marked with XXX are probably not needed */ +#include #include #include #include @@ -110,6 +111,11 @@ /* Adjusted vs non-adjusted curr_time difference (ticks). */ static long tick_diff; +static int io_fast; +static unsigned long io_pkt; +static unsigned long io_pkt_fast; +static unsigned long io_pkt_drop; + /* * Three heaps contain queues and pipes that the scheduler handles: * @@ -181,6 +187,17 @@ SYSCTL_LONG(_net_inet_ip_dummynet, OID_AUTO, tick_lost, CTLFLAG_RD, &tick_lost, 0, "Number of ticks coalesced by dummynet taskqueue."); +SYSCTL_INT(_net_inet_ip_dummynet, OID_AUTO, io_fast, + CTLFLAG_RW, &io_fast, 0, "Enable fast dummynet io."); +SYSCTL_ULONG(_net_inet_ip_dummynet, OID_AUTO, io_pkt, + CTLFLAG_RD, &io_pkt, 0, + "Number of packets passed to dummynet."); +SYSCTL_ULONG(_net_inet_ip_dummynet, OID_AUTO, io_pkt_fast, + CTLFLAG_RD, &io_pkt_fast, 0, + "Number of packets bypassed dummynet scheduler."); +SYSCTL_ULONG(_net_inet_ip_dummynet, OID_AUTO, io_pkt_drop, + CTLFLAG_RD, &io_pkt_drop, 0, + "Number of packets dropped by dummynet."); #endif #ifdef DUMMYNET_DEBUG @@ -206,15 +223,15 @@ #define DUMMYNET_UNLOCK() mtx_unlock(&dummynet_mtx) #define DUMMYNET_LOCK_ASSERT() mtx_assert(&dummynet_mtx, MA_OWNED) -static int config_pipe(struct dn_pipe *p); -static int ip_dn_ctl(struct sockopt *sopt); +static int config_pipe(struct dn_pipe *p); +static int ip_dn_ctl(struct sockopt *sopt); -static void dummynet(void *); -static void dummynet_flush(void); -static void dummynet_send(struct mbuf *); -void dummynet_drain(void); +static void dummynet(void *); +static void dummynet_flush(void); +static void dummynet_send(struct mbuf *); +void dummynet_drain(void); static ip_dn_io_t dummynet_io; -static void dn_rule_delete(void *); +static void dn_rule_delete(void *); /* * Heap management functions. @@ -483,7 +500,7 @@ if ((m = pipe->head) != NULL) { pkt = dn_tag_get(m); /* - * XXX: Should check errors on heap_insert, by draining the + * XXX Should check errors on heap_insert, by draining the * whole pipe p and hoping in the future we are more successful. */ heap_insert(&extract_heap, pkt->output_time, pipe); @@ -496,8 +513,8 @@ * either a pipe (WF2Q) or a flow_queue (per-flow queueing) */ #define SET_TICKS(_m, q, p) \ - ((_m)->m_pkthdr.len*8*hz - (q)->numbytes + p->bandwidth - 1 ) / \ - p->bandwidth ; + ((_m)->m_pkthdr.len * 8 * hz - (q)->numbytes + p->bandwidth - 1) / \ + p->bandwidth; /* * extract pkt from queue, compute output time (could be now) @@ -533,59 +550,61 @@ static void ready_event(struct dn_flow_queue *q, struct mbuf **head, struct mbuf **tail) { - struct mbuf *pkt; - struct dn_pipe *p = q->fs->pipe ; - int p_was_empty ; + struct mbuf *pkt; + struct dn_pipe *p = q->fs->pipe; + int p_was_empty; - DUMMYNET_LOCK_ASSERT(); + DUMMYNET_LOCK_ASSERT(); - if (p == NULL) { - printf("dummynet: ready_event- pipe is gone\n"); - return ; - } - p_was_empty = (p->head == NULL) ; + if (p == NULL) { + printf("dummynet: ready_event- pipe is gone\n"); + return; + } + p_was_empty = (p->head == NULL); - /* - * schedule fixed-rate queues linked to this pipe: - * Account for the bw accumulated since last scheduling, then - * drain as many pkts as allowed by q->numbytes and move to - * the delay line (in p) computing output time. - * bandwidth==0 (no limit) means we can drain the whole queue, - * setting len_scaled = 0 does the job. - */ - q->numbytes += ( curr_time - q->sched_time ) * p->bandwidth; - while ( (pkt = q->head) != NULL ) { - int len = pkt->m_pkthdr.len; - int len_scaled = p->bandwidth ? len*8*hz : 0 ; - if (len_scaled > q->numbytes ) - break ; - q->numbytes -= len_scaled ; - move_pkt(pkt, q, p, len); - } - /* - * If we have more packets queued, schedule next ready event - * (can only occur when bandwidth != 0, otherwise we would have - * flushed the whole queue in the previous loop). - * To this purpose we record the current time and compute how many - * ticks to go for the finish time of the packet. - */ - if ( (pkt = q->head) != NULL ) { /* this implies bandwidth != 0 */ - dn_key t = SET_TICKS(pkt, q, p); /* ticks i have to wait */ - q->sched_time = curr_time ; - heap_insert(&ready_heap, curr_time + t, (void *)q ); - /* XXX should check errors on heap_insert, and drain the whole - * queue on error hoping next time we are luckier. + /* + * Schedule fixed-rate queues linked to this pipe: + * account for the bw accumulated since last scheduling, then + * drain as many pkts as allowed by q->numbytes and move to + * the delay line (in p) computing output time. + * bandwidth==0 (no limit) means we can drain the whole queue, + * setting len_scaled = 0 does the job. */ - } else { /* RED needs to know when the queue becomes empty */ - q->q_time = curr_time; - q->numbytes = 0; - } - /* - * If the delay line was empty call transmit_event() now. - * Otherwise, the scheduler will take care of it. - */ - if (p_was_empty) - transmit_event(p, head, tail); + q->numbytes += (curr_time - q->sched_time) * p->bandwidth; + while ((pkt = q->head) != NULL) { + int len = pkt->m_pkthdr.len; + int len_scaled = p->bandwidth ? len * 8 * hz : 0; + + if (len_scaled > q->numbytes) + break; + q->numbytes -= len_scaled; + move_pkt(pkt, q, p, len); + } + /* + * If we have more packets queued, schedule next ready event + * (can only occur when bandwidth != 0, otherwise we would have + * flushed the whole queue in the previous loop). + * To this purpose we record the current time and compute how many + * ticks to go for the finish time of the packet. + */ + if ((pkt = q->head) != NULL) { /* this implies bandwidth != 0 */ + dn_key t = SET_TICKS(pkt, q, p); /* ticks i have to wait */ + + q->sched_time = curr_time; + heap_insert(&ready_heap, curr_time + t, (void *)q); + /* + * XXX Should check errors on heap_insert, and drain the whole + * queue on error hoping next time we are luckier. + */ + } else /* RED needs to know when the queue becomes empty. */ + q->q_time = curr_time; + + /* + * If the delay line was empty call transmit_event() now. + * Otherwise, the scheduler will take care of it. + */ + if (p_was_empty) + transmit_event(p, head, tail); } /* @@ -593,123 +612,147 @@ * the queues at their start time, and enqueue into the delay line. * Packets are drained until p->numbytes < 0. As long as * len_scaled >= p->numbytes, the packet goes into the delay line - * with a deadline p->delay. For the last packet, if p->numbytes<0, + * with a deadline p->delay. For the last packet, if p->numbytes < 0, * there is an additional delay. */ static void ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail) { - int p_was_empty = (p->head == NULL) ; - struct dn_heap *sch = &(p->scheduler_heap); - struct dn_heap *neh = &(p->not_eligible_heap) ; + int p_was_empty = (p->head == NULL); + struct dn_heap *sch = &(p->scheduler_heap); + struct dn_heap *neh = &(p->not_eligible_heap); + int64_t p_numbytes = p->numbytes; - DUMMYNET_LOCK_ASSERT(); - - if (p->if_name[0] == 0) /* tx clock is simulated */ - p->numbytes += ( curr_time - p->sched_time ) * p->bandwidth; - else { /* tx clock is for real, the ifq must be empty or this is a NOP */ - if (p->ifp && p->ifp->if_snd.ifq_head != NULL) - return ; - else { - DPRINTF(("dummynet: pipe %d ready from %s --\n", - p->pipe_nr, p->if_name)); - } - } + DUMMYNET_LOCK_ASSERT(); - /* - * While we have backlogged traffic AND credit, we need to do - * something on the queue. - */ - while ( p->numbytes >=0 && (sch->elements>0 || neh->elements >0) ) { - if (sch->elements > 0) { /* have some eligible pkts to send out */ - struct dn_flow_queue *q = sch->p[0].object ; - struct mbuf *pkt = q->head; - struct dn_flow_set *fs = q->fs; - u_int64_t len = pkt->m_pkthdr.len; - int len_scaled = p->bandwidth ? len*8*hz : 0 ; - - heap_extract(sch, NULL); /* remove queue from heap */ - p->numbytes -= len_scaled ; - move_pkt(pkt, q, p, len); - - p->V += (len<sum ; /* update V */ - q->S = q->F ; /* update start time */ - if (q->len == 0) { /* Flow not backlogged any more */ - fs->backlogged-- ; - heap_insert(&(p->idle_heap), q->F, q); - } else { /* still backlogged */ + if (p->if_name[0] == 0) /* tx clock is simulated */ /* - * update F and position in backlogged queue, then - * put flow in not_eligible_heap (we will fix this later). + * Since result may not fit into p->numbytes (32bit) we + * are using 64bit var here. */ - len = (q->head)->m_pkthdr.len; - q->F += (len<weight ; - if (DN_KEY_LEQ(q->S, p->V)) - heap_insert(neh, q->S, q); - else - heap_insert(sch, q->F, q); - } + p_numbytes += (curr_time - p->sched_time) * p->bandwidth; + else { /* + * tx clock is for real, + * the ifq must be empty or this is a NOP. + */ + if (p->ifp && p->ifp->if_snd.ifq_head != NULL) + return; + else { + DPRINTF(("dummynet: pipe %d ready from %s --\n", + p->pipe_nr, p->if_name)); + } } + /* - * now compute V = max(V, min(S_i)). Remember that all elements in sch - * have by definition S_i <= V so if sch is not empty, V is surely - * the max and we must not update it. Conversely, if sch is empty - * we only need to look at neh. + * While we have backlogged traffic AND credit, we need to do + * something on the queue. */ - if (sch->elements == 0 && neh->elements > 0) - p->V = MAX64 ( p->V, neh->p[0].key ); - /* move from neh to sch any packets that have become eligible */ - while (neh->elements > 0 && DN_KEY_LEQ(neh->p[0].key, p->V) ) { - struct dn_flow_queue *q = neh->p[0].object ; - heap_extract(neh, NULL); - heap_insert(sch, q->F, q); + while (p_numbytes >= 0 && (sch->elements > 0 || neh->elements > 0)) { + if (sch->elements > 0) { + /* Have some eligible pkts to send out. */ + struct dn_flow_queue *q = sch->p[0].object; + struct mbuf *pkt = q->head; + struct dn_flow_set *fs = q->fs; + uint64_t len = pkt->m_pkthdr.len; + int len_scaled = p->bandwidth ? len * 8 * hz : 0; + + heap_extract(sch, NULL); /* Remove queue from heap. */ + p_numbytes -= len_scaled; + move_pkt(pkt, q, p, len); + + p->V += (len << MY_M) / p->sum; /* Update V. */ + q->S = q->F; /* Update start time. */ + if (q->len == 0) { + /* Flow not backlogged any more. */ + fs->backlogged--; + heap_insert(&(p->idle_heap), q->F, q); + } else { + /* Still backlogged. */ + + /* + * Update F and position in backlogged queue, + * then put flow in not_eligible_heap + * (we will fix this later). + */ + len = (q->head)->m_pkthdr.len; + q->F += (len << MY_M) / (uint64_t)fs->weight; + if (DN_KEY_LEQ(q->S, p->V)) + heap_insert(neh, q->S, q); + else + heap_insert(sch, q->F, q); + } + } + /* + * Now compute V = max(V, min(S_i)). Remember that all elements + * in sch have by definition S_i <= V so if sch is not empty, + * V is surely the max and we must not update it. Conversely, + * if sch is empty we only need to look at neh. + */ + if (sch->elements == 0 && neh->elements > 0) + p->V = MAX64(p->V, neh->p[0].key); + /* Move from neh to sch any packets that have become eligible */ + while (neh->elements > 0 && DN_KEY_LEQ(neh->p[0].key, p->V)) { + struct dn_flow_queue *q = neh->p[0].object; + heap_extract(neh, NULL); + heap_insert(sch, q->F, q); + } + + if (p->if_name[0] != '\0') { /* Tx clock is from a real thing */ + p_numbytes = -1; /* Mark not ready for I/O. */ + break; + } } + if (sch->elements == 0 && neh->elements == 0 && p_numbytes >= 0 && + p->idle_heap.elements > 0) { + /* + * No traffic and no events scheduled. + * We can get rid of idle-heap. + */ + int i; - if (p->if_name[0] != '\0') {/* tx clock is from a real thing */ - p->numbytes = -1 ; /* mark not ready for I/O */ - break ; + for (i = 0; i < p->idle_heap.elements; i++) { + struct dn_flow_queue *q = p->idle_heap.p[i].object; + + q->F = 0; + q->S = q->F + 1; + } + p->sum = 0; + p->V = 0; + p->idle_heap.elements = 0; } - } - if (sch->elements == 0 && neh->elements == 0 && p->numbytes >= 0 - && p->idle_heap.elements > 0) { /* - * no traffic and no events scheduled. We can get rid of idle-heap. + * If we are getting clocks from dummynet (not a real interface) and + * If we are under credit, schedule the next ready event. + * Also fix the delivery time of the last packet. */ - int i ; + if (p->if_name[0]==0 && p_numbytes < 0) { /* This implies bw > 0. */ + dn_key t = 0; /* Number of ticks i have to wait. */ - for (i = 0 ; i < p->idle_heap.elements ; i++) { - struct dn_flow_queue *q = p->idle_heap.p[i].object ; - - q->F = 0 ; - q->S = q->F + 1 ; + if (p->bandwidth > 0) + t = (p->bandwidth - 1 - p_numbytes) / p->bandwidth; + dn_tag_get(p->tail)->output_time += t; + p->sched_time = curr_time; + heap_insert(&wfq_ready_heap, curr_time + t, (void *)p); + /* + * XXX Should check errors on heap_insert, and drain the whole + * queue on error hoping next time we are luckier. + */ } - p->sum = 0 ; - p->V = 0 ; - p->idle_heap.elements = 0 ; - } - /* - * If we are getting clocks from dummynet (not a real interface) and - * If we are under credit, schedule the next ready event. - * Also fix the delivery time of the last packet. - */ - if (p->if_name[0]==0 && p->numbytes < 0) { /* this implies bandwidth >0 */ - dn_key t=0 ; /* number of ticks i have to wait */ - if (p->bandwidth > 0) - t = ( p->bandwidth -1 - p->numbytes) / p->bandwidth ; - dn_tag_get(p->tail)->output_time += t ; - p->sched_time = curr_time ; - heap_insert(&wfq_ready_heap, curr_time + t, (void *)p); - /* XXX should check errors on heap_insert, and drain the whole - * queue on error hoping next time we are luckier. + /* Fit (adjust if necessary) 64bit result into 32bit variable. */ + if (p_numbytes > INT_MAX) + p->numbytes = INT_MAX; + else if (p_numbytes < INT_MIN) + p->numbytes = INT_MIN; + else + p->numbytes = p_numbytes; + + /* + * If the delay line was empty call transmit_event() now. + * Otherwise, the scheduler will take care of it. */ - } - /* - * If the delay line was empty call transmit_event() now. - * Otherwise, the scheduler will take care of it. - */ - if (p_was_empty) - transmit_event(p, head, tail); + if (p_was_empty) + transmit_event(p, head, tail); } /* @@ -924,29 +967,28 @@ static struct dn_flow_queue * create_queue(struct dn_flow_set *fs, int i) { - struct dn_flow_queue *q ; + struct dn_flow_queue *q; - if (fs->rq_elements > fs->rq_size * dn_max_ratio && + if (fs->rq_elements > fs->rq_size * dn_max_ratio && expire_queues(fs) == 0) { - /* - * No way to get room, use or create overflow queue. - */ - i = fs->rq_size ; - if ( fs->rq[i] != NULL ) - return fs->rq[i] ; - } - q = malloc(sizeof(*q), M_DUMMYNET, M_NOWAIT | M_ZERO); - if (q == NULL) { - printf("dummynet: sorry, cannot allocate queue for new flow\n"); - return NULL ; - } - q->fs = fs ; - q->hash_slot = i ; - q->next = fs->rq[i] ; - q->S = q->F + 1; /* hack - mark timestamp as invalid */ - fs->rq[i] = q ; - fs->rq_elements++ ; - return q ; + /* No way to get room, use or create overflow queue. */ + i = fs->rq_size; + if (fs->rq[i] != NULL) + return fs->rq[i]; + } + q = malloc(sizeof(*q), M_DUMMYNET, M_NOWAIT | M_ZERO); + if (q == NULL) { + printf("dummynet: sorry, cannot allocate queue for new flow\n"); + return (NULL); + } + q->fs = fs; + q->hash_slot = i; + q->next = fs->rq[i]; + q->S = q->F + 1; /* hack - mark timestamp as invalid. */ + q->numbytes = io_fast ? fs->pipe->bandwidth : 0; + fs->rq[i] = q; + fs->rq_elements++; + return (q); } /* @@ -1200,185 +1242,201 @@ * ifp the 'ifp' parameter from the caller. * NULL in ip_input, destination interface in ip_output, * rule matching rule, in case of multiple passes - * */ static int -dummynet_io(struct mbuf *m, int dir, struct ip_fw_args *fwa) +dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa) { - struct mbuf *head = NULL, *tail = NULL; - struct dn_pkt_tag *pkt; - struct m_tag *mtag; - struct dn_flow_set *fs = NULL; - struct dn_pipe *pipe ; - u_int64_t len = m->m_pkthdr.len ; - struct dn_flow_queue *q = NULL ; - int is_pipe; - ipfw_insn *cmd = ACTION_PTR(fwa->rule); - - KASSERT(m->m_nextpkt == NULL, - ("dummynet_io: mbuf queue passed to dummynet")); - - if (cmd->opcode == O_LOG) - cmd += F_LEN(cmd); - if (cmd->opcode == O_ALTQ) - cmd += F_LEN(cmd); - if (cmd->opcode == O_TAG) - cmd += F_LEN(cmd); - is_pipe = (cmd->opcode == O_PIPE); + struct mbuf *m = *m0, *head = NULL, *tail = NULL; + struct dn_pkt_tag *pkt; + struct m_tag *mtag; + struct dn_flow_set *fs = NULL; + struct dn_pipe *pipe; + uint64_t len = m->m_pkthdr.len; + struct dn_flow_queue *q = NULL; + int is_pipe; + ipfw_insn *cmd = ACTION_PTR(fwa->rule); + + KASSERT(m->m_nextpkt == NULL, + ("dummynet_io: mbuf queue passed to dummynet")); + + if (cmd->opcode == O_LOG) + cmd += F_LEN(cmd); + if (cmd->opcode == O_ALTQ) + cmd += F_LEN(cmd); + if (cmd->opcode == O_TAG) + cmd += F_LEN(cmd); + is_pipe = (cmd->opcode == O_PIPE); - DUMMYNET_LOCK(); - /* - * This is a dummynet rule, so we expect an O_PIPE or O_QUEUE rule. - * - * XXXGL: probably the pipe->fs and fs->pipe logic here - * below can be simplified. - */ - if (is_pipe) { - pipe = locate_pipe(fwa->cookie); - if (pipe != NULL) - fs = &(pipe->fs); - } else - fs = locate_flowset(fwa->cookie); + DUMMYNET_LOCK(); + io_pkt++; + /* + * This is a dummynet rule, so we expect an O_PIPE or O_QUEUE rule. + * + * XXXGL: probably the pipe->fs and fs->pipe logic here + * below can be simplified. + */ + if (is_pipe) { + pipe = locate_pipe(fwa->cookie); + if (pipe != NULL) + fs = &(pipe->fs); + } else + fs = locate_flowset(fwa->cookie); - if (fs == NULL) - goto dropit; /* This queue/pipe does not exist! */ - pipe = fs->pipe; - if (pipe == NULL) { /* Must be a queue, try find a matching pipe. */ - pipe = locate_pipe(fs->parent_nr); - if (pipe != NULL) - fs->pipe = pipe; - else { - printf("dummynet: no pipe %d for queue %d, drop pkt\n", - fs->parent_nr, fs->fs_nr); - goto dropit ; + if (fs == NULL) + goto dropit; /* This queue/pipe does not exist! */ + pipe = fs->pipe; + if (pipe == NULL) { /* Must be a queue, try find a matching pipe. */ + pipe = locate_pipe(fs->parent_nr); + if (pipe != NULL) + fs->pipe = pipe; + else { + printf("dummynet: no pipe %d for queue %d, drop pkt\n", + fs->parent_nr, fs->fs_nr); + goto dropit; + } } - } - q = find_queue(fs, &(fwa->f_id)); - if ( q == NULL ) - goto dropit ; /* cannot allocate queue */ - /* - * update statistics, then check reasons to drop pkt - */ - q->tot_bytes += len ; - q->tot_pkts++ ; - if ( fs->plr && random() < fs->plr ) - goto dropit ; /* random pkt drop */ - if ( fs->flags_fs & DN_QSIZE_IS_BYTES) { - if (q->len_bytes > fs->qsize) - goto dropit ; /* queue size overflow */ - } else { - if (q->len >= fs->qsize) - goto dropit ; /* queue count overflow */ - } - if ( fs->flags_fs & DN_IS_RED && red_drops(fs, q, len) ) - goto dropit ; - - /* XXX expensive to zero, see if we can remove it*/ - mtag = m_tag_get(PACKET_TAG_DUMMYNET, - sizeof(struct dn_pkt_tag), M_NOWAIT|M_ZERO); - if ( mtag == NULL ) - goto dropit ; /* cannot allocate packet header */ - m_tag_prepend(m, mtag); /* attach to mbuf chain */ - - pkt = (struct dn_pkt_tag *)(mtag+1); - /* ok, i can handle the pkt now... */ - /* build and enqueue packet + parameters */ - pkt->rule = fwa->rule ; - pkt->dn_dir = dir ; - - pkt->ifp = fwa->oif; + q = find_queue(fs, &(fwa->f_id)); + if (q == NULL) + goto dropit; /* Cannot allocate queue. */ + + /* Update statistics, then check reasons to drop pkt. */ + q->tot_bytes += len; + q->tot_pkts++; + if (fs->plr && random() < fs->plr) + goto dropit; /* Random pkt drop. */ + if (fs->flags_fs & DN_QSIZE_IS_BYTES) { + if (q->len_bytes > fs->qsize) + goto dropit; /* Queue size overflow. */ + } else { + if (q->len >= fs->qsize) + goto dropit; /* Queue count overflow. */ + } + if (fs->flags_fs & DN_IS_RED && red_drops(fs, q, len)) + goto dropit; - if (q->head == NULL) - q->head = m; - else - q->tail->m_nextpkt = m; - q->tail = m; - q->len++; - q->len_bytes += len ; + /* XXX expensive to zero, see if we can remove it. */ + mtag = m_tag_get(PACKET_TAG_DUMMYNET, + sizeof(struct dn_pkt_tag), M_NOWAIT | M_ZERO); + if (mtag == NULL) + goto dropit; /* Cannot allocate packet header. */ + m_tag_prepend(m, mtag); /* Attach to mbuf chain. */ - if ( q->head != m ) /* flow was not idle, we are done */ - goto done; - /* - * If we reach this point the flow was previously idle, so we need - * to schedule it. This involves different actions for fixed-rate or - * WF2Q queues. - */ - if (is_pipe) { + pkt = (struct dn_pkt_tag *)(mtag + 1); /* - * Fixed-rate queue: just insert into the ready_heap. + * Ok, i can handle the pkt now... + * Build and enqueue packet + parameters. */ - dn_key t = 0 ; - if (pipe->bandwidth) - t = SET_TICKS(m, q, pipe); - q->sched_time = curr_time ; - if (t == 0) /* must process it now */ - ready_event(q, &head, &tail); + pkt->rule = fwa->rule; + pkt->dn_dir = dir; + + pkt->ifp = fwa->oif; + + if (q->head == NULL) + q->head = m; else - heap_insert(&ready_heap, curr_time + t , q ); - } else { - /* - * WF2Q. First, compute start time S: if the flow was idle (S=F+1) - * set S to the virtual time V for the controlling pipe, and update - * the sum of weights for the pipe; otherwise, remove flow from - * idle_heap and set S to max(F,V). - * Second, compute finish time F = S + len/weight. - * Third, if pipe was idle, update V=max(S, V). - * Fourth, count one more backlogged flow. - */ - if (DN_KEY_GT(q->S, q->F)) { /* means timestamps are invalid */ - q->S = pipe->V ; - pipe->sum += fs->weight ; /* add weight of new queue */ - } else { - heap_extract(&(pipe->idle_heap), q); - q->S = MAX64(q->F, pipe->V ) ; - } - q->F = q->S + ( len<weight; + q->tail->m_nextpkt = m; + q->tail = m; + q->len++; + q->len_bytes += len; + + if (q->head != m) /* Flow was not idle, we are done. */ + goto done; + + if (q->q_time < curr_time) + q->numbytes = io_fast ? fs->pipe->bandwidth : 0; + q->q_time = curr_time; - if (pipe->not_eligible_heap.elements == 0 && - pipe->scheduler_heap.elements == 0) - pipe->V = MAX64 ( q->S, pipe->V ); - fs->backlogged++ ; /* - * Look at eligibility. A flow is not eligibile if S>V (when - * this happens, it means that there is some other flow already - * scheduled for the same pipe, so the scheduler_heap cannot be - * empty). If the flow is not eligible we just store it in the - * not_eligible_heap. Otherwise, we store in the scheduler_heap - * and possibly invoke ready_event_wfq() right now if there is - * leftover credit. - * Note that for all flows in scheduler_heap (SCH), S_i <= V, - * and for all flows in not_eligible_heap (NEH), S_i > V . - * So when we need to compute max( V, min(S_i) ) forall i in SCH+NEH, - * we only need to look into NEH. + * If we reach this point the flow was previously idle, so we need + * to schedule it. This involves different actions for fixed-rate or + * WF2Q queues. */ - if (DN_KEY_GT(q->S, pipe->V) ) { /* not eligible */ - if (pipe->scheduler_heap.elements == 0) - printf("dummynet: ++ ouch! not eligible but empty scheduler!\n"); - heap_insert(&(pipe->not_eligible_heap), q->S, q); + if (is_pipe) { + /* Fixed-rate queue: just insert into the ready_heap. */ + dn_key t = 0; + + if (pipe->bandwidth && m->m_pkthdr.len * 8 * hz > q->numbytes) + t = SET_TICKS(m, q, pipe); + q->sched_time = curr_time; + if (t == 0) /* Must process it now. */ + ready_event(q, &head, &tail); + else + heap_insert(&ready_heap, curr_time + t , q); } else { - heap_insert(&(pipe->scheduler_heap), q->F, q); - if (pipe->numbytes >= 0) { /* pipe is idle */ - if (pipe->scheduler_heap.elements != 1) - printf("dummynet: OUCH! pipe should have been idle!\n"); - DPRINTF(("dummynet: waking up pipe %d at %d\n", - pipe->pipe_nr, (int)(q->F >> MY_M))); - pipe->sched_time = curr_time ; - ready_event_wfq(pipe, &head, &tail); - } + /* + * WF2Q. First, compute start time S: if the flow was + * idle (S = F + 1) set S to the virtual time V for the + * controlling pipe, and update the sum of weights for the pipe; + * otherwise, remove flow from idle_heap and set S to max(F,V). + * Second, compute finish time F = S + len / weight. + * Third, if pipe was idle, update V = max(S, V). + * Fourth, count one more backlogged flow. + */ + if (DN_KEY_GT(q->S, q->F)) { /* Means timestamps are invalid. */ + q->S = pipe->V; + pipe->sum += fs->weight; /* Add weight of new queue. */ + } else { + heap_extract(&(pipe->idle_heap), q); + q->S = MAX64(q->F, pipe->V); + } + q->F = q->S + (len << MY_M) / (uint64_t)fs->weight; + + if (pipe->not_eligible_heap.elements == 0 && + pipe->scheduler_heap.elements == 0) + pipe->V = MAX64(q->S, pipe->V); + fs->backlogged++; + /* + * Look at eligibility. A flow is not eligibile if S>V (when + * this happens, it means that there is some other flow already + * scheduled for the same pipe, so the scheduler_heap cannot be + * empty). If the flow is not eligible we just store it in the + * not_eligible_heap. Otherwise, we store in the scheduler_heap + * and possibly invoke ready_event_wfq() right now if there is + * leftover credit. + * Note that for all flows in scheduler_heap (SCH), S_i <= V, + * and for all flows in not_eligible_heap (NEH), S_i > V. + * So when we need to compute max(V, min(S_i)) forall i in + * SCH+NEH, we only need to look into NEH. + */ + if (DN_KEY_GT(q->S, pipe->V)) { /* Not eligible. */ + if (pipe->scheduler_heap.elements == 0) + printf("dummynet: ++ ouch! not eligible but empty scheduler!\n"); + heap_insert(&(pipe->not_eligible_heap), q->S, q); + } else { + heap_insert(&(pipe->scheduler_heap), q->F, q); + if (pipe->numbytes >= 0) { /* Pipe is idle. */ + if (pipe->scheduler_heap.elements != 1) + printf("dummynet: OUCH! pipe should have been idle!\n"); + DPRINTF(("dummynet: waking up pipe %d at %d\n", + pipe->pipe_nr, (int)(q->F >> MY_M))); + pipe->sched_time = curr_time; + ready_event_wfq(pipe, &head, &tail); + } + } } - } done: - DUMMYNET_UNLOCK(); - if (head != NULL) - dummynet_send(head); - return 0; + if (head == m && dir != DN_TO_IFB_FWD && dir != DN_TO_ETH_DEMUX && + dir != DN_TO_ETH_OUT) { /* Fast io. */ + io_pkt_fast++; + if (m->m_nextpkt != NULL) + printf("dummynet: fast io: pkt chain detected!\n"); + head = m->m_nextpkt = NULL; + } else + *m0 = NULL; /* Normal io. */ + + DUMMYNET_UNLOCK(); + if (head != NULL) + dummynet_send(head); + return (0); dropit: - if (q) - q->drops++ ; - DUMMYNET_UNLOCK(); - m_freem(m); - return ( (fs && (fs->flags_fs & DN_NOERROR)) ? 0 : ENOBUFS); + io_pkt_drop++; + if (q) + q->drops++; + DUMMYNET_UNLOCK(); + m_freem(m); + *m0 = NULL; + return ((fs && (fs->flags_fs & DN_NOERROR)) ? 0 : ENOBUFS); } /* @@ -1696,7 +1754,7 @@ /* Flush accumulated credit for all queues. */ for (i = 0; i <= pipe->fs.rq_size; i++) for (q = pipe->fs.rq[i]; q; q = q->next) - q->numbytes = 0; + q->numbytes = io_fast ? p->bandwidth : 0; pipe->bandwidth = p->bandwidth; pipe->numbytes = 0; /* just in case... */ Index: sys/netinet/ip_fw_pfil.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/ip_fw_pfil.c,v retrieving revision 1.25 diff -u -r1.25 ip_fw_pfil.c --- sys/netinet/ip_fw_pfil.c 7 Oct 2007 20:44:23 -0000 1.25 +++ sys/netinet/ip_fw_pfil.c 27 Mar 2008 17:19:10 -0000 @@ -104,16 +104,6 @@ bzero(&args, sizeof(args)); - dn_tag = m_tag_find(*m0, PACKET_TAG_DUMMYNET, NULL); - if (dn_tag != NULL){ - struct dn_pkt_tag *dt; - - dt = (struct dn_pkt_tag *)(dn_tag+1); - args.rule = dt->rule; - - m_tag_delete(*m0, dn_tag); - } - ng_tag = (struct ng_ipfw_tag *)m_tag_locate(*m0, NGM_IPFW_COOKIE, 0, NULL); if (ng_tag != NULL) { @@ -124,6 +114,16 @@ } again: + dn_tag = m_tag_find(*m0, PACKET_TAG_DUMMYNET, NULL); + if (dn_tag != NULL){ + struct dn_pkt_tag *dt; + + dt = (struct dn_pkt_tag *)(dn_tag+1); + args.rule = dt->rule; + + m_tag_delete(*m0, dn_tag); + } + args.m = *m0; args.inp = inp; ipfw = ipfw_chk(&args); @@ -160,10 +160,11 @@ if (!DUMMYNET_LOADED) goto drop; if (mtod(*m0, struct ip *)->ip_v == 4) - ip_dn_io_ptr(*m0, DN_TO_IP_IN, &args); + ip_dn_io_ptr(m0, DN_TO_IP_IN, &args); else if (mtod(*m0, struct ip *)->ip_v == 6) - ip_dn_io_ptr(*m0, DN_TO_IP6_IN, &args); - *m0 = NULL; + ip_dn_io_ptr(m0, DN_TO_IP6_IN, &args); + if (*m0 != NULL) + goto again; return 0; /* packet consumed */ case IP_FW_TEE: @@ -225,16 +226,6 @@ bzero(&args, sizeof(args)); - dn_tag = m_tag_find(*m0, PACKET_TAG_DUMMYNET, NULL); - if (dn_tag != NULL) { - struct dn_pkt_tag *dt; - - dt = (struct dn_pkt_tag *)(dn_tag+1); - args.rule = dt->rule; - - m_tag_delete(*m0, dn_tag); - } - ng_tag = (struct ng_ipfw_tag *)m_tag_locate(*m0, NGM_IPFW_COOKIE, 0, NULL); if (ng_tag != NULL) { @@ -245,6 +236,16 @@ } again: + dn_tag = m_tag_find(*m0, PACKET_TAG_DUMMYNET, NULL); + if (dn_tag != NULL) { + struct dn_pkt_tag *dt; + + dt = (struct dn_pkt_tag *)(dn_tag+1); + args.rule = dt->rule; + + m_tag_delete(*m0, dn_tag); + } + args.m = *m0; args.oif = ifp; args.inp = inp; @@ -286,10 +287,11 @@ if (!DUMMYNET_LOADED) break; if (mtod(*m0, struct ip *)->ip_v == 4) - ip_dn_io_ptr(*m0, DN_TO_IP_OUT, &args); + ip_dn_io_ptr(m0, DN_TO_IP_OUT, &args); else if (mtod(*m0, struct ip *)->ip_v == 6) - ip_dn_io_ptr(*m0, DN_TO_IP6_OUT, &args); - *m0 = NULL; + ip_dn_io_ptr(m0, DN_TO_IP6_OUT, &args); + if (*m0 != NULL) + goto again; return 0; /* packet consumed */ break; Index: sys/net/if_bridge.c =================================================================== RCS file: /home/ncvs/src/sys/net/if_bridge.c,v retrieving revision 1.103.2.3 diff -u -r1.103.2.3 if_bridge.c --- sys/net/if_bridge.c 21 Dec 2007 05:29:15 -0000 1.103.2.3 +++ sys/net/if_bridge.c 27 Mar 2008 17:19:15 -0000 @@ -2982,7 +2982,7 @@ * packet will return to us via bridge_dummynet(). */ args.oif = ifp; - ip_dn_io_ptr(*mp, DN_TO_IFB_FWD, &args); + ip_dn_io_ptr(mp, DN_TO_IFB_FWD, &args); return (error); } Index: sys/net/if_ethersubr.c =================================================================== RCS file: /home/ncvs/src/sys/net/if_ethersubr.c,v retrieving revision 1.236.2.1 diff -u -r1.236.2.1 if_ethersubr.c --- sys/net/if_ethersubr.c 28 Oct 2007 16:24:16 -0000 1.236.2.1 +++ sys/net/if_ethersubr.c 27 Mar 2008 17:19:18 -0000 @@ -491,7 +491,7 @@ */ *m0 = NULL ; } - ip_dn_io_ptr(m, dst ? DN_TO_ETH_OUT: DN_TO_ETH_DEMUX, &args); + ip_dn_io_ptr(&m, dst ? DN_TO_ETH_OUT: DN_TO_ETH_DEMUX, &args); return 0; } /* Index: sbin/ipfw/ipfw.8 =================================================================== RCS file: /home/ncvs/src/sbin/ipfw/ipfw.8,v retrieving revision 1.203.2.1 diff -u -r1.203.2.1 ipfw.8 --- sbin/ipfw/ipfw.8 29 Nov 2007 18:42:15 -0000 1.203.2.1 +++ sbin/ipfw/ipfw.8 27 Mar 2008 17:25:32 -0000 @@ -1756,6 +1756,16 @@ TCP connection, or from/to a given host, or entire subnet, or a protocol type, etc. .Pp +There are two modes of dummynet operation: normal and fast. +Normal mode tries to emulate real link: dummynet scheduler ensures packet will +not leave pipe faster than it would be on real link with given bandwidth. +Fast mode allows certain packets to bypass dummynet scheduler (if packet flow +does not exceed pipe's bandwidth). Thus fast mode requires less cpu cycles +per packet (in average) but packet latency can be significantly lower comparing +to real link with same bandwidth. Default is normal mode, fast mode can be +enabled by setting net.inet.ip.dummynet.io_fast sysctl(8) variable to non-zero +value. +.Pp Packets belonging to the same flow are then passed to either of two different objects, which implement the traffic regulation: .Bl -hang -offset XXXX @@ -2120,6 +2130,14 @@ This value is used when no .Cm buckets option is specified when configuring a pipe/queue. +.It Em net.inet.ip.dummynet.io_fast : No 0 +If set to non-zero value enables "fast" mode of dummynet operation (see above). +.It Em net.inet.ip.dummynet.io_pkt +Number of packets passed to by dummynet. +.It Em net.inet.ip.dummynet.io_pkt_drop +Number of packets dropped by dummynet. +.It Em net.inet.ip.dummynet.io_pkt_fast +Number of packets bypassed dummynet scheduler. .It Em net.inet.ip.dummynet.max_chain_len : No 16 Target value for the maximum number of pipes/queues in a hash bucket. The product --rwEMma7ioTxnRzrJ-- From owner-freebsd-ipfw@FreeBSD.ORG Fri Apr 4 14:20:02 2008 Return-Path: Delivered-To: freebsd-ipfw@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E7C52106566C for ; Fri, 4 Apr 2008 14:20:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id C73D88FC13 for ; Fri, 4 Apr 2008 14:20:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m34EK2es041135 for ; Fri, 4 Apr 2008 14:20:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m34EK2mD041134; Fri, 4 Apr 2008 14:20:02 GMT (envelope-from gnats) Date: Fri, 4 Apr 2008 14:20:02 GMT Message-Id: <200804041420.m34EK2mD041134@freefall.freebsd.org> To: freebsd-ipfw@FreeBSD.org From: Eugene Grosbein Cc: Subject: Re: bin/120720: [patch] [ipfw] unbreak POLA for ipfw table list X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Eugene Grosbein List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Apr 2008 14:20:03 -0000 The following reply was made to PR bin/120720; it has been noted by GNATS. From: Eugene Grosbein To: bug-followup@freebsd.org Cc: net@freebsd.org, julian@freebsd.org Subject: Re: bin/120720: [patch] [ipfw] unbreak POLA for ipfw table list Date: Fri, 4 Apr 2008 22:12:08 +0800 Hi! This PR was closed 6 weeks ago and had a record "MFC After: 3 days". http://www.freebsd.org/cgi/query-pr.cgi?pr=120720 There is still no MFC to RELENG_7 nor to RELENG_6 where POLA was broken. Please do it. Eugene Grosbein From owner-freebsd-ipfw@FreeBSD.ORG Fri Apr 4 18:30:06 2008 Return-Path: Delivered-To: freebsd-ipfw@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4D22E106564A for ; Fri, 4 Apr 2008 18:30:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 1D3C88FC15 for ; Fri, 4 Apr 2008 18:30:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m34IU5K5072453 for ; Fri, 4 Apr 2008 18:30:05 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m34IU5Zr072450; Fri, 4 Apr 2008 18:30:05 GMT (envelope-from gnats) Date: Fri, 4 Apr 2008 18:30:05 GMT Message-Id: <200804041830.m34IU5Zr072450@freefall.freebsd.org> To: freebsd-ipfw@FreeBSD.org From: Julian Elischer Cc: Subject: Re: bin/120720: [patch] [ipfw] unbreak POLA for ipfw table list X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Julian Elischer List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Apr 2008 18:30:06 -0000 The following reply was made to PR bin/120720; it has been noted by GNATS. From: Julian Elischer To: bug-followup@FreeBSD.org, eugen@kuzbass.ru Cc: Subject: Re: bin/120720: [patch] [ipfw] unbreak POLA for ipfw table list Date: Fri, 04 Apr 2008 11:12:39 -0700 The change has been MFC'd to RELENG_6 and RELENG_7 From owner-freebsd-ipfw@FreeBSD.ORG Sat Apr 5 07:10:03 2008 Return-Path: Delivered-To: freebsd-ipfw@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9F70D1065671 for ; Sat, 5 Apr 2008 07:10:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 652518FC14 for ; Sat, 5 Apr 2008 07:10:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m357A21W051632 for ; Sat, 5 Apr 2008 07:10:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m357A2Pc051631; Sat, 5 Apr 2008 07:10:02 GMT (envelope-from gnats) Date: Sat, 5 Apr 2008 07:10:02 GMT Message-Id: <200804050710.m357A2Pc051631@freefall.freebsd.org> To: freebsd-ipfw@FreeBSD.org From: Eugene Grosbein Cc: Subject: Re: bin/120720: [patch] [ipfw] unbreak POLA for ipfw table list X-BeenThere: freebsd-ipfw@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Eugene Grosbein List-Id: IPFW Technical Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Apr 2008 07:10:03 -0000 The following reply was made to PR bin/120720; it has been noted by GNATS. From: Eugene Grosbein To: Julian Elischer Cc: bug-followup@FreeBSD.org Subject: Re: bin/120720: [patch] [ipfw] unbreak POLA for ipfw table list Date: Sat, 5 Apr 2008 15:00:09 +0800 On Fri, Apr 04, 2008 at 11:12:39AM -0700, Julian Elischer wrote: > The change has been MFC'd to RELENG_6 and RELENG_7 Thank you!