From: Jon Ludlam Date: Tue, 25 Aug 2009 17:18:12 +0000 (+0100) Subject: Add ability to eject and insert CDs X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c9a1c2f8c8a6fad96d75aed43fbb5cd2000b9909;p=xenclient%2Ftoolstack.git Add ability to eject and insert CDs --- diff --git a/xenvm/tasks.ml b/xenvm/tasks.ml index 953fb17..92998fe 100644 --- a/xenvm/tasks.ml +++ b/xenvm/tasks.ml @@ -41,6 +41,9 @@ type action = | ListPCI | Trigger | Device + | CDEject + | CDInsertFile + | CDInsertReal | ReadConfig | Help @@ -107,6 +110,14 @@ let actions_table = [ (ListDisk, mk_desc_nb "disk_list"); (ListNic, mk_desc_nb "nic_list"); (ListPCI, mk_desc_nb "pci_list"); + + (CDEject, mk_desc_args "cd_eject" [ "virtpath", R, ArgString; ]); + (CDInsertFile,mk_desc_args "cd_insert_file" [ "virtpath", R, ArgString; + "physpath", R, ArgString ]); + (CDInsertReal,mk_desc_args "cd_insert_real" [ "virtpath", R, ArgString; + "physpath", R, ArgString ]); + + (ReadConfig, mk_desc_args_nb "read_config" [ "path", O, ArgString ]); (Help, mk_desc_nb "help"); (* diff --git a/xenvm/vmact.ml b/xenvm/vmact.ml index ad8794e..eb09d88 100644 --- a/xenvm/vmact.ml +++ b/xenvm/vmact.ml @@ -110,6 +110,18 @@ let add_disk_to_vm ~xs state disk = ~protocol state.vm_domid in () +let cd_eject ~xs state virtpath = + Device.Vbd.media_eject ~xs ~virtpath state.vm_domid; + Xenvmlib.Ok + +let cd_insert_file ~xs state virtpath physpath = + Device.Vbd.media_insert ~xs ~virtpath ~physpath ~phystype:Device.Vbd.File state.vm_domid; + Xenvmlib.Ok + +let cd_insert_real ~xs state virtpath physpath = + Device.Vbd.media_insert ~xs ~virtpath ~physpath ~phystype:Device.Vbd.Phys state.vm_domid; + Xenvmlib.Ok + let add_nic_to_vm ~xs state nic = let netty = Netman.Bridge nic.nic_bridge in let (_: Device_common.device) = diff --git a/xenvm/xenvm.ml b/xenvm/xenvm.ml index 989193c..a090c52 100644 --- a/xenvm/xenvm.ml +++ b/xenvm/xenvm.ml @@ -490,6 +490,17 @@ let do_task state (task, args) = let cmd = Tasks.args_get_string args "cmd" in let extra = Tasks.args_get_liststring args "extra" in with_xcs (fun xc xs -> Vmact.device_cmd xc xs state ty cmd extra) + | Tasks.CDEject -> + let virtpath = Tasks.args_get_string args "virtpath" in + with_xcs (fun xc xs -> Vmact.cd_eject xs state virtpath) + | Tasks.CDInsertReal -> + let virtpath = Tasks.args_get_string args "virtpath" in + let physpath = Tasks.args_get_string args "physpath" in + with_xcs (fun xc xs -> Vmact.cd_insert_real xs state virtpath physpath) + | Tasks.CDInsertFile -> + let virtpath = Tasks.args_get_string args "virtpath" in + let physpath = Tasks.args_get_string args "physpath" in + with_xcs (fun xc xs -> Vmact.cd_insert_file xs state virtpath physpath) | Tasks.ReadConfig -> let path = try Some (Tasks.args_get_string args "path")