Lines Matching full:rule
101 static void efx_tc_delete_rule(struct efx_nic *efx, struct efx_tc_flow_rule *rule) in efx_tc_delete_rule() argument
103 efx_mae_delete_rule(efx, rule->fw_id); in efx_tc_delete_rule()
106 efx_tc_free_action_set_list(efx, &rule->acts, true); in efx_tc_delete_rule()
107 rule->fw_id = MC_CMD_MAE_ACTION_RULE_INSERT_OUT_ACTION_RULE_ID_NULL; in efx_tc_delete_rule()
112 struct efx_tc_flow_rule *rule = ptr; in efx_tc_flow_free() local
116 "tc rule %lx still present at teardown, removing\n", in efx_tc_flow_free()
117 rule->cookie); in efx_tc_flow_free()
119 efx_mae_delete_rule(efx, rule->fw_id); in efx_tc_flow_free()
122 efx_tc_free_action_set_list(efx, &rule->acts, true); in efx_tc_flow_free()
124 kfree(rule); in efx_tc_flow_free()
128 struct flow_rule *rule, in efx_tc_flower_parse_match() argument
132 struct flow_dissector *dissector = rule->match.dissector; in efx_tc_flower_parse_match()
134 if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CONTROL)) { in efx_tc_flower_parse_match()
137 flow_rule_match_control(rule, &fm); in efx_tc_flower_parse_match()
154 if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_BASIC)) { in efx_tc_flower_parse_match()
157 flow_rule_match_basic(rule, &fm); in efx_tc_flower_parse_match()
178 struct efx_tc_flow_rule *rule = NULL, *old; in efx_tc_flower_replace() local
195 /* Might be a tunnel decap rule from an indirect block. in efx_tc_flower_replace()
236 rule = kzalloc(sizeof(*rule), GFP_USER); in efx_tc_flower_replace()
237 if (!rule) in efx_tc_flower_replace()
239 INIT_LIST_HEAD(&rule->acts.list); in efx_tc_flower_replace()
240 rule->cookie = tc->cookie; in efx_tc_flower_replace()
242 &rule->linkage, in efx_tc_flower_replace()
246 "Already offloaded rule (cookie %lx)\n", tc->cookie); in efx_tc_flower_replace()
248 NL_SET_ERR_MSG_MOD(extack, "Rule already offloaded"); in efx_tc_flower_replace()
276 list_add_tail(&act->list, &rule->acts.list); in efx_tc_flower_replace()
300 list_add_tail(&act->list, &rule->acts.list); in efx_tc_flower_replace()
323 /* Rule applies to traffic from the wire, in efx_tc_flower_replace()
328 /* Representor, so rule applies to traffic from in efx_tc_flower_replace()
340 list_add_tail(&act->list, &rule->acts.list); in efx_tc_flower_replace()
348 rule->match = match; in efx_tc_flower_replace()
350 rc = efx_mae_alloc_action_set_list(efx, &rule->acts); in efx_tc_flower_replace()
355 rc = efx_mae_insert_rule(efx, &rule->match, EFX_TC_PRIO_TC, in efx_tc_flower_replace()
356 rule->acts.fw_id, &rule->fw_id); in efx_tc_flower_replace()
358 EFX_TC_ERR_MSG(efx, extack, "Failed to insert rule in hw"); in efx_tc_flower_replace()
364 efx_mae_free_action_set_list(efx, &rule->acts); in efx_tc_flower_replace()
366 /* We failed to insert the rule, so free up any entries we created in in efx_tc_flower_replace()
371 if (rule) { in efx_tc_flower_replace()
373 &rule->linkage, in efx_tc_flower_replace()
375 efx_tc_free_action_set_list(efx, &rule->acts, false); in efx_tc_flower_replace()
377 kfree(rule); in efx_tc_flower_replace()
386 struct efx_tc_flow_rule *rule; in efx_tc_flower_destroy() local
388 rule = rhashtable_lookup_fast(&efx->tc->match_action_ht, &tc->cookie, in efx_tc_flower_destroy()
390 if (!rule) { in efx_tc_flower_destroy()
404 efx_tc_delete_rule(efx, rule); in efx_tc_flower_destroy()
406 rhashtable_remove_fast(&efx->tc->match_action_ht, &rule->linkage, in efx_tc_flower_destroy()
408 netif_dbg(efx, drv, efx->net_dev, "Removed filter %lx\n", rule->cookie); in efx_tc_flower_destroy()
409 kfree(rule); in efx_tc_flower_destroy()
438 u32 eg_port, struct efx_tc_flow_rule *rule) in efx_tc_configure_default_rule() argument
440 struct efx_tc_action_set_list *acts = &rule->acts; in efx_tc_configure_default_rule()
441 struct efx_tc_match *match = &rule->match; in efx_tc_configure_default_rule()
461 acts->fw_id, &rule->fw_id); in efx_tc_configure_default_rule()
477 struct efx_tc_flow_rule *rule = &efx->tc->dflt.pf; in efx_tc_configure_default_rule_pf() local
482 return efx_tc_configure_default_rule(efx, ing_port, eg_port, rule); in efx_tc_configure_default_rule_pf()
487 struct efx_tc_flow_rule *rule = &efx->tc->dflt.wire; in efx_tc_configure_default_rule_wire() local
492 return efx_tc_configure_default_rule(efx, ing_port, eg_port, rule); in efx_tc_configure_default_rule_wire()
497 struct efx_tc_flow_rule *rule = &efv->dflt; in efx_tc_configure_default_rule_rep() local
503 return efx_tc_configure_default_rule(efx, ing_port, eg_port, rule); in efx_tc_configure_default_rule_rep()
507 struct efx_tc_flow_rule *rule) in efx_tc_deconfigure_default_rule() argument
509 if (rule->fw_id != MC_CMD_MAE_ACTION_RULE_INSERT_OUT_ACTION_RULE_ID_NULL) in efx_tc_deconfigure_default_rule()
510 efx_tc_delete_rule(efx, rule); in efx_tc_deconfigure_default_rule()
511 rule->fw_id = MC_CMD_MAE_ACTION_RULE_INSERT_OUT_ACTION_RULE_ID_NULL; in efx_tc_deconfigure_default_rule()