class PacketGen::Header::DNS::OPT

OPT pseudo-RR. Used by Extended DNS (EDNS(0), cf. RFC 6891).

a OPT record may contain zero or more {Option options} in its {#rdata}. @author Sylvain Daubert @since 1.3.0 @since 3.1.1 {#options} is a {ArrayOfOptions}

Public Class Methods

new(dns, options={}) click to toggle source

@param [DNS] dns @param [Hash] options @option options [String] :name domain as a dotted string. Default to +“.”+ @option options [Integer,String] :type see {TYPES}. Default to +'OPT'+ @option options [Integer] :udp_size UDP maximum size. Also :rrclass.

Default to 512

@option options [Integer] :ext_rcode @option options [Integer] :version @option options [Boolean] :do DO bit @option options [Integer] :ttl set ext_rcode, version, do and

+z+ at once

@option options [Integer] :rdlength if not provided, automatically set

from +:rdata+ length

@option options [String] :rdata

Calls superclass method
# File lib/packetgen/header/dns/opt.rb, line 38
def initialize(dns, options={})
  opts = { name: '.', rrclass: 512, type: 41 }.merge!(options)
  super dns, opts

  self.udp_size = options[:udp_size] if options[:udp_size]
  self.ext_rcode = options[:ext_rcode] if options[:ext_rcode]
  self.version = options[:version] if options[:version]
  self.do = options[:do] unless options[:do].nil?
end

Public Instance Methods

do=(value=nil) click to toggle source

@overload do=(value)

Setter EDNS do
@param [Boolean] value
@return [Boolean]

@overload do?

Getter for EDNS do
@return [Boolean]

@return [Boolean]

# File lib/packetgen/header/dns/opt.rb, line 90
def do=(value=nil)
  b = value ? 1 : 0
  unless value.nil?
    self[:ttl].value = self[:ttl].to_i & (0xffffffff & ~(1 << 15))
    self[:ttl].value |= (b & 1) << 15
  end
  ((self[:ttl].to_i >> 15) & 1) == 1
end
Also aliased as: do?
do?(value=nil)
Alias for: do=
ext_rcode(value=nil)
Alias for: ext_rcode=
ext_rcode=(value=nil) click to toggle source

@overload ext_rcode=(value)

Setter for upper 8 bits of extended 12-bit RCODE
@param [Integer] value
@return [Integer]

@overload ext_rcode

Getter for upper 8 bits of extended 12-bit RCODE
@return [Integer]

@return [Integer]

# File lib/packetgen/header/dns/opt.rb, line 56
def ext_rcode=(value=nil)
  if value
    self[:ttl].value = self[:ttl].to_i & (0xffffffff & ~(0xff << 24))
    self[:ttl].value |= (value & 0xff) << 24
  end
  (self[:ttl].to_i >> 24) & 0xff
end
Also aliased as: ext_rcode
human_flags() click to toggle source

@return [String]

# File lib/packetgen/header/dns/opt.rb, line 121
def human_flags
  do? ? 'do' : 'none'
end
to_human() click to toggle source

@return [String]

# File lib/packetgen/header/dns/opt.rb, line 126
def to_human
  "#{name} #{human_type} UDPsize:#{udp_size} " \
  "extRCODE:#{ext_rcode} EDNSversion:#{version} flags:#{human_flags} " \
  "options:#{options.empty? ? 'none' : options.to_human}"
end
version(ver=nil)
Alias for: version=
version=(ver=nil) click to toggle source

@overload version=(ver)

Setter EDNS version
@param [Integer] ver
@return [Integer]

@overload version

Getter for EDNS version
@return [Integer]

@return [Integer]

# File lib/packetgen/header/dns/opt.rb, line 73
def version=(ver=nil)
  if ver
    self[:ttl].value = self[:ttl].to_i & (0xffffffff & ~(0xff << 16))
    self[:ttl].value |= (ver & 0xff) << 16
  end
  (self[:ttl].to_i >> 16) & 0xff
end
Also aliased as: version
z(value=nil)
Alias for: z=
z=(value=nil) click to toggle source

@overload z=(value)

@param [Integer] value
@return [Integer]

@overload z

@return [Integer]

@return [Integer]

# File lib/packetgen/header/dns/opt.rb, line 106
def z=(value=nil)
  if value
    self[:ttl].value = self[:ttl].to_i & (0xffffffff & ~0x7fff)
    self[:ttl].value |= value & 0x7fff
  end
  self[:ttl].to_i & 0x7fff
end
Also aliased as: z