packetgen 3.3.3 → 4.1.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.
- checksums.yaml +4 -4
- data/README.md +38 -22
- data/lib/packetgen/capture.rb +2 -2
- data/lib/packetgen/config.rb +0 -1
- data/lib/packetgen/deprecation.rb +14 -8
- data/lib/packetgen/header/arp.rb +17 -18
- data/lib/packetgen/header/asn1_base.rb +2 -1
- data/lib/packetgen/header/base.rb +42 -40
- data/lib/packetgen/header/bootp.rb +35 -37
- data/lib/packetgen/header/dhcp/option.rb +21 -21
- data/lib/packetgen/header/dhcp/options.rb +3 -3
- data/lib/packetgen/header/dhcp.rb +8 -9
- data/lib/packetgen/header/dhcpv6/duid.rb +16 -16
- data/lib/packetgen/header/dhcpv6/option.rb +83 -61
- data/lib/packetgen/header/dhcpv6/options.rb +4 -4
- data/lib/packetgen/header/dhcpv6/relay.rb +6 -5
- data/lib/packetgen/header/dhcpv6.rb +17 -18
- data/lib/packetgen/header/dns/name.rb +21 -16
- data/lib/packetgen/header/dns/opt.rb +5 -2
- data/lib/packetgen/header/dns/option.rb +14 -14
- data/lib/packetgen/header/dns/qdsection.rb +3 -3
- data/lib/packetgen/header/dns/question.rb +7 -8
- data/lib/packetgen/header/dns/rr.rb +56 -43
- data/lib/packetgen/header/dns/rrsection.rb +6 -6
- data/lib/packetgen/header/dns.rb +103 -90
- data/lib/packetgen/header/dot11/control.rb +12 -12
- data/lib/packetgen/header/dot11/data.rb +25 -24
- data/lib/packetgen/header/dot11/element.rb +4 -4
- data/lib/packetgen/header/dot11/management.rb +21 -18
- data/lib/packetgen/header/dot11/sub_mngt.rb +40 -53
- data/lib/packetgen/header/dot11.rb +117 -122
- data/lib/packetgen/header/dot1q.rb +12 -13
- data/lib/packetgen/header/dot1x.rb +13 -13
- data/lib/packetgen/header/eap/fast.rb +4 -4
- data/lib/packetgen/header/eap/md5.rb +16 -8
- data/lib/packetgen/header/eap/tls.rb +18 -19
- data/lib/packetgen/header/eap/ttls.rb +22 -21
- data/lib/packetgen/header/eap.rb +73 -48
- data/lib/packetgen/header/eth.rb +41 -27
- data/lib/packetgen/header/gre.rb +33 -11
- data/lib/packetgen/header/http/headers.rb +7 -6
- data/lib/packetgen/header/http/request.rb +38 -29
- data/lib/packetgen/header/http/response.rb +35 -27
- data/lib/packetgen/header/http/verbs.rb +1 -3
- data/lib/packetgen/header/icmp.rb +14 -14
- data/lib/packetgen/header/icmpv6.rb +10 -9
- data/lib/packetgen/header/igmp.rb +26 -15
- data/lib/packetgen/header/igmpv3/group_record.rb +18 -13
- data/lib/packetgen/header/igmpv3/mq.rb +16 -18
- data/lib/packetgen/header/igmpv3/mr.rb +5 -5
- data/lib/packetgen/header/igmpv3.rb +12 -11
- data/lib/packetgen/header/ip/addr.rb +19 -15
- data/lib/packetgen/header/ip/option.rb +47 -36
- data/lib/packetgen/header/ip/options.rb +1 -1
- data/lib/packetgen/header/ip.rb +77 -95
- data/lib/packetgen/header/ipv6/addr.rb +28 -27
- data/lib/packetgen/header/ipv6/extension.rb +13 -11
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +32 -13
- data/lib/packetgen/header/ipv6.rb +42 -35
- data/lib/packetgen/header/llc.rb +28 -21
- data/lib/packetgen/header/mdns.rb +10 -3
- data/lib/packetgen/header/mld.rb +15 -13
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +17 -12
- data/lib/packetgen/header/mldv2/mlq.rb +22 -24
- data/lib/packetgen/header/mldv2/mlr.rb +8 -8
- data/lib/packetgen/header/mldv2.rb +1 -1
- data/lib/packetgen/header/ospfv2/db_description.rb +17 -18
- data/lib/packetgen/header/ospfv2/hello.rb +18 -17
- data/lib/packetgen/header/ospfv2/ls_ack.rb +6 -7
- data/lib/packetgen/header/ospfv2/ls_request.rb +14 -13
- data/lib/packetgen/header/ospfv2/ls_update.rb +9 -9
- data/lib/packetgen/header/ospfv2/lsa.rb +79 -60
- data/lib/packetgen/header/ospfv2/lsa_header.rb +12 -11
- data/lib/packetgen/header/ospfv2.rb +49 -46
- data/lib/packetgen/header/ospfv3/db_description.rb +20 -22
- data/lib/packetgen/header/ospfv3/hello.rb +17 -16
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +22 -20
- data/lib/packetgen/header/ospfv3/ls_ack.rb +7 -8
- data/lib/packetgen/header/ospfv3/ls_request.rb +18 -18
- data/lib/packetgen/header/ospfv3/ls_update.rb +10 -10
- data/lib/packetgen/header/ospfv3/lsa.rb +62 -51
- data/lib/packetgen/header/ospfv3/lsa_header.rb +12 -11
- data/lib/packetgen/header/ospfv3.rb +54 -52
- data/lib/packetgen/header/sctp/chunk.rb +80 -56
- data/lib/packetgen/header/sctp/error.rb +174 -202
- data/lib/packetgen/header/sctp/padded32.rb +3 -3
- data/lib/packetgen/header/sctp/parameter.rb +89 -136
- data/lib/packetgen/header/sctp.rb +19 -8
- data/lib/packetgen/header/snmp.rb +108 -7
- data/lib/packetgen/header/tcp/option.rb +52 -39
- data/lib/packetgen/header/tcp/options.rb +13 -5
- data/lib/packetgen/header/tcp.rb +83 -65
- data/lib/packetgen/header/tftp.rb +31 -25
- data/lib/packetgen/header/udp.rb +21 -19
- data/lib/packetgen/header.rb +23 -18
- data/lib/packetgen/headerable.rb +21 -5
- data/lib/packetgen/inspect.rb +3 -8
- data/lib/packetgen/packet.rb +146 -71
- data/lib/packetgen/pcap.rb +15 -4
- data/lib/packetgen/pcapng/block.rb +20 -18
- data/lib/packetgen/pcapng/epb.rb +13 -15
- data/lib/packetgen/pcapng/file.rb +44 -111
- data/lib/packetgen/pcapng/idb.rb +11 -12
- data/lib/packetgen/pcapng/shb.rb +15 -16
- data/lib/packetgen/pcapng/spb.rb +9 -11
- data/lib/packetgen/pcapng/unknown_block.rb +6 -17
- data/lib/packetgen/pcapng.rb +6 -4
- data/lib/packetgen/pcaprub_wrapper.rb +17 -1
- data/lib/packetgen/proto.rb +5 -1
- data/lib/packetgen/unknown_packet.rb +5 -5
- data/lib/packetgen/utils/arp_spoofer.rb +18 -19
- data/lib/packetgen/utils.rb +4 -3
- data/lib/packetgen/version.rb +1 -1
- data/lib/packetgen.rb +12 -5
- metadata +29 -38
- data/lib/packetgen/types/abstract_tlv.rb +0 -278
- data/lib/packetgen/types/array.rb +0 -287
- data/lib/packetgen/types/cstring.rb +0 -109
- data/lib/packetgen/types/enum.rb +0 -171
- data/lib/packetgen/types/fieldable.rb +0 -66
- data/lib/packetgen/types/fields.rb +0 -622
- data/lib/packetgen/types/int.rb +0 -473
- data/lib/packetgen/types/int_string.rb +0 -102
- data/lib/packetgen/types/length_from.rb +0 -54
- data/lib/packetgen/types/oui.rb +0 -52
- data/lib/packetgen/types/string.rb +0 -97
- data/lib/packetgen/types/tlv.rb +0 -161
- data/lib/packetgen/types.rb +0 -26
@@ -12,31 +12,31 @@ module PacketGen
|
|
12
12
|
# RFC 951}
|
13
13
|
#
|
14
14
|
# A BOOTP header consists of:
|
15
|
-
# * an operation code field ({#op} of type
|
16
|
-
# * a hardware address type ({#htype} of type
|
17
|
-
# * a hardware address length ({#hlen} of type
|
18
|
-
# * a {#hops} field (
|
19
|
-
# * a transaction ID ({#xid} of type
|
20
|
-
# * a {#secs} field (
|
21
|
-
# * a {#flags} field (
|
15
|
+
# * an operation code field ({#op} of type +BinStruct::Int8Enum+),
|
16
|
+
# * a hardware address type ({#htype} of type +BinStruct::Int8+),
|
17
|
+
# * a hardware address length ({#hlen} of type +BinStruct::Int8+),
|
18
|
+
# * a {#hops} field (+BinStruct::Int8+),
|
19
|
+
# * a transaction ID ({#xid} of type +BinStruct::Int32+),
|
20
|
+
# * a {#secs} field (+BinStruct::Int16+),
|
21
|
+
# * a {#flags} field (+BinStruct::Int16+):
|
22
22
|
# * a 1-bit broadcast flag ({#b}),
|
23
23
|
# * a 15-bit Must Be Zero field ({#mbz}),
|
24
24
|
# * a {#ciaddr} field ({IP::Addr}),
|
25
25
|
# * a {#yiaddr} field ({IP::Addr}),
|
26
26
|
# * a {#siaddr} field ({IP::Addr}),
|
27
27
|
# * a {#giaddr} field ({IP::Addr}),
|
28
|
-
# * a {#chaddr} field (16-byte
|
29
|
-
# * a {#sname} field (64-byte
|
30
|
-
# * a {#file} field (128-byte
|
31
|
-
# * and a body (
|
28
|
+
# * a {#chaddr} field (16-byte +BinStruct::String+),
|
29
|
+
# * a {#sname} field (64-byte +BinStruct::CString+),
|
30
|
+
# * a {#file} field (128-byte +BinStruct::CString+),
|
31
|
+
# * and a body (+BinStruct::String+).
|
32
32
|
#
|
33
|
-
#
|
33
|
+
# @example Create a BOOTP header
|
34
34
|
# # standalone
|
35
35
|
# bootp = PacketGen::Header::BOOTP.new
|
36
36
|
# # in a packet
|
37
|
-
# pkt = PacketGen.gen('IP').add('BOOTP')
|
37
|
+
# pkt = PacketGen.gen('IP').add('UDP').add('BOOTP')
|
38
38
|
# # access to BOOTP header
|
39
|
-
# pkt.bootp # =>
|
39
|
+
# pkt.bootp.protocol_name # => "BOOTP"
|
40
40
|
# @author Sylvain Daubert
|
41
41
|
# @since 2.2.0
|
42
42
|
class BOOTP < Base
|
@@ -52,84 +52,82 @@ module PacketGen
|
|
52
52
|
# @!attribute op
|
53
53
|
# 8-bit opcode
|
54
54
|
# @return [Integer]
|
55
|
-
|
55
|
+
define_attr :op, BinStruct::Int8Enum, enum: OPCODES
|
56
56
|
|
57
57
|
# @!attribute htype
|
58
58
|
# 8-bit hardware address type
|
59
59
|
# @return [Integer]
|
60
|
-
|
60
|
+
define_attr :htype, BinStruct::Int8, default: 1
|
61
61
|
|
62
62
|
# @!attribute hlen
|
63
63
|
# 8-bit hardware address length
|
64
64
|
# @return [Integer]
|
65
|
-
|
65
|
+
define_attr :hlen, BinStruct::Int8, default: 6
|
66
66
|
|
67
67
|
# @!attribute hops
|
68
68
|
# @return [Integer]
|
69
|
-
|
69
|
+
define_attr :hops, BinStruct::Int8
|
70
70
|
|
71
71
|
# @!attribute xid
|
72
72
|
# 32-bit Transaction ID
|
73
73
|
# @return [Integer]
|
74
|
-
|
74
|
+
define_attr :xid, BinStruct::Int32
|
75
75
|
|
76
76
|
# @!attribute secs
|
77
77
|
# 16-bit integer: number of seconds elapsed since client began address
|
78
78
|
# acquisition or renewal process
|
79
79
|
# @return [Integer]
|
80
|
-
|
80
|
+
define_attr :secs, BinStruct::Int16
|
81
81
|
|
82
82
|
# @!attribute flags
|
83
83
|
# 16-bit flag field
|
84
84
|
# @return [Integer]
|
85
|
-
|
85
|
+
# @!attribute b
|
86
|
+
# Broadcast flag, from {#flags}
|
87
|
+
# @return [Boolean]
|
88
|
+
# @!attribute mbz
|
89
|
+
# 15-bit Must Be Zero bits, from {#flags}
|
90
|
+
# @return [Boolean]
|
91
|
+
define_bit_attr :flags, b: 1, mbz: 15
|
86
92
|
|
87
93
|
# @!attribute ciaddr
|
88
94
|
# client IP address
|
89
95
|
# @return [String]
|
90
|
-
|
96
|
+
define_attr :ciaddr, IP::Addr
|
91
97
|
|
92
98
|
# @!attribute yiaddr
|
93
99
|
# 'your' (client) IP address
|
94
100
|
# @return [String]
|
95
|
-
|
101
|
+
define_attr :yiaddr, IP::Addr
|
96
102
|
|
97
103
|
# @!attribute siaddr
|
98
104
|
# IP address of next server to use in bootstrap
|
99
105
|
# @return [String]
|
100
|
-
|
106
|
+
define_attr :siaddr, IP::Addr
|
101
107
|
|
102
108
|
# @!attribute giaddr
|
103
109
|
# Relay agent IP address, used in booting via a relay agent
|
104
110
|
# @return [String]
|
105
|
-
|
111
|
+
define_attr :giaddr, IP::Addr
|
106
112
|
|
107
113
|
# @!attribute chaddr
|
108
114
|
# client hardware address
|
109
115
|
# @return [String]
|
110
|
-
|
116
|
+
define_attr :chaddr, BinStruct::String, static_length: 16
|
111
117
|
|
112
118
|
# @!attribute sname
|
113
119
|
# optional server hostname, null-terminated string
|
114
120
|
# @return [String]
|
115
|
-
|
121
|
+
define_attr :sname, BinStruct::CString, static_length: 64
|
116
122
|
|
117
123
|
# @!attribute file
|
118
124
|
# Boot file name, null terminated string
|
119
125
|
# @return [String]
|
120
|
-
|
126
|
+
define_attr :file, BinStruct::CString, static_length: 128
|
121
127
|
|
122
128
|
# @!attribute body
|
123
129
|
# @return [String]
|
124
|
-
|
125
|
-
|
126
|
-
# @!attribute b
|
127
|
-
# Broadcast flag, from {#flags}
|
128
|
-
# @return [Boolean]
|
129
|
-
# @!attribute mbz
|
130
|
-
# 15-bit Must Be Zero bits, from {#flags}
|
131
|
-
# @return [Boolean]
|
132
|
-
define_bit_fields_on :flags, :b, :mbz, 15
|
130
|
+
define_attr :body, BinStruct::String
|
133
131
|
|
134
132
|
# @return [String]
|
135
133
|
def inspect
|
@@ -58,52 +58,52 @@ module PacketGen
|
|
58
58
|
}.freeze
|
59
59
|
|
60
60
|
# @!parse
|
61
|
-
# # Option class with string value.
|
62
|
-
# #
|
61
|
+
# # Option class with string value. +#type+ and +#length+ are
|
62
|
+
# # +BinStruct::Int8+.
|
63
63
|
# #
|
64
|
-
# # See also {IPAddrOption}, {Int8Option}, {Int16Option} and {Int32Option}.
|
64
|
+
# # See also specialized {IPAddrOption}, {Int8Option}, {Int16Option} and {Int32Option}.
|
65
65
|
# # @since 2.2.0
|
66
|
-
# # @since 3.1.0 subclass of
|
67
|
-
# class Option <
|
66
|
+
# # @since 3.1.0 subclass of +BinStruct::AbstractTLV+
|
67
|
+
# class Option < BinStruct::AbstractTLV; end
|
68
68
|
# @private
|
69
|
-
Option =
|
69
|
+
Option = BinStruct::AbstractTLV.create
|
70
70
|
Option.define_type_enum DHCP_OPTIONS
|
71
71
|
# @!parse
|
72
72
|
# # {Option} class with IP address value
|
73
73
|
# # @since 2.2.0
|
74
|
-
# # @since 3.1.0 subclass of
|
75
|
-
# class IPAddrOption <
|
74
|
+
# # @since 3.1.0 subclass of +BinStruct::AbstractTLV+
|
75
|
+
# class IPAddrOption < BinStruct::AbstractTLV; end
|
76
76
|
# @private
|
77
|
-
IPAddrOption =
|
77
|
+
IPAddrOption = BinStruct::AbstractTLV.create(value_class: IP::Addr)
|
78
78
|
IPAddrOption.define_type_enum DHCP_OPTIONS
|
79
79
|
# @!parse
|
80
80
|
# # {Option} class with int8 value
|
81
81
|
# # @since 2.2.0
|
82
|
-
# # @since 3.1.0 subclass of
|
83
|
-
# class Int8Option <
|
82
|
+
# # @since 3.1.0 subclass of +BinStruct::AbstractTLV+
|
83
|
+
# class Int8Option < BinStruct::AbstractTLV; end
|
84
84
|
# @private
|
85
|
-
Int8Option =
|
85
|
+
Int8Option = BinStruct::AbstractTLV.create(value_class: BinStruct::Int8)
|
86
86
|
Int8Option.define_type_enum DHCP_OPTIONS
|
87
87
|
# @!parse
|
88
88
|
# # {Option} class with int16 value
|
89
89
|
# # @since 2.2.0
|
90
|
-
# # @since 3.1.0 subclass of {
|
91
|
-
# class Int16Option <
|
90
|
+
# # @since 3.1.0 subclass of {+inStruct::AbstractTLV+
|
91
|
+
# class Int16Option < BinStruct::AbstractTLV; end
|
92
92
|
# @private
|
93
|
-
Int16Option =
|
93
|
+
Int16Option = BinStruct::AbstractTLV.create(value_class: BinStruct::Int16)
|
94
94
|
Int16Option.define_type_enum DHCP_OPTIONS
|
95
95
|
# @!parse
|
96
96
|
# # {Option} class with int32 value
|
97
97
|
# # @since 2.2.0
|
98
|
-
# # @since 3.1.0 subclass of
|
99
|
-
# class Int32Option <
|
98
|
+
# # @since 3.1.0 subclass of +BinStruct::AbstractTLV+
|
99
|
+
# class Int32Option < BinStruct::AbstractTLV; end
|
100
100
|
# @private
|
101
|
-
Int32Option =
|
101
|
+
Int32Option = BinStruct::AbstractTLV.create(value_class: BinStruct::Int32)
|
102
102
|
Int32Option.define_type_enum DHCP_OPTIONS
|
103
103
|
|
104
104
|
# Class to indicate DHCP options end
|
105
|
-
class End <
|
106
|
-
def initialize(value
|
105
|
+
class End < BinStruct::Int8
|
106
|
+
def initialize(options={ value: 255 })
|
107
107
|
super
|
108
108
|
end
|
109
109
|
|
@@ -115,7 +115,7 @@ module PacketGen
|
|
115
115
|
|
116
116
|
# Class to indicate padding after DHCP options
|
117
117
|
class Pad < End
|
118
|
-
def initialize(value
|
118
|
+
def initialize(options={ value: 0 })
|
119
119
|
super
|
120
120
|
end
|
121
121
|
end
|
@@ -9,9 +9,9 @@
|
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class DHCP
|
12
|
-
# Container class for {Option DHCP Options}.
|
12
|
+
# Container class for {Option DHCP Options}. Accepted options are listed on {DHCP::DHCP_OPTIONS}.
|
13
13
|
#
|
14
|
-
#
|
14
|
+
# @example Add DHCP options to an +Options+ instance
|
15
15
|
# options = PacketGen::Header::DHCP::Options.new
|
16
16
|
# # Add a lease_time option
|
17
17
|
# options << { type: 'lease_time', value: 3600 }
|
@@ -22,7 +22,7 @@ module PacketGen
|
|
22
22
|
# # And finish with padding
|
23
23
|
# options << { type: 'pad' }
|
24
24
|
# @author Sylvain Daubert
|
25
|
-
class Options <
|
25
|
+
class Options < BinStruct::Array
|
26
26
|
set_of Option
|
27
27
|
|
28
28
|
private
|
@@ -12,22 +12,21 @@ module PacketGen
|
|
12
12
|
# RFC 2131}
|
13
13
|
#
|
14
14
|
# A DHCP header is quite simple. It is composed of:
|
15
|
-
# * a {#magic} field (
|
16
|
-
# * a
|
15
|
+
# * a {#magic} field (+BinStruct::Int32+) to retrieve it in a BOOTP header,
|
16
|
+
# * a {#options} field ({Options} type, which is a collection of DHCP
|
17
17
|
# options).
|
18
18
|
#
|
19
19
|
# In PacketGen, a DHCP header is always a secondary header after {BOOTP} one.
|
20
20
|
#
|
21
|
-
#
|
21
|
+
# @example Create a DHCP header
|
22
22
|
# # standalone
|
23
23
|
# dhcp = PacketGen::Header::DHCP.new
|
24
24
|
# # in a packet
|
25
|
-
# pkt = PacketGen.gen('IP').add('BOOTP').add('DHCP')
|
25
|
+
# pkt = PacketGen.gen('IP').add('UDP').add('BOOTP').add('DHCP')
|
26
26
|
# # access to DHCP header
|
27
|
-
# pkt.dhcp # => PacketGen::Header::DHCP
|
27
|
+
# pkt.dhcp.class # => PacketGen::Header::DHCP
|
28
28
|
#
|
29
|
-
#
|
30
|
-
# Options may be added these ways:
|
29
|
+
# @example Add options to a DHCP header
|
31
30
|
# dhcp = PacketGen::Header::DHCP.new
|
32
31
|
# # Add a lease_time option
|
33
32
|
# dhcp.options << { type: 'lease_time', value: 3600 }
|
@@ -50,10 +49,10 @@ module PacketGen
|
|
50
49
|
|
51
50
|
# @!attribute magic
|
52
51
|
# @return [Integer]
|
53
|
-
|
52
|
+
define_attr :magic, BinStruct::Int32, default: 0x63825563
|
54
53
|
# @!attribute options
|
55
54
|
# @return [DHCP::Options]
|
56
|
-
|
55
|
+
define_attr :options, DHCP::Options
|
57
56
|
|
58
57
|
# differentiate from BOOTP by checking presence of DHCP magic
|
59
58
|
# @return [Boolean]
|
@@ -11,8 +11,8 @@ module PacketGen
|
|
11
11
|
class DHCPv6
|
12
12
|
# @abstract Base class for DUID (DHCP Unique ID)
|
13
13
|
# @author Sylvain Daubert
|
14
|
-
class DUID <
|
15
|
-
include
|
14
|
+
class DUID < BinStruct::Struct
|
15
|
+
include BinStruct::Structable
|
16
16
|
|
17
17
|
TYPES = {
|
18
18
|
'DUID-LLT' => 1,
|
@@ -23,12 +23,12 @@ module PacketGen
|
|
23
23
|
# @!attribute type
|
24
24
|
# 16-bit DUID type
|
25
25
|
# @return [Integer]
|
26
|
-
|
26
|
+
define_attr :type, BinStruct::Int16Enum, enum: TYPES
|
27
27
|
# @!attribute body
|
28
|
-
# @abstract replaced by specific
|
28
|
+
# @abstract replaced by specific attributes in subclasses
|
29
29
|
# DUID data.
|
30
30
|
# @return [String]
|
31
|
-
|
31
|
+
define_attr :body, BinStruct::String
|
32
32
|
|
33
33
|
alias private_read read
|
34
34
|
private :private_read
|
@@ -50,7 +50,7 @@ module PacketGen
|
|
50
50
|
self
|
51
51
|
end
|
52
52
|
else
|
53
|
-
private_read
|
53
|
+
private_read(str)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -72,7 +72,7 @@ module PacketGen
|
|
72
72
|
# DUID Based on Link-layer Address Plus Time
|
73
73
|
# @author Sylvain Daubert
|
74
74
|
class DUID_LLT < DUID
|
75
|
-
|
75
|
+
remove_attr :body
|
76
76
|
|
77
77
|
# Base time for time computation
|
78
78
|
BASE_TIME = Time.utc(2000, 1, 1)
|
@@ -80,14 +80,14 @@ module PacketGen
|
|
80
80
|
# @!attribute htype
|
81
81
|
# 16-bit hardware protocol type
|
82
82
|
# @return [Integer]
|
83
|
-
|
83
|
+
define_attr :htype, BinStruct::Int16, default: 1
|
84
84
|
# @!attribute time
|
85
85
|
# 32-bit time information
|
86
86
|
# @return [Time]
|
87
|
-
|
87
|
+
define_attr :time, BinStruct::Int32, default: (Time.now - BASE_TIME).to_i
|
88
88
|
# @!attribute link_addr
|
89
89
|
# @return [Eth::MacAddr]
|
90
|
-
|
90
|
+
define_attr :link_addr, Eth::MacAddr
|
91
91
|
|
92
92
|
undef time, time=
|
93
93
|
|
@@ -112,15 +112,15 @@ module PacketGen
|
|
112
112
|
# DUID Based on Enterprise Number
|
113
113
|
# @author Sylvain Daubert
|
114
114
|
class DUID_EN < DUID
|
115
|
-
|
115
|
+
remove_attr :body
|
116
116
|
|
117
117
|
# @!attribute en
|
118
118
|
# 32-bit entreprise number
|
119
119
|
# @return [Integer]
|
120
|
-
|
120
|
+
define_attr :en, BinStruct::Int32
|
121
121
|
# @!attribute identifier
|
122
122
|
# @return [String]
|
123
|
-
|
123
|
+
define_attr :identifier, BinStruct::String
|
124
124
|
|
125
125
|
# Get human-readable DUID description
|
126
126
|
# @return [String]
|
@@ -132,15 +132,15 @@ module PacketGen
|
|
132
132
|
# DUID Based on Link-layer
|
133
133
|
# @author Sylvain Daubert
|
134
134
|
class DUID_LL < DUID
|
135
|
-
|
135
|
+
remove_attr :body
|
136
136
|
|
137
137
|
# @!attribute htype
|
138
138
|
# 16-bit hardware protocol type
|
139
139
|
# @return [Integer]
|
140
|
-
|
140
|
+
define_attr :htype, BinStruct::Int16, default: 1
|
141
141
|
# @!attribute link_addr
|
142
142
|
# @return [Eth::MacAddr]
|
143
|
-
|
143
|
+
define_attr :link_addr, Eth::MacAddr
|
144
144
|
|
145
145
|
# Get human-readable DUID description
|
146
146
|
# @return [String]
|