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