|
@@ -826,51 +826,52 @@ static int fl_init_mask_hashtable(struct fl_flow_mask *mask)
|
|
|
FL_KEY_SET(keys, cnt, id, member); \
|
|
|
} while(0);
|
|
|
|
|
|
-static void fl_init_dissector(struct fl_flow_mask *mask)
|
|
|
+static void fl_init_dissector(struct flow_dissector *dissector,
|
|
|
+ struct fl_flow_key *mask)
|
|
|
{
|
|
|
struct flow_dissector_key keys[FLOW_DISSECTOR_KEY_MAX];
|
|
|
size_t cnt = 0;
|
|
|
|
|
|
FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_CONTROL, control);
|
|
|
FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_BASIC, basic);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ETH_ADDRS, eth);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_IPV4_ADDRS, ipv4);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_IPV6_ADDRS, ipv6);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_PORTS, tp);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_IP, ip);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_TCP, tcp);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ICMP, icmp);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ARP, arp);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_MPLS, mpls);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_VLAN, vlan);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_CVLAN, cvlan);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ENC_KEYID, enc_key_id);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS, enc_ipv4);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, 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))
|
|
|
+ if (FL_KEY_IS_MASKED(mask, enc_ipv4) ||
|
|
|
+ FL_KEY_IS_MASKED(mask, enc_ipv6))
|
|
|
FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_ENC_CONTROL,
|
|
|
enc_control);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ENC_PORTS, enc_tp);
|
|
|
- FL_KEY_SET_IF_MASKED(&mask->key, keys, cnt,
|
|
|
+ FL_KEY_SET_IF_MASKED(mask, keys, cnt,
|
|
|
FLOW_DISSECTOR_KEY_ENC_IP, enc_ip);
|
|
|
|
|
|
- skb_flow_dissector_init(&mask->dissector, keys, cnt);
|
|
|
+ skb_flow_dissector_init(dissector, keys, cnt);
|
|
|
}
|
|
|
|
|
|
static struct fl_flow_mask *fl_create_new_mask(struct cls_fl_head *head,
|
|
@@ -889,7 +890,7 @@ static struct fl_flow_mask *fl_create_new_mask(struct cls_fl_head *head,
|
|
|
if (err)
|
|
|
goto errout_free;
|
|
|
|
|
|
- fl_init_dissector(newmask);
|
|
|
+ fl_init_dissector(&newmask->dissector, &newmask->key);
|
|
|
|
|
|
INIT_LIST_HEAD_RCU(&newmask->filters);
|
|
|
|