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
@@ -37,16 +37,16 @@ module PacketGen
37
37
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
38
38
  #
39
39
  # A IPv6 header consists of:
40
- # * a first 32-bit word ({#u32}, of {Types::Int32} type) composed of:
40
+ # * a first 32-bit word ({#u32}, of {BinStruct::Int32} type) composed of:
41
41
  # * a 4-bit {#version} field,
42
42
  # * a 8-bit {#traffic_class} field,
43
43
  # * a 20-bit {#flow_label} field,
44
- # * a payload length field ({#length}, {Types::Int16} type}),
45
- # * a next header field ({#next}, {Types::Int8} type),
44
+ # * a payload length field ({#length}, {BinStruct::Int16} type}),
45
+ # * a next header field ({#next}, {BinStruct::Int8} type),
46
46
  # * a hop-limit field ({#hop}, +Int8+ type),
47
47
  # * a source address field ({#src}, {IPv6::Addr} type),
48
48
  # * a destination address field ({#dst}, +IPv6::Addr+ type),
49
- # * and a {#body} ({Types::String} type).
49
+ # * and a {#body} ({BinStruct::String} type).
50
50
  #
51
51
  # == Create a IPv6 header
52
52
  # # standalone
@@ -95,38 +95,36 @@ module PacketGen
95
95
  # @!attribute u32
96
96
  # First 32-bit word of IPv6 header
97
97
  # @return [Integer]
98
- define_field :u32, Types::Int32, default: 0x6000_0000
98
+ # @!attribute version
99
+ # @return [Integer] 4-bit version attribute
100
+ # @!attribute traffic_class
101
+ # @return [Integer] 8-bit traffic_class attribute
102
+ # @!attribute flow_label
103
+ # @return [Integer] 20-bit flow_label attribute
104
+ define_bit_attr :u32, default: 0x60000000, version: 4, traffic_class: 8, flow_label: 20
99
105
  # @!attribute length
100
106
  # 16-bit word of IPv6 payload length
101
107
  # @return [Integer]
102
- define_field :length, Types::Int16
108
+ define_attr :length, BinStruct::Int16
103
109
  # @!attribute next
104
110
  # 8-bit IPv6 next payload value
105
111
  # @return [Integer]
106
- define_field :next, Types::Int8
112
+ define_attr :next, BinStruct::Int8
107
113
  # @!attribute hop
108
114
  # 8-bit IPv6 hop limit
109
115
  # @return [Integer]
110
- define_field :hop, Types::Int8, default: 64
116
+ define_attr :hop, BinStruct::Int8, default: 64
111
117
  # @!attribute src
112
118
  # IPv6 source address
113
119
  # @return [Addr]
114
- define_field :src, Addr, default: '::1'
120
+ define_attr :src, Addr, default: '::1'
115
121
  # @!attribute dst
116
122
  # IPv6 destination address
117
123
  # @return [Addr]
118
- define_field :dst, Addr, default: '::1'
124
+ define_attr :dst, Addr, default: '::1'
119
125
  # @!attribute body
120
- # @return [Types::String,Header::Base]
121
- define_field :body, Types::String
122
-
123
- # @!attribute version
124
- # @return [Integer] 4-bit version attribute
125
- # @!attribute traffic_class
126
- # @return [Integer] 8-bit traffic_class attribute
127
- # @!attribute flow_label
128
- # @return [Integer] 20-bit flow_label attribute
129
- define_bit_fields_on :u32, :version, 4, :traffic_class, 8, :flow_label, 20
126
+ # @return [BinStruct::String,Header::Base]
127
+ define_attr :body, BinStruct::String
130
128
 
131
129
  # Compute length and set +len+ field
132
130
  # @return [Integer]
@@ -143,14 +141,14 @@ module PacketGen
143
141
  sum
144
142
  end
145
143
 
146
- # Send IPv6 packet on wire. All fields may be set (even {#version}).
144
+ # Send IPv6 packet on wire. All attributes.may be set (even {#version}).
147
145
  # @param [String] _iface interface name (not used)
