ruby-amt 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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