Both
and
are circular buffers of
fixed size slots, with
a configurable constant.
slots are large enough to hold
maximum-size packets, while the slots in the index buffers hold two
32 bit values: an index in
and the packet's `classification
result' (the value returned by the filter). A packet is considered
`interesting' if the filter returns a non-zero result.
Applications read packets of a flow by indexing
of
filter
with the values in
.
By default, network packets are stored in
from the link layer up. As
applications access the index buffers, classification results are
immediately available, normally within the same cache line. Although
the indices point only to the packets in which they are
interested, applications are able to see packets received by all
others in the same flow group (but not those received by other
groups).