packetgen 3.3.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -21
  3. data/lib/packetgen/capture.rb +2 -2
  4. data/lib/packetgen/config.rb +0 -1
  5. data/lib/packetgen/deprecation.rb +7 -7
  6. data/lib/packetgen/header/arp.rb +13 -13
  7. data/lib/packetgen/header/asn1_base.rb +1 -1
  8. data/lib/packetgen/header/base.rb +17 -18
  9. data/lib/packetgen/header/bootp.rb +32 -34
  10. data/lib/packetgen/header/dhcp/option.rb +19 -19
  11. data/lib/packetgen/header/dhcp/options.rb +1 -1
  12. data/lib/packetgen/header/dhcp.rb +3 -3
  13. data/lib/packetgen/header/dhcpv6/duid.rb +16 -16
  14. data/lib/packetgen/header/dhcpv6/option.rb +53 -53
  15. data/lib/packetgen/header/dhcpv6/options.rb +1 -1
  16. data/lib/packetgen/header/dhcpv6/relay.rb +5 -5
  17. data/lib/packetgen/header/dhcpv6.rb +6 -6
  18. data/lib/packetgen/header/dns/name.rb +14 -10
  19. data/lib/packetgen/header/dns/opt.rb +2 -2
  20. data/lib/packetgen/header/dns/option.rb +11 -11
  21. data/lib/packetgen/header/dns/qdsection.rb +1 -1
  22. data/lib/packetgen/header/dns/question.rb +6 -8
  23. data/lib/packetgen/header/dns/rr.rb +56 -43
  24. data/lib/packetgen/header/dns/rrsection.rb +4 -4
  25. data/lib/packetgen/header/dns.rb +27 -30
  26. data/lib/packetgen/header/dot11/control.rb +11 -11
  27. data/lib/packetgen/header/dot11/data.rb +20 -20
  28. data/lib/packetgen/header/dot11/element.rb +4 -4
  29. data/lib/packetgen/header/dot11/management.rb +8 -8
  30. data/lib/packetgen/header/dot11/sub_mngt.rb +39 -53
  31. data/lib/packetgen/header/dot11.rb +88 -93
  32. data/lib/packetgen/header/dot1q.rb +10 -12
  33. data/lib/packetgen/header/dot1x.rb +9 -9
  34. data/lib/packetgen/header/eap/fast.rb +4 -4
  35. data/lib/packetgen/header/eap/md5.rb +6 -6
  36. data/lib/packetgen/header/eap/tls.rb +13 -15
  37. data/lib/packetgen/header/eap/ttls.rb +13 -15
  38. data/lib/packetgen/header/eap.rb +22 -22
  39. data/lib/packetgen/header/eth.rb +18 -18
  40. data/lib/packetgen/header/gre.rb +8 -10
  41. data/lib/packetgen/header/http/headers.rb +2 -2
  42. data/lib/packetgen/header/http/request.rb +17 -16
  43. data/lib/packetgen/header/http/response.rb +18 -17
  44. data/lib/packetgen/header/http/verbs.rb +1 -3
  45. data/lib/packetgen/header/icmp.rb +8 -8
  46. data/lib/packetgen/header/icmpv6.rb +3 -3
  47. data/lib/packetgen/header/igmp.rb +8 -8
  48. data/lib/packetgen/header/igmpv3/group_record.rb +12 -12
  49. data/lib/packetgen/header/igmpv3/mq.rb +16 -18
  50. data/lib/packetgen/header/igmpv3/mr.rb +4 -4
  51. data/lib/packetgen/header/igmpv3.rb +7 -7
  52. data/lib/packetgen/header/ip/addr.rb +13 -13
  53. data/lib/packetgen/header/ip/option.rb +31 -33
  54. data/lib/packetgen/header/ip/options.rb +1 -1
  55. data/lib/packetgen/header/ip.rb +37 -72
  56. data/lib/packetgen/header/ipv6/addr.rb +14 -14
  57. data/lib/packetgen/header/ipv6/extension.rb +8 -8
  58. data/lib/packetgen/header/ipv6/hop_by_hop.rb +9 -9
  59. data/lib/packetgen/header/ipv6.rb +20 -22
  60. data/lib/packetgen/header/llc.rb +17 -17
  61. data/lib/packetgen/header/mdns.rb +1 -1
  62. data/lib/packetgen/header/mld.rb +6 -6
  63. data/lib/packetgen/header/mldv2/mcast_address_record.rb +11 -11
  64. data/lib/packetgen/header/mldv2/mlq.rb +21 -23
  65. data/lib/packetgen/header/mldv2/mlr.rb +8 -8
  66. data/lib/packetgen/header/ospfv2/db_description.rb +11 -12
  67. data/lib/packetgen/header/ospfv2/hello.rb +11 -11
  68. data/lib/packetgen/header/ospfv2/ls_ack.rb +1 -1
  69. data/lib/packetgen/header/ospfv2/ls_request.rb +9 -9
  70. data/lib/packetgen/header/ospfv2/ls_update.rb +3 -3
  71. data/lib/packetgen/header/ospfv2/lsa.rb +54 -58
  72. data/lib/packetgen/header/ospfv2/lsa_header.rb +9 -9
  73. data/lib/packetgen/header/ospfv2.rb +27 -29
  74. data/lib/packetgen/header/ospfv3/db_description.rb +13 -14
  75. data/lib/packetgen/header/ospfv3/hello.rb +12 -12
  76. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +17 -19
  77. data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -2
  78. data/lib/packetgen/header/ospfv3/ls_request.rb +9 -9
  79. data/lib/packetgen/header/ospfv3/ls_update.rb +4 -4
  80. data/lib/packetgen/header/ospfv3/lsa.rb +48 -51
  81. data/lib/packetgen/header/ospfv3/lsa_header.rb +9 -9
  82. data/lib/packetgen/header/ospfv3.rb +25 -27
  83. data/lib/packetgen/header/sctp/chunk.rb +44 -41
  84. data/lib/packetgen/header/sctp/error.rb +52 -52
  85. data/lib/packetgen/header/sctp/parameter.rb +38 -38
  86. data/lib/packetgen/header/sctp.rb +5 -5
  87. data/lib/packetgen/header/snmp.rb +2 -2
  88. data/lib/packetgen/header/tcp/option.rb +45 -39
  89. data/lib/packetgen/header/tcp/options.rb +2 -2
  90. data/lib/packetgen/header/tcp.rb +55 -44
  91. data/lib/packetgen/header/tftp.rb +16 -16
  92. data/lib/packetgen/header/udp.rb +8 -8
  93. data/lib/packetgen/header.rb +9 -10
  94. data/lib/packetgen/headerable.rb +13 -3
  95. data/lib/packetgen/inspect.rb +2 -2
  96. data/lib/packetgen/packet.rb +54 -37
  97. data/lib/packetgen/pcap.rb +15 -4
  98. data/lib/packetgen/pcapng/block.rb +18 -17
  99. data/lib/packetgen/pcapng/epb.rb +13 -15
  100. data/lib/packetgen/pcapng/file.rb +3 -97
  101. data/lib/packetgen/pcapng/idb.rb +9 -11
  102. data/lib/packetgen/pcapng/shb.rb +13 -15
  103. data/lib/packetgen/pcapng/spb.rb +8 -10
  104. data/lib/packetgen/pcapng/unknown_block.rb +6 -17
  105. data/lib/packetgen/pcapng.rb +4 -4
  106. data/lib/packetgen/pcaprub_wrapper.rb +17 -1
  107. data/lib/packetgen/proto.rb +1 -1
  108. data/lib/packetgen/unknown_packet.rb +2 -2
  109. data/lib/packetgen/utils/arp_spoofer.rb +18 -19
  110. data/lib/packetgen/utils.rb +2 -2
  111. data/lib/packetgen/version.rb +1 -1
  112. data/lib/packetgen.rb +4 -3
  113. metadata +34 -29
  114. data/lib/packetgen/types/abstract_tlv.rb +0 -278
  115. data/lib/packetgen/types/array.rb +0 -287
  116. data/lib/packetgen/types/cstring.rb +0 -109
  117. data/lib/packetgen/types/enum.rb +0 -171
  118. data/lib/packetgen/types/fieldable.rb +0 -66
  119. data/lib/packetgen/types/fields.rb +0 -622
  120. data/lib/packetgen/types/int.rb +0 -473
  121. data/lib/packetgen/types/int_string.rb +0 -102
  122. data/lib/packetgen/types/length_from.rb +0 -54
  123. data/lib/packetgen/types/oui.rb +0 -52
  124. data/lib/packetgen/types/string.rb +0 -97
  125. data/lib/packetgen/types/tlv.rb +0 -161
  126. data/lib/packetgen/types.rb +0 -26
