[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20070821112942.9a5c78ca.akpm@linux-foundation.org>
Date: Tue, 21 Aug 2007 11:29:42 -0700
From: Andrew Morton <akpm@...ux-foundation.org>
To: netdev@...r.kernel.org
Cc: bugme-daemon@...zilla.kernel.org, lionel@...ane.lu
Subject: Re: [Bugme-new] [Bug 8914] New: filter attached to prio qdisc
breaks priomap handling of packets it does _not_ match
On Tue, 21 Aug 2007 05:32:57 -0700 (PDT) bugme-daemon@...zilla.kernel.org wrote:
> http://bugzilla.kernel.org/show_bug.cgi?id=8914
>
> Summary: filter attached to prio qdisc breaks priomap handling of
> packets it does _not_ match
> Product: Networking
> Version: 2.5
> KernelVersion: 2.6.22.4
> Platform: All
> OS/Version: Linux
> Tree: Mainline
> Status: NEW
> Severity: normal
> Priority: P1
> Component: IPV4
> AssignedTo: shemminger@...l.org
> ReportedBy: lionel@...ane.lu
>
>
> Most recent kernel where this bug did not occur: none known to me
> Distribution: Debian (sid / unstable / distro development bleeding edge)
> Hardware Environment: reproduced on i386 and x64-64 machines
> Software Environment: Debian, iproute 20070313-1
> Problem Description:
>
> When I attach a filter to a prio qdisc, the packets that it does _not_
> match are not correctly handled (enqueued) according to the priomap
> anymore, that is the same way than when there is no filter attached to
> the qdisc. They seem to always fall in the map for best effort traffic.
>
> Problem first noticed on Debian precompiled kernels (2.6.18-4-amd64, based on
> 2.6.18.7 and 2.6.22-1-686, based on 2.6.22.1), reproduced with self-compiled
> (with .config copied from Debian precompiled one) straight-from-kernel.org
> 2.6.22.4 .
>
> Steps to reproduce:
>
> Run attached script (as root), trying to ensure no other traffic happens over
> the interface: it installs qdiscs on interface ${TIF} (defaults to eth0), pings
> host ${PHOST} (defaults to master.debian.org - numerical IP hardcoded) with
> various IP TOS bits set, installs a filter that matches TCP (_not_ ICMP) and
> does the pings again. You have to ensure that pings to ${PHOST} leaver over
> ${TIF}. You may have to "modprobe em_cmp" before running the script.
>
> Notice how the first pings (before filters get installed) get in the
> right queue according to their TOS bits, but after the filter gets
> installed, they all end up in the "best effort" queue.
>
>
> The output I get (non-relevant bits snipped out) is:
>
> Running test on interface eth0
> by pinging host 70.103.162.29
>
> Pinging with normal service 1 times
> Pinging with minimise delay 2 times
> Pinging with minimise cost 4 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent 196 bytes 2 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent 98 bytes 1 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent 392 bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
>
> Adding a filter that does _not_ match ICMP
>
> Pinging with normal service 8 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent 196 bytes 2 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent 924 bytes 10 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent 392 bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
>
> Pinging with minimise delay 16 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent 196 bytes 2 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent 2492 bytes 26 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent 392 bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
>
> Pinging with minimise cost 32 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent 196 bytes 2 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent 5628 bytes 58 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent 392 bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
>
>
> The output I would expect is:
>
> (... snip ...)
>
> Adding a filter that does _not_ match ICMP
>
> Pinging with normal service 8 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent XXX bytes 2 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent XXX bytes 10 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent XXX bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
>
> Pinging with minimise delay 16 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent XXX bytes 18 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent XXX bytes 10 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent XXX bytes 4 pkt (dropped 0, overlimits 0 requeues 0)
>
> Pinging with minimise cost 32 times
> qdisc pfifo 22: parent 20:2 limit 1000p
> Sent XXX bytes 18 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 23: parent 20:3 limit 1000p
> Sent XXX bytes 10 pkt (dropped 0, overlimits 0 requeues 0)
> qdisc pfifo 24: parent 20:4 limit 1000p
> Sent XXX bytes 36 pkt (dropped 0, overlimits 0 requeues 0)
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists