Hi Ido,
I've lots of good experience with ACL but can't make it work with u64 values
I know it can be split to 2xu32 fields, but it makes it more complex to use and
a wastes double number of fields (we hit the
RTE_ACL_MAX_FIELDS 64 limit)
Wow, that's a lot of fields...
According to the documentation and rte_acl.h fields size can be 8 bytes (u64)
e.g.
'The size parameter defines the length of the field in bytes. Allowable
values are 1, 2, 4, or 8 bytes.'
(from
https://doc.dpdk.org/guides-21.11/prog_guide/packet_classif_access_ctrl.html#rule-definition)
Though there's a hint it's less recommended
'Also, it is best to define fields of 8 or more bytes as 4 byte fields so
that the build processes can eliminate fields that are all wild.'
It's also not clear how it fits in a group (i.e. what's input_index stride)
which is only 4 bytes
'All subsequent fields has to be grouped into sets of 4 consecutive bytes.'
I couldn't find any example or test app that's using 8 bytes
e.g. for IPv6 address 4xu32 fields are always used and not 2xu64
Should it work?
Did anyone try it successfully and/or can share an example?
You are right: though it is formally supported, we do not test it, and
AFAIK no-one used it till now.
As we do group fields by 4B long chunks anyway, 8B field is sort of
awkward and confusing.
To be honest, I don't even remember what was the rationale beyond
introducing it at first place.
Anyway, just submitted patches that should fix 8B field support (at
least it works for me now):
https://patches.dpdk.org/project/dpdk/list/?series=22676
Please give it a try.
In long term it probably would be good to hear from you and other users,
should we keep 8B
support at all, or might be it would be easier just to abandon it.
Thanks
Konstantin