148
146
  # @return [void]
149
147
  # @since 3.0.0 no more limitations on +flow_label+, +length+ and +src+ fields.
150
148
  def to_w(_iface=nil)
151
149
  sock = Socket.new(Socket::AF_INET6, Socket::SOCK_RAW, Socket::IPPROTO_RAW)
152
150
  sockaddrin = Socket.sockaddr_in(0, dst)
153
- sock.send to_s, 0, sockaddrin
151
+ sock.send(to_s, 0, sockaddrin)
154
152
  sock.close
155
153
  end
156
154
 
@@ -12,25 +12,25 @@ module PacketGen
12
12
  # Logical-Link Control header
13
13
  #
14
14
  # A LLC header consists of:
15
- # * a {#dsap} ({Types::Int8}),
16
- # * a {#ssap} ({Types::Int8}),
17
- # * a {#control} ({Types::Int8}),
18
- # * and a {#body} (a {Types::String} or another {Base} class).
15
+ # * a {#dsap} ({BinStruct::Int8}),
16
+ # * a {#ssap} ({BinStruct::Int8}),
17
+ # * a {#control} ({BinStruct::Int8}),
18
+ # * and a {#body} (a {BinStruct::String} or another {Base} class).
19
19
  # @author Sylvain Daubert
20
20
  # @since 1.4.0
21
21
  class LLC < Base
22
22
  # @!attribute dsap
23
23
  # @return [Integer] 8-bit dsap value
24
- define_field :dsap, Types::Int8
24
+ define_attr :dsap, BinStruct::Int8
25
25
  # @!attribute ssap
26
26
  # @return [Integer] 8-bit ssap value
27
- define_field :ssap, Types::Int8
27
+ define_attr :ssap, BinStruct::Int8
28
28
  # @!attribute control
29
29
  # @return [Integer] 8-bit control value
30
- define_field :control, Types::Int8
30
+ define_attr :control, BinStruct::Int8
31
31
  # @!attribute body
32
- # @return [Types::String,Header::Base]
33
- define_field :body, Types::String
32
+ # @return [BinStruct::String,Header::Base]
33
+ define_attr :body, BinStruct::String
34
34
  end
35
35
  self.add_class LLC
36
36
  Dot11::Data.bind LLC, type: 2, wep?: false
@@ -38,21 +38,21 @@ module PacketGen
38
38
  # Sub-Network Access Protocol
39
39
  #
40
40
  # A SNAP header consists of:
41
- # * a {#oui} ({Types::OUI}),
42
- # * a {#proto_id} ({Types::Int16}),
43
- # * and a {#body} (a {Types::String} or another {Base} class).
41
+ # * a {#oui} ({BinStruct::OUI}),
42
+ # * a {#proto_id} ({BinStruct::Int16}),
43
+ # * and a {#body} (a {BinStruct::String} or another {Base} class).
44
44
  # @author Sylvain Daubert
45
45
  # @since 1.4.0
46
46
  class SNAP < Base
47
47
  # @!attribute oui
48
- # @return [Types::OUI]
49
- define_field :oui, Types::OUI
48
+ # @return [BinStruct::OUI]
49
+ define_attr :oui, BinStruct::OUI
50
50
  # @!attribute proto_id
51
51
  # @return [Integer] 16-bit protocol id
52
- define_field :proto_id, Types::Int16
52
+ define_attr :proto_id, BinStruct::Int16
53
53
  # @!attribute body
54
- # @return [Types::String,Header::Base]
55
- define_field :body, Types::String
54
+ # @return [BinStruct::String,Header::Base]
55
+ define_attr :body, BinStruct::String
56
56
  end
57
57
  self.add_class SNAP
58
58
  LLC.bind SNAP, dsap: 170, ssap: 170, control: 3
@@ -47,7 +47,7 @@ module PacketGen
47
47
  def added_to_packet(packet)
