Lines Matching +full:common +full:- +full:rules

1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
2 /* Copyright (c) 2019-2022 Marvell International Ltd. All rights reserved */
21 err = prestera_flower_prio_get(block, f->common.chain_index, in prestera_mall_prio_check()
23 if (err == -ENOENT) in prestera_mall_prio_check()
28 NL_SET_ERR_MSG(f->common.extack, "Failed to get flower priorities"); in prestera_mall_prio_check()
32 if (f->common.prio <= flower_prio_max && !block->ingress) { in prestera_mall_prio_check()
33 NL_SET_ERR_MSG(f->common.extack, "Failed to add in front of existing flower rules"); in prestera_mall_prio_check()
34 return -EOPNOTSUPP; in prestera_mall_prio_check()
36 if (f->common.prio >= flower_prio_min && block->ingress) { in prestera_mall_prio_check()
37 NL_SET_ERR_MSG(f->common.extack, "Failed to add behind of existing flower rules"); in prestera_mall_prio_check()
38 return -EOPNOTSUPP; in prestera_mall_prio_check()
47 if (!block->mall.bound) in prestera_mall_prio_get()
48 return -ENOENT; in prestera_mall_prio_get()
50 *prio_min = block->mall.prio_min; in prestera_mall_prio_get()
51 *prio_max = block->mall.prio_max; in prestera_mall_prio_get()
58 block->mall.prio_min = min(block->mall.prio_min, f->common.prio); in prestera_mall_prio_update()
59 block->mall.prio_max = max(block->mall.prio_max, f->common.prio); in prestera_mall_prio_update()
66 __be16 protocol = f->common.protocol; in prestera_mall_replace()
71 if (!flow_offload_has_one_action(&f->rule->action)) { in prestera_mall_replace()
72 NL_SET_ERR_MSG(f->common.extack, in prestera_mall_replace()
74 return -EOPNOTSUPP; in prestera_mall_replace()
77 act = &f->rule->action.entries[0]; in prestera_mall_replace()
79 if (!prestera_netdev_check(act->dev)) { in prestera_mall_replace()
80 NL_SET_ERR_MSG(f->common.extack, in prestera_mall_replace()
82 return -EINVAL; in prestera_mall_replace()
84 if (!tc_cls_can_offload_and_chain0(act->dev, &f->common)) in prestera_mall_replace()
85 return -EOPNOTSUPP; in prestera_mall_replace()
86 if (act->id != FLOW_ACTION_MIRRED) in prestera_mall_replace()
87 return -EOPNOTSUPP; in prestera_mall_replace()
89 return -EOPNOTSUPP; in prestera_mall_replace()
95 port = netdev_priv(act->dev); in prestera_mall_replace()
97 list_for_each_entry(binding, &block->binding_list, list) { in prestera_mall_replace()
98 err = prestera_span_rule_add(binding, port, block->ingress); in prestera_mall_replace()
99 if (err == -EEXIST) in prestera_mall_replace()
107 block->mall.bound = true; in prestera_mall_replace()
112 &block->binding_list, list) in prestera_mall_replace()
113 prestera_span_rule_del(binding, block->ingress); in prestera_mall_replace()
121 list_for_each_entry(binding, &block->binding_list, list) in prestera_mall_destroy()
122 prestera_span_rule_del(binding, block->ingress); in prestera_mall_destroy()
124 block->mall.prio_min = UINT_MAX; in prestera_mall_destroy()
125 block->mall.prio_max = 0; in prestera_mall_destroy()
126 block->mall.bound = false; in prestera_mall_destroy()