OSDN Git Service

net/sched: cls_flower: Allow setting encapsulation fields as used key
authorHadar Hen Zion <hadarh@mellanox.com>
Mon, 7 Nov 2016 13:14:38 +0000 (15:14 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Nov 2016 18:41:54 +0000 (13:41 -0500)
When encapsulation field is set, mark it as used key for the flow
dissector. This will be used by offloading drivers.

Signed-off-by: Hadar Hen Zion <hadarh@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_flower.c

index db4cd88..6369b74 100644 (file)
@@ -567,6 +567,16 @@ static void fl_init_dissector(struct cls_fl_head *head,
                             FLOW_DISSECTOR_KEY_PORTS, tp);
        FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
                             FLOW_DISSECTOR_KEY_VLAN, vlan);
+       FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
+                            FLOW_DISSECTOR_KEY_ENC_KEYID, enc_key_id);
+       FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
+                            FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS, enc_ipv4);
+       FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
+                            FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS, enc_ipv6);
+       if (FL_KEY_IS_MASKED(&mask->key, enc_ipv4) ||
+           FL_KEY_IS_MASKED(&mask->key, enc_ipv6))
+               FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_ENC_CONTROL,
+                          enc_control);
 
        skb_flow_dissector_init(&head->dissector, keys, cnt);
 }