class TestLab::Interface

Interface Class

@author Zachary Patten <zachary AT jovelabs DOT com>

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/testlab/interface.rb, line 21
def initialize(*args)
  @ui = TestLab.ui

  @ui.logger.debug { "Loading Interface" }
  super(*args)

  self.address ||= generate_ip
  self.mac     ||= generate_mac

  @ui.logger.debug { "Interface '#{self.id}' Loaded" }
end

Public Instance Methods

cidr() click to toggle source

CIDR mask for the interface

# File lib/testlab/interface.rb, line 39
def cidr
  TestLab::Utility.cidr(self.address)
end
generate_ip() click to toggle source

Generate IP address

Generates an RFC compliant private IP address.

@return [String] A random, private IP address in the 192.168.0.1/24

range.
# File lib/testlab/interface.rb, line 59
def generate_ip
  crc32  = Zlib.crc32(self.id.to_s)
  offset = crc32.modulo(255)

  octets = [ 192..192,
             168..168,
             0..254,
             1..254 ]
  ip = Array.new
  for x in 1..4 do
    ip << octets[x-1].to_a[offset.modulo(octets[x-1].count)].to_s
  end
  "#{ip.join(".")}/24"
end
generate_mac() click to toggle source

Generate MAC address

Generates an RFC compliant private MAC address.

@return [String] A random, private MAC address.

# File lib/testlab/interface.rb, line 79
def generate_mac
  crc32  = Zlib.crc32(self.id.to_s)
  offset = crc32.modulo(255)

  digits = [ %w(0),
             %w(0),
             %w(0),
             %w(0),
             %w(5),
             %w(e),
             %w(0 1 2 3 4 5 6 7 8 9 a b c d e f),
             %w(0 1 2 3 4 5 6 7 8 9 a b c d e f),
             %w(5 6 7 8 9 a b c d e f),
             %w(3 4 5 6 7 8 9 a b c d e f),
             %w(0 1 2 3 4 5 6 7 8 9 a b c d e f),
             %w(0 1 2 3 4 5 6 7 8 9 a b c d e f) ]
  mac = ""
  for x in 1..12 do
    mac += digits[x-1][offset.modulo(digits[x-1].count)]
    mac += ":" if (x.modulo(2) == 0) && (x != 12)
  end
  mac
end
ip() click to toggle source

IP address for the interface

# File lib/testlab/interface.rb, line 34
def ip
  TestLab::Utility.ip(self.address)
end
netmask() click to toggle source

Netmask for the interface

# File lib/testlab/interface.rb, line 44
def netmask
  TestLab::Utility.netmask(self.address)
end
ptr() click to toggle source

PTR record for the interface

# File lib/testlab/interface.rb, line 49
def ptr
  TestLab::Utility.ptr(self.address)
end