tcpdump mailing list archives
Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle
From: Guy Harris <gharris () sonic net>
Date: Tue, 8 Jul 2025 17:20:38 -0700
On Jul 8, 2025, at 7:58 AM, Denis Ovsienko <denis () ovsienko info> wrote:
On Mon, 7 Jul 2025 13:26:25 -0700 Guy Harris <gharris () sonic net> wrote:There could probably be a bunch of optimizations done to programs in that IR.The parse tree, as a means of data handover between layers, would be an encoding.
If by "layers" you're referring to the "parse this filter expression without taking the link-layer type into account"
API and the "generate cBPF/eBPF code" API, an abstract syntax tree is one possible encoding; others might be, for
example, a sequence of "operation, source 1, source 2, destination" quads, including conditional branch operations
(think of it as a higher-level link-layer type and target-independent code, similar to the cBPF DAG we currently use
internally).
It may be that some manipulations are more easily done on a parse tree - at one point, I thought of a way of handling
"vlan"/"mils"/etc. in a fashion that makes the modified packet offset apply *only* to code that's run if the vlan test
succeeds, so that, for example
(vlan and ip) or iso protocol clnp
doesn't, when "vlan" fails, end up looking at the wrong place in the packet when testing for a *non*-VLAN CLNP packet,
and thought that perhaps attaching an "updated offset" tag to the right-hand branch, in the parse tree, of an "and"
with a "vlan" expression as the left-hand branch:
(or)
/ \
(and) (iso protocol clnp)
/ \
vlan (ip, but 4 bytes later)
would do the trick. A quad-style IR:
0: test-link-protocol-type VLAN
1: if-match 2, 5
2: advance-offset-for-link-protocol-type 4
3: test-link-protocol-type IP
4: if-match 9, 5
5: test-link-protocol-type ISO
6: if-match 7, 10
7: test-iso-protocol-type CLNP
8: if-match 9, 10
9: succeed
10: fail
might take more work to decorate with the advance-offset-for-link-protocol-type operation.
To make it possible to test the algorithms that produce/consume this encoding, it would be necessary to have means of serializing/deserializing the parse tree using some text form, then the following test types would become possible: 1. Does this filter expression translate to this parse tree? 2. Does this parse tree become that parse tree after this optimisation? 3. Does this parse tree become this BPF program after this translation?
That's independent of the representation; the same could be done for other intermediate representations. _______________________________________________ tcpdump-workers mailing list -- tcpdump-workers () lists tcpdump org To unsubscribe send an email to tcpdump-workers-leave () lists tcpdump org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
Current thread:
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle, (continued)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Guy Harris (Jul 07)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Denis Ovsienko (Jul 08)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Guy Harris (Jul 08)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Stephen Hemminger via tcpdump-workers (Jul 08)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Guy Harris (Jul 04)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Michael Richardson (Jul 04)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Denis Ovsienko (Jul 07)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Guy Harris (Jul 07)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Denis Ovsienko (Jul 08)
- Re: Setting BPF_SPECIAL_VLAN_HANDLING on a "dead" handle Guy Harris (Jul 08)
