File: pci_address.rb

package info (click to toggle)
puppet-module-vswitch 21.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 596 kB
  • sloc: ruby: 2,189; python: 38; sh: 10; makefile: 10
file content (32 lines) | stat: -rw-r--r-- 878 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require 'facter'
if File.file?("/proc/bus/pci/devices")
  drivers_details=File.read("/proc/bus/pci/devices")
  drivers_lines=drivers_details.split("\n")
else
  drivers_lines=Array.new
end
drivers=Hash.new
drivers_lines.each do |line|
  line = line.gsub(/^\s+|\s+$/m, '').split(" ")
  if line.length == 18
    pci_embed = line[0]
    driver = line[-1]
    bus = pci_embed[0] + pci_embed[1]
    dev = ((pci_embed[2].to_i(16) << 1) + (pci_embed[3].to_i(16) >> 3)).to_s(16).rjust(2,"0").upcase
    fun = (pci_embed[3].to_i(16) & 7).to_s(16).upcase
    pci = "0000:" + bus + ":" + dev + "." + fun
    if not drivers.has_key?(driver)
      drivers[driver] = Array.new
    end
    drivers[driver] << pci
  end
end

drivers.each do |driver,pci_addr|
  Facter.add("pci_address_driver_#{driver}") do
    confine :kernel => :linux
    setcode do
      pci_addr.join(',')
    end
  end
end