|
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")
|
@@ -270,7 +264,45 @@ let get_initial_guest_metrics (lookup : string -> string option)
|
270 | 264 | | None ->
|
271 | 265 | []
|
272 | 266 | 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 () |
274 | 306 | and os_version = to_map os_version
|
275 | 307 | and netbios_name =
|
276 | 308 | match to_map dns_domain with
|
|
0 commit comments