Where does 'req' come from in `uvm_do()

Hi.

I’m confusing and found bunch of usage as ‘uvm_do(req)’ in UVM code. but where does ‘req’ come from?
For example, I found ‘req’ is used as

virtual task body();
  begin
    uvm_report_info("YOUR_SEQUENCE", "Executing", UVM_LOW);                         
      `uvm_do(req)
      `uvm_do_with(req, {....;})                                                  
  end
endtask : body

Would you please let me know what the ‘req’ is and where does it come from?

In reply to UVM_LOVE:

It is declared in the base class uvm_sequence.

BTW, we recommend against using the `uvm_do macros. See

https://verificationacademy.com/forums/uvm/startitem/finishitem-versus-uvmdo-macros
https://verificationacademy.com/forums/uvm/why-it-better-avoid-uvmdo-macro-body-task-why-using-startitem-and-finishitem-good-prctice-please-explain

https://verificationacademy.com/search/forum/uvm_do%20macros%20start_item?solrsort=score%20desc

In reply to dave_59:

In reply to UVM_LOVE:
It is declared in the base class uvm_sequence.
BTW, we recommend against using the `uvm_do macros. See
Start_item/finish_item versus `uvm_do macros - UVM - Verification Academy
https://verificationacademy.com/forums/uvm/why-it-better-avoid-uvmdo-macro-body-task-why-using-startitem-and-finishitem-good-prctice-please-explain
https://verificationacademy.com/search/forum/uvm_do%20macros%20start_item?solrsort=score%20desc

Ok I’ll not use again 'uvm_do.
BTW, if you don’t mind, would you little a bit more let me know about the ‘req’? What is the purpose and why do we use?

In reply to UVM_LOVE:

“req” is short for “Request” and comes from Transaction Level Modeling (TLM) terminology. “req” holds a requested transaction object that we send to the driver. We are REQuesting the driver to wiggle the interface pins that representing the req transaction that was just sent.