flow_dissector: allow dissection of tunnel options from metadata
Allow the existing 'dissection' of tunnel metadata to 'dissect' options already present in tunnel metadata. This dissection is controlled by a new dissector key, FLOW_DISSECTOR_KEY_ENC_OPTS. This dissection only occurs when skb_flow_dissect_tunnel_info() is called, currently only the Flower classifier makes that call. So there should be no impact on other users of the flow dissector. This is in preparation for allowing the flower classifier to match on Geneve options. Signed-off-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
d7ff7ec573
commit
92e2c40536
@@ -154,7 +154,9 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
|
||||
!dissector_uses_key(flow_dissector,
|
||||
FLOW_DISSECTOR_KEY_ENC_PORTS) &&
|
||||
!dissector_uses_key(flow_dissector,
|
||||
FLOW_DISSECTOR_KEY_ENC_IP))
|
||||
FLOW_DISSECTOR_KEY_ENC_IP) &&
|
||||
!dissector_uses_key(flow_dissector,
|
||||
FLOW_DISSECTOR_KEY_ENC_OPTS))
|
||||
return;
|
||||
|
||||
info = skb_tunnel_info(skb);
|
||||
@@ -224,6 +226,21 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
|
||||
ip->tos = key->tos;
|
||||
ip->ttl = key->ttl;
|
||||
}
|
||||
|
||||
if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ENC_OPTS)) {
|
||||
struct flow_dissector_key_enc_opts *enc_opt;
|
||||
|
||||
enc_opt = skb_flow_dissector_target(flow_dissector,
|
||||
FLOW_DISSECTOR_KEY_ENC_OPTS,
|
||||
target_container);
|
||||
|
||||
if (info->options_len) {
|
||||
enc_opt->len = info->options_len;
|
||||
ip_tunnel_info_opts_get(enc_opt->data, info);
|
||||
enc_opt->dst_opt_type = info->key.tun_flags &
|
||||
TUNNEL_OPTIONS_PRESENT;
|
||||
}
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(skb_flow_dissect_tunnel_info);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user