lib/packetgen/header/ipv6/hop_by_hop.rb in packetgen-2.6.0 vs lib/packetgen/header/ipv6/hop_by_hop.rb in packetgen-2.7.0
- old
+ new
@@ -13,11 +13,11 @@
class Option < Types::TLV
# Known option types
TYPES = {
1 => 'padn',
5 => 'router_alert'
- }
+ }.freeze
# @return [String]
def to_human
case type
when 1
@@ -25,11 +25,11 @@
else
"#{human_type}(#{value.to_s.inspect})"
end
end
end
-
+
# Special option pad1, for {HopByHop} IPv6 extension header
# @author Sylvain Daubert
class Pad1 < Types::Fields
# @!attribute pad
# @return [Integer]
@@ -38,11 +38,11 @@
# @return [String]
def to_human
'pad1'
end
end
-
+
# Array of {Option}, for {HopByHop} IPv6 extension header
# @author Sylvain Daubert
class Options < Types::Array
set_of Option
@@ -52,35 +52,35 @@
def read(str)
clear
return self if str.nil?
force_binary str
klass = self.class.class_eval { @klass }
- while str.length > 0
+ until str.empty?
obj = klass.new.read(str)
- if obj.type == 0
- obj = Pad1.new.read(str)
- end
+ obj = Pad1.new.read(str) if obj.type.zero?
self.push obj
str.slice!(0, obj.sz)
end
self
end
# Get options as a binary string. Add padding if needed.
# @return [String]
def to_s
str = super
- case str.size % 8
+ case (str.size + 2) % 8
when 0
return str
when 7
# only on byte needed: use pad1 option
+ self << Pad1.new
str << [0].pack('C')
else
# use padn option
- len = 8 - (str.size % 8) - 4
+ len = 8 - 2 - (str.size % 8) - 2
padn = Option.new(type: 'padn', value: "\x00" * len)
+ self << padn
str << padn.to_s
end
str
end
end
@@ -125,10 +125,10 @@
self[:body].read str[real_length..-1]
self
end
end
end
-
+
self.add_class IPv6::HopByHop
- IPv6.bind_header IPv6::HopByHop, next: 0
+ IPv6.bind IPv6::HopByHop, next: 0
end
end