IPv6Header is complete IPv6 struct, used in IPv6Packet.

Header Definition

 Fixnum (4 bits)   :ipv6_v      Default: 6     # Versiom
 Fixnum (8 bits)   :ipv6_class  Defualt: 0     # Class
 Fixnum (20 bits)  :ipv6_label  Defualt: 0     # Label
 Int16             :ipv6_len    Default: calc  # Payload length
 Int8              :ipv6_next                  # Next Header
 Int8              :ipv6_hop    Default: 0xff  # Hop limit
 AddrIpv6          :ipv6_src
 AddrIpv6          :ipv6_dst
 String            :body
Methods
I
N
R
T
Included Modules
Class Public methods
new(args={})
# File lib/packetfu/protos/ipv6.rb, line 79
                def initialize(args={})
                        super(
                                (args[:ipv6_v] || 6),
                                (args[:ipv6_class] || 0),
                                (args[:ipv6_label] || 0),
                                Int16.new(args[:ipv6_len]),
                                Int8.new(args[:ipv6_next]),
                                Int8.new(args[:ipv6_hop] || 0xff),
                                AddrIpv6.new.read(args[:ipv6_src] || ("\x00" * 16)),
                                AddrIpv6.new.read(args[:ipv6_dst] || ("\x00" * 16)),
                                StructFu::String.new.read(args[:body])
                        )
                end
Instance Public methods
ipv6_calc_len()

Calculates the payload length.

# File lib/packetfu/protos/ipv6.rb, line 151
                def ipv6_calc_len
                        self[:ipv6_len] = body.to_s.length
                end
ipv6_class()

Getter for the traffic class.

# File lib/packetfu/protos/ipv6.rb, line 124
                def ipv6_class; self[:ipv6_class].to_i; end
ipv6_class=(i)

Setter for the traffic class.

# File lib/packetfu/protos/ipv6.rb, line 122
                def ipv6_class=(i); self[:ip_class] = i.to_i; end
ipv6_daddr()

Get the destination address in a more readable form.

This method is also aliased as ipv6_dst_readable
# File lib/packetfu/protos/ipv6.rb, line 176
                def ipv6_daddr
                        self[:ipv6_dst].to_x
                end
ipv6_daddr=(str)

Set the destination address in a more readable form.

# File lib/packetfu/protos/ipv6.rb, line 181
                def ipv6_daddr=(str)
                        self[:ipv6_dst].read_x(str)
                end
ipv6_dst()

Getter for the destination address.

# File lib/packetfu/protos/ipv6.rb, line 148
                def ipv6_dst; self[:ipv6_dst].to_i; end
ipv6_dst=(i)

Setter for the destination address.

# File lib/packetfu/protos/ipv6.rb, line 146
                def ipv6_dst=(i); typecast i; end
ipv6_dst_readable()

Alias for ipv6_daddr

ipv6_hop()

Getter for the hop limit.

# File lib/packetfu/protos/ipv6.rb, line 140
                def ipv6_hop; self[:ipv6_hop].to_i; end
ipv6_hop=(i)

Setter for the hop limit.

# File lib/packetfu/protos/ipv6.rb, line 138
                def ipv6_hop=(i); typecast i; end
ipv6_label()

Getter for the flow label.

# File lib/packetfu/protos/ipv6.rb, line 128
                def ipv6_label; self[:ipv6_label].to_i; end
ipv6_label=(i)

Setter for the flow label.

# File lib/packetfu/protos/ipv6.rb, line 126
                def ipv6_label=(i); self[:ip_label] = i.to_i; end
ipv6_len()

Getter for the payload length.

# File lib/packetfu/protos/ipv6.rb, line 132
                def ipv6_len; self[:ipv6_len].to_i; end
ipv6_len=(i)

Setter for the payload length.

# File lib/packetfu/protos/ipv6.rb, line 130
                def ipv6_len=(i); typecast i; end
ipv6_next()

Getter for the next protocol header.

# File lib/packetfu/protos/ipv6.rb, line 136
                def ipv6_next; self[:ipv6_next].to_i; end
ipv6_next=(i)

Setter for the next protocol header.

# File lib/packetfu/protos/ipv6.rb, line 134
                def ipv6_next=(i); typecast i; end
ipv6_recalc(arg=:all)

Recalculates the calculatable fields for this object.

# File lib/packetfu/protos/ipv6.rb, line 156
                def ipv6_recalc(arg=:all)
                        case arg
                        when :ipv6_len
                                ipv6_calc_len
                        when :all
                                ipv6_recalc(:len)
                        end
                end
ipv6_saddr()

Get the source address in a more readable form.

This method is also aliased as ipv6_src_readable
# File lib/packetfu/protos/ipv6.rb, line 166
                def ipv6_saddr
                        self[:ipv6_src].to_x
                end
ipv6_saddr=(str)

Set the source address in a more readable form.

# File lib/packetfu/protos/ipv6.rb, line 171
                def ipv6_saddr=(str)
                        self[:ipv6_src].read_x(str)
                end
ipv6_src()

Getter for the source address.

# File lib/packetfu/protos/ipv6.rb, line 144
                def ipv6_src; self[:ipv6_src].to_i; end
ipv6_src=(i)

Setter for the source address.

# File lib/packetfu/protos/ipv6.rb, line 142
                def ipv6_src=(i); typecast i; end
ipv6_src_readable()

Alias for ipv6_saddr

ipv6_v()

Getter for the version (usually, 6).

# File lib/packetfu/protos/ipv6.rb, line 120
                def ipv6_v; self[:ipv6_v].to_i; end
ipv6_v=(i)

Setter for the version (usually, 6).

# File lib/packetfu/protos/ipv6.rb, line 118
                def ipv6_v=(i); self[:ip_v] = i.to_i; end
read(str)

Reads a string to populate the object.

# File lib/packetfu/protos/ipv6.rb, line 102
                def read(str)
                        force_binary(str)
                        return self if str.nil?
                        self[:ipv6_v] = str[0,1].unpack("C").first >> 4
                        self[:ipv6_class] = (str[0,2].unpack("n").first & 0x0ff0) >> 4
                        self[:ipv6_label] = str[0,4].unpack("N").first & 0x000fffff
                        self[:ipv6_len].read(str[4,2])
                        self[:ipv6_next].read(str[6,1])
                        self[:ipv6_hop].read(str[7,1])
                        self[:ipv6_src].read(str[8,16])
                        self[:ipv6_dst].read(str[24,16])
                        self[:body].read(str[40,str.size]) if str.size > 40
                        self
                end
to_s()

Returns the object in string form.

# File lib/packetfu/protos/ipv6.rb, line 94
                def to_s
                        bytes_v_class_label = [(self.ipv6_v << 28) +
                         (self.ipv6_class << 20) +
                         self.ipv6_label].pack("N")
                        bytes_v_class_label + (self.to_a[3,6].map {|x| x.to_s}.join)
                end