Hi Jamal,
On Mon, Jun 21, 2021 at 10:04:41AM -0400, Jamal Hadi Salim wrote:
On 2021-06-21 4:32 a.m., Boris Sukholitko wrote:
I like this solution. To be more explicit, the plan becomes:
1. Add FLOW_DISSECTOR_KEY_ETH_TYPE and struct flow_dissector_key_eth_type.
2. Have skb flow dissector use it.
3. Userspace does not set TCA_FLOWER_KEY_ETH_TYPE automagically
anymore. cls_flower takes basic.n_proto from struct tcf_proto.
4. Add eth_type to the userspace and use it to set TCA_FLOWER_KEY_ETH_TYPE
5. Existence of TCA_FLOWER_KEY_ETH_TYPE triggers new eth_type dissector.
IMHO this neatly solves non-vlan protocol match case.
What should we do with the VLANs then? Should we have vlan_pure_ethtype
and cvlan_pure_ethtype as additional keys?
I didnt see the original patch you sent until after it was applied
and the cursory 30 second glance didnt say much to me.
Vlans unfortunately are a speacial beast: You will have to retrieve
the proto differently.
Do you by any chance have some naming suggestion? Does
vlan_pure_ethtype sound ok? What about vlan_{orig, pkt, raw, hdr}_ethtype?
Q: Was this always broken? Example look at Toke's change here:
commit d7bf2ebebc2bd61ab95e2a8e33541ef282f303d4
IMHO we've always had this problem. I did some archeology on this
code and didn't see anything which might have caused the bug.
Toke's change doesn't look related because in fl_classify it does:
skb_key.basic.n_proto = skb_protocol(skb, false);
before running the dissector. In case of a known tunnelling protocol (such
as ETH_P_PPP_SES) the n_proto will be overriden by __skb_flow_dissect.