KVM-QEMU vdagent實現機制分析(三)

承接KVM-QEMUvdagent實現機制分析2,在qemuvdagent通過虛擬串口打開字符設備的事件傳給spice server之後,spice server的處理是怎麼樣的呢?還是用圖來說明比較形象一點:

  

上圖中的步驟解釋:

1.   當在虛擬機裏啓動vdagent,qemuspice_chr_guest_open被觸發調用spice server spice_server_add_interface方法添加vdagent這個字符設備

2.   spice_server_add_interface 調用 attach_to_red_agent,在attach_to_red_agent

裏首先一系列的char dev回調函數被設置,用來在接下來的消息交互中被調用;

3.   然後,attach_to_red_agent調用reds_update_mouse_mode,邏輯是如果原來鼠標模式是SPICE_MOUSE_MODE_CLIENT的話,如果因爲vdagent關閉而且沒有定義tablet就需要修改將鼠標模式改爲SPICE_MOUSE_MODE_SERVER。這個以spiceserver發送RED_WORKER_MESSAGE_SET_MOUSE_MODE 這個消息給spice client的方式來實現;

4.   接下來,attach_to_red_agent又調用main_channel_push_agent_connected方法以發送SPICE_MSG_MAIN_AGENT_CONNECTED這個消息的形式通知spiceclient vdagent已經啓動並連接的消息;

5.   Spice client收到SPICE_MSG_MAIN_AGENT_CONNECTED消息以後,調用handle_agent_connected(red_client.cpp裏面)這個方法進行處理:發送REDC_MAIN_AGENT_START消息給spiceserver作爲獲知vdagent已經啓動的應答;調用send_agent_announce_capabilities

發送 VD_AGENT_ANNOUNCE_CAPABILITIES給spice server 自己的capabilities;調用send_agent_monitors_config

發送VD_AGENT_MONITORS_CONFIG給spice server通知自身的監視器分辨率信息等;

6.   Spice server 再將上述消息轉給qemu,然後qemu通過上一篇文章介紹的與虛擬機vdagent通信的數據輸出隊列發送給vdagent;

7.   最後 vdagent根據收到的分辨率信息等修改虛擬機的本地分辨率。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章