48
48
  mdns_idx = packet.headers.size
49
49
  packet.instance_eval "def mdnsize() @headers[#{mdns_idx}].mdnsize; end" # def mdnsize() @headers[4].mdnsize; end
50
- return unless packet.is? 'UDP'
50
+ return unless packet.is?('UDP')
51
51
  return unless packet.udp.sport.zero?
52
52
 
53
53
  packet.udp.sport = UDP_PORT
@@ -26,8 +26,8 @@ module PacketGen
26
26
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
27
27
  #
28
28
  # A MLD header consists of:
29
- # * a {#max_resp_delay} field ({Types::Int16} type),
30
- # * a {#reserved} field ({Types::Int16} type),
29
+ # * a {#max_resp_delay} field ({BinStruct::Int16} type),
30
+ # * a {#reserved} field ({BinStruct::Int16} type),
31
31
  # * a {#mcast_addr} field ({Header::IPv6::Addr} type),
32
32
  # * and a {#body} (unused for MLDv1).
33
33
  #
@@ -49,20 +49,20 @@ module PacketGen
49
49
  # @!attribute max_resp_delay
50
50
  # 16-bit MLD Max Response Delay
51
51
  # @return [Integer]
52
- define_field :max_resp_delay, Types::Int16
52
+ define_attr :max_resp_delay, BinStruct::Int16
53
53
  alias max_resp_code max_resp_delay
54
54
  alias max_resp_code= max_resp_delay=
55
55
  # @!attribute reserved
56
56
  # 16-bit Reserved field
57
57
  # @return [Integer]
58
- define_field :reserved, Types::Int16
58
+ define_attr :reserved, BinStruct::Int16
59
59
  # @!attribute mcast_addr
60
60
  # IPv6 Multicast address
61
61
  # @return [IPv6::Addr]
62
- define_field :mcast_addr, IPv6::Addr, default: '::'
62
+ define_attr :mcast_addr, IPv6::Addr, default: '::'
63
63
  # @!attribute body
64
64
  # @return [String,Base]
65
- define_field :body, Types::String
65
+ define_attr :body, BinStruct::String
66
66
 
67
67
  # @api private
68
68
  # @note This method is used internally by PacketGen and should not be
@@ -52,8 +52,8 @@ module PacketGen
52
52
  # | |
53
53
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54
54
  # @author Sylvain Daubert
55
- class McastAddressRecord < Types::Fields
56
- include Types::Fieldable
55
+ class McastAddressRecord < BinStruct::Struct
56
+ include BinStruct::Structable
57
57
 
58
58
  # Known record types
59
59
  RECORD_TYPES = IGMPv3::GroupRecord::RECORD_TYPES
@@ -61,29 +61,29 @@ module PacketGen
61
61
  # @!attribute type
62
62
  # 8-bit record type
63
63
  # @return [Integer]
64
- define_field :type, Types::Int8Enum, enum: RECORD_TYPES
64
+ define_attr :type, BinStruct::Int8Enum, enum: RECORD_TYPES
65
65
  # @!attribute aux_data_len
66
66
  # 8-bit length of of the Auxiliary Data field ({#aux_data}), in unit of
67
67
  # 32-bit words
68
68
  # @return [Integer]
69
- define_field :aux_data_len, Types::Int8, default: 0
69
+ define_attr :aux_data_len, BinStruct::Int8, default: 0
70
70
  # @!attribute number_of_sources
71
71
  # 16-bit Number of source addresses in {#source_addr}
72
72
  # @return [Integer]
73
- define_field :number_of_sources, Types::Int16, default: 0
73
+ define_attr :number_of_sources, BinStruct::Int16, default: 0
74
74
  # @!attribute multicast_addr
75
75
  # IP multicast address to which this Multicast Address Record pertains
76
76
  # @return [IPv6::Addr]
77
- define_field :multicast_addr, IPv6::Addr, default: '::'
77
+ define_attr :multicast_addr, IPv6::Addr, default: '::'
78
78
  # @!attribute source_addr
