Class: OSPFv2::DatabaseDescription
Constant Summary
Constants inherited
from OspfPacket
OspfPacket::DATABASE_DESCRIPTION, OspfPacket::HELLO, OspfPacket::LINK_STATE_ACKNOWLEDGMENT, OspfPacket::LINK_STATE_REQUEST, OspfPacket::LINK_STATE_UPDATE
Constants included
from OSPFv2
ASBR_SUMMMARY_LSA, AllDRouters, AllSPFRouters, AreaId, AttachRouter, CheckAge, DefaultDestination, EXTERNAL_BASE_ADDRESS, EXTERNAL_LSA, IPPROTO_OSPF, InitialSequenceNumber, LINK_BASE_ADDRESS, LSA_HEADER_LEN, LSInfinity, LSRefreshTime, MaxAge, MaxAgeDiff, MaxSequenceNumber, MinLSArrival, MinLSInterval, N, NETWORK_BASE_ADDRESS, NETWORK_LSA, NSSA_LSA, Netmask, NetworkMask, PACKET_HEADER_LEN, ROUTER_LINK_P2P, ROUTER_LINK_STUB, ROUTER_LINK_TRANSIT, ROUTER_LINK_VL, ROUTER_LSA, RouterId, SUMMARY_BASE_ADDRESS, SUMMARY_LSA, VERSION
Instance Attribute Summary collapse
Attributes inherited from OspfPacket
#area_id, #au_type, #ospf_version, #packet_type, #router_id, #version
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from OspfPacket
factory, #method_missing, #packet_name, #to_hash, #to_s_brief, #to_s_default
Methods included from Common
#ivar_to_klassname, #ivars, #to_hash
Constructor Details
Returns a new instance of DatabaseDescription.
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/packet/database_description.rb', line 147
def initialize(_arg={})
arg = _arg.dup
@interface_mtu = InterfaceMtu.new
@options = Options.new
@imms, @dd_sequence_number, @number_of_lsa=0, nil, nil
if arg.is_a?(Hash)
arg.merge!({:packet_type=>:dd})
super arg
elsif arg.is_a?(String)
parse arg
elsif arg.is_a?(DatabaseDescription)
parse arg.encode
else
raise ArgumentError, "Invalid argument", caller
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class OSPFv2::OspfPacket
Instance Attribute Details
#dd_sequence_number ⇒ Object
Also known as:
dd_seqn, seqn
Returns the value of attribute dd_sequence_number.
136
137
138
|
# File 'lib/packet/database_description.rb', line 136
def dd_sequence_number
@dd_sequence_number
end
|
#interface_mtu ⇒ Object
Returns the value of attribute interface_mtu.
136
137
138
|
# File 'lib/packet/database_description.rb', line 136
def interface_mtu
@interface_mtu
end
|
Returns the value of attribute ls_db.
136
137
138
|
# File 'lib/packet/database_description.rb', line 136
def ls_db
@ls_db
end
|
Returns the value of attribute options.
136
137
138
|
# File 'lib/packet/database_description.rb', line 136
def options
@options
end
|
Class Method Details
129
130
131
132
|
# File 'lib/packet/database_description.rb', line 129
def seqn
@seqn ||= rand(0x4fff)
@seqn +=1
end
|
Instance Method Details
251
252
253
254
255
|
# File 'lib/packet/database_description.rb', line 251
def each
@lsas.each do |lsa|
yield lsa
end
end
|
206
207
208
209
210
211
212
|
# File 'lib/packet/database_description.rb', line 206
def encode
packet =[]
packet << @interface_mtu.encode
packet << [options.to_i, imms, dd_sequence_number].pack('CCN')
packet << @lsas.collect { |x| x.encode.slice(0,20) }.join if @lsas
super packet.join
end
|
#init ⇒ Object
Also known as:
in_init
231
232
233
|
# File 'lib/packet/database_description.rb', line 231
def init
@imms |= 4
end
|
#init? ⇒ Boolean
244
245
246
|
# File 'lib/packet/database_description.rb', line 244
def init?
imms & 4 == 4
end
|
#master ⇒ Object
Also known as:
is_master
226
227
228
|
# File 'lib/packet/database_description.rb', line 226
def master
@imms |= 1
end
|
#master? ⇒ Boolean
240
241
242
|
# File 'lib/packet/database_description.rb', line 240
def master?
imms & 1 == 1
end
|
218
219
220
|
# File 'lib/packet/database_description.rb', line 218
def more
@imms |= 2
end
|
#more? ⇒ Boolean
236
237
238
|
# File 'lib/packet/database_description.rb', line 236
def more?
imms & 2 == 2
end
|
222
223
224
|
# File 'lib/packet/database_description.rb', line 222
def no_more
@imms &= ~2
end
|
166
167
168
169
170
171
172
173
|
# File 'lib/packet/database_description.rb', line 166
def to_s
s = []
s << super(:brief)
s << "MTU #{interface_mtu.to_i}, Options 0x#{options.to_i.to_s(16)}, #{imms_to_s}, DD_SEQ: 0x#{dd_sequence_number_to_shex}"
s << "Age Options Type Link-State ID Advr Router Sequence Checksum Length" if @lsas
s <<((@lsas.collect { |x| x.to_s_dd })).join("\n ") if @lsas
s.join("\n ")
end
|
#to_s_short ⇒ Object
203
204
205
|
# File 'lib/packet/database_description.rb', line 203
def to_s_short
"I|M|MS: [#{[imms].pack('C').unpack('B8')[0][5..7]}] SEQN: #{dd_sequence_number}"
end
|