@@ -16,28 +16,28 @@ module PacketGen
16
16
  # @!attribute body
17
17
  # LSA body
18
18
  # @return [String]
19
- define_field :body, Types::String,
20
- builder: ->(h, t) { t.new(length_from: -> { h.length - 20 }) }
19
+ define_attr :body, BinStruct::String,
20
+ builder: ->(h, t) { t.new(length_from: -> { h.length - 20 }) }
21
21
  end
22
22
 
23
23
  # This class handles TOS metrics for {Link links} in a {LSARouter
24
24
  # LSA router payload}.
25
25
  # @author Sylvain Daubert
26
- class TosMetric < Types::Fields
27
- include Types::Fieldable
26
+ class TosMetric < BinStruct::Struct
27
+ include BinStruct::Structable
28
28
 
29
29
  # @!attribute tos
30
30
  # 8-bit IP Type of Service that this metric refers to.
31
31
  # @return [Integer]
32
- define_field :tos, Types::Int8
32
+ define_attr :tos, BinStruct::Int8
33
33
  # @!attribute reserved
34
34
  # 8-bit reserved field.
35
35
  # @return [Integer]
36
- define_field :reserved, Types::Int8, default: 0
36
+ define_attr :reserved, BinStruct::Int8, default: 0
37
37
  # @!attribute tos_metric
