rewrite
rewrite:
goto rewrite;
&action->rewrite->num_of_actions);
action->rewrite->data = hw_actions;
action->rewrite->dmn = dmn;
struct mlx5dr_domain *dmn = action->rewrite->dmn;
action->rewrite->allow_rx = 0;
action->rewrite->allow_tx = 0;
if (!action->rewrite->allow_rx && !action->rewrite->allow_tx) {
struct mlx5dr_domain *dmn = action->rewrite->dmn;
struct mlx5dr_domain *dmn = action->rewrite->dmn;
action->rewrite->allow_rx = 0;
action->rewrite->allow_tx = 0;
if (!action->rewrite->allow_rx && !action->rewrite->allow_tx) {
struct mlx5dr_domain *dmn = action->rewrite->dmn;
struct mlx5dr_domain *dmn = action->rewrite->dmn;
action->rewrite->allow_rx = 1;
action->rewrite->allow_tx = 1;
action->rewrite->modify_ttl = modify_ttl;
action->rewrite->data = (u8 *)hw_actions;
action->rewrite->num_of_actions = num_hw_actions;
action->rewrite->single_action_opt = true;
action->rewrite->single_action_opt = false;
action->rewrite->dmn = dmn;
kfree(action->rewrite->data);
refcount_dec(&action->rewrite->dmn->refcount);
if (!action->rewrite->single_action_opt)
kfree(action->rewrite->data);
refcount_dec(&action->rewrite->dmn->refcount);
if (action->rewrite->ptrn && action->rewrite->arg) {
attr.decap_index = mlx5dr_arg_get_obj_id(action->rewrite->arg);
attr.decap_actions = action->rewrite->ptrn->num_of_actions;
attr.decap_pat_idx = action->rewrite->ptrn->index;
attr.decap_index = action->rewrite->index;
attr.decap_actions = action->rewrite->num_of_actions;
if (action->rewrite->single_action_opt) {
attr.modify_actions = action->rewrite->num_of_actions;
attr.single_modify_action = action->rewrite->data;
if (action->rewrite->ptrn && action->rewrite->arg) {
mlx5dr_arg_get_obj_id(action->rewrite->arg);
attr.modify_actions = action->rewrite->ptrn->num_of_actions;
attr.modify_pat_idx = action->rewrite->ptrn->index;
attr.modify_index = action->rewrite->index;
attr.modify_actions = action->rewrite->num_of_actions;
if (action->rewrite->modify_ttl)
struct mlx5dr_ptrn_obj *ptrn = action->rewrite->ptrn;
struct mlx5dr_arg_obj *arg = action->rewrite->arg;
u8 *rewrite_data = action->rewrite->data;
ptrn_arg = !action->rewrite->single_action_opt && ptrn && arg;
rule_id, action->rewrite->index,
action->rewrite->single_action_opt,
ptrn_arg ? action->rewrite->num_of_actions : 0,
for (i = 0; i < action->rewrite->num_of_actions; i++) {
(action->rewrite->ptrn && action->rewrite->arg) ?
mlx5dr_arg_get_obj_id(action->rewrite->arg) :
action->rewrite->index);
send_info.write.addr = (uintptr_t)action->rewrite->data;
send_info.write.length = action->rewrite->num_of_actions *
mlx5dr_icm_pool_get_chunk_mr_addr(action->rewrite->chunk);
send_info.rkey = mlx5dr_icm_pool_get_chunk_rkey(action->rewrite->chunk);
struct mlx5dr_domain *dmn = action->rewrite->dmn;
chunk_size = ilog2(roundup_pow_of_two(action->rewrite->num_of_actions));
action->rewrite->chunk = mlx5dr_icm_alloc_chunk(dmn->action_icm_pool,
if (!action->rewrite->chunk)
action->rewrite->index = (mlx5dr_icm_pool_get_chunk_icm_addr(action->rewrite->chunk) -
ret = mlx5dr_send_postsend_action(action->rewrite->dmn, action);
mlx5dr_icm_free_chunk(action->rewrite->chunk);
mlx5dr_icm_free_chunk(action->rewrite->chunk);
struct mlx5dr_domain *dmn = action->rewrite->dmn;
struct mlx5dr_domain *dmn = action->rewrite->dmn;
ptrn_mgr = action->rewrite->dmn->ptrn_mgr;
action->rewrite->arg = mlx5dr_arg_get_obj(action->rewrite->dmn->arg_mgr,
action->rewrite->num_of_actions,
action->rewrite->data);
if (!action->rewrite->arg) {
mlx5dr_err(action->rewrite->dmn, "Failed allocating args for modify header\n");
action->rewrite->ptrn =
action->rewrite->num_of_actions,
action->rewrite->data);
if (!action->rewrite->ptrn) {
mlx5dr_err(action->rewrite->dmn, "Failed to get pattern\n");
mlx5dr_arg_put_obj(action->rewrite->dmn->arg_mgr,
action->rewrite->arg);
mlx5dr_ptrn_cache_put_pattern(action->rewrite->dmn->ptrn_mgr,
action->rewrite->ptrn);
mlx5dr_arg_put_obj(action->rewrite->dmn->arg_mgr,
action->rewrite->arg);
struct mlx5dr_action_rewrite *rewrite;
return rewrite(skb, old_ip, new_ip, 1);