|
33 | 33 | NB each key is annotated with whether it appears in windows and/or linux *)
|
34 | 34 | let pv_drivers_version =
|
35 | 35 | [
|
36 |
| - ("drivers/xenevtchn", "xenevtchn") |
37 |
| - ; (* windows *) |
38 |
| - ("drivers/xenvbd", "xenvbd") |
39 |
| - ; (* windows *) |
40 |
| - ("drivers/xennet", "xennet") |
41 |
| - ; (* windows *) |
42 | 36 | ("attr/PVAddons/MajorVersion", "major")
|
43 | 37 | ; (* linux + windows *)
|
44 | 38 | ("attr/PVAddons/MinorVersion", "minor")
|
@@ -294,7 +288,45 @@ let get_initial_guest_metrics (lookup : string -> string option)
|
294 | 288 | | None ->
|
295 | 289 | []
|
296 | 290 | in
|
297 |
| - let pv_drivers_version = to_map pv_drivers_version |
| 291 | + (* enumerate all driver versions from xenstore, which are stored like |
| 292 | + drivers/0 = "XenServer XENBUS 9.1.9.105 " |
| 293 | + drivers/1 = "XenServer XENVBD 9.1.8.79 " |
| 294 | + drivers/2 = "XenServer XENVIF 9.1.12.101 " |
| 295 | + drivers/3 = "XenServer XENIFACE 9.1.10.87 " |
| 296 | + drivers/4 = "XenServer XENNET 9.1.7.65 " |
| 297 | +
|
| 298 | + (see the format specified in xenstore-paths) |
| 299 | + *) |
| 300 | + let get_windows_driver_versions () = |
| 301 | + (* Only look into directories that are numbers (indices) *) |
| 302 | + let filter_dirs subdirs = |
| 303 | + List.filter_map |
| 304 | + (fun x -> |
| 305 | + match int_of_string_opt x with |
| 306 | + | Some _ -> |
| 307 | + Some ("drivers/" ^ x, x) |
| 308 | + | None -> |
| 309 | + None |
| 310 | + ) |
| 311 | + subdirs |
| 312 | + in |
| 313 | + let versions = list "drivers" |> filter_dirs |> to_map in |
| 314 | + List.filter_map |
| 315 | + (fun (_, version_string) -> |
| 316 | + try |
| 317 | + Scanf.sscanf version_string "%s@ %s@ %s@ %s@\n" |
| 318 | + (fun vendor driver_name version attr -> |
| 319 | + Some |
| 320 | + ( String.lowercase_ascii driver_name |
| 321 | + , String.concat " " [vendor; version; attr] |
| 322 | + ) |
| 323 | + ) |
| 324 | + with _ -> None |
| 325 | + ) |
| 326 | + versions |
| 327 | + in |
| 328 | + let pv_drivers_version = |
| 329 | + to_map pv_drivers_version @ get_windows_driver_versions () |
298 | 330 | and os_version = to_map os_version
|
299 | 331 | and netbios_name =
|
300 | 332 | match to_map dns_domain with
|
|
0 commit comments