SHARED_ACTION_CREATE_ID,
        SHARED_ACTION_INGRESS,
        SHARED_ACTION_EGRESS,
+       SHARED_ACTION_TRANSFER,
        SHARED_ACTION_SPEC,
 
        /* Shared action destroy arguments */
        SHARED_ACTION_CREATE_ID,
        SHARED_ACTION_INGRESS,
        SHARED_ACTION_EGRESS,
+       SHARED_ACTION_TRANSFER,
        SHARED_ACTION_SPEC,
        ZERO,
 };
                .next = NEXT(next_sa_create_attr),
                .call = parse_sa,
        },
+       [SHARED_ACTION_TRANSFER] = {
+               .name = "transfer",
+               .help = "affect rule to transfer",
+               .next = NEXT(next_sa_create_attr),
+               .call = parse_sa,
+       },
        [SHARED_ACTION_SPEC] = {
                .name = "action",
                .help = "specify action to share",
        case SHARED_ACTION_INGRESS:
                out->args.vc.attr.ingress = 1;
                return len;
+       case SHARED_ACTION_TRANSFER:
+               out->args.vc.attr.transfer = 1;
+               return len;
        default:
                return -1;
        }
                                &((const struct rte_flow_shared_action_conf) {
                                        .ingress = in->args.vc.attr.ingress,
                                        .egress = in->args.vc.attr.egress,
+                                       .transfer = in->args.vc.attr.transfer,
                                }),
                                in->args.vc.actions);
                break;
 
 shared action ID. It is bound to ``rte_flow_shared_action_create()``::
 
    flow shared_action {port_id} create [action_id {shared_action_id}]
-      [ingress] [egress] action {action} / end
+      [ingress] [egress] [transfer] action {action} / end
 
 If successful, it will show::