79
79
  # Array of source addresses
80
80
  # @return [IPv6::ArrayOfAddr]
81
- define_field :source_addr, IPv6::ArrayOfAddr,
82
- builder: ->(h, t) { t.new(counter: h[:number_of_sources]) }
81
+ define_attr :source_addr, IPv6::ArrayOfAddr,
82
+ builder: ->(h, t) { t.new(counter: h[:number_of_sources]) }
83
83
  # @!attribute aux_data
84
84
  # @return [String]
85
- define_field :aux_data, Types::String,
86
- builder: ->(h, t) { t.new(length_from: -> { h[:aux_data_len].to_i * 4 }) }
85
+ define_attr :aux_data, BinStruct::String,
86
+ builder: ->(h, t) { t.new(length_from: -> { h[:aux_data_len].to_i * 4 }) }
87
87
 
88
88
  def human_type
89
89
  self[:type].to_human
@@ -96,7 +96,7 @@ module PacketGen
96
96
 
97
97
  # Class to handle series of {McastAddressRecord}.
98
98
  # @author Sylvain Daubert
99
- class McastAddressRecords < Types::Array
99
+ class McastAddressRecords < BinStruct::Array
100
100
  set_of McastAddressRecord
101
101
 
102
102
  # Separator used in {#to_human}.
@@ -57,18 +57,18 @@ module PacketGen
57
57
  # * *
58
58
  # | |
59
59
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60
- # +type+, +code+ and +checksum+ are fields from {ICMPv6} header.
60
+ # +type+, +code+ and +checksum+ are attributes.from {ICMPv6} header.
61
61
  #
62
- # MLQ fields are:
63
- # * {#max_resp_code #max_resp_code} ({Types::Int16}),
64
- # * {#reserved #reserved} ({Types::Int16}),
62
+ # MLQ attributes.are:
63
+ # * {#max_resp_code #max_resp_code} ({BinStruct::Int16}),
64
+ # * {#reserved #reserved} ({BinStruct::Int16}),
65
65
  # * {#mcast_addr #mcast_addr} ({IPv6::Addr}),
66
- # * {#flags} ({Types::Int8}), with sub-fields:
66
+ # * {#flags} ({BinStruct::Int8}), with sub-fields:
67
67
  # * a 4-bit {#flag_resv} field,
68
68
  # * a 1-bit {#flag_s} boolean,
69
69
  # * a 3-bit {#flag_qrv} field,
70
- # * {#qqic} ({Types::Int8}),
71
- # * {#number_of_sources} ({Types::Int16}),
70
+ # * {#qqic} ({BinStruct::Int8}),
71
+ # * {#number_of_sources} ({BinStruct::Int16}),
72
72
  # * and {#source_addr}, a {IPv6::ArrayOfAddr}.
73
73
  #
74
74
  # == Max Resp Delay
@@ -80,31 +80,29 @@ module PacketGen
80
80
  # @!attribute flags
81
81
  # 8-bit flags
82
82
  # @return [Integer]
83
- define_field_before :body, :flags, Types::Int8
83
+ # @!attribute flag_resv
84
+ # 4-bit reserved field in {#flags}
85
+ # @return [Integer]
86
+ # @!attribute flag_s
87
+ # S Flag (Suppress Router-Side Processing)
88
+ # @return [Integer]
89
+ # @!attribute flag_qrv
90
+ # 3-bit QRV (Querier's Robustness Variable)
91
+ # @return [Integer]
92
+ define_bit_attr_before :body, :flags, flag_resv: 4, flag_s: 1, flag_qrv: 3
84
93
  # @!attribute qqic
85
94
  # 8-bit QQIC
86
95
  # @return [Integer]
87
- define_field_before :body, :qqic, Types::Int8
96
+ define_attr_before :body, :qqic, BinStruct::Int8
88
97
  # @!attribute number_of_sources
89
98
  # 16-bit number of sources
90
99
  # @return [Integer]
