Lines Matching full:mask
96 struct fl_flow_key mask; member
111 struct fl_flow_mask *mask; member
139 static unsigned short int fl_mask_range(const struct fl_flow_mask *mask) in fl_mask_range() argument
141 return mask->range.end - mask->range.start; in fl_mask_range()
144 static void fl_mask_update_range(struct fl_flow_mask *mask) in fl_mask_update_range() argument
146 const u8 *bytes = (const u8 *) &mask->key; in fl_mask_update_range()
147 size_t size = sizeof(mask->key); in fl_mask_update_range()
163 mask->range.start = rounddown(first, sizeof(long)); in fl_mask_update_range()
164 mask->range.end = roundup(last + 1, sizeof(long)); in fl_mask_update_range()
168 const struct fl_flow_mask *mask) in fl_key_get_start() argument
170 return (u8 *) key + mask->range.start; in fl_key_get_start()
174 struct fl_flow_mask *mask) in fl_set_masked_key() argument
176 const long *lkey = fl_key_get_start(key, mask); in fl_set_masked_key()
177 const long *lmask = fl_key_get_start(&mask->key, mask); in fl_set_masked_key()
178 long *lmkey = fl_key_get_start(mkey, mask); in fl_set_masked_key()
181 for (i = 0; i < fl_mask_range(mask); i += sizeof(long)) in fl_set_masked_key()
186 struct fl_flow_mask *mask) in fl_mask_fits_tmplt() argument
188 const long *lmask = fl_key_get_start(&mask->key, mask); in fl_mask_fits_tmplt()
194 ltmplt = fl_key_get_start(&tmplt->mask, mask); in fl_mask_fits_tmplt()
195 for (i = 0; i < fl_mask_range(mask); i += sizeof(long)) { in fl_mask_fits_tmplt()
203 struct fl_flow_mask *mask) in fl_clear_masked_range() argument
205 memset(fl_key_get_start(key, mask), 0, fl_mask_range(mask)); in fl_clear_masked_range()
214 min_mask = ntohs(filter->mask->key.tp_range.tp_min.dst); in fl_range_port_dst_cmp()
215 max_mask = ntohs(filter->mask->key.tp_range.tp_max.dst); in fl_range_port_dst_cmp()
237 min_mask = ntohs(filter->mask->key.tp_range.tp_min.src); in fl_range_port_src_cmp()
238 max_mask = ntohs(filter->mask->key.tp_range.tp_max.src); in fl_range_port_src_cmp()
254 static struct cls_fl_filter *__fl_lookup(struct fl_flow_mask *mask, in __fl_lookup() argument
257 return rhashtable_lookup_fast(&mask->ht, fl_key_get_start(mkey, mask), in __fl_lookup()
258 mask->filter_ht_params); in __fl_lookup()
261 static struct cls_fl_filter *fl_lookup_range(struct fl_flow_mask *mask, in fl_lookup_range() argument
267 list_for_each_entry_rcu(filter, &mask->filters, list) { in fl_lookup_range()
274 f = __fl_lookup(mask, mkey); in fl_lookup_range()
282 struct cls_fl_filter *fl_mask_lookup(struct fl_flow_mask *mask, struct fl_flow_key *key) in fl_mask_lookup() argument
286 fl_set_masked_key(&mkey, key, mask); in fl_mask_lookup()
287 if ((mask->flags & TCA_FLOWER_MASK_FLAGS_RANGE)) in fl_mask_lookup()
288 return fl_lookup_range(mask, &mkey, key); in fl_mask_lookup()
290 return __fl_lookup(mask, &mkey); in fl_mask_lookup()
311 struct fl_flow_mask *mask; in fl_classify() local
314 list_for_each_entry_rcu(mask, &head->masks, list) { in fl_classify()
316 fl_clear_masked_range(&skb_key, mask); in fl_classify()
318 skb_flow_dissect_meta(skb, &mask->dissector, &skb_key); in fl_classify()
323 skb_flow_dissect_tunnel_info(skb, &mask->dissector, &skb_key); in fl_classify()
324 skb_flow_dissect_ct(skb, &mask->dissector, &skb_key, in fl_classify()
327 skb_flow_dissect_hash(skb, &mask->dissector, &skb_key); in fl_classify()
328 skb_flow_dissect(skb, &mask->dissector, &skb_key, 0); in fl_classify()
330 f = fl_mask_lookup(mask, &skb_key); in fl_classify()
356 static void fl_mask_free(struct fl_flow_mask *mask, bool mask_init_done) in fl_mask_free() argument
360 WARN_ON(!list_empty(&mask->filters)); in fl_mask_free()
361 rhashtable_destroy(&mask->ht); in fl_mask_free()
363 kfree(mask); in fl_mask_free()
368 struct fl_flow_mask *mask = container_of(to_rcu_work(work), in fl_mask_free_work() local
371 fl_mask_free(mask, true); in fl_mask_free_work()
376 struct fl_flow_mask *mask = container_of(to_rcu_work(work), in fl_uninit_mask_free_work() local
379 fl_mask_free(mask, false); in fl_uninit_mask_free_work()
382 static bool fl_mask_put(struct cls_fl_head *head, struct fl_flow_mask *mask) in fl_mask_put() argument
384 if (!refcount_dec_and_test(&mask->refcnt)) in fl_mask_put()
387 rhashtable_remove_fast(&head->ht, &mask->ht_node, mask_ht_params); in fl_mask_put()
390 list_del_rcu(&mask->list); in fl_mask_put()
393 tcf_queue_work(&mask->rwork, fl_mask_free_work); in fl_mask_put()
454 cls_flower.rule->match.dissector = &f->mask->dissector; in fl_hw_replace_filter()
455 cls_flower.rule->match.mask = &f->mask->key; in fl_hw_replace_filter()
546 rhashtable_remove_fast(&f->mask->ht, &f->ht_node, in __fl_delete()
547 f->mask->filter_ht_params); in __fl_delete()
552 *last = fl_mask_put(head, f->mask); in __fl_delete()
576 struct fl_flow_mask *mask, *next_mask; in fl_destroy() local
580 list_for_each_entry_safe(mask, next_mask, &head->masks, list) { in fl_destroy()
581 list_for_each_entry_safe(f, next, &mask->filters, list) { in fl_destroy()
753 void *mask, int mask_type, int len) in fl_set_key_val() argument
759 memset(mask, 0xff, len); in fl_set_key_val()
761 nla_memcpy(mask, tb[mask_type], len); in fl_set_key_val()
765 struct fl_flow_key *mask, in fl_set_key_port_range() argument
769 TCA_FLOWER_KEY_PORT_DST_MIN, &mask->tp_range.tp_min.dst, in fl_set_key_port_range()
772 TCA_FLOWER_KEY_PORT_DST_MAX, &mask->tp_range.tp_max.dst, in fl_set_key_port_range()
775 TCA_FLOWER_KEY_PORT_SRC_MIN, &mask->tp_range.tp_min.src, in fl_set_key_port_range()
778 TCA_FLOWER_KEY_PORT_SRC_MAX, &mask->tp_range.tp_max.src, in fl_set_key_port_range()
781 if (mask->tp_range.tp_min.dst && mask->tp_range.tp_max.dst && in fl_set_key_port_range()
789 if (mask->tp_range.tp_min.src && mask->tp_range.tp_max.src && in fl_set_key_port_range()
1041 u32 key, mask; in fl_set_key_flags() local
1043 /* mask is mandatory for flags */ in fl_set_key_flags()
1045 NL_SET_ERR_MSG(extack, "Missing flags mask"); in fl_set_key_flags()
1050 mask = be32_to_cpu(nla_get_u32(tb[TCA_FLOWER_KEY_FLAGS_MASK])); in fl_set_key_flags()
1055 fl_set_key_flag(key, mask, flags_key, flags_mask, in fl_set_key_flags()
1057 fl_set_key_flag(key, mask, flags_key, flags_mask, in fl_set_key_flags()
1066 struct flow_dissector_key_ip *mask) in fl_set_key_ip() argument
1073 fl_set_key_val(tb, &key->tos, tos_key, &mask->tos, tos_mask, sizeof(key->tos)); in fl_set_key_ip()
1074 fl_set_key_val(tb, &key->ttl, ttl_key, &mask->ttl, ttl_mask, sizeof(key->ttl)); in fl_set_key_ip()
1096 /* If no mask has been prodived we assume an exact match. */ in fl_set_geneve_opt()
1101 NL_SET_ERR_MSG(extack, "Non-geneve option type for mask"); in fl_set_geneve_opt()
1123 * for the mask. in fl_set_geneve_opt()
1177 NL_SET_ERR_MSG(extack, "Non-vxlan option type for mask"); in fl_set_vxlan_opt()
1215 NL_SET_ERR_MSG(extack, "Non-erspan option type for mask"); in fl_set_erspan_opt()
1265 struct fl_flow_key *mask, in fl_set_enc_opt() argument
1312 /* At the same time we need to parse through the mask in fl_set_enc_opt()
1313 * in order to verify exact and mask attribute lengths. in fl_set_enc_opt()
1315 mask->enc_opts.dst_opt_type = TUNNEL_GENEVE_OPT; in fl_set_enc_opt()
1316 option_len = fl_set_geneve_opt(nla_opt_msk, mask, in fl_set_enc_opt()
1322 mask->enc_opts.len += option_len; in fl_set_enc_opt()
1323 if (key->enc_opts.len != mask->enc_opts.len) { in fl_set_enc_opt()
1324 NL_SET_ERR_MSG(extack, "Key and mask miss aligned"); in fl_set_enc_opt()
1342 /* At the same time we need to parse through the mask in fl_set_enc_opt()
1343 * in order to verify exact and mask attribute lengths. in fl_set_enc_opt()
1345 mask->enc_opts.dst_opt_type = TUNNEL_VXLAN_OPT; in fl_set_enc_opt()
1346 option_len = fl_set_vxlan_opt(nla_opt_msk, mask, in fl_set_enc_opt()
1352 mask->enc_opts.len += option_len; in fl_set_enc_opt()
1353 if (key->enc_opts.len != mask->enc_opts.len) { in fl_set_enc_opt()
1354 NL_SET_ERR_MSG(extack, "Key and mask miss aligned"); in fl_set_enc_opt()
1372 /* At the same time we need to parse through the mask in fl_set_enc_opt()
1373 * in order to verify exact and mask attribute lengths. in fl_set_enc_opt()
1375 mask->enc_opts.dst_opt_type = TUNNEL_ERSPAN_OPT; in fl_set_enc_opt()
1376 option_len = fl_set_erspan_opt(nla_opt_msk, mask, in fl_set_enc_opt()
1382 mask->enc_opts.len += option_len; in fl_set_enc_opt()
1383 if (key->enc_opts.len != mask->enc_opts.len) { in fl_set_enc_opt()
1384 NL_SET_ERR_MSG(extack, "Key and mask miss aligned"); in fl_set_enc_opt()
1397 NL_SET_ERR_MSG(extack, "A mask attribute is invalid"); in fl_set_enc_opt()
1427 struct flow_dissector_key_ct *mask, in fl_set_key_ct() argument
1438 &mask->ct_state, TCA_FLOWER_KEY_CT_STATE_MASK, in fl_set_key_ct()
1441 err = fl_validate_ct_state(key->ct_state & mask->ct_state, in fl_set_key_ct()
1454 &mask->ct_zone, TCA_FLOWER_KEY_CT_ZONE_MASK, in fl_set_key_ct()
1463 &mask->ct_mark, TCA_FLOWER_KEY_CT_MARK_MASK, in fl_set_key_ct()
1472 mask->ct_labels, TCA_FLOWER_KEY_CT_LABELS_MASK, in fl_set_key_ct()
1480 struct fl_flow_key *key, struct fl_flow_key *mask, in fl_set_key() argument
1491 mask->meta.ingress_ifindex = 0xffffffff; in fl_set_key()
1495 mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK, in fl_set_key()
1498 mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK, in fl_set_key()
1508 &key->vlan, &mask->vlan); in fl_set_key()
1517 &key->cvlan, &mask->cvlan); in fl_set_key()
1520 &mask->basic.n_proto, in fl_set_key()
1525 mask->basic.n_proto = cpu_to_be16(~0); in fl_set_key()
1530 mask->basic.n_proto = cpu_to_be16(~0); in fl_set_key()
1537 &mask->basic.ip_proto, TCA_FLOWER_UNSPEC, in fl_set_key()
1539 fl_set_key_ip(tb, false, &key->ip, &mask->ip); in fl_set_key()
1544 mask->control.addr_type = ~0; in fl_set_key()
1546 &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK, in fl_set_key()
1549 &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK, in fl_set_key()
1553 mask->control.addr_type = ~0; in fl_set_key()
1555 &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK, in fl_set_key()
1558 &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK, in fl_set_key()
1564 &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK, in fl_set_key()
1567 &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK, in fl_set_key()
1570 &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK, in fl_set_key()
1574 &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK, in fl_set_key()
1577 &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK, in fl_set_key()
1581 &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK, in fl_set_key()
1584 &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK, in fl_set_key()
1589 &mask->icmp.type, in fl_set_key()
1593 &mask->icmp.code, in fl_set_key()
1599 &mask->icmp.type, in fl_set_key()
1603 &mask->icmp.code, in fl_set_key()
1608 ret = fl_set_key_mpls(tb, &key->mpls, &mask->mpls, extack); in fl_set_key()
1614 &mask->arp.sip, TCA_FLOWER_KEY_ARP_SIP_MASK, in fl_set_key()
1617 &mask->arp.tip, TCA_FLOWER_KEY_ARP_TIP_MASK, in fl_set_key()
1620 &mask->arp.op, TCA_FLOWER_KEY_ARP_OP_MASK, in fl_set_key()
1623 mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK, in fl_set_key()
1626 mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK, in fl_set_key()
1633 ret = fl_set_key_port_range(tb, key, mask, extack); in fl_set_key()
1641 mask->enc_control.addr_type = ~0; in fl_set_key()
1644 &mask->enc_ipv4.src, in fl_set_key()
1649 &mask->enc_ipv4.dst, in fl_set_key()
1657 mask->enc_control.addr_type = ~0; in fl_set_key()
1660 &mask->enc_ipv6.src, in fl_set_key()
1665 &mask->enc_ipv6.dst, in fl_set_key()
1671 &mask->enc_key_id.keyid, TCA_FLOWER_UNSPEC, in fl_set_key()
1675 &mask->enc_tp.src, TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, in fl_set_key()
1679 &mask->enc_tp.dst, TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, in fl_set_key()
1682 fl_set_key_ip(tb, true, &key->enc_ip, &mask->enc_ip); in fl_set_key()
1685 &mask->hash.hash, TCA_FLOWER_KEY_HASH_MASK, in fl_set_key()
1689 ret = fl_set_enc_opt(tb, key, mask, extack); in fl_set_key()
1694 ret = fl_set_key_ct(tb, &key->ct, &mask->ct, extack); in fl_set_key()
1700 &mask->control.flags, extack); in fl_set_key()
1721 static int fl_init_mask_hashtable(struct fl_flow_mask *mask) in fl_init_mask_hashtable() argument
1723 mask->filter_ht_params = fl_ht_params; in fl_init_mask_hashtable()
1724 mask->filter_ht_params.key_len = fl_mask_range(mask); in fl_init_mask_hashtable()
1725 mask->filter_ht_params.key_offset += mask->range.start; in fl_init_mask_hashtable()
1727 return rhashtable_init(&mask->ht, &mask->filter_ht_params); in fl_init_mask_hashtable()
1733 #define FL_KEY_IS_MASKED(mask, member) \ argument
1734 memchr_inv(((char *)mask) + FL_KEY_MEMBER_OFFSET(member), \
1744 #define FL_KEY_SET_IF_MASKED(mask, keys, cnt, id, member) \ argument
1746 if (FL_KEY_IS_MASKED(mask, member)) \
1751 struct fl_flow_key *mask) in fl_init_dissector() argument
1756 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1760 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1762 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1764 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1766 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1768 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1770 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1772 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1774 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1776 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1778 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1780 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1782 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1784 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1786 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1788 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1790 if (FL_KEY_IS_MASKED(mask, enc_ipv4) || in fl_init_dissector()
1791 FL_KEY_IS_MASKED(mask, enc_ipv6)) in fl_init_dissector()
1794 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1796 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1798 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1800 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1802 FL_KEY_SET_IF_MASKED(mask, keys, cnt, in fl_init_dissector()
1809 struct fl_flow_mask *mask) in fl_create_new_mask() argument
1818 fl_mask_copy(newmask, mask); in fl_create_new_mask()
1835 err = rhashtable_replace_fast(&head->ht, &mask->ht_node, in fl_create_new_mask()
1857 struct fl_flow_mask *mask) in fl_check_assign_mask() argument
1864 /* Insert mask as temporary node to prevent concurrent creation of mask in fl_check_assign_mask()
1866 * -EAGAIN because mask's refcnt is zero. in fl_check_assign_mask()
1868 fnew->mask = rhashtable_lookup_get_insert_fast(&head->ht, in fl_check_assign_mask()
1869 &mask->ht_node, in fl_check_assign_mask()
1871 if (!fnew->mask) { in fl_check_assign_mask()
1879 newmask = fl_create_new_mask(head, mask); in fl_check_assign_mask()
1885 fnew->mask = newmask; in fl_check_assign_mask()
1887 } else if (IS_ERR(fnew->mask)) { in fl_check_assign_mask()
1888 ret = PTR_ERR(fnew->mask); in fl_check_assign_mask()
1889 } else if (fold && fold->mask != fnew->mask) { in fl_check_assign_mask()
1891 } else if (!refcount_inc_not_zero(&fnew->mask->refcnt)) { in fl_check_assign_mask()
1892 /* Mask was deleted concurrently, try again */ in fl_check_assign_mask()
1899 rhashtable_remove_fast(&head->ht, &mask->ht_node, in fl_check_assign_mask()
1905 struct cls_fl_filter *f, struct fl_flow_mask *mask, in fl_set_parms() argument
1927 err = fl_set_key(net, tb, &f->key, &mask->key, extack); in fl_set_parms()
1931 fl_mask_update_range(mask); in fl_set_parms()
1932 fl_set_masked_key(&f->mkey, &f->key, mask); in fl_set_parms()
1934 if (!fl_mask_fits_tmplt(tmplt, mask)) { in fl_set_parms()
1935 NL_SET_ERR_MSG_MOD(extack, "Mask does not fit the template"); in fl_set_parms()
1946 struct fl_flow_mask *mask = fnew->mask; in fl_ht_insert_unique() local
1949 err = rhashtable_lookup_insert_fast(&mask->ht, in fl_ht_insert_unique()
1951 mask->filter_ht_params); in fl_ht_insert_unique()
1973 struct fl_flow_mask *mask; in fl_change() local
1983 mask = kzalloc(sizeof(struct fl_flow_mask), GFP_KERNEL); in fl_change()
1984 if (!mask) { in fl_change()
2026 err = fl_set_parms(net, tp, fnew, mask, base, tb, tca[TCA_RATE], ovr, in fl_change()
2031 err = fl_check_assign_mask(head, fnew, fold, mask); in fl_change()
2069 fnew->mask->filter_ht_params; in fl_change()
2071 err = rhashtable_insert_fast(&fnew->mask->ht, in fl_change()
2080 rhashtable_remove_fast(&fold->mask->ht, in fl_change()
2082 fold->mask->filter_ht_params); in fl_change()
2089 fl_mask_put(head, fold->mask); in fl_change()
2122 list_add_tail_rcu(&fnew->list, &fnew->mask->filters); in fl_change()
2129 tcf_queue_work(&mask->rwork, fl_uninit_mask_free_work); in fl_change()
2140 rhashtable_remove_fast(&fnew->mask->ht, &fnew->ht_node, in fl_change()
2141 fnew->mask->filter_ht_params); in fl_change()
2143 fl_mask_put(head, fnew->mask); in fl_change()
2149 tcf_queue_work(&mask->rwork, fl_uninit_mask_free_work); in fl_change()
2253 cls_flower.rule->match.dissector = &f->mask->dissector; in fl_reoffload()
2254 cls_flower.rule->match.mask = &f->mask->key; in fl_reoffload()
2326 cls_flower.rule->match.mask = &tmplt->mask; in fl_hw_create_tmplt()
2376 err = fl_set_key(net, tb, &tmplt->dummy_key, &tmplt->mask, extack); in fl_tmplt_create()
2380 fl_init_dissector(&tmplt->dissector, &tmplt->mask); in fl_tmplt_create()
2406 void *mask, int mask_type, int len) in fl_dump_key_val() argument
2410 if (!memchr_inv(mask, 0, len)) in fl_dump_key_val()
2416 err = nla_put(skb, mask_type, len, mask); in fl_dump_key_val()
2424 struct fl_flow_key *mask) in fl_dump_key_port_range() argument
2428 &mask->tp_range.tp_min.dst, TCA_FLOWER_UNSPEC, in fl_dump_key_port_range()
2432 &mask->tp_range.tp_max.dst, TCA_FLOWER_UNSPEC, in fl_dump_key_port_range()
2436 &mask->tp_range.tp_min.src, TCA_FLOWER_UNSPEC, in fl_dump_key_port_range()
2440 &mask->tp_range.tp_max.src, TCA_FLOWER_UNSPEC, in fl_dump_key_port_range()
2581 struct flow_dissector_key_ip *mask) in fl_dump_key_ip() argument
2588 if (fl_dump_key_val(skb, &key->tos, tos_key, &mask->tos, tos_mask, sizeof(key->tos)) || in fl_dump_key_ip()
2589 fl_dump_key_val(skb, &key->ttl, ttl_key, &mask->ttl, ttl_mask, sizeof(key->ttl))) in fl_dump_key_ip()
2632 u32 key, mask; in fl_dump_key_flags() local
2640 mask = 0; in fl_dump_key_flags()
2642 fl_get_key_flag(flags_key, flags_mask, &key, &mask, in fl_dump_key_flags()
2644 fl_get_key_flag(flags_key, flags_mask, &key, &mask, in fl_dump_key_flags()
2649 _mask = cpu_to_be32(mask); in fl_dump_key_flags()
2749 struct flow_dissector_key_ct *mask) in fl_dump_key_ct() argument
2753 &mask->ct_state, TCA_FLOWER_KEY_CT_STATE_MASK, in fl_dump_key_ct()
2759 &mask->ct_zone, TCA_FLOWER_KEY_CT_ZONE_MASK, in fl_dump_key_ct()
2765 &mask->ct_mark, TCA_FLOWER_KEY_CT_MARK_MASK, in fl_dump_key_ct()
2771 &mask->ct_labels, TCA_FLOWER_KEY_CT_LABELS_MASK, in fl_dump_key_ct()
2835 struct fl_flow_key *key, struct fl_flow_key *mask) in fl_dump_key() argument
2837 if (mask->meta.ingress_ifindex) { in fl_dump_key()
2846 mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK, in fl_dump_key()
2849 mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK, in fl_dump_key()
2852 &mask->basic.n_proto, TCA_FLOWER_UNSPEC, in fl_dump_key()
2856 if (fl_dump_key_mpls(skb, &key->mpls, &mask->mpls)) in fl_dump_key()
2860 TCA_FLOWER_KEY_VLAN_PRIO, &key->vlan, &mask->vlan)) in fl_dump_key()
2865 &key->cvlan, &mask->cvlan) || in fl_dump_key()
2866 (mask->cvlan.vlan_tpid && in fl_dump_key()
2871 if (mask->basic.n_proto) { in fl_dump_key()
2872 if (mask->cvlan.vlan_eth_type) { in fl_dump_key()
2876 } else if (mask->vlan.vlan_eth_type) { in fl_dump_key()
2886 &mask->basic.ip_proto, TCA_FLOWER_UNSPEC, in fl_dump_key()
2888 fl_dump_key_ip(skb, false, &key->ip, &mask->ip))) in fl_dump_key()
2893 &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK, in fl_dump_key()
2896 &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK, in fl_dump_key()
2901 &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK, in fl_dump_key()
2904 &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK, in fl_dump_key()
2910 &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK, in fl_dump_key()
2913 &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK, in fl_dump_key()
2916 &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK, in fl_dump_key()
2921 &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK, in fl_dump_key()
2924 &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK, in fl_dump_key()
2929 &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK, in fl_dump_key()
2932 &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK, in fl_dump_key()
2938 TCA_FLOWER_KEY_ICMPV4_TYPE, &mask->icmp.type, in fl_dump_key()
2942 TCA_FLOWER_KEY_ICMPV4_CODE, &mask->icmp.code, in fl_dump_key()
2949 TCA_FLOWER_KEY_ICMPV6_TYPE, &mask->icmp.type, in fl_dump_key()
2953 TCA_FLOWER_KEY_ICMPV6_CODE, &mask->icmp.code, in fl_dump_key()
2960 TCA_FLOWER_KEY_ARP_SIP, &mask->arp.sip, in fl_dump_key()
2964 TCA_FLOWER_KEY_ARP_TIP, &mask->arp.tip, in fl_dump_key()
2968 TCA_FLOWER_KEY_ARP_OP, &mask->arp.op, in fl_dump_key()
2972 mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK, in fl_dump_key()
2975 mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK, in fl_dump_key()
2982 fl_dump_key_port_range(skb, key, mask)) in fl_dump_key()
2987 TCA_FLOWER_KEY_ENC_IPV4_SRC, &mask->enc_ipv4.src, in fl_dump_key()
2991 TCA_FLOWER_KEY_ENC_IPV4_DST, &mask->enc_ipv4.dst, in fl_dump_key()
2997 TCA_FLOWER_KEY_ENC_IPV6_SRC, &mask->enc_ipv6.src, in fl_dump_key()
3002 &mask->enc_ipv6.dst, in fl_dump_key()
3008 &mask->enc_key_id, TCA_FLOWER_UNSPEC, in fl_dump_key()
3012 &mask->enc_tp.src, in fl_dump_key()
3017 &mask->enc_tp.dst, in fl_dump_key()
3020 fl_dump_key_ip(skb, true, &key->enc_ip, &mask->enc_ip) || in fl_dump_key()
3021 fl_dump_key_enc_opt(skb, &key->enc_opts, &mask->enc_opts)) in fl_dump_key()
3024 if (fl_dump_key_ct(skb, &key->ct, &mask->ct)) in fl_dump_key()
3027 if (fl_dump_key_flags(skb, key->control.flags, mask->control.flags)) in fl_dump_key()
3031 &mask->hash.hash, TCA_FLOWER_KEY_HASH_MASK, in fl_dump_key()
3046 struct fl_flow_key *key, *mask; in fl_dump() local
3065 mask = &f->mask->key; in fl_dump()
3068 if (fl_dump_key(skb, net, key, mask)) in fl_dump()
3144 struct fl_flow_key *key, *mask; in fl_tmplt_dump() local
3152 mask = &tmplt->mask; in fl_tmplt_dump()
3154 if (fl_dump_key(skb, net, key, mask)) in fl_tmplt_dump()