class QemuToolkit::Vnic
Attributes
interface[R]
macaddr[R]
number[R]
over[R]
prefix[R]
vlan[R]
Public Class Methods
create(prefix, over, backend, macaddr=nil)
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 34 def create(prefix, over, backend, macaddr=nil) # Retrieve links that exist for this prefix and this over interface vnics = for_prefix(prefix, backend) next_vnic_number = (vnics.map(&:number).max || 0) + 1 new(prefix, next_vnic_number, over, macaddr).tap { |o| o.create(backend) } end
for_prefix(prefix, background)
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 9 def for_prefix(prefix, background) vnics = VnicCollection.new links = background.dladm 'show-vnic', '-po link,over,vid,macaddress' re_separator = /(?<!\\):/ links.each_line do |line| next unless line.start_with?(prefix) link, over, vid, macaddr = line.chomp.split(re_separator) # macaddr being the only place escaping takes place, unescape it # by replacing \: -> : macaddr.gsub!(/\\:/, ':') # Assumes that vid 0 is always the 'no vlan' VLAN over = "#{over}:#{vid}" if vid.to_i > 0 if md=link.match(/^(?<vm>.*)_(?<link_no>\d+)$/) vnics << Vnic.new(md[:vm], Integer(md[:link_no]), over, macaddr) end end vnics end
new(prefix, number, over, macaddr=nil)
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 45 def initialize(prefix, number, over, macaddr=nil) @prefix, @number, @over = prefix, number, over @macaddr = macaddr && Network::MacAddress.new(macaddr) if vlan_tagged? @interface, @vlan = @over.split(':') else @interface = @over @vlan = nil end end
Public Instance Methods
==(other)
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 65 def ==(other) self.prefix == other.prefix && self.number == other.number && self.over == other.over && self.macaddr == other.macaddr end
create(backend)
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 83 def create backend opts = ["-l #{interface}"] opts << "-v #{vlan}" if vlan_tagged? opts << "--mac-address #{macaddr}" if mac_address? backend.dladm 'create-vnic', *opts, vnic_name end
mac_address?()
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 79 def mac_address? @macaddr end
to_s()
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 72 def to_s "#{vnic_name} (#{vlan || 'g'}/#{macaddr})" end
vlan_tagged?()
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 76 def vlan_tagged? @over.index(':') end
vnic_name()
click to toggle source
# File lib/qemu-toolkit/vnic.rb, line 92 def vnic_name "#{prefix}_#{number}" end