38
38
  # 16-bit TOS-specific metric information..
39
39
  # @return [Integer]
40
- define_field :tos_metric, Types::Int16
40
+ define_attr :tos_metric, BinStruct::Int16
41
41
 
42
42
  # @return [String]
43
43
  def to_human
@@ -45,37 +45,37 @@ module PacketGen
45
45
  end
46
46
  end
47
47
 
48
- # This class defines a specialized {Types::Array array} to handle series
48
+ # This class defines a specialized {BinStruct::Array array} to handle series
49
49
  # of {TosMetric TOS metrics}.
50
50
  # @author Sylvain Daubert
51
- class ArrayOfTosMetric < Types::Array
51
+ class ArrayOfTosMetric < BinStruct::Array
52
52
  set_of TosMetric
53
53
  end
54
54
 
55
55
  # This class handles links in a {LSARouter LSA router payload}.
56
56
  # @author Sylvain Daubert
57
- class Link < Types::Fields
58
- include Types::Fieldable
57
+ class Link < BinStruct::Struct
58
+ include BinStruct::Structable
59
59
 
60
60
  # @!attribute id
61
61
  # @return [IP::Addr]
62
- define_field :id, IP::Addr
62
+ define_attr :id, IP::Addr
63
63
  # @!attribute data
64
64
  # @return [IP::Addr]
65
- define_field :data, IP::Addr
65
+ define_attr :data, IP::Addr
66
66
  # @!attribute type
67
67
  # @return [Integer]
68
- define_field :type, Types::Int8
68
+ define_attr :type, BinStruct::Int8
69
69
  # @!attribute tos_count
70
70
  # @return [Integer]
71
- define_field :tos_count, Types::Int8
71
+ define_attr :tos_count, BinStruct::Int8
72
72
  # @!attribute metric
73
73
  # @return [Integer]
74
- define_field :metric, Types::Int16
74
+ define_attr :metric, BinStruct::Int16
75
75
  # @!attribute tos
76
76
  # Additionnal TOS metrics
77
77
  # @return [ArrayOfTosMetric]
78
- define_field :tos, ArrayOfTosMetric, builder: ->(h, t) { t.new(counter: h[:tos_count]) }
78
+ define_attr :tos, ArrayOfTosMetric, builder: ->(h, t) { t.new(counter: h[:tos_count]) }
79
79
 
80
80
  # @return [String]
81
81
  def to_human
@@ -83,10 +83,10 @@ module PacketGen
83
83
  end
84
84
  end
85
85
 
86
- # This class defines a specialized {Types::Array array} to handle series
86
+ # This class defines a specialized {BinStruct::Array array} to handle series
87
87
  # of {Link Links}.
88
88
  # @author Sylvain Daubert
89
- class ArrayOfLink < Types::Array
89
+ class ArrayOfLink < BinStruct::Array
90
90
  set_of Link
91
91
  end
92
92
 
@@ -94,30 +94,28 @@ module PacketGen
94
94
  #
95
95
  # A LSA router payload is composed of:
96
96
  # * a header (see methods inherited from {LSAHeader}),
97
- # * a 16-bit flag word {#u16} ({Types::Int16}),
98
- # * a 16-bit {#link_count} field ({Types::Int16}),
97
+ # * a 16-bit flag word {#u16} ({BinStruct::Int16}),
98
+ # * a 16-bit {#link_count} field ({BinStruct::Int16}),
99
99
  # * an array of {#links} ({ArrayOfLink}).
100
100
  # @author Sylvain Daubert
101
101
  class LSARouter < LSAHeader
102
102
  # @attribute u16
103
103
  # 16-bit flag word
104
104
  # @return [Integer]
105
- define_field :u16, Types::Int16
105
+ # @attribute v_flag
106
+ # @return [Integer]
107
+ # @attribute e_flag
108
+ # @return [Integer]
109
+ # @attribute b_flag
110
+ # @return [Integer]
111
+ define_bit_attr :u16, z: 5, v_flag: 1, e_flag: 1, b_flag: 1, zz: 8
106
112
  # @attribute link_count
107
113
  # Number of links
108
114
  # @return [Integer]
109
- define_field :link_count, Types::Int16
115
+ define_attr :link_count, BinStruct::Int16
110
116
  # @attribute links
111
117
  # @return [ArrayOfLink]
