]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
flow_dissector: Dissect tos and ttl from the tunnel info
authorOr Gerlitz <ogerlitz@mellanox.com>
Tue, 17 Jul 2018 16:27:17 +0000 (19:27 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Jul 2018 06:26:01 +0000 (23:26 -0700)
Add dissection of the tos and ttl from the ip tunnel headers
fields in case a match is needed on them.

Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/flow_dissector.h
net/core/flow_dissector.c

index c64406717eee657db0b995964f8d713445f36719..2a17f041f7a1742e069e7c6d49658251e45519e3 100644 (file)
@@ -207,7 +207,7 @@ enum flow_dissector_key_id {
        FLOW_DISSECTOR_KEY_TCP, /* struct flow_dissector_key_tcp */
        FLOW_DISSECTOR_KEY_IP, /* struct flow_dissector_key_ip */
        FLOW_DISSECTOR_KEY_CVLAN, /* struct flow_dissector_key_flow_vlan */
-
+       FLOW_DISSECTOR_KEY_ENC_IP, /* struct flow_dissector_key_ip */
        FLOW_DISSECTOR_KEY_MAX,
 };
 
index b555fc229e967f75e9ac83aaa7ec392caadc2895..08a5184f4b344281ed1c458aa62a3033e63a81e5 100644 (file)
@@ -152,7 +152,9 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
            !dissector_uses_key(flow_dissector,
                                FLOW_DISSECTOR_KEY_ENC_CONTROL) &&
            !dissector_uses_key(flow_dissector,
-                               FLOW_DISSECTOR_KEY_ENC_PORTS))
+                               FLOW_DISSECTOR_KEY_ENC_PORTS) &&
+           !dissector_uses_key(flow_dissector,
+                               FLOW_DISSECTOR_KEY_ENC_IP))
                return;
 
        info = skb_tunnel_info(skb);
@@ -212,6 +214,16 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
                tp->src = key->tp_src;
                tp->dst = key->tp_dst;
        }
+
+       if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ENC_IP)) {
+               struct flow_dissector_key_ip *ip;
+
+               ip = skb_flow_dissector_target(flow_dissector,
+                                              FLOW_DISSECTOR_KEY_ENC_IP,
+                                              target_container);
+               ip->tos = key->tos;
+               ip->ttl = key->ttl;
+       }
 }
 EXPORT_SYMBOL(skb_flow_dissect_tunnel_info);