qemu-toolkit / lib / qemu-toolkit / vnic_collection.rb

require 'qemu-toolkit/network/mac_address'

module QemuToolkit

  # A collection of vnics. This class keeps track of vnic allocations to 
  # devices, so that no vnic will be used twice. 
  #
  class VnicCollection
    def initialize(vnics=[])
      @vnics = Set.new(vnics)
      @used = Set.new
    end

    def << vnic
      @vnics << vnic
    end

    def map &block
      unused.map(&block)
    end

    def unused
      @vnics - @used
    end

    def allocate(via, mac_address=nil)
      vnic=unused.find { |vnic| 
        (!mac_address || 
          (normalize_mac_address(mac_address) == vnic.macaddr)) && 
        via == vnic.over }

      @used << vnic
      vnic
    end

    def empty?
      @used.size == @vnics.size
    end

    def normalize_mac_address mac_address
      Network::MacAddress.new(mac_address)
    end
  end
end
    
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.