112
- define_field :links, ArrayOfLink, builder: ->(h, t) { t.new(counter: h[:link_count]) }
113
-
114
- # @attribute v_flag
115
- # @return [Boolean]
116
- # @attribute e_flag
117
- # @return [Boolean]
118
- # @attribute b_flag
119
- # @return [Boolean]
120
- define_bit_fields_on :u16, :z, 5, :v_flag, :e_flag, :b_flag, :zz, 8
118
+ define_attr :links, ArrayOfLink, builder: ->(h, t) { t.new(counter: h[:link_count]) }
121
119
  end
122
120
 
123
121
  # This class handles LSA Network payloads.
@@ -130,37 +128,35 @@ module PacketGen
130
128
  class LSANetwork < LSAHeader
131
129
  # @!attribute netmask
132
130
  # @return [IP::Addr]
133
- define_field :netmask, IP::Addr
131
+ define_attr :netmask, IP::Addr
134
132
  # @!attribute routers
135
133
  # List of routers in network
136
134
  # @return [IP::ArrayOfAddr]
137
- define_field :routers, IP::ArrayOfAddr,
138
- builder: ->(h, t) { t.new(length_from: -> { h.length - 24 }) }
135
+ define_attr :routers, IP::ArrayOfAddr,
136
+ builder: ->(h, t) { t.new(length_from: -> { h.length - 24 }) }
139
137
  end
140
138
 
141
139
  # This class handles external links in {LSAASExternal LSA AS-External payloads}.
142
140
  # @author Sylvain Daubert
143
- class External < Types::Fields
144
- include Types::Fieldable
141
+ class External < BinStruct::Struct
142
+ include BinStruct::Structable
145
143
 
146
144
  # @!attribute u8
147
145
  # @return [Integer]
148
- define_field :u8, Types::Int8
146
+ # @!attribute e_flag
147
+ # @return [Integer]
148
+ # @!attribute tos
149
+ # @return [Integer]
150
+ define_bit_attr :u8, e_flag: 1, tos: 7
149
151
  # @!attribute metric
150
152
  # @return [Integer]
151
- define_field :metric, Types::Int24
153
+ define_attr :metric, BinStruct::Int24
152
154
  # @!attribute forwarding_addr
153
155
  # @return [IP::Addr]
154
- define_field :forwarding_addr, IP::Addr
156
+ define_attr :forwarding_addr, IP::Addr
155
157
  # @!attribute ext_route_tag
156
158
  # @return [Integer]
157
- define_field :ext_route_tag, Types::Int32
158
-
159
- # @!attribute e_flag
160
- # @return [Boolean]
161
- # @!attribute tos
162
- # @return [Integer]
163
- define_bit_fields_on :u8, :e_flag, :tos, 7
159
+ define_attr :ext_route_tag, BinStruct::Int32
164
160
 
165
161
  # @return [String]
166
162
  def to_human
@@ -168,10 +164,10 @@ module PacketGen
168
164
  end
169
165
  end
170
166
 
171
- # This class defines a specialized {Types::Array array} to handle series
167
+ # This class defines a specialized {BinStruct::Array array} to handle series
172
168
  # of {External Externals}.
173
169
  # @author Sylvain Daubert
174
- class ArrayOfExternal < Types::Array
170
+ class ArrayOfExternal < BinStruct::Array
175
171
  set_of External
176
172
  end
177
173
 
@@ -185,22 +181,22 @@ module PacketGen
185
181
  class LSAASExternal < LSAHeader
186
182
  # @!attribute netmask
187
183
  # @return [IP::Addr]
188
- define_field :netmask, IP::Addr
184
+ define_attr :netmask, IP::Addr
189
185
  # @!attribute externals
190
186
  # List of external destinations
191
187
  # @return [ArrayOfExternal]
192
- define_field :externals, ArrayOfExternal,
193
- builder: ->(h, t) { t.new(length_from: -> { h.length - 24 }) }
188
+ define_attr :externals, ArrayOfExternal,
189
+ builder: ->(h, t) { t.new(length_from: -> { h.length - 24 }) }
194
190
  end
195
191
 
196
- # This class defines a specialized {Types::Array array} to handle series
192
+ # This class defines a specialized {BinStruct::Array array} to handle series
197
193
  # of {LSA LSAs}. It recognizes known LSA types and infers correct type.
198
194
  # @author Sylvain Daubert
199
- class ArrayOfLSA < Types::Array
195
+ class ArrayOfLSA < BinStruct::Array
200
196
  set_of LSAHeader
201
197
 
202
198
  # @param [Hash] options
203
- # @option options [Types::Int] counter Int object used as a counter for this set
199
+ # @option options [BinStruct::Int] counter Int object used as a counter for this set
204
200
  # @option options [Boolean] only_headers if +true+, only {LSAHeader LSAHeaders}
205
201
  # will be added to this array.
206
202
  def initialize(options={})
@@ -211,7 +207,7 @@ module PacketGen
211
207
  private
212
208
 
