ruby-amt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +15 -0
  3. data/ChangeLog +392 -0
  4. data/GPL +674 -0
  5. data/Rakefile +292 -0
  6. data/VERSION +1 -0
  7. data/doc/default.css +211 -0
  8. data/doc/default.template +78 -0
  9. data/doc/documentation.page +40 -0
  10. data/doc/img/bg.jpg +0 -0
  11. data/doc/img/image.jpg +0 -0
  12. data/doc/img/line.jpg +0 -0
  13. data/doc/img/shadow.jpg +0 -0
  14. data/doc/index.page +61 -0
  15. data/doc/installation.page +115 -0
  16. data/doc/news.page +25 -0
  17. data/doc/news/release_0_1_0.page +16 -0
  18. data/doc/virtual +2 -0
  19. data/lib/amt/pt_status.rb +59 -0
  20. data/lib/amt/service.rb +16 -0
  21. data/lib/amt/service/basic.rb +159 -0
  22. data/lib/amt/service/hardware_asset.rb +83 -0
  23. data/lib/amt/service/hardware_asset/amt_information_table.rb +49 -0
  24. data/lib/amt/service/hardware_asset/asset.rb +118 -0
  25. data/lib/amt/service/hardware_asset/baseboard.rb +31 -0
  26. data/lib/amt/service/hardware_asset/bios.rb +65 -0
  27. data/lib/amt/service/hardware_asset/computer_system.rb +30 -0
  28. data/lib/amt/service/hardware_asset/fru.rb +37 -0
  29. data/lib/amt/service/hardware_asset/media_device.rb +63 -0
  30. data/lib/amt/service/hardware_asset/memory_module.rb +91 -0
  31. data/lib/amt/service/hardware_asset/portable_battery.rb +80 -0
  32. data/lib/amt/service/hardware_asset/processor.rb +123 -0
  33. data/lib/amt/service/hardware_asset/vpro_verification_table.rb +120 -0
  34. data/lib/amt/service/network_administration.rb +181 -0
  35. data/lib/amt/service/network_administration/structures.rb +29 -0
  36. data/lib/amt/service/remote_control.rb +73 -0
  37. data/lib/amt/service/remote_control/structures.rb +120 -0
  38. data/lib/amt/service/security_administration.rb +430 -0
  39. data/lib/amt/service/security_administration/structures.rb +117 -0
  40. data/lib/amt/system.rb +134 -0
  41. data/lib/amt/utility.rb +33 -0
  42. data/lib/amt/utility/bit_struct.rb +164 -0
  43. data/lib/amt/utility/enum.rb +119 -0
  44. data/lib/amt/version.rb +8 -0
  45. data/setup.rb +1585 -0
  46. metadata +125 -0
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'amt/utility'
4
+ require 'amt/service/hardware_asset'
5
+
6
+ module AMT
7
+ module Service
8
+ class HardwareAsset
9
+
10
+ # Represents a single physical memory module of the system managed by the AMT device.
11
+ #
12
+ # There is at most one instance of this class for every physical memory module in the hardware
13
+ # asset inventory of each AMT device.
14
+ #
15
+ # Available fields:
16
+ #
17
+ # [+size+] The size of the memory device. If the value is +0+, then no memory module is
18
+ # installed in this socket. If the value is +FFFFh+, then the size is unknown. Also
19
+ # see #installed?
20
+ # [+form_factor+] The implementation form factor for this memory module (an instance of
21
+ # FormFactor).
22
+ # [+type+] The type of memory used in the module (an instance of Type).
23
+ # [+type_detail+] Additional detail on the memory module (an instance of TypeDetail).
24
+ # [+speed+] The speed of the memory module in MHz. If the value is +0+, then the value is
25
+ # unknown.
26
+ # [+manufacturer+] The name of the memory module manufacturer.
27
+ # [+serial_number+] The serial number of the memory module.
28
+ # [+asset_tag+] The asset tag of the memory module.
29
+ # [+part_number+] The part number of the memory module.
30
+ class MemoryModule < Asset
31
+
32
+ # The implementation form factor enumeration.
33
+ class FormFactor < AMT::Utility::Enum
34
+ multi_add(1 => "Other", 2 => "Unknown", 3 => "SIMM", 4 => "SIP",
35
+ 5 => "Chip", 6 => "DIP", 7 => "ZIP", 8 => "Proprietary Card",
36
+ 9 => "DIMM", 10 => "TSOP", 11 => "Row of chips", 12 => "RIMM",
37
+ 13 => "SODIMM", 14 => "SRIMM", 15 => "FB-DIMM")
38
+ end
39
+
40
+ # The memory type enumeration.
41
+ class Type < AMT::Utility::Enum
42
+ multi_add(1 => "Other", 2 => "Unknown", 3 => "DRAM", 4 => "EDRAM", 5 => "VRAM",
43
+ 6 => "SRAM", 7 => "RAM", 8 => "ROM", 9 => "FLASH", 10 => "EEPROM",
44
+ 11 => "FEPROM", 12 => "EPROM", 13 => "CDRAM", 14 => "3DRAM",
45
+ 15 => "SDRAM", 16 => "SGRAM", 17 => "RDRAM", 18 => "DDR",
46
+ 19 => "DDR2", 20 => "DDR2 FB-DIMM", 24 => "DDR3", 25 => "FBD2")
47
+ end
48
+
49
+ # The additional available details on the memory module.
50
+ class TypeDetail < AMT::Utility::BitStruct
51
+ boolean 1, :other, 'Other'
52
+ boolean 2, :unknown, 'Unknown'
53
+ boolean 3, :fast_paged, 'Fast-paged'
54
+ boolean 4, :static_column, 'Static column'
55
+ boolean 5, :pseudo_static, 'Pseudo-static'
56
+ boolean 6, :rambus, 'RAMBUS'
57
+ boolean 7, :synchronous, 'Synchronous'
58
+ boolean 8, :cmos, 'CMOS'
59
+ boolean 9, :edo, 'EDO'
60
+ boolean 10, :window_dram, 'Window DRAM'
61
+ boolean 11, :cache_dram, 'Cache DRAM'
62
+ boolean 12, :non_volatile, 'Non-volatile'
63
+ end
64
+
65
+
66
+ set_unpack_data "ISCCSSZ65Z65Z65Z65", 272, [[:size, lambda {|d|
67
+ if d == 0 then 0
68
+ elsif d == 0xffff then -1
69
+ else
70
+ (d & 0x8000 == 0x8000 ? d & 0x7fff : (d & 0x7fff) * 1024)
71
+ end
72
+ }],
73
+ [:form_factor, :enum, FormFactor],
74
+ [:type, :enum, Type],
75
+ [:type_detail, :struct, TypeDetail],
76
+ :speed, :manufacturer, :serial_number, :asset_tag, :part_number]
77
+
78
+ # Return +true+ if the memory module is installed in the socket.
79
+ def installed?
80
+ @size != 0
81
+ end
82
+
83
+ def inspect # :nodoc:
84
+ installed? ? super : "#<#{self.class.name} not installed>"
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'amt/utility'
4
+ require 'amt/service/hardware_asset'
5
+
6
+ module AMT
7
+ module Service
8
+ class HardwareAsset
9
+
10
+ # Represents a portable battery of the system managed by the AMT device.
11
+ #
12
+ # There is at most one instance of this class for every physical portable battery in the
13
+ # hardware asset inventory of each AMT device.
14
+ #
15
+ # Available fields:
16
+ #
17
+ # [+oem_specific+] Contains OEM- or BIOS vendor-specific information.
18
+ # [+manufacturer+] The name of the company that manufactured the battery.
19
+ # [+manufacture_date+] The date the battery was manufactured.
20
+ # [+design_capacity+] The design capacity of the battery in mWatt-hours. If the value is +0+,
21
+ # then the capacity is unknown.
22
+ # [+design_voltage+] The design voltage of the battery in mVolts. If the value is +0+, then
23
+ # the voltage is unknown.
24
+ # [+serial_number+] The serial number of the battery.
25
+ # [+device_chemistry+] Identifies the battery chemistry (an instance of DeviceChemistry).
26
+ # [+maximum_error_in_battery_data+] The maximum error (as a percentage in the range 0 to 100)
27
+ # in the Watt-hour data reported by the battery, indicating
28
+ # an upper bound on how much additional energy the battery
29
+ # might have above the energy it reports having. If the
30
+ # value is +FFh+, then the maximum error is unknown.
31
+ # [+sbds_version_number+] The Smart Battery Data Specification version number supported by
32
+ # this battery. If the string is empty, then the battery does not
33
+ # support the function.
34
+ # [+location+] The location of the battery.
35
+ # [+device_name+] The name of the battery.
36
+ class PortableBattery < Asset
37
+
38
+ # Device chemistry enumeration.
39
+ class DeviceChemistry < AMT::Utility::Enum
40
+ multi_add(1 => 'Other', 2 => 'Unknown', 3 => 'Lead Acid',
41
+ 4 => 'Nickel Cadmium', 5 => 'Nickel metal hydride',
42
+ 6 => 'Lithium-ion', 7 => 'Zinc air', 8 => 'Lithium Polymer')
43
+ end
44
+
45
+ set_unpack_data "IIISSSCCCA65A65A65A65A65A65A65", 476
46
+
47
+ attr_reader :oem_specific, :manufacture_date, :design_capacity, :design_voltage, :serial_number, :device_chemistry # :nodoc:
48
+ attr_reader :maximum_error_in_battery_data, :sbds_version_number, :location, :manufacturer, :device_name # :nodoc:
49
+
50
+ def init_data(data) # :nodoc:
51
+ @oem_specific = data[0]
52
+ @sbds_version_number = data[9].strip
53
+ if data[12].strip.empty?
54
+ @manufacture_date = Date.new(1980 + (data[1] & 0x0000f1000), data[1] & 0x00001e000, data[1] & 0x0000001f)
55
+ else
56
+ @manufacture_date = data[12].strip
57
+ end
58
+ @design_capacity = data[2] * data[5]
59
+ @design_voltage = data[3]
60
+ if data[8].strip.empty?
61
+ @serial_number = data[4]
62
+ else
63
+ @serial_number = data[8].strip
64
+ end
65
+ @device_chemistry = as_enum(data[6], DeviceChemistry).first
66
+ if @device_chemistry == 'Unknown' && !@sbds_version_number.empty?
67
+ @device_chemistry = data[14].strip
68
+ end
69
+ @maximum_error_in_battery_data = data[7]
70
+ @location = data[10].strip
71
+ @manufacturer = data[11].strip
72
+ @device_name = data[13].strip
73
+ end
74
+ private :init_data
75
+
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,123 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'amt/utility'
4
+ require 'amt/service/hardware_asset'
5
+
6
+ module AMT
7
+ module Service
8
+ class HardwareAsset
9
+
10
+ # Represents a physical processor of the system managed by the AMT device.
11
+ #
12
+ # There is at most one instance of this class for every physical processor in the hardware
13
+ # asset inventory of each AMT device.
14
+ #
15
+ # Available fields:
16
+ #
17
+ # [+manufacturer+] The name of the processor manufacturer.
18
+ # [+version+] The version of the processor.
19
+ # [+socket_designation+] The reference designation for the processor socket.
20
+ # [+id+] Contains processor-specific information that describes the processor's features
21
+ # (returned as string).
22
+ # [+max_socket_speed+] The maximum processor speed supported by the system for this processor
23
+ # socket in MHz. If equal to +0+, then the value is unknown.
24
+ # [+current_speed+] The current speed of the processor in MHz.
25
+ # [+status+] Indicates the status of the processor (an instance of Status).
26
+ # [+type+] Specifies the type of the processor (an instance of Type).
27
+ # [+family+] Specifies the processor family (an instance of Family).
28
+ # [+upgrade_information+] Specifies the processor upgrade method (an instance of
29
+ # UpgradeInformation).
30
+ # [+socket_populated+] If the processor socket is populated, then +true+, else +false+.
31
+ class Processor < Asset
32
+
33
+ # The processor type enumeration.
34
+ class Type < AMT::Utility::Enum
35
+ multi_add(1 => 'Other', 2 => 'Unknown', 3 => 'Central Processor',
36
+ 4 => 'Math Processor', 5 => 'DSP Processor', 6 => 'Video Processor')
37
+ end
38
+
39
+ # The processor family enumeration.
40
+ #
41
+ # Taken from the SMBIOS Reference Specification DSP 0134. Since I don't know all possible
42
+ # values, I just excluded the impossible ones (since AMT works only on newer generation
43
+ # processors from Intel) sothat the list gets shorter.
44
+ class Family < AMT::Utility::Enum
45
+ multi_add(1 => "Other", 2 => "Unknown",
46
+ 20 => "Intel(R) Celeron(R) M processor",
47
+ 21 => "Intel(R) Pentium(R) 4 HT processor",
48
+ 40 => "Intel(R) Core(TM) Duo processor",
49
+ 41 => "Intel(R) Core(TM) Duo mobile processor",
50
+ 42 => "Intel(R) Core(TM) Solo mobile processor",
51
+ 43 => "Intel(R) Atom(TM) processor",
52
+ 161 => "Quad-Core Intel(R) Xeon(R) processor 3200 Series",
53
+ 162 => "Dual-Core Intel(R) Xeon(R) processor 3000 Series",
54
+ 163 => "Quad-Core Intel(R) Xeon(R) processor 5300 Series",
55
+ 164 => "Dual-Core Intel(R) Xeon(R) processor 5100 Series",
56
+ 165 => "Dual-Core Intel(R) Xeon(R) processor 5000 Series",
57
+ 166 => "Dual-Core Intel(R) Xeon(R) processor LV",
58
+ 167 => "Dual-Core Intel(R) Xeon(R) processor ULV",
59
+ 168 => "Dual-Core Intel(R) Xeon(R) processor 7100 Series",
60
+ 169 => "Quad-Core Intel(R) Xeon(R) processor 5400 Series",
61
+ 170 => "Quad-Core Intel(R) Xeon(R) processor",
62
+ 171 => "Dual-Core Intel(R) Xeon(R) processor 5200 Series",
63
+ 172 => "Dual-Core Intel(R) Xeon(R) processor 7200 Series",
64
+ 173 => "Quad-Core Intel(R) Xeon(R) processor 7300 Series",
65
+ 174 => "Quad-Core Intel(R) Xeon(R) processor 7400 Series",
66
+ 175 => "Multi-Core Intel(R) Xeon(R) processor 7400 Series",
67
+ 184 => "Intel® Itanium® 2 processor",
68
+ 185 => "Intel® Pentium® M processor",
69
+ 186 => "Intel® Celeron® D processor",
70
+ 187 => "Intel® Pentium® D processor",
71
+ 188 => "Intel® Pentium® Processor Extreme Edition",
72
+ 189 => "Intel(R) Core(TM) Solo Processor",
73
+ 190 => "Intel(R) Core(TM)2 Duo Processor",
74
+ 191 => "Intel(R) Core(TM) 2 Duo Processor",
75
+ 192 => "Intel(R) Core(TM)2 Solo processor",
76
+ 193 => "Intel(R) Core(TM)2 Extreme processor",
77
+ 194 => "Intel(R) Core(TM)2 Quad processor",
78
+ 195 => "Intel(R) Core(TM)2 Extreme mobile processor",
79
+ 196 => "Intel(R) Core(TM)2 Duo mobile processor",
80
+ 197 => "Intel(R) Core(TM)2 Solo mobile processor",
81
+ 198 => "Intel(R) Core(TM) i7 processor",
82
+ 199 => "Dual-Core Intel(R) Celeron(R) processor",
83
+ 214 => "Multi-Core Intel(R) Xeon(R) processor",
84
+ 215 => "Dual-Core Intel(R) Xeon(R) processor 3xxx Series",
85
+ 216 => "Quad-Core Intel(R) Xeon(R) processor 3xxx Series",
86
+ 218 => "Dual-Core Intel(R) Xeon(R) processor 5xxx Series",
87
+ 219 => "Quad-Core Intel(R) Xeon(R) processor 5xxx Series",
88
+ 221 => "Dual-Core Intel(R) Xeon(R) processor 7xxx Series",
89
+ 222 => "Quad-Core Intel(R) Xeon(R) processor 7xxx Series",
90
+ 223 => "Multi-Core Intel(R) Xeon(R) processor 7xxx Series")
91
+ end
92
+
93
+ # The processor status enumeration (a subclass of AMT::Utility::Enum).
94
+ class Status < AMT::Utility::Enum
95
+ multi_add(0 => 'Unknown', 1 => 'Enabled', 2 => 'Disabled by user via BIOS setup',
96
+ 3 => 'Disabled by BIOS (POST Error)', 4 => 'Idle, waiting to be enabled', 7 => 'Other')
97
+ end
98
+
99
+ # The processor upgrade method enumeration.
100
+ class UpgradeInformation < AMT::Utility::Enum
101
+ multi_add(1 => 'Other', 2 => 'Unknown', 3 => 'Daughter Board', 4 => 'ZIF Socket',
102
+ 5 => 'Replaceable Piggy Back', 6 => 'None', 7 => 'LIF Socket', 8 => 'Slot 1',
103
+ 9 => 'Slot 2', 10 => '370-pin socket', 11 => 'Slot A', 12 => 'Slot M',
104
+ 13 => 'Socket 423', 14 => 'Socket A (Socket 462)', 15 => 'Socket 478',
105
+ 16 => 'Socket 754', 17 => 'Socket 940', 18 => 'Socket 939',
106
+ 19 => 'Socket mPGA604', 20 => 'Socket LGA771', 21 => 'Socket LGA775',
107
+ 22 => 'Socket S1', 23 => 'Socket AM2', 24 => 'Socket F (1207)', 25 => 'Socket LGA1366')
108
+ end
109
+
110
+
111
+ set_unpack_data "Ia8SSCCCCCZ65Z65Z65", 216, [[:id, :raw], :max_socket_speed, :current_speed,
112
+ [:status, :enum, Status],
113
+ [:type, :enum, Type],
114
+ [:family, :enum, Family],
115
+ [:upgrade_information, :enum, UpgradeInformation],
116
+ [:socket_populated, :boolean],
117
+ :socket_designation, :manufacturer, :version]
118
+
119
+ end
120
+
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,120 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'amt/utility'
4
+ require 'amt/service/hardware_asset'
5
+
6
+ module AMT
7
+ module Service
8
+ class HardwareAsset
9
+
10
+ # Represents a structure with information about vPro capabilities.
11
+ #
12
+ # Available fields:
13
+ #
14
+ # [+cpu_capabilities+] Capabilities supported by the CPU (an instance of CpuCapabilities.)
15
+ # [+mch_capabilities+] Capabilities supported by the Mch (an instance of MchCapabilities).
16
+ # [+ich_capabilities+] Capabilities supported by the Ich (an instance of IchCapabilities).
17
+ # [+me_capabilities+] Capabilities supported by the ME (an instance of MeCapabilities).
18
+ # [+tpm_capabilities+] Capabilities supported by the TPM (an instance of TpmCapabilities).
19
+ # [+network_device+] Information about the vPro network device (an instance of NetworkDevice).
20
+ # [+bios_capabilities+] Capabilities supported by the BIOS (an instance of BiosCapabilities).
21
+ class VproVerificationTable < Asset
22
+
23
+ # Defines a set of bit flags that indicate the features the CPU supports.
24
+ class CpuCapabilities < AMT::Utility::BitStruct
25
+ boolean 0, :vmx_enabled, 'VMX enabled'
26
+ boolean 1, :smx_enabled, 'SMX enabled'
27
+ boolean 2, :lt_txt_capable, 'LT/TXT capable'
28
+ boolean 3, :lt_txt_enabled, 'LT/TXT enabled'
29
+ boolean 4, :vt_x_capable, 'VT-x capable'
30
+ boolean 5, :vt_x_enabled, 'VT-x enabled'
31
+ end
32
+
33
+ # Defines a set of bit flags that indicate the features of the Mch device and some values
34
+ # that identify it.
35
+ class MchCapabilities < AMT::Utility::BitStruct
36
+ unsigned 0..2, :function_number, 'Function Number of PCI Device'
37
+ unsigned 3..7, :device_number, 'Device Number of PCI Device'
38
+ unsigned 8..15, :bus_number, 'Bus Number of PCI Device'
39
+ unsigned 16..31, :did, 'Device Identification Number'
40
+ boolean 32, :vt_d_capable, 'VT-d capable'
41
+ boolean 33, :vt_d_enabled, 'VT-d enabled'
42
+ boolean 34, :txt_capable, 'TXT capable'
43
+ boolean 35, :txt_enabled, 'TXT enabled'
44
+ end
45
+
46
+ # Defines some values that identify the Mch device.
47
+ class IchCapabilities < AMT::Utility::BitStruct
48
+ unsigned 0..2, :function_number, 'Function Number of PCI Device'
49
+ unsigned 3..7, :device_number, 'Device Number of PCI Device'
50
+ unsigned 8..15, :bus_number, 'Bus Number of PCI Device'
51
+ unsigned 16..31, :did, 'Device Identification Number'
52
+ end
53
+
54
+ # Defines a set of bit flags that indicate the features the Management Engine supports and
55
+ # provides information about the ME firmware version.
56
+ class MeCapabilities < AMT::Utility::BitStruct
57
+ boolean 0, :me_enabled, 'ME enabled'
58
+ boolean 1, :intel_qst_fw_support, 'Intel QST FW support'
59
+ boolean 2, :intel_asf_fw_support, 'Intel ASF FW support'
60
+ boolean 3, :intel_amt_fw_support, 'Intel AMT FW support'
61
+ unsigned 32..47, :me_fw_minor_version, 'ME FW Minor Version'
62
+ unsigned 48..63, :me_fw_major_version, 'ME FW Major Version'
63
+ unsigned 64..79, :me_fw_build_number, 'ME FW Build Number'
64
+ unsigned 80..95, :me_fw_hotfix_number, 'ME FW Hotfix Number'
65
+ end
66
+
67
+ # Defines a set of bit flags that indicate the features the TPM device supports and which
68
+ # TCG spec is supported.
69
+ class TpmCapabilities < AMT::Utility::BitStruct
70
+ boolean 0, :supported, 'Supports TPM on board'
71
+ boolean 1, :enabled, 'TPM enabled'
72
+ unsigned 16..23, :tcg_spec_major_version, 'TCG spec major version'
73
+ unsigned 24..31, :tcg_spec_minor_version, 'TCG spec minor version'
74
+ end
75
+
76
+ # Defines some values that identify the network device used by vPro.
77
+ class NetworkDevice < AMT::Utility::BitStruct
78
+ unsigned 0..2, :function_number, 'Function Number'
79
+ unsigned 3..7, :device_number, 'Device Number'
80
+ unsigned 8..15, :bus_number, 'Bus Number'
81
+ unsigned 16..31, :did, 'Device Identification Number'
82
+ end
83
+
84
+ # Defines a set of bit flags that indicate the features the BIOS supports regarding vPro.
85
+ class BiosCapabilities < AMT::Utility::BitStruct
86
+ boolean 0, :vt_x_supported, 'BIOS supports VT-x in BIOS setup screen'
87
+ boolean 1, :vt_d_supported, 'BIOS supports VT-d in BIOS setup screen'
88
+ boolean 2, :txt_supported, 'BIOS supports TXT in BIOS setup screen'
89
+ boolean 3, :tpm_supported, 'BIOS supports TPM in BIOS setup screen'
90
+ boolean 4, :me_supported, 'BIOS supports ME in BIOS setup screen'
91
+ boolean 5, :va_extension_supported, 'BIOS supports VA extension'
92
+ boolean 6, :spi_flash_platform_data_region_reserved, 'SPI Flash has Platform Data region reserved'
93
+ unsigned 7..9, :maximum_va_version, 'BIOS supported maximum VA version'
94
+ end
95
+
96
+ set_unpack_data "IIa8a8a12Ia12IIx4", 64
97
+
98
+ attr_reader :cpu_capabilities, :mch_capabilities, :ich_capabilities, :me_capabilities #:nodoc:
99
+ attr_reader :tpm_capabilities, :network_device, :bios_capabilities #:nodoc:
100
+
101
+ def init_data(data) #:nodoc:
102
+ @cpu_capabilities = CpuCapabilities.new(data[0])
103
+ first, last = *data[1].unpack("II")
104
+ @mch_capabilities = MchCapabilities.new((first << 32) + last)
105
+ first, last = *data[2].unpack("II")
106
+ @ich_capabilities = IchCapabilities.new((first << 32) + last)
107
+ first, second, last = *data[3].unpack("III")
108
+ @me_capabilities = MeCapabilities.new((first << 64) + (second << 32) + last)
109
+ @tpm_capabilities = TpmCapabilities.new(data[4])
110
+ first, second, last = *data[5].unpack("III")
111
+ @network_device = NetworkDevice.new((first << 64) + (second << 32) + last)
112
+ @bios_capabilities = BiosCapabilities.new(data[6])
113
+ end
114
+ private :init_data
115
+
116
+ end
117
+
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,181 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'ipaddr'
4
+ require 'amt/service/basic'
5
+
6
+ module AMT
7
+
8
+ module Service
9
+
10
+ # The Network Administration Service enables administrators to configure network parameters.
11
+ # This service implements all AMT 5.0 methods sans 802.1x related ones.
12
+ class NetworkAdministration < Basic
13
+
14
+ require 'amt/service/network_administration/structures'
15
+
16
+
17
+ # Set the host name of the AMT device to +name+.
18
+ #
19
+ # *Note*: You also need to call SecurityAdministration#commit_changes for the changes to
20
+ # actually take effect.
21
+ #
22
+ # Supported by AMT 1.0 and later.
23
+ def set_host_name(name)
24
+ soap_call('SetHostName') {|msg| msg.add('ns:HostName', name)}.process
25
+ end
26
+
27
+
28
+ # Return the host name of the AMT device.
29
+ #
30
+ # Supported by AMT 1.0 and later.
31
+ def get_host_name
32
+ soap_call('GetHostName').process {|node| node.xpath('./ns:HostName/text()').to_s}
33
+ end
34
+
35
+
36
+ # Set the domain name of the AMT device to +name+.
37
+ #
38
+ # *Note*: You also need to call SecurityAdministration#commit_changes for the changes to
39
+ # actually take effect.
40
+ #
41
+ # Supported by AMT 2.0 and later.
42
+ def set_domain_name(name)
43
+ soap_call('SetDomainName') {|msg| msg.add('ns:DomainName', name)}.process
44
+ end
45
+
46
+
47
+ # Return the domain name of the AMT device.
48
+ #
49
+ # Supported by AMT 2.0 and later.
50
+ def get_domain_name
51
+ soap_call('GetDomainName').process {|node| node.xpath('./ns:DomainName/text()').to_s}
52
+ end
53
+
54
+
55
+ # Set VLAN parameters (mode and vlan tag).
56
+ #
57
+ # [+enabled+] Boolean defining whether the VLAN support should be enabled on the AMT device.
58
+ # [+tag+] The VLAN tag (VLAN ID) to be set.
59
+ # [+interface_handle+] An optional interface handle for specifying the LAN interface to which
60
+ # the VLAN parameters should be applied.
61
+ #
62
+ # *Note*: You also need to call SecurityAdministration#commit_changes for the changes to
63
+ # actually take effect.
64
+ #
65
+ # Supported by AMT 1.0 and later. Not supported in 2.5, 2.6 and 4.0.
66
+ def set_vlan_parameters(enabled, tag, interface_handle = nil)
67
+ soap_call('SetVlanParameters') do |msg|
68
+ msg.add('ns:InterfaceHandle', interface_handle) if interface_handle
69
+ msg.add('ns:VlanMode', enabled)
70
+ msg.add('ns:VlanTag', tag)
71
+ end.process
72
+ end
73
+
74
+
75
+ # Return the VLAN parameters of the default interface or the one specified by
76
+ # +interface_handle+ as instance of the VlanParameters class.
77
+ #
78
+ # Supported by AMT 1.0 and later. Not supported in 2.5, 2.6 and 4.0.
79
+ def get_vlan_parameters(interface_handle = nil)
80
+ soap_call('GetVlanParameters') do |msg|
81
+ msg.add('ns:InterfaceHandle', interface_handle) if interface_handle
82
+ end.process do |node|
83
+ vp = VlanParameters.new
84
+ vp.enabled = node.xpath('./ns:VlanMode/text()').to_boolean
85
+ vp.tag = node.xpath('./ns:VlanTag/text()').to_i if vp.enabled
86
+ vp
87
+ end
88
+ end
89
+
90
+
91
+ # Set the behaviour of the AMT device regarding ICMP ping responses. If +enabled+ is +true+,
92
+ # ping responses will be enabled and else disabled.
93
+ #
94
+ # Supported by AMT 1.0 and later.
95
+ def set_ping_response(enabled)
96
+ soap_call('SetPingResponse') {|msg| msg.add('ns:enabled', enabled)}.process
97
+ end
98
+
99
+
100
+ # Return whether ICMP ping responses are enabled on the AMT device.
101
+ #
102
+ # Supported by AMT 1.0 and later.
103
+ def get_ping_response
104
+ soap_call('GetPingResponse').process {|node| node.xpath('./ns:enabled/text()').to_boolean}
105
+ end
106
+
107
+
108
+ # Return an array of handles (integers) to all known interfaces of the AMT device.
109
+ #
110
+ # Supported by AMT 2.5 and later.
111
+ def enumerate_interfaces
112
+ soap_call('EnumerateInterfaces').process do |node|
113
+ node.xpath('./ns:InterfaceHandles/text()').collect {|n| n.to_i }
114
+ end
115
+ end
116
+
117
+
118
+ # Return the settings of the interface specified by +interface_handle+ as an instance of
119
+ # +InterfaceDescriptor+.
120
+ #
121
+ # Supported by AMT 2.5 and later.
122
+ def get_interface_settings(interface_handle)
123
+ soap_call('GetInterfaceSettings') do |msg|
124
+ msg.add('ns:InterfaceHandle', interface_handle)
125
+ end.process do |node|
126
+ result = InterfaceDescriptor.new
127
+ result.hardware_description = node.xpath('./ns:InterfaceDescriptor/ns:HardwareAddressDescription/text()').to_s
128
+ result.mac = node.xpath('./ns:InterfaceDescriptor/ns:MACAddress/text()').to_s.gsub('-', ':').upcase
129
+ result.interface_mode = node.xpath('./ns:InterfaceDescriptor/ns:InterfaceMode/text()').to_s
130
+ result.link_policy = LinkPolicy.new(node.xpath('./ns:InterfaceDescriptor/ns:LinkPolicy/text()').to_i)
131
+ result.dhcp_enabled = node.xpath('./ns:InterfaceDescriptor/ns:DhcpEnabled/text()').to_boolean
132
+ if node.xpath('./ns:InterfaceDescriptor/ns:IPv4Parameters')
133
+ ipp = result.ip_parameters = IPParameters.new
134
+ ipp.ip = IPAddr.new(node.xpath('./ns:InterfaceDescriptor/ns:IPv4Parameters/ns:LocalAddress/text()').to_i, Socket::AF_INET)
135
+ ipp.mask = IPAddr.new(node.xpath('./ns:InterfaceDescriptor/ns:IPv4Parameters/ns:SubnetMask/text()').to_i, Socket::AF_INET)
136
+ ipp.gateway = IPAddr.new(node.xpath('./ns:InterfaceDescriptor/ns:IPv4Parameters/ns:DefaultGatewayAddress/text()').to_i, Socket::AF_INET)
137
+ ipp.primary_dns = IPAddr.new(node.xpath('./ns:InterfaceDescriptor/ns:IPv4Parameters/ns:PrimaryDnsAddress/text()').to_i, Socket::AF_INET)
138
+ ipp.secondary_dns = IPAddr.new(node.xpath('./ns:InterfaceDescriptor/ns:IPv4Parameters/ns:SecondaryDnsAddress/text()').to_i, Socket::AF_INET)
139
+ end
140
+ result
141
+ end
142
+ end
143
+
144
+
145
+ # Set the interface parameters for the network interface identified by +interface_handle+.
146
+ #
147
+ # [+interface_handle+] The handle to the network interface that should be configured.
148
+ # [+interface_mode+] Has to be either +SEPARATE_MAC_ADDRESS+ or +SHARED_MAC_ADDRESS+.
149
+ # [+link_policy+] The link policy (an instance of LinkPolicy) that should be set.
150
+ # [+ip_parameters+] If not specified (ie. +nil+), the interface is configured via DHCP.
151
+ # Otherwise this needs to be an instance of IPParameters.
152
+ #
153
+ # *Note*: You also need to call SecurityAdministration#commit_changes for the changes to
154
+ # actually take effect.
155
+ #
156
+ # Supported by AMT 2.5 and later.
157
+ def set_interface_settings(interface_handle, interface_mode, link_policy, ip_parameters = nil)
158
+ unless interface_mode == 'SEPARATE_MAC_ADDRESS' || interface_mode == 'SHARED_MAC_ADDRESS'
159
+ raise ArgumentError, "interface_mode is invalid: #{interface_mode}"
160
+ end
161
+ soap_call('SetInterfaceSettings') do |msg|
162
+ msg.add('ns:InterfaceHandle', interface_handle)
163
+ msg.add('ns:InterfaceDescriptor') do |ifd|
164
+ ifd.add('ns:InterfaceMode', interface_mode)
165
+ ifd.add('ns:LinkPolicy', link_policy.value)
166
+ ifd.add('ns:IPv4Parameters') do |ipp|
167
+ ipp.add('ns:LocalAddress', ip_parameters.ip.to_i)
168
+ ipp.add('ns:SubnetMask', ip_parameters.mask.to_i)
169
+ ipp.add('ns:DefaultGatewayAddress', ip_parameters.gateway.to_i)
170
+ ipp.add('ns:PrimaryDnsAddress', ip_parameters.primary_dns.to_i)
171
+ ipp.add('ns:SecondaryDnsAddress', ip_parameters.secondary_dns.to_i)
172
+ end if ip_parameters
173
+ end
174
+ end.process
175
+ end
176
+
177
+ end
178
+
179
+ end
180
+
181
+ end