91
- define_field_before :body, :number_of_sources, Types::Int16
100
+ define_attr_before :body, :number_of_sources, BinStruct::Int16
92
101
  # @!attribute source_addr
93
102
  # Array of IPv6 source addresses
94
103
  # @return [IPv6::ArrayOfAddr]
95
- define_field_before :body, :source_addr, IPv6::ArrayOfAddr,
96
- builder: ->(h, t) { t.new(counter: h[:number_of_sources]) }
97
-
98
- # @!attribute flag_resv
99
- # 4-bit reserved field in {#flags}
100
- # @return [Integer]
101
- # @!attribute flag_s
102
- # S Flag (Suppress Router-Side Processing)
103
- # @return [Boolean]
104
- # @!attribute flag_qrv
105
- # 3-bit QRV (Querier's Robustness Variable)
106
- # @return [Integer]
107
- define_bit_fields_on :flags, :flag_resv, 4, :flag_s, :flag_qrv, 3
104
+ define_attr_before :body, :source_addr, IPv6::ArrayOfAddr,
105
+ builder: ->(h, t) { t.new(counter: h[:number_of_sources]) }
108
106
 
109
107
  # Getter for +max_resp_code+ for MLDv2 packets. Use {MLDv2.decode}.
110
108
  # @return [Integer]
@@ -38,28 +38,28 @@ module PacketGen
38
38
  # . .
39
39
  # | |
40
40
  # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41
- # +type+, +code+ and +checksum+ are fields from {ICMPv6} header.
41
+ # +type+, +code+ and +checksum+ are attributes.from {ICMPv6} header.
42
42
  #
43
- # MLR fields are:
44
- # * {#reserved} ({Types::Int16}),
45
- # * {#number_of_mar} (number of mcast address records, {Types::Int16}),
43
+ # MLR attributes.are:
44
+ # * {#reserved} ({BinStruct::Int16}),
45
+ # * {#number_of_mar} (number of mcast address records, {BinStruct::Int16}),
46
46
  # * {#records} ({McastAddressRecords}).
47
47
  # @author Sylvain Daubert
48
48
  class MLR < Base
49
49
  # @!attribute reserved
50
50
  # 16-bit reserved field
51
51
  # @return [Integer]
52
- define_field :reserved, Types::Int16, default: 0
52
+ define_attr :reserved, BinStruct::Int16, default: 0
53
53
  # @!attribute number_of_mar
54
54
  # 16-bit Number of group records in {#records}
55
55
  # @return [Integer]
56
- define_field :number_of_mar, Types::Int16, default: 0
56
+ define_attr :number_of_mar, BinStruct::Int16, default: 0
57
57
 
58
58
  # @!attribute records
59
59
  # Array of Mcast Address Records
60
60
  # @return [McastAddressRecords]
61
- define_field :records, McastAddressRecords,
62
- builder: ->(h, t) { t.new(counter: h[:number_of_mar]) }
61
+ define_attr :records, McastAddressRecords,
62
+ builder: ->(h, t) { t.new(counter: h[:number_of_mar]) }
63
63
  end
64
64
  end
65
65
 
@@ -31,13 +31,13 @@ module PacketGen
31
31
  # | ... |
32
32
  #
33
33
  # A DB description payload is composed of:
34
- # * a 16-bit {#mtu} field ({Types::Int16}),
35
- # * a 8-bit {#options} field ({Types::Int8}),
36
- # * a 8-bit {#flags} field ({Types::Int8}). Supported flags are:
34
+ # * a 16-bit {#mtu} field ({BinStruct::Int16}),
35
+ # * a 8-bit {#options} field ({BinStruct::Int8}),
36
+ # * a 8-bit {#flags} field ({BinStruct::Int8}). Supported flags are:
37
37
  # * {i_flag},
38
38
  # * {m_flag},
39
39
  # * {ms_flag},