213
209
  def record_from_hash(hsh)
214
- raise ArgumentError, 'hash should have :type key' unless hsh.key? :type
210
+ raise ArgumentError, 'hash should have :type key' unless hsh.key?(:type)
215
211
 
216
212
  klass = if @only_headers
217
213
  LSAHeader
@@ -231,8 +227,8 @@ module PacketGen
231
227
  def get_lsa_class_by_human_type(htype)
232
228
  klassname = "LSA#{htype.to_s.delete('-')}"
233
229
  begin
234
- if OSPFv2.const_defined? klassname
235
- OSPFv2.const_get klassname
230
+ if OSPFv2.const_defined?(klassname)
231
+ OSPFv2.const_get(klassname)
236
232
  else
237
233
  LSA
238
234
  end
@@ -29,8 +29,8 @@ module PacketGen
29
29
  # LSA headers are used as-is in {DbDescription} payload. But this class
30
30
  # is also a base class for different LSA class, as {LSARouter}.
31
31
  # @author Sylvain Daubert
32
- class LSAHeader < Types::Fields
33
- include Types::Fieldable
32
+ class LSAHeader < BinStruct::Struct
33
+ include BinStruct::Structable
34
34
 
35
35
  # LSA Types
36
36
  TYPES = {
@@ -44,36 +44,36 @@ module PacketGen
44
44
  # @!attribute age
45
45
  # The time in seconds since the LSA was originated.
46
46
  # @return [Integer]
47
- define_field :age, Types::Int16
47
+ define_attr :age, BinStruct::Int16
48
48
  # @!macro define_options
49
49
  OSPFv2.define_options(self)
50
50
  # @!attribute type
51
51
  # The type of the LSA.
52
52
  # @return [Integer]
53
- define_field :type, Types::Int8Enum, enum: TYPES
53
+ define_attr :type, BinStruct::Int8Enum, enum: TYPES
54
54
  # @!attribute link_state_id
55
55
  # This field identifies the portion of the internet environment
56
56
  # that is being described by the LSA.
57
57
  # @return [String]
58
- define_field :link_state_id, IP::Addr
58
+ define_attr :link_state_id, IP::Addr
59
59
  # @!attribute advertising_router
60
60
  # The Router ID of the router that originated the LSA.
61
61
  # @return [String]
62
- define_field :advertising_router, IP::Addr
62
+ define_attr :advertising_router, IP::Addr
63
63
  # @!attribute sequence_number
64
64
  # @return [Integer]
65
- define_field :sequence_number, Types::Int32
65
+ define_attr :sequence_number, BinStruct::Int32
66
66
  alias seqnum sequence_number
67
67
  alias seqnum= sequence_number=
68
68
  # @!attribute checksum
69
69
  # The Fletcher checksum of the complete contents of the LSA,
70
70
  # including the LSA header but excluding the LS age field.
71
71
  # @return [Integer]
72
- define_field :checksum, Types::Int16
72
+ define_attr :checksum, BinStruct::Int16
73
73
  # @!attribute length
74
74
  # Length of the LSA, including the header.
75
75
  # @return [Integer]
76
- define_field :length, Types::Int16
76
+ define_attr :length, BinStruct::Int16
77
77
 
78
78
  # Compute and set Fletcher-16 checksum on LSA
79
79
  # @return [Integer]
@@ -28,15 +28,15 @@ module PacketGen
28
28
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29
29
  #
30
30
  # An OSPFv2 header consists of:
31
- # * a {#version} field ({Types::Int8}),
32
- # * a {#type} field ({Types::Int8Enum}),
33
- # * a {#length} field ({Types::Int16}). The length includes the header,
34
- # * a {#router_id} field ({Types::Int32}),
35
- # * an {#area_id} field ({Types::Int32}),
36
- # * a {#checksum} field ({Types::Int16}),
37
- # * an {#au_type} field ({Types::Int16Enum}),
38
- # * an {#authentication} field ({Types::Int64}),
39
- # * and a {#body} ({Types::String}).
31
+ # * a {#version} field ({BinStruct::Int8}),
32
+ # * a {#type} field ({BinStruct::Int8Enum}),
33
+ # * a {#length} field ({BinStruct::Int16}). The length includes the header,
34
+ # * a {#router_id} field ({BinStruct::Int32}),
35
+ # * an {#area_id} field ({BinStruct::Int32}),
36
+ # * a {#checksum} field ({BinStruct::Int16}),
37
+ # * an {#au_type} field ({BinStruct::Int16Enum}),
38
+ # * an {#authentication} field ({BinStruct::Int64}),
39
+ # * and a {#body} ({BinStruct::String}).
40
40
  #
41
41
  # == Create an OSPFv2 header
42
42
  # # standalone
@@ -94,38 +94,38 @@ module PacketGen
94
94
  # @!attribute version
95
95
  # 8-bit OSPF version
96
96
  # @return [Integer]
97
- define_field :version, Types::Int8, default: 2
97
+ define_attr :version, BinStruct::Int8, default: 2
98
98
  # @!attribute type
99
99
  # 8-bit OSPF packet type. Types are defined in {TYPES}.
100
100
  # @return [Integer]
101
- define_field :type, Types::Int8Enum, enum: TYPES
101
+ define_attr :type, BinStruct::Int8Enum, enum: TYPES
102
102
  # @!attribute length
103
103
  # 16-bit OSPF packet length
104
104
  # @return [Integer]
105
- define_field :length, Types::Int16
105
+ define_attr :length, BinStruct::Int16
106
106
  # @!attribute router_id
107
107
  # 32-bit router ID
108
108
  # @return [Integer]
109
- define_field :router_id, Types::Int32
109
+ define_attr :router_id, BinStruct::Int32
110
110
  # @!attribute area_id
111
111
  # 32-bit area ID
112
112
  # @return [Integer]
113
- define_field :area_id, Types::Int32
113
+ define_attr :area_id, BinStruct::Int32
114
114
  # @!attribute checksum
115
115
  # 16-bit OSPF packet checksum
116
116
  # @return [Integer]
117
- define_field :checksum, Types::Int16
117
+ define_attr :checksum, BinStruct::Int16
118
118
  # @!attribute au_type
119
119
  # 16-bit authentication type. Types are defined in {AU_TYPES}.
120
120
  # @return [Integer]
121
- define_field :au_type, Types::Int16Enum, enum: AU_TYPES
121
+ define_attr :au_type, BinStruct::Int16Enum, enum: AU_TYPES
122
122
  # @!attribute authentication
123
123
  # 64-bit authentication data
124
124
  # @return [Integer]
125
- define_field :authentication, Types::Int64
125
+ define_attr :authentication, BinStruct::Int64
126
126
  # @!attribute body
127
127
  # @return [String,Base]
128
- define_field :body, Types::String
128
+ define_attr :body, BinStruct::String
129
129
 
130
130
  # @api private
131
131
  # Helper class method to define an OSPFv2 options field.
@@ -137,30 +137,28 @@ module PacketGen
137
137
  # {#n_opt}, {#l_opt}, {#dc_opt}, {#o_opt} and {#dn_opt}.
138
138
  # @return [Integer]
139
139
  # @!attribute dn_opt
140
- # @return [Boolean]
140
+ # @return [Integer]
141
141
  # @!attribute o_opt
142
- # @return [Boolean]
142
+ # @return [Integer]
143
143
  # @!attribute dc_opt
144
144
  # This bit describes the router's handling of demand circuits.
145
- # @return [Boolean]
145
+ # @return [Integer]
146
146
  # @!attribute l_opt
147
147
  # This specifies if a LLS Data block is present.
148
- # @return [Boolean]
148
+ # @return [Integer]
149
149
  # @!attribute n_opt
150
150
  # This bit specifies if NSSA is supported.
151
- # @return [Boolean]
151
+ # @return [Integer]
152
152
  # @!attribute mc_opt
153
153
  # This bit describes whether IP multicast datagrams are forwarded.
154
- # @return [Boolean]
154
+ # @return [Integer]
155
155
  # @!attribute e_opt
156
156
  # This bit describes the way AS-external-LSAs are flooded.
157
- # @return [Boolean]
157
+ # @return [Integer]
158
158
  # @!attribute mt_opt
159
- # @return [Boolean]
159
+ # @return [Integer]
160
160
  def self.define_options(hdr)
161
- hdr.define_field :options, Types::Int8
162
- hdr.define_bit_fields_on :options, :dn_opt, :o_opt, :dc_opt, :l_opt,
163
- :n_opt, :mc_opt, :e_opt, :mt_opt
161
+ hdr.define_bit_attr :options, dn_opt: 1, o_opt: 1, dc_opt: 1, l_opt: 1, n_opt: 1, mc_opt: 1, e_opt: 1, mt_opt: 1
164
162
  end
165
163
 
166
164
  # @api private
@@ -33,14 +33,14 @@ module PacketGen
33
33
  # | ... |
34
34
  #
35
35
  # A DB description payload is composed of:
36
- # * a 8-bit {#reserved} field ({Types::Int8}),
37
- # * a 24-bit {#options} field ({Types::Int24}),
38
- # * a 16-bit {#mtu} field ({Types::Int16}),
39
- # * a 16-bit {#flags} field ({Types::Int16}). Supported flags are:
36
+ # * a 8-bit {#reserved} field ({BinStruct::Int8}),
37
+ # * a 24-bit {#options} field ({BinStruct::Int24}),
38
+ # * a 16-bit {#mtu} field ({BinStruct::Int16}),
39
+ # * a 16-bit {#flags} field ({BinStruct::Int16}). Supported flags are:
40
40
  # * {i_flag},
41
41
  # * {m_flag},
42
42
  # * {ms_flag},
43
- # * a 32-bit {#sequence_number} field ({Types::Int32}),
43
+ # * a 32-bit {#sequence_number} field ({BinStruct::Int32}),
44
44
  # * and an array of {LSAHeader LSAHeaders} ({#lsas}, {ArrayOfLSA}).
45
45
  #
46
46
  # == Create a DbDescription payload
@@ -68,7 +68,7 @@ module PacketGen
68
68
  # @!attribute reserved
69
69
  # 8-bit zero field before {#options} one
70
70
  # @return [Integer]
71
- define_field :reserved, Types::Int8, default: 0
71
+ define_attr :reserved, BinStruct::Int8, default: 0
72
72
 
73
73
  # @!macro define_options
74
74
  OSPFv3.define_options(self)
@@ -76,34 +76,33 @@ module PacketGen
76
76
  # @!attribute mtu
77
77
  # 16-bit interface MTU
78
78
  # @return [Integer]
79
- define_field :mtu, Types::Int16
79
+ define_attr :mtu, BinStruct::Int16
80
80
  # @!attribute flags
81
81
  # 16-bit interface flags ({#i_flag}, {#m_flag} and {#ms_flag})
82
82
  # @return [Integer]
83
- define_field :flags, Types::Int16
84
83
  # @!attribute i_flag
85
84
  # Init bit from {#flags} field
86
- # @return [Boolean]
85
+ # @return [Integer]
87
86
  # @!attribute m_flag
88
87
  # More bit from {#flags} field
89
- # @return [Boolean]
88
+ # @return [Integer]
90
89
  # @!attribute ms_flag
91
90
  # Master/Slave bit from {#flags} field
92
- # @return [Boolean]
93
- define_bit_fields_on :flags, :zz, 13, :i_flag, :m_flag, :ms_flag
91
+ # @return [Integer]
92
+ define_bit_attr :flags, zz: 13, i_flag: 1, m_flag: 1, ms_flag: 1
94
93
 
95
94
  # @!attribute sequence_number
96
95
  # 32-bit DD sequence number, used to sequence the collection of Database
97
96
  # Description Packets.
98
97
  # @return [Integer]
99
- define_field :sequence_number, Types::Int32
98
+ define_attr :sequence_number, BinStruct::Int32
100
99
  alias seqnum sequence_number
101
100
  alias seqnum= sequence_number=
102
101
 
103
102
  # @!attribute lsas
104
103
  # Array of LSA headers
105
104
  # @return [ArrayOfLSAHeader]
106
- define_field :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
105
+ define_attr :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
107
106
  end
108
107
  end
109
108
 
@@ -28,11 +28,11 @@ module PacketGen
28
28
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29
29
  # | ... |
30
30
  # A HELLO payload consists of:
31
- # * a {#interface_id} field ({Types::Int32}),
32
- # * a {#priority} field ({Types::Int8}),
33
- # * an {#options} field ({Types::Int24}),
34
- # * a {#hello_interval} field ({Types::Int16}),
35
- # * a {#dead_interval} field ({Types::Int16}),
31
+ # * a {#interface_id} field ({BinStruct::Int32}),
32
+ # * a {#priority} field ({BinStruct::Int8}),
33
+ # * an {#options} field ({BinStruct::Int24}),
34
+ # * a {#hello_interval} field ({BinStruct::Int16}),
35
+ # * a {#dead_interval} field ({BinStruct::Int16}),
36
36
  # * a {#designated_router} field ({IP::Addr}),
37
37
  # * a {#backup_designated_router} field ({IP::Addr}),
38
38
  # * a {#neighbors} array containing neighbors as {IP::Addr}.
@@ -65,36 +65,36 @@ module PacketGen
65
65
  # @!attribute interface_id
66
66
  # The network mask associated with this interface.
67
67
  # @return [String]
68
- define_field :interface_id, Types::Int32
68
+ define_attr :interface_id, BinStruct::Int32
69
69
  # @!attribute priority
70
70
  # This router's Router Priority. Used in (Backup) Designated
71
71
  # Router election.
72
72
  # @return [Integer]
73
- define_field :priority, Types::Int8
73
+ define_attr :priority, BinStruct::Int8
74
74
  # @!macro define_ospfv3_options
75
75
  OSPFv3.define_options(self)
76
76
  # @!attribute hello_interval
77
77
  # The number of seconds between this router's Hello packets.
78
78
  # @return [Integer]
79
- define_field :hello_interval, Types::Int16
79
+ define_attr :hello_interval, BinStruct::Int16
80
80
  # @!attribute dead_interval
81
81
  # The number of seconds before declaring a silent router down.
82
82
  # @return [Integer]
83
- define_field :dead_interval, Types::Int16
83
+ define_attr :dead_interval, BinStruct::Int16
84
84
  # @!attribute designated_router
85
85
  # The identity of the Designated Router for this network, in the
86
86
  # view of the sending router.
87
87
  # @return [String]
88
- define_field :designated_router, IP::Addr
88
+ define_attr :designated_router, IP::Addr
89
89
  # @!attribute backup_designated_router
90
90
  # The identity of the Backup Designated Router for this network,
91
91
  # in the view of the sending router.
92
92
  # @return [String]
93
- define_field :backup_designated_router, IP::Addr
93
+ define_attr :backup_designated_router, IP::Addr
94
94
  # @!attribute neighbors
95
95
  # Array of neighbors
96
96
  # @return [IP::ArrayOfAddr]
97
- define_field :neighbors, IP::ArrayOfAddr
97
+ define_attr :neighbors, IP::ArrayOfAddr
98
98
  end
99
99
  end
100
100
 
@@ -17,44 +17,42 @@ module PacketGen
17
17
  # * and an array of 32-bit words to encode prefix itself ({#prefix}). This
18
18
  # array consumes ((PrefixLength + 31) / 32) 32-bit words.
19
19
  # @author Sylvain Daubert
20
- class IPv6Prefix < Types::Fields
21
- include Types::Fieldable
20
+ class IPv6Prefix < BinStruct::Struct
21
+ include BinStruct::Structable
22
22
 
23
23
  # @!attribute length
24
24
  # Prefix length, in bits
25
25
  # @return [Integer]
26
- define_field :length, Types::Int8
26
+ define_attr :length, BinStruct::Int8
27
27
  # @!attribute options
28
28
  # Prefix capabilities. See also capability bits: {#dn_opt}, {#p_opt},
29
29
  # {#la_opt} and {#nu_opt}.
30
30
  # @return [Options]
31
- define_field :options, Types::Int8
32
- # @!attribute reserved
33
- # Reserved field in most of LSA types.
34
- # @return [Integer]
35
- define_field :reserved, Types::Int16
36
- # @!attribute prefix
37
- # IPv6 Prefix as an array of 32-bit words
38
- # @return [Prefix]
39
- define_field :prefix, Types::ArrayOfInt32, builder: ->(h, t) { t.new(length_from: -> { h.length / 8 }) }
40
-
41
31
  # @!attribute dn_opt
42
32
  # This bit controls an inter-area-prefix-LSAs or AS-external-LSAs
43
33
  # re-advertisement in a VPN environment.
44
- # @return [Boolean]
34
+ # @return [Integer]
45
35
  # @!attribute p_opt
46
36
  # The "propagate" bit. Set on NSSA area prefixes that should be
47
37
  # readvertised by the translating NSSA area border.
48
- # @return [Boolean]
38
+ # @return [Integer]
49
39
  # @!attribute la_opt
50
40
  # The "local address" capability bit. If set, the prefix is
51
41
  # actually an IPv6 interface address of the Advertising Router.
52
- # @return [Boolean]
42
+ # @return [Integer]
53
43
  # @!attribute nu_opt
54
44
  # The "no unicast" capability bit. If set, the prefix should be
55
45
  # excluded from IPv6 unicast calculations.
56
- # @return [Boolean]
57
- define_bit_fields_on :options, :zz, 3, :dn_opt, :p_opt, :z, :la_opt, :nu_opt
46
+ # @return [Integer]
47
+ define_bit_attr :options, zz: 3, dn_opt: 1, p_opt: 1, z: 1, la_opt: 1, nu_opt: 1
48
+ # @!attribute reserved
49
+ # Reserved field in most of LSA types.
50
+ # @return [Integer]
51
+ define_attr :reserved, BinStruct::Int16
52
+ # @!attribute prefix
53
+ # IPv6 Prefix as an array of 32-bit words
54
+ # @return [Prefix]
55
+ define_attr :prefix, BinStruct::ArrayOfInt32, builder: ->(h, t) { t.new(length_from: -> { h.length / 8 }) }
58
56
 
59
57
  # Get human-readable prefix
60
58
  # @return [String]
@@ -100,7 +98,7 @@ module PacketGen
100
98
 
101
99
  # Array of {IPv6Prefix}
102
100
  # @author Sylvain Daubert
103
- class ArrayOfIPv6Prefix < Types::Array
101
+ class ArrayOfIPv6Prefix < BinStruct::Array
104
102
  set_of IPv6Prefix
105
103
  end
106
104
  end
@@ -40,8 +40,8 @@ module PacketGen
40
40
  # @!attribute lsas
41
41
  # Array of {LSA LSAs}
42
42
  # @return [ArrayOfLSA]
43
- define_field :lsas, ArrayOfLSA,
44
- builder: ->(_h, t) { t.new(only_headers: true) }
43
+ define_attr :lsas, ArrayOfLSA,
44
+ builder: ->(_h, t) { t.new(only_headers: true) }
45
45
  end
46
46
  end
47
47