From: Paul LeoNerd Evans <leonerd@leonerd.org.uk>
To: Andi Kleen <andi@firstfloor.org>, netdev@vger.kernel.org
Cc: David Miller <davem@davemloft.net>
Subject: Re: RFC: New BGF 'LOOP' instruction
Date: Tue, 3 Aug 2010 15:34:42 +0100 [thread overview]
Message-ID: <20100803143442.GW11110@cel.leo> (raw)
In-Reply-To: <20100803141110.GT11110@cel.leo>
[-- Attachment #1: Type: text/plain, Size: 1287 bytes --]
On Tue, Aug 03, 2010 at 03:11:10PM +0100, Paul LeoNerd Evans wrote:
> switch(hdrtype)
> {
> case 1:
> length = someconst; break;
> case 2:
> length = someotherconst; break;
> case 3:
> length = b[someoffset]; break;
> ...
> }
Of course, I completely forgot about finding also the offset of the
'next header' from the current header. That results in some code which,
in C, would look like:
int hdrtype = b[IPv6_nexthdr];
int x = size_of_IPv6_header;
while(hdrtype != hdr_wanted) {
int len;
switch(hdrtype) {
case 1:
len = someconst;
hdrtype = someotherconst;
break;
case 2:
len = b[x+someoffs];
hdrtype = b[x+someotheroffs];
break;
/* other IPv6 header types here */
}
x += len;
}
You can't compile that idea into BPF without using a scratch memory
cell, because you can't have both 'len' and 'hdrtype' live in A at the
same time, nor can you atomically x += b[x+someoffs].
In short, much much easier if the C code did this part...
--
Paul "LeoNerd" Evans
leonerd@leonerd.org.uk
ICQ# 4135350 | Registered Linux# 179460
http://www.leonerd.org.uk/
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 190 bytes --]
prev parent reply other threads:[~2010-08-03 14:34 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-02 11:03 RFC: New BGF 'LOOP' instruction Paul LeoNerd Evans
2010-08-02 11:13 ` RFC: New BPF " Paul LeoNerd Evans
2010-08-02 20:16 ` RFC: New BGF " Hagen Paul Pfeifer
2010-08-03 5:18 ` David Miller
2010-08-03 7:07 ` Paul LeoNerd Evans
2010-08-03 7:19 ` David Miller
2010-08-03 9:10 ` Hagen Paul Pfeifer
2010-08-03 13:40 ` Paul LeoNerd Evans
2010-08-03 9:03 ` Hagen Paul Pfeifer
2010-08-03 7:18 ` RFC: New BPF " Paul LeoNerd Evans
2010-08-03 5:13 ` RFC: New BGF " David Miller
2010-08-03 7:04 ` Paul LeoNerd Evans
2010-08-03 7:18 ` David Miller
2010-08-03 12:58 ` Andi Kleen
2010-08-03 13:07 ` David Miller
2010-08-03 13:34 ` RFC: New BPF " Paul LeoNerd Evans
2010-08-03 13:42 ` Paul LeoNerd Evans
2010-08-03 14:09 ` Rémi Denis-Courmont
2010-08-03 14:13 ` Paul LeoNerd Evans
2010-08-03 14:16 ` Rémi Denis-Courmont
2010-08-03 14:19 ` Paul LeoNerd Evans
2010-08-03 15:17 ` Rémi Denis-Courmont
2010-08-03 15:27 ` Paul LeoNerd Evans
2010-08-03 14:05 ` RFC: New BGF " Andi Kleen
2010-08-03 14:11 ` Paul LeoNerd Evans
2010-08-03 14:34 ` Paul LeoNerd Evans [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100803143442.GW11110@cel.leo \
--to=leonerd@leonerd.org.uk \
--cc=andi@firstfloor.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.