40
- # * a 32-bit {#sequence_number} field ({Types::Int32}),
40
+ # * a 32-bit {#sequence_number} field ({BinStruct::Int32}),
41
41
  # * and an array of {LSAHeader LSAHeaders} ({#lsas}, {ArrayOfLSA}).
42
42
  #
43
43
  # == Create a DbDescription payload
@@ -64,7 +64,7 @@ module PacketGen
64
64
  # @!attribute mtu
65
65
  # 16-bit interface MTU
66
66
  # @return [Integer]
67
- define_field :mtu, Types::Int16
67
+ define_attr :mtu, BinStruct::Int16
68
68
 
69
69
  # @!macro define_options
70
70
  OSPFv2.define_options(self)
@@ -72,30 +72,29 @@ module PacketGen
72
72
  # @!attribute flags
73
73
  # 8-bit interface flags ({#i_flag}, {#m_flag} and {#ms_flag})
74
74
  # @return [Integer]
75
- define_field :flags, Types::Int8
76
75
  # @!attribute i_flag
77
76
  # Init bit
78
- # @return [Boolean]
77
+ # @return [Integer]
79
78
  # @!attribute m_flag
80
79
  # More bit
81
- # @return [Boolean]
80
+ # @return [Integer]
82
81
  # @!attribute ms_flag
83
82
  # Master/Slave bit
84
- # @return [Boolean]
85
- define_bit_fields_on :flags, :zero, 5, :i_flag, :m_flag, :ms_flag
83
+ # @return [Integer]
84
+ define_bit_attr :flags, zero: 5, i_flag: 1, m_flag: 1, ms_flag: 1
86
85
 
87
86
  # @!attribute sequence_number
88
87
  # 32-bit DD sequence number, used to sequence the collection of Database
89
88
  # Description Packets.
90
89
  # @return [Integer]
91
- define_field :sequence_number, Types::Int32
90
+ define_attr :sequence_number, BinStruct::Int32
92
91
  alias seqnum sequence_number
93
92
  alias seqnum= sequence_number=
94
93
 
95
94
  # @!attribute lsas
96
95
  # Array of LSA headers
97
96
  # @return [ArrayOfLSAHeader]
98
- define_field :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
97
+ define_attr :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
99
98
  end
100
99
  end
101
100
 
@@ -29,10 +29,10 @@ module PacketGen
29
29
  # | ... |
30
30
  # A HELLO payload consists of:
31
31
  # * a {#network_mask} field ({IP::Addr}),
32
- # * a {#hello_interval} field ({Types::Int16}),
33
- # * an {#options} field ({Types::Int8}),
34
- # * a {#priority} field ({Types::Int8}),
35
- # * a {#dead_interval} field ({Types::Int32}),
32
+ # * a {#hello_interval} field ({BinStruct::Int16}),
33
+ # * an {#options} field ({BinStruct::Int8}),
34
+ # * a {#priority} field ({BinStruct::Int8}),
35
+ # * a {#dead_interval} field ({BinStruct::Int32}),
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}.
@@ -63,11 +63,11 @@ module PacketGen
63
63
  # @!attribute network_mask
64
64
  # The network mask associated with this interface.
65
65
  # @return [String]
66
- define_field :network_mask, IP::Addr
66
+ define_attr :network_mask, IP::Addr
67
67
  # @!attribute hello_interval
68
68
  # The number of seconds between this router's Hello packets.
69
69
  # @return [Integer]
70
- define_field :hello_interval, Types::Int16
70
+ define_attr :hello_interval, BinStruct::Int16
71
71
 
72
72
  # @!macro define_options
73
73
  OSPFv2.define_options(self)
@@ -76,25 +76,25 @@ module PacketGen
76
76
  # This router's Router Priority. Used in (Backup) Designated
77
77
  # Router election.
78
78
  # @return [Integer]
79
- define_field :priority, Types::Int8
79
+ define_attr :priority, BinStruct::Int8
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::Int32
83
+ define_attr :dead_interval, BinStruct::Int32
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
 
