Please take this discussion to the tcpdump-workers list.

shohamp writes:
    > This commit by @yuguy explains this issue very well. yacc parsers the
    > bpf from left to right without saving the state, and doesn't provide a
    > tree of some kind, which would allow an easy solution. @yuguy says that
    > OR'ing vlans in the current parsing methodology is impossible.

    > But there might be a solution, if GCC used yacc in previous version to
    > parse C code, a state can be saved. We simply want yacc to parse
    > parenthesis, and using them to increment the offset, and with each 'OR'
    > it encounters, resetting the offset to it's last state. Let me explain:

    > tcpdump -d 'vlan and (vlan or arp) or ip' means: 1. filter vlan with
    > the current offset (0) and increment offset ( = 4) 2. open
    > parenthesis. push the offset in a stack 3. filter vlan with the current
    > offset (0) and increment offset ( = 8) 4. or. reset the offset to it's
    > state in the last parenthesis from the offset stack ( = 4) 5. filter
    > arp with the current offset (4) 6. close parenthesis. pop the offset's
    > state 7. or. reset the offset to it's state in the last parenthesis
    > from the offset stack ( = 0) 8. filter ip with the current offset (0)

    > As it seems to me, this will solve the issue, and would allow OR'ing
    > vlans.

    > What do you say?



_______________________________________________
tcpdump-workers mailing list
tcpdump-workers@lists.tcpdump.org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Reply via email to