Skip to content

Commit fdea0e8

Browse files
committed
xapi_guest_agent: Update xenstore keys for Windows PV drivers versions
Windows PV drivers do not store their version information into "drivers/{xeneventchn,xenvbd,xennet}" xenstore keys since 2015, see: * PV drivers commit 784af16810d705ba2bc02bab6ac93b24119f886c (Publish distribution information to xenstore) https://xenbits.xen.org/gitweb/?p=pvdrivers/win/xenbus.git;a=commit;h=784af16810d705ba2bc02bab6ac93b24119f886c * Xen commit 71e64e163b2dae7d08f7d77ee942749663f484d5 (docs: Introduce xenstore paths for PV driver information) https://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=71e64e163b2dae7d08f7d77ee942749663f484d5 Instead it is stored like this: drivers/0 = "XenServer XENBUS 9.1.9.105 " drivers/1 = "XenServer XENVBD 9.1.8.79 " drivers/2 = "XenServer XENVIF 9.1.12.101 " drivers/3 = "XenServer XENIFACE 9.1.10.87 " drivers/4 = "XenServer XENNET 9.1.7.65 " Modify xapi_guest_agent to list such entries under "drivers/" and present version information for each driver. Signed-off-by: Andrii Sultanov <[email protected]>
1 parent aa2aa6e commit fdea0e8

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

ocaml/xapi/xapi_guest_agent.ml

+39-7
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ end)
3333
NB each key is annotated with whether it appears in windows and/or linux *)
3434
let pv_drivers_version =
3535
[
36-
("drivers/xenevtchn", "xenevtchn")
37-
; (* windows *)
38-
("drivers/xenvbd", "xenvbd")
39-
; (* windows *)
40-
("drivers/xennet", "xennet")
41-
; (* windows *)
4236
("attr/PVAddons/MajorVersion", "major")
4337
; (* linux + windows *)
4438
("attr/PVAddons/MinorVersion", "minor")
@@ -270,7 +264,45 @@ let get_initial_guest_metrics (lookup : string -> string option)
270264
| None ->
271265
[]
272266
in
273-
let pv_drivers_version = to_map pv_drivers_version
267+
(* enumerate all driver versions from xenstore, which are stored like
268+
drivers/0 = "XenServer XENBUS 9.1.9.105 "
269+
drivers/1 = "XenServer XENVBD 9.1.8.79 "
270+
drivers/2 = "XenServer XENVIF 9.1.12.101 "
271+
drivers/3 = "XenServer XENIFACE 9.1.10.87 "
272+
drivers/4 = "XenServer XENNET 9.1.7.65 "
273+
274+
(see the format specified in xenstore-paths)
275+
*)
276+
let get_windows_driver_versions () =
277+
(* Only look into directories that are numbers (indices) *)
278+
let filter_dirs subdirs =
279+
List.filter_map
280+
(fun x ->
281+
match int_of_string_opt x with
282+
| Some _ ->
283+
Some ("drivers/" ^ x, x)
284+
| None ->
285+
None
286+
)
287+
subdirs
288+
in
289+
let versions = list "drivers" |> filter_dirs |> to_map in
290+
List.filter_map
291+
(fun (_, version_string) ->
292+
try
293+
Scanf.sscanf version_string "%s@ %s@ %s@ %s@\n"
294+
(fun vendor driver_name version attr ->
295+
Some
296+
( String.lowercase_ascii driver_name
297+
, String.concat " " [vendor; version; attr]
298+
)
299+
)
300+
with _ -> None
301+
)
302+
versions
303+
in
304+
let pv_drivers_version =
305+
to_map pv_drivers_version @ get_windows_driver_versions ()
274306
and os_version = to_map os_version
275307
and netbios_name =
276308
match to_map dns_domain with

0 commit comments

Comments
 (0)