@@ -45,7 +45,7 @@ module PacketGen
45
45
  # @!attribute lsas
46
46
  # Array of LSA headers
47
47
  # @return [ArrayOfLSA]
48
- define_field :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
48
+ define_attr :lsas, ArrayOfLSA, builder: ->(_h, t) { t.new(only_headers: true) }
49
49
  end
50
50
  end
51
51
 
@@ -9,27 +9,27 @@
9
9
  module PacketGen
10
10
  module Header
11
11
  class OSPFv2
12
- # This class handle a LS request, which is composed 3 {Types::Int32} fields:
12
+ # This class handle a LS request, which is composed 3 {BinStruct::Int32} fields:
13
13
  # * {#type},
14
14
  # * {#link_state_id},
15
15
  # * and {#advertising_router}.
16
16
  # @author Sylvain Daubert
17
- class LSR < Types::Fields
18
- include Types::Fieldable
17
+ class LSR < BinStruct::Struct
18
+ include BinStruct::Structable
19
19
 
20
20
  # @!attribute type
21
21
  # The type of the LSA to request.
22
22
  # @return [Integer]
23
- define_field :type, Types::Int32Enum, enum: LSAHeader::TYPES
23
+ define_attr :type, BinStruct::Int32Enum, enum: LSAHeader::TYPES
24
24
  # @!attribute link_state_id
25
25
  # This field identifies the portion of the internet environment
26
26
  # that is being described by the LSA to request.
27
27
  # @return [String]
28
- define_field :link_state_id, IP::Addr
28
+ define_attr :link_state_id, IP::Addr
29
29
  # @!attribute advertising_router
30
30
  # The Router ID of the requested LSA.
31
31
  # @return [String]
32
- define_field :advertising_router, IP::Addr
32
+ define_attr :advertising_router, IP::Addr
33
33
 
34
34
  # Get human-readable type
35
35
  # @return [String]
@@ -43,10 +43,10 @@ module PacketGen
43
43
  end
44
44
  end
45
45
 
46
- # This class defines a specialized {Types::Array array} to handle series
46
+ # This class defines a specialized {BinStruct::Array array} to handle series
47
47
  # of {LSR LSRs}.
48
48
  # @author Sylvain Daubert
49
- class ArrayOfLSR < Types::Array
49
+ class ArrayOfLSR < BinStruct::Array
50
50
  set_of LSR
51
51
  end
52
52
 
@@ -82,7 +82,7 @@ module PacketGen
82
82
  # @!attribute lsrs
83
83
  # Array of {LSR}
84
84
  # @return [ArrayOfLSR]
85
- define_field :lsrs, ArrayOfLSR
85
+ define_attr :lsrs, ArrayOfLSR
86
86
  end
87
87
  end
88
88
 
@@ -22,7 +22,7 @@ module PacketGen
22
22
  # +- +-+
23
23
  # | ... |
24
24
  # This paylod is implemented with two fields:
25
- # * {#lsas_count}, a {Types::Int32} field,
25
+ # * {#lsas_count}, a {BinStruct::Int32} field,
26
26
  # * and {#lsas}, an {ArrayOfLSA} object.
27
27
  #
28
28
  # == Create a LSUpdate payload
@@ -47,11 +47,11 @@ module PacketGen
47
47
  # @!attribute lsas_count
48
48
  # Count of LSAs included in this update
49
49
  # @return [Integer]
50
- define_field :lsas_count, Types::Int32
50
+ define_attr :lsas_count, BinStruct::Int32
51
51
  # @!attribute lsas
52
52
  # Array of {LSA LSAs}
53
53
  # @return [ArrayOfLSA]
54
- define_field :lsas, ArrayOfLSA, builder: ->(h, t) { t.new(counter: h[:lsas_count]) }
54
+ define_attr :lsas, ArrayOfLSA, builder: ->(h, t) { t.new(counter: h[:lsas_count]) }
55
55
 
56
56
  # Calculate checksums of all LSAs
57
57
  # @return [void]