packetgen 3.3.3 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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 +29 -38
  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