class Lib::DHCP::Option122::SubOption::Option3

Attributes

type[R]

Public Class Methods

new(tsp_server_address) click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 113
def initialize(tsp_server_address)
  @oid = 3

  case tsp_server_address
    when Net::Address::IPv4
      @type = 1
      @payload = tsp_server_address
    when String
      begin
        @payload = Net::Address::IPv4.new(tsp_server_address)
        @type = 1
      rescue ArgumentError
        @type = 0
        @payload = tsp_server_address
      end
    else
      raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
  end
end
unpack(oid, len, payload) click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 157
def self.unpack(oid, len, payload)
  raise ArgumentError, "OID mismatch, require 3, #{oid} given" unless oid == 3
  type = payload.unpack('C').first.to_i
  if type == 1
    raise ArgumentError, "Wrong TSP's Provisioning Server Address Sub-Option length for type 1. Should by 5 but #{len} given" unless len == 5
    self.new Net::Address::IPv4.new(payload.unpack('@N').first)
  elsif type == 0
    self.new payload.unpack('@a*').first
  else
    raise ArgumentError, "Unknown TSP's Provisioning Server Address Sub-Option type #{type}"
  end
end

Public Instance Methods

len() click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 137
def len
  if type == 1
    5
  else
    @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 2
    #@payload.size + 1
  end
end
name() click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 133
def name
  "TSP's Provisioning Server Address Sub-Option"
end
pack() click to toggle source
# File lib/lib/dhcp/options/option122.rb, line 146
def pack
  if @type == 1
    [@oid.to_i, self.len.to_i, 1, @payload.to_i].pack('C3N')
  elsif @type == 0
    fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
    [@oid.to_i, fqdn_encode.size + 2, 0, *fqdn_encode,0].pack('C*')
  else
    raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
  end
end