class Lib::DHCP::Option21

Public Class Methods

new(*address) click to toggle source
Calls superclass method Lib::DHCP::Option::new
# File lib/lib/dhcp/options/option21.rb, line 19
def initialize(*address)

  address.map! do |ip|
    if ip.is_a? Net::Address::IPv4
      ip
    elsif ip.is_a?Array
      Net::Address::IPv4.new(*ip)
    else
      Net::Address::IPv4.new(ip)
    end
  end

  super POLICY_FILTER, address

end

Private Class Methods

unpack(oid, len, payload) click to toggle source
# File lib/lib/dhcp/options/option21.rb, line 71
def self.unpack(oid, len, payload)
  raise ArgumentError, "OID Mismatch for POLICYFILTER Option - #{oid}" unless oid.to_i == POLICY_FILTER
  raise ArgumentError, "Wrong POLICYFILTER Option length - #{len}" unless (len%8) == 0
  address = payload.to_s.unpack('N*')
  i = 0
  a = []

  while i <= (len/8)
    a << Net::Address::IPv4.new(address[i], address[i+1])
    i += 2
  end
  self.new *a
end

Public Instance Methods

<<(address) click to toggle source
# File lib/lib/dhcp/options/option21.rb, line 56
def <<(address)
  address.map! do |ip|
    if ip.is_a? Net::Address::IPv4
      ip
    elsif ip.is_a?Array
      Net::Address::IPv4.new(*ip)
    else
      Net::Address::IPv4.new(ip)
    end
  end
  @payload << address
end
len() click to toggle source
# File lib/lib/dhcp/options/option21.rb, line 39
def len
  @payload.size * 8
end
pack() click to toggle source
# File lib/lib/dhcp/options/option21.rb, line 35
def pack
  [POLICY_FILTER, @payload.size * 8, *@payload.map{|ip| [ip.to_i, ip.mask.to_i]}.flatten].pack('C2N*')
end
payload=(address) click to toggle source
# File lib/lib/dhcp/options/option21.rb, line 43
def payload=(address)
  address.map! do |ip|
    if ip.is_a?Net::Address::IPv4
      ip
    elsif ip.is_a?Array
      Net::Address::IPv4.new(*ip)
    else
      Net::Address::IPv4.new(ip)
    end
  end
  @payload = address
end