Class: OSPFv2::OspfPacket
- Defined in:
- lib/packet/ospf_packet.rb,
lib/packet/ospf_packet.rb
Direct Known Subclasses
DatabaseDescription, Hello, LinkStateAck, LinkStateRequest, LinkStateUpdate
Constant Summary collapse
- RouterId =
Class.new(Id)
- AreaId =
Class.new(Id)
- HELLO =
1
- DATABASE_DESCRIPTION =
2
- LINK_STATE_REQUEST =
3
- LINK_STATE_UPDATE =
4
- LINK_STATE_ACKNOWLEDGMENT =
5
Constants included from OSPFv2
ASBR_SUMMMARY_LSA, AllDRouters, AllSPFRouters, 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, PACKET_HEADER_LEN, ROUTER_LINK_P2P, ROUTER_LINK_STUB, ROUTER_LINK_TRANSIT, ROUTER_LINK_VL, ROUTER_LSA, SUMMARY_BASE_ADDRESS, SUMMARY_LSA, VERSION
Instance Attribute Summary collapse
-
#area_id ⇒ Object
readonly
Returns the value of attribute area_id.
-
#au_type ⇒ Object
readonly
Returns the value of attribute au_type.
-
#ospf_version ⇒ Object
readonly
Returns the value of attribute ospf_version.
-
#packet_type ⇒ Object
readonly
Returns the value of attribute packet_type.
-
#router_id ⇒ Object
readonly
Returns the value of attribute router_id.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
Instance Method Summary collapse
- #encode(payload = '', router_id = @router_id) ⇒ Object
-
#initialize(arg = {}) ⇒ OspfPacket
constructor
A new instance of OspfPacket.
- #method_missing(method, *args, &block) ⇒ Object
- #packet_name ⇒ Object (also: #name)
- #to_hash(verbose = false) ⇒ Object
- #to_s(*args) ⇒ Object
-
#to_s_brief ⇒ Object
Version 2, RouterId 0.0.0.1, AreaId 0.0.0.0, AuType 0, Checksum 0x9580, len 9999.
- #to_s_default(verbosity = :brief) ⇒ Object (also: #to_s_junos)
Methods included from Common
#ivar_to_klassname, #ivars, #set
Constructor Details
#initialize(arg = {}) ⇒ OspfPacket
Returns a new instance of OspfPacket.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/packet/ospf_packet.rb', line 137 def initialize(arg={}) if arg.is_a?(Hash) @ospf_version = OspfVersion.new @packet_type = PacketType.new @area_id = AreaId.new @router_id = RouterId.new @au_type = AuType.new @authentication='' set(arg) elsif arg.is_a?(String) parse(arg) else raise ArgumentError, "Invalid argument", caller end @_len=nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
207 208 209 210 211 212 213 |
# File 'lib/packet/ospf_packet.rb', line 207 def method_missing(method, *args, &block) if method == :to_s_junos to_s(*args) else super end end |
Instance Attribute Details
#area_id ⇒ Object (readonly)
Returns the value of attribute area_id.
129 130 131 |
# File 'lib/packet/ospf_packet.rb', line 129 def area_id @area_id end |
#au_type ⇒ Object (readonly)
Returns the value of attribute au_type.
129 130 131 |
# File 'lib/packet/ospf_packet.rb', line 129 def au_type @au_type end |
#ospf_version ⇒ Object (readonly)
Returns the value of attribute ospf_version.
129 130 131 |
# File 'lib/packet/ospf_packet.rb', line 129 def ospf_version @ospf_version end |
#packet_type ⇒ Object (readonly)
Returns the value of attribute packet_type.
129 130 131 |
# File 'lib/packet/ospf_packet.rb', line 129 def packet_type @packet_type end |
#router_id ⇒ Object (readonly)
Returns the value of attribute router_id.
129 130 131 |
# File 'lib/packet/ospf_packet.rb', line 129 def router_id @router_id end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
129 130 131 |
# File 'lib/packet/ospf_packet.rb', line 129 def version @version end |
Class Method Details
.factory(arg) ⇒ Object
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
# File 'lib/packet/ospf_packet.rb', line 275 def factory(arg) if arg.is_a?(String) s = arg.dup version, type, len = s.unpack('CCn') raise RuntimeError, "Bogus OSPF Version #{version}" unless version==2 case type when HELLO ; Hello.new(s) when DATABASE_DESCRIPTION ; DatabaseDescription.new(s) when LINK_STATE_REQUEST ; LinkStateRequest.new(s) when LINK_STATE_UPDATE ; LinkStateUpdate.new(s) when LINK_STATE_ACKNOWLEDGMENT ; LinkStateAck.new(s) else raise RuntimeError, "unknown OSPFv2 packet type #{type}" end elsif arg.is_a?(Hash) case arg[:packet_type] when :hello ; Hello.new(arg) when :dd ; DatabaseDescription.new(arg) else raise RuntimeError, "Cannot yet build this packet from hash #{arg[:packet_type]}" end end end |
Instance Method Details
#encode(payload = '', router_id = @router_id) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/packet/ospf_packet.rb', line 155 def encode(payload='',router_id=@router_id) @_len = 24 + payload.size packet = @ospf_version.encode packet << @packet_type.encode packet << [24 + payload.size].pack('n') packet << router_id.encode packet << area_id.encode packet << [0].pack('n') packet << @au_type.encode packet << [''].pack('a8') packet << payload packet[12..13]= self.csum = [checksum(packet)].pack('n') packet end |
#packet_name ⇒ Object Also known as: name
132 133 134 |
# File 'lib/packet/ospf_packet.rb', line 132 def packet_name self.class.to_s.split('::').last.to_underscore end |
#to_hash(verbose = false) ⇒ Object
215 216 217 218 219 220 221 |
# File 'lib/packet/ospf_packet.rb', line 215 def to_hash(verbose=false) encode h = super() h.delete(:authentication) if @authentication=='' h.delete(:csum) unless verbose h end |
#to_s(*args) ⇒ Object
197 198 199 200 201 202 203 204 205 |
# File 'lib/packet/ospf_packet.rb', line 197 def to_s(*args) return to_s_default(*args) unless defined?($style) case $style when :junos ; to_s_junos(*args) when :junos_verbose ; to_s_junos_verbose(*args) else to_s_default(*args) end end |
#to_s_brief ⇒ Object
Version 2, RouterId 0.0.0.1, AreaId 0.0.0.0, AuType 0, Checksum 0x9580, len 9999
172 173 174 175 |
# File 'lib/packet/ospf_packet.rb', line 172 def to_s_brief encode "Version #{ospf_version.to_i}, RouterId #{router_id.to_ip}, AreaId #{area_id.to_ip}, Checksum #{0}, len #{@_len}" end |
#to_s_default(verbosity = :brief) ⇒ Object Also known as: to_s_junos
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/packet/ospf_packet.rb', line 177 def to_s_default(verbosity=:brief) case verbosity when :brief to_s_brief else s=[] s << self.class.to_s.split('::').last + ":" s << ospf_version.to_s s << packet_type.to_s s << router_id.to_s s << area_id.to_s s << au_type.to_s s << [@authentication].pack('a8') s.join("\n ") end end |