How to generate clock from the driver

In reply to Heisenberg:

interface itf;
  bit inside_clk;
  int inside_clk_period=5ns;
  bit outside_clk;

  // clock generated inside interface
  always #(inside_clk_period/2) inside_clk = ! inside_clk;

endinterface

class driver;
...
virtual itf vif;
int period1,period2; // assume these are set from some configuration
function void driver::start_of_simulation(...);
   vif.inside_clk_period = period1;
endfunction
task driver::run_phase(...);
  fork // clock generated in driver
    forever #(period2/2) vif.outside_clk = ! vif.outside_clk;
  join_none
  ...
endtask

endclass