Lines Matching refs:ruleset

75 	struct mlxsw_sp_acl_ruleset *ruleset;  member
142 mlxsw_sp_acl_ruleset_is_singular(const struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_is_singular() argument
145 return ruleset->ref_count == 2; in mlxsw_sp_acl_ruleset_is_singular()
153 struct mlxsw_sp_acl_ruleset *ruleset = block->ruleset_zero; in mlxsw_sp_acl_ruleset_bind() local
154 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_bind()
156 return ops->ruleset_bind(mlxsw_sp, ruleset->priv, in mlxsw_sp_acl_ruleset_bind()
165 struct mlxsw_sp_acl_ruleset *ruleset = block->ruleset_zero; in mlxsw_sp_acl_ruleset_unbind() local
166 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_unbind()
168 ops->ruleset_unbind(mlxsw_sp, ruleset->priv, in mlxsw_sp_acl_ruleset_unbind()
179 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_ruleset_block_bind() argument
185 block->ruleset_zero = ruleset; in mlxsw_sp_acl_ruleset_block_bind()
204 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_ruleset_block_unbind() argument
304 struct mlxsw_sp_acl_ruleset *ruleset; in mlxsw_sp_acl_ruleset_create() local
308 alloc_size = sizeof(*ruleset) + ops->ruleset_priv_size; in mlxsw_sp_acl_ruleset_create()
309 ruleset = kzalloc(alloc_size, GFP_KERNEL); in mlxsw_sp_acl_ruleset_create()
310 if (!ruleset) in mlxsw_sp_acl_ruleset_create()
312 ruleset->ref_count = 1; in mlxsw_sp_acl_ruleset_create()
313 ruleset->ht_key.block = block; in mlxsw_sp_acl_ruleset_create()
314 ruleset->ht_key.chain_index = chain_index; in mlxsw_sp_acl_ruleset_create()
315 ruleset->ht_key.ops = ops; in mlxsw_sp_acl_ruleset_create()
317 err = rhashtable_init(&ruleset->rule_ht, &mlxsw_sp_acl_rule_ht_params); in mlxsw_sp_acl_ruleset_create()
321 err = ops->ruleset_add(mlxsw_sp, &acl->tcam, ruleset->priv, in mlxsw_sp_acl_ruleset_create()
326 err = rhashtable_insert_fast(&acl->ruleset_ht, &ruleset->ht_node, in mlxsw_sp_acl_ruleset_create()
331 return ruleset; in mlxsw_sp_acl_ruleset_create()
334 ops->ruleset_del(mlxsw_sp, ruleset->priv); in mlxsw_sp_acl_ruleset_create()
336 rhashtable_destroy(&ruleset->rule_ht); in mlxsw_sp_acl_ruleset_create()
338 kfree(ruleset); in mlxsw_sp_acl_ruleset_create()
343 struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_destroy() argument
345 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_destroy()
348 rhashtable_remove_fast(&acl->ruleset_ht, &ruleset->ht_node, in mlxsw_sp_acl_ruleset_destroy()
350 ops->ruleset_del(mlxsw_sp, ruleset->priv); in mlxsw_sp_acl_ruleset_destroy()
351 rhashtable_destroy(&ruleset->rule_ht); in mlxsw_sp_acl_ruleset_destroy()
352 kfree(ruleset); in mlxsw_sp_acl_ruleset_destroy()
355 static void mlxsw_sp_acl_ruleset_ref_inc(struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_ref_inc() argument
357 ruleset->ref_count++; in mlxsw_sp_acl_ruleset_ref_inc()
361 struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_ref_dec() argument
363 if (--ruleset->ref_count) in mlxsw_sp_acl_ruleset_ref_dec()
365 mlxsw_sp_acl_ruleset_destroy(mlxsw_sp, ruleset); in mlxsw_sp_acl_ruleset_ref_dec()
390 struct mlxsw_sp_acl_ruleset *ruleset; in mlxsw_sp_acl_ruleset_lookup() local
395 ruleset = __mlxsw_sp_acl_ruleset_lookup(acl, block, chain_index, ops); in mlxsw_sp_acl_ruleset_lookup()
396 if (!ruleset) in mlxsw_sp_acl_ruleset_lookup()
398 return ruleset; in mlxsw_sp_acl_ruleset_lookup()
409 struct mlxsw_sp_acl_ruleset *ruleset; in mlxsw_sp_acl_ruleset_get() local
415 ruleset = __mlxsw_sp_acl_ruleset_lookup(acl, block, chain_index, ops); in mlxsw_sp_acl_ruleset_get()
416 if (ruleset) { in mlxsw_sp_acl_ruleset_get()
417 mlxsw_sp_acl_ruleset_ref_inc(ruleset); in mlxsw_sp_acl_ruleset_get()
418 return ruleset; in mlxsw_sp_acl_ruleset_get()
425 struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_put() argument
427 mlxsw_sp_acl_ruleset_ref_dec(mlxsw_sp, ruleset); in mlxsw_sp_acl_ruleset_put()
430 u16 mlxsw_sp_acl_ruleset_group_id(struct mlxsw_sp_acl_ruleset *ruleset) in mlxsw_sp_acl_ruleset_group_id() argument
432 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_ruleset_group_id()
434 return ops->ruleset_group_id(ruleset->priv); in mlxsw_sp_acl_ruleset_group_id()
624 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_rule_create() argument
628 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_create()
632 mlxsw_sp_acl_ruleset_ref_inc(ruleset); in mlxsw_sp_acl_rule_create()
640 rule->ruleset = ruleset; in mlxsw_sp_acl_rule_create()
653 mlxsw_sp_acl_ruleset_ref_dec(mlxsw_sp, ruleset); in mlxsw_sp_acl_rule_create()
660 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_destroy() local
664 mlxsw_sp_acl_ruleset_ref_dec(mlxsw_sp, ruleset); in mlxsw_sp_acl_rule_destroy()
670 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_add() local
671 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_add()
674 err = ops->rule_add(mlxsw_sp, ruleset->priv, rule->priv, rule->rulei); in mlxsw_sp_acl_rule_add()
678 err = rhashtable_insert_fast(&ruleset->rule_ht, &rule->ht_node, in mlxsw_sp_acl_rule_add()
683 if (!ruleset->ht_key.chain_index && in mlxsw_sp_acl_rule_add()
684 mlxsw_sp_acl_ruleset_is_singular(ruleset)) { in mlxsw_sp_acl_rule_add()
689 err = mlxsw_sp_acl_ruleset_block_bind(mlxsw_sp, ruleset, in mlxsw_sp_acl_rule_add()
690 ruleset->ht_key.block); in mlxsw_sp_acl_rule_add()
696 ruleset->ht_key.block->rule_count++; in mlxsw_sp_acl_rule_add()
700 rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node, in mlxsw_sp_acl_rule_add()
710 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_del() local
711 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_del()
713 ruleset->ht_key.block->rule_count--; in mlxsw_sp_acl_rule_del()
715 if (!ruleset->ht_key.chain_index && in mlxsw_sp_acl_rule_del()
716 mlxsw_sp_acl_ruleset_is_singular(ruleset)) in mlxsw_sp_acl_rule_del()
717 mlxsw_sp_acl_ruleset_block_unbind(mlxsw_sp, ruleset, in mlxsw_sp_acl_rule_del()
718 ruleset->ht_key.block); in mlxsw_sp_acl_rule_del()
719 rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node, in mlxsw_sp_acl_rule_del()
726 struct mlxsw_sp_acl_ruleset *ruleset, in mlxsw_sp_acl_rule_lookup() argument
729 return rhashtable_lookup_fast(&ruleset->rule_ht, &cookie, in mlxsw_sp_acl_rule_lookup()
742 struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset; in mlxsw_sp_acl_rule_activity_update() local
743 const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; in mlxsw_sp_acl_rule_activity_update()