#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <getopt.h>
#include <xenctrl.h>

void dump_sedf(void)
{
  int ret, sched_id, domid;
  dom0_op_t op;                        /* dom0 op we'll build             */
  int xc_handle = xc_interface_open();

  op.cmd = DOM0_SCHED_ID;
  op.interface_version = DOM0_INTERFACE_VERSION;
  ret = xc_dom0_op(xc_handle, &op);
  if ( ret != 0 ) {
    perror("Failure to get scheduler ID from Xen");
    exit(1);
  }
  sched_id = op.u.sched_id.sched_id;


  for (domid=0; domid <32; domid++) {
    op.cmd = DOM0_ADJUSTDOM;
    op.interface_version = DOM0_INTERFACE_VERSION;
    op.u.adjustdom.direction = SCHED_INFO_GET;
    op.u.adjustdom.domain = domid;
    op.u.adjustdom.sched_id = sched_id;
    op.u.adjustdom.u.sedf.period = 0;
    op.u.adjustdom.u.sedf.slice = 0;
    op.u.adjustdom.u.sedf.extratime = 0;
    op.u.adjustdom.u.sedf.latency = 0;
    op.u.adjustdom.u.sedf.weight = 0;
    
    ret = xc_dom0_op(xc_handle, &op);
    if ( ret != 0 ) {
      continue;
    }

    printf("Domina#%d: slice = %lld, period = %lld, extratime = %u, latency = %lld, weight = %u\n", 
	   domid,
	   op.u.adjustdom.u.sedf.slice, 
	   op.u.adjustdom.u.sedf.period, 
	   op.u.adjustdom.u.sedf.extratime, 
	   op.u.adjustdom.u.sedf.latency, 
	   op.u.adjustdom.u.sedf.weight);
  }
    
  xc_interface_close(xc_handle);
}




int main(int argc, char **argv)
{
  dump_sedf();
  
  return 0;
}
