ospfv2 0.0.2 → 0.0.3
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 +7 -0
- data/COPYING +674 -0
- data/LICENSE.txt +53 -0
- data/README +50 -0
- data/bin/ospfv2 +112 -105
- data/changelog.txt +7 -0
- data/gemspec +17 -0
- data/lib/ie/external_route.rb +9 -0
- data/lib/ie/id.rb +3 -4
- data/lib/ie/ie.rb +12 -0
- data/lib/ie/ls_age.rb +35 -5
- data/lib/ie/ls_type.rb +40 -37
- data/lib/ie/opaque_id.rb +46 -0
- data/lib/ie/opaque_type.rb +96 -0
- data/lib/ie/options.rb +5 -3
- data/lib/ie/router_link.rb +30 -7
- data/lib/ie/router_link_type.rb +116 -27
- data/lib/ie/sequence_number.rb +7 -3
- data/lib/infra/ospf_common.rb +1 -12
- data/lib/infra/ospf_io.rb +14 -8
- data/lib/infra/ospf_socket.rb +14 -14
- data/lib/infra/parse_options.rb +69 -25
- data/lib/ls_db/advertised_routers.rb +1 -1
- data/lib/ls_db/link_state_database.rb +74 -39
- data/lib/ls_db/link_state_database_build.rb +3 -3
- data/lib/ls_db/link_state_database_links.rb +7 -2
- data/lib/ls_db/lsdb_ios.rb +59 -0
- data/lib/lsa/external.rb +35 -2
- data/lib/lsa/lsa.rb +128 -35
- data/lib/lsa/lsa_factory.rb +20 -7
- data/lib/lsa/network.rb +44 -9
- data/lib/lsa/router.rb +14 -2
- data/lib/lsa/summary.rb +16 -3
- data/lib/lsa/tlv/color.rb +47 -0
- data/lib/lsa/tlv/link.rb +122 -0
- data/lib/lsa/tlv/link_id.rb +55 -0
- data/lib/lsa/tlv/link_type.rb +44 -0
- data/lib/lsa/tlv/local_interface.rb +56 -0
- data/lib/lsa/tlv/maximum_bandwidth.rb +55 -0
- data/lib/lsa/tlv/maximum_reservable_bandwidth.rb +52 -0
- data/lib/lsa/tlv/remote_interface.rb +58 -0
- data/lib/lsa/tlv/router_address.rb +57 -0
- data/lib/lsa/tlv/tlv.rb +32 -0
- data/lib/lsa/tlv/tlv_factory.rb +72 -0
- data/lib/lsa/tlv/traffic_engineering_metric.rb +52 -0
- data/lib/lsa/tlv/unreserved_bandwidth.rb +55 -0
- data/lib/lsa/traffic_engineering.rb +95 -0
- data/lib/neighbor/neighbor.rb +9 -9
- data/lib/packet/link_state_update.rb +16 -14
- data/lib/packet/ospf_packet.rb +13 -9
- data/test/unit/ie/au_type_test.rb +18 -0
- data/test/unit/ie/external_route_test.rb +51 -0
- data/test/unit/ie/id_test.rb +22 -0
- data/test/unit/ie/interface_mtu_test.rb +23 -0
- data/test/unit/ie/ls_age_test.rb +46 -0
- data/test/unit/ie/ls_type_test.rb +41 -0
- data/test/unit/ie/metric_test.rb +24 -0
- data/test/unit/ie/mt_metric_test.rb +27 -0
- data/test/unit/ie/opaque_id_test.rb +22 -0
- data/test/unit/ie/opaque_type_test.rb +22 -0
- data/test/unit/ie/options_test.rb +142 -0
- data/test/unit/ie/ospf_version_test.rb +0 -0
- data/test/unit/ie/packet_type_test.rb +33 -0
- data/test/unit/ie/router_link_factory_test.rb +26 -0
- data/test/unit/ie/router_link_test.rb +276 -0
- data/test/unit/ie/router_link_type_test.rb +24 -0
- data/test/unit/ie/sequence_number_test.rb +31 -0
- data/test/unit/ie/tos_metric_test.rb +27 -0
- data/test/unit/infra/ospf_common_test.rb +42 -0
- data/test/unit/infra/parse_options_test.rb +58 -0
- data/test/unit/infra/timer_test.rb +94 -0
- data/test/unit/ls_db/all +10 -0
- data/test/unit/ls_db/link_state_database_build_test.rb +140 -0
- data/test/unit/ls_db/link_state_database_links_tests.rb +74 -0
- data/test/unit/ls_db/link_state_database_test.rb +444 -0
- data/test/unit/ls_db/links_test.rb +49 -0
- data/test/unit/lsa/all +10 -0
- data/test/unit/lsa/external_test.rb +218 -0
- data/test/unit/lsa/lsa_factory_test.rb +314 -0
- data/test/unit/lsa/lsa_test.rb +191 -0
- data/test/unit/lsa/network_test.rb +107 -0
- data/test/unit/lsa/router_test.rb +614 -0
- data/test/unit/lsa/summary_test.rb +135 -0
- data/test/unit/lsa/tlv/color_test.rb +39 -0
- data/test/unit/lsa/tlv/link_id_test.rb +14 -0
- data/test/unit/lsa/tlv/link_test.rb +413 -0
- data/test/unit/lsa/tlv/link_type_test.rb +16 -0
- data/test/unit/lsa/tlv/local_interface_test.rb +15 -0
- data/test/unit/lsa/tlv/maximum_bandwidth_test.rb +14 -0
- data/test/unit/lsa/tlv/maximum_reservable_bandwidth_test.rb +13 -0
- data/test/unit/lsa/tlv/remote_interface_test.rb +14 -0
- data/test/unit/lsa/tlv/router_address_test.rb +16 -0
- data/test/unit/lsa/tlv/tlv_factory_test.rb +89 -0
- data/test/unit/lsa/tlv/traffic_engineering_metric_test.rb +15 -0
- data/test/unit/lsa/traffic_engineering_test.rb +65 -0
- data/test/unit/neighbor/neighbor_test.rb +82 -0
- data/test/unit/packet/all +10 -0
- data/test/unit/packet/database_description_test.rb +114 -0
- data/test/unit/packet/hello_test.rb +107 -0
- data/test/unit/packet/link_state_ack_test.rb +64 -0
- data/test/unit/packet/link_state_request_test.rb +168 -0
- data/test/unit/packet/link_state_update_test.rb +62 -0
- data/test/unit/packet/ospf_packet_test.rb +91 -0
- metadata +106 -51
- data/lib/infra/to_s.rb +0 -38
- data/lib/lsa/lsa_base.rb +0 -430
- data/lib/lsa/opaque.rb +0 -143
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require 'ie/opaque_type'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TestIeLsType < Test::Unit::TestCase
|
|
7
|
+
include OSPFv2
|
|
8
|
+
def test_new
|
|
9
|
+
assert OpaqueType.new
|
|
10
|
+
assert_equal 'OpaqueType: te_lsa', OpaqueType.new.to_s
|
|
11
|
+
assert_equal 'OpaqueType: te_lsa', OpaqueType.new(:te_lsa).to_s
|
|
12
|
+
assert_equal 'OpaqueType: grace_lsa', OpaqueType.new(:grace_lsa).to_s
|
|
13
|
+
assert_equal [1], OpaqueType.new.encode.unpack('C')
|
|
14
|
+
assert_equal [1], OpaqueType.new(:te_lsa).encode.unpack('C')
|
|
15
|
+
assert_equal [1], OpaqueType.new(1).encode.unpack('C')
|
|
16
|
+
assert_equal [3], OpaqueType.new(:grace_lsa).encode.unpack('C')
|
|
17
|
+
assert_equal [3], OpaqueType.new(3).encode.unpack('C')
|
|
18
|
+
assert_equal :te_lsa, OpaqueType.new(1).to_sym
|
|
19
|
+
assert_equal :grace_lsa, OpaqueType.new(3).to_sym
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Created by Jean-Michel Esnault.
|
|
3
|
+
# Copyright (c) 2008. All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
require 'test/unit'
|
|
7
|
+
require 'pp'
|
|
8
|
+
require 'ie/options'
|
|
9
|
+
|
|
10
|
+
class TestOptions < Test::Unit::TestCase # :nodoc:
|
|
11
|
+
include OSPFv2
|
|
12
|
+
def test_dc_bit
|
|
13
|
+
assert_equal("Options: 0x20 [DC]", Options.new({:DC=>1}).to_s)
|
|
14
|
+
assert_equal("Options: 0x20 [DC]", Options.new({:dc=>1}).to_s)
|
|
15
|
+
assert_equal(32, Options.new({:DC=>true}).options)
|
|
16
|
+
assert_equal(32, Options.new({:dc=>true}).options)
|
|
17
|
+
assert_equal(true, Options.new({:dc=>true}).dc?)
|
|
18
|
+
assert_equal(0, Options.new({:DC=>0}).options)
|
|
19
|
+
assert_equal(0, Options.new({:dc=>0}).options)
|
|
20
|
+
assert_equal(0, Options.new({:DC=>false}).options)
|
|
21
|
+
assert_equal(0, Options.new({:dc=>false}).options)
|
|
22
|
+
assert_equal(false, Options.new({:dc=>false}).dc?)
|
|
23
|
+
end
|
|
24
|
+
def test_l_bit
|
|
25
|
+
assert_equal("Options: 0x10 [L]", Options.new({:L=>1}).to_s)
|
|
26
|
+
assert_equal("Options: 0x10 [L]", Options.new({:l=>1}).to_s)
|
|
27
|
+
assert_equal(16, Options.new({:L=>true}).options)
|
|
28
|
+
assert_equal(16, Options.new({:l=>true}).options)
|
|
29
|
+
assert_equal(true, Options.new({:l=>true}).l?)
|
|
30
|
+
assert_equal(0, Options.new({:L=>0}).options)
|
|
31
|
+
assert_equal(0, Options.new({:l=>0}).options)
|
|
32
|
+
assert_equal(0, Options.new({:L=>false}).options)
|
|
33
|
+
assert_equal(0, Options.new({:l=>false}).options)
|
|
34
|
+
assert_equal(false, Options.new({:l=>false}).l?)
|
|
35
|
+
end
|
|
36
|
+
def test_n_bit
|
|
37
|
+
assert_equal("Options: 0x8 [N]", Options.new({:N=>1}).to_s)
|
|
38
|
+
assert_equal("Options: 0x8 [N]", Options.new({:n=>1}).to_s)
|
|
39
|
+
assert_equal(8, Options.new({:N=>true}).options)
|
|
40
|
+
assert_equal(8, Options.new({:n=>true}).options)
|
|
41
|
+
assert_equal(true, Options.new({:n=>true}).n?)
|
|
42
|
+
assert_equal(true, Options.new({:p=>true}).p?)
|
|
43
|
+
assert_equal(0, Options.new({:N=>0}).options)
|
|
44
|
+
assert_equal(0, Options.new({:n=>0}).options)
|
|
45
|
+
assert_equal(0, Options.new({:N=>false}).options)
|
|
46
|
+
assert_equal(0, Options.new({:n=>false}).options)
|
|
47
|
+
assert_equal(false, Options.new({:n=>false}).n?)
|
|
48
|
+
end
|
|
49
|
+
def test_mc_bit
|
|
50
|
+
assert_equal("Options: 0x4 [MC]", Options.new({:MC=>1}).to_s)
|
|
51
|
+
assert_equal("Options: 0x4 [MC]", Options.new({:mc=>1}).to_s)
|
|
52
|
+
assert_equal(4, Options.new({:MC=>true}).options)
|
|
53
|
+
assert_equal(4, Options.new({:mc=>true}).options)
|
|
54
|
+
assert_equal(true, Options.new({:mc=>true}).mc?)
|
|
55
|
+
assert_equal(0, Options.new({:MC=>0}).options)
|
|
56
|
+
assert_equal(0, Options.new({:mc=>0}).options)
|
|
57
|
+
assert_equal(0, Options.new({:MC=>false}).options)
|
|
58
|
+
assert_equal(0, Options.new({:mc=>false}).options)
|
|
59
|
+
assert_equal(false, Options.new({:mc=>false}).mc?)
|
|
60
|
+
end
|
|
61
|
+
def test_e_bit
|
|
62
|
+
assert_equal("Options: 0x2 [E]", Options.new({:E=>1}).to_s)
|
|
63
|
+
assert_equal("Options: 0x2 [E]", Options.new({:e=>1}).to_s)
|
|
64
|
+
assert_equal(2, Options.new({:E=>true}).options)
|
|
65
|
+
assert_equal(2, Options.new({:e=>true}).options)
|
|
66
|
+
assert_equal(true, Options.new({:e=>true}).e?)
|
|
67
|
+
assert_equal(0, Options.new({:E=>0}).options)
|
|
68
|
+
assert_equal(0, Options.new({:e=>0}).options)
|
|
69
|
+
assert_equal(0, Options.new({:E=>false}).options)
|
|
70
|
+
assert_equal(0, Options.new({:e=>false}).options)
|
|
71
|
+
assert_equal(false, Options.new({:e=>false}).e?)
|
|
72
|
+
end
|
|
73
|
+
def test_v6_bit
|
|
74
|
+
assert_equal("Options: 0x1 [V6]", Options.new({:V6=>1}).to_s)
|
|
75
|
+
assert_equal("Options: 0x1 [V6]", Options.new({:v6=>1}).to_s)
|
|
76
|
+
assert_equal(1, Options.new({:V6=>true}).options)
|
|
77
|
+
assert_equal(1, Options.new({:v6=>true}).options)
|
|
78
|
+
assert_equal(true, Options.new({:v6=>true}).v6?)
|
|
79
|
+
assert_equal(0, Options.new({:V6=>0}).options)
|
|
80
|
+
assert_equal(0, Options.new({:v6=>0}).options)
|
|
81
|
+
assert_equal(0, Options.new({:V6=>false}).options)
|
|
82
|
+
assert_equal(0, Options.new({:v6=>false}).options)
|
|
83
|
+
assert_equal(false, Options.new({:v6=>false}).v6?)
|
|
84
|
+
end
|
|
85
|
+
def test_opaque_bit
|
|
86
|
+
assert_equal("Options: 0x40 [O]", Options.new({:O=>1}).to_s)
|
|
87
|
+
assert_equal("Options: 0x40 [O]", Options.new({:o=>1}).to_s)
|
|
88
|
+
assert_equal(64, Options.new({:O=>true}).options)
|
|
89
|
+
assert_equal(64, Options.new({:o=>true}).options)
|
|
90
|
+
assert_equal(true, Options.new({:o=>true}).o?)
|
|
91
|
+
assert_equal(0, Options.new({:O=>0}).options)
|
|
92
|
+
assert_equal(0, Options.new({:o=>0}).options)
|
|
93
|
+
assert_equal(0, Options.new({:o=>false}).options)
|
|
94
|
+
assert_equal(0, Options.new({:o=>false}).options)
|
|
95
|
+
assert_equal(false, Options.new({:o=>false}).o?)
|
|
96
|
+
end
|
|
97
|
+
def test_set_multi_bit
|
|
98
|
+
opt = Options.new
|
|
99
|
+
opt.setDC
|
|
100
|
+
assert_equal("Options: 0x20 [DC]", opt.to_s)
|
|
101
|
+
opt.setL
|
|
102
|
+
assert_equal("Options: 0x30 [L,DC]", opt.to_s)
|
|
103
|
+
opt.setN
|
|
104
|
+
assert_equal("Options: 0x38 [L,DC,N]", opt.to_s)
|
|
105
|
+
opt.setMC
|
|
106
|
+
assert_equal("Options: 0x3c [L,DC,N,MC]", opt.to_s)
|
|
107
|
+
opt.setE
|
|
108
|
+
assert_equal("Options: 0x3e [L,DC,N,MC,E]", opt.to_s)
|
|
109
|
+
opt.setV6
|
|
110
|
+
assert_equal("Options: 0x3f [L,DC,N,MC,E,V6]", opt.to_s)
|
|
111
|
+
opt = Options.new
|
|
112
|
+
opt.setDC << opt.setV6 << opt.setMC
|
|
113
|
+
assert_equal("Options: 0x25 [DC,MC,V6]", opt.to_s)
|
|
114
|
+
end
|
|
115
|
+
def test_unset_multi_bit
|
|
116
|
+
opt = Options.new
|
|
117
|
+
opt.options=0x7f
|
|
118
|
+
assert_equal("Options: 0x7f [O,L,DC,N,MC,E,V6]", opt.to_s)
|
|
119
|
+
opt.unsetE << opt.unsetMC
|
|
120
|
+
assert_equal("Options: 0x79 [O,L,DC,N,V6]", opt.to_s)
|
|
121
|
+
opt.unsetDC << opt.unsetL << opt.unsetO
|
|
122
|
+
assert_equal("Options: 0x9 [N,V6]", opt.to_s)
|
|
123
|
+
opt.unsetV6 << opt.unsetN
|
|
124
|
+
assert_equal(0, opt.options)
|
|
125
|
+
end
|
|
126
|
+
def test_set_nssa
|
|
127
|
+
opt = Options.new
|
|
128
|
+
opt.setE
|
|
129
|
+
assert_equal("Options: 0x2 [E]", opt.to_s)
|
|
130
|
+
opt.setNSSA
|
|
131
|
+
assert_equal("Options: 0x8 [N]", opt.to_s)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_enc
|
|
135
|
+
opt = Options.new([0x3f].pack('C'))
|
|
136
|
+
assert_equal("Options: 0x3f [L,DC,N,MC,E,V6]", opt.to_s)
|
|
137
|
+
assert_equal(true, opt.dc?)
|
|
138
|
+
assert_equal(true, opt.e?)
|
|
139
|
+
assert_equal("3f", opt.to_shex)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require 'ie/packet_type'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TestPacketType < Test::Unit::TestCase
|
|
7
|
+
include OSPFv2
|
|
8
|
+
def test_new
|
|
9
|
+
assert PacketType.new
|
|
10
|
+
assert_equal 'PacketType: hello', PacketType.new(:hello).to_s
|
|
11
|
+
assert_equal 'PacketType: dd', PacketType.new(:dd).to_s
|
|
12
|
+
assert_equal 'PacketType: ls_request', PacketType.new(:ls_request).to_s
|
|
13
|
+
assert_equal 'PacketType: ls_update', PacketType.new(:ls_update).to_s
|
|
14
|
+
assert_equal 'PacketType: ls_ack', PacketType.new(:ls_ack).to_s
|
|
15
|
+
assert_equal :hello, PacketType.new(:hello).to_sym
|
|
16
|
+
assert_equal 1, PacketType.new(:hello).to_i
|
|
17
|
+
assert_equal 2, PacketType.new(:dd).to_i
|
|
18
|
+
assert_equal 3, PacketType.new(:ls_request).to_i
|
|
19
|
+
assert_equal 4, PacketType.new(:ls_update).to_i
|
|
20
|
+
assert_equal 5, PacketType.new(:ls_ack).to_i
|
|
21
|
+
assert_equal 1, PacketType.new(1).to_i
|
|
22
|
+
assert_equal 2, PacketType.new(2).to_i
|
|
23
|
+
assert_equal 3, PacketType.new(3).to_i
|
|
24
|
+
assert_equal 4, PacketType.new(4).to_i
|
|
25
|
+
assert_equal 5, PacketType.new(5).to_i
|
|
26
|
+
assert_equal :hello, PacketType.new(:hello).to_sym
|
|
27
|
+
assert_equal :dd, PacketType.new(:dd).to_sym
|
|
28
|
+
assert_equal :ls_request, PacketType.new(:ls_request).to_sym
|
|
29
|
+
assert_equal :ls_update, PacketType.new(:ls_update).to_sym
|
|
30
|
+
assert_equal :ls_ack, PacketType.new(:ls_ack).to_sym
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
require "ie/router_link_factory"
|
|
3
|
+
|
|
4
|
+
class TestIeRouterLinkFactory < Test::Unit::TestCase
|
|
5
|
+
include OSPFv2
|
|
6
|
+
def tests
|
|
7
|
+
assert_equal RouterLink::PointToPoint, (l1=RouterLink.factory(['000000000000000001000000'].pack('H*'))).class
|
|
8
|
+
assert_equal RouterLink::StubNetwork, (l2=RouterLink.factory(['000000000000000003000000'].pack('H*'))).class
|
|
9
|
+
assert_equal RouterLink::VirtualLink, (l3=RouterLink.factory(['000000000000000004000000'].pack('H*'))).class
|
|
10
|
+
assert_equal RouterLink::TransitNetwork, (l4=RouterLink.factory(['000000000000000002000000'].pack('H*'))).class
|
|
11
|
+
assert_equal RouterLink::TransitNetwork, (l5=RouterLink.factory(['0000000000000000020100000a000014'].pack('H*'))).class
|
|
12
|
+
assert_raise(ArgumentError) { RouterLink.factory(:link_id=> '1.1.1.1') }
|
|
13
|
+
assert_equal RouterLink::PointToPoint, RouterLink.factory(:link_data=> '1.1.1.1', :router_link_type => :point_to_point).class
|
|
14
|
+
assert_equal RouterLink::TransitNetwork, RouterLink.factory(:link_data=> '1.1.1.1', :router_link_type => :transit_network).class
|
|
15
|
+
assert_equal RouterLink::StubNetwork, RouterLink.factory(:link_data=> '1.1.1.1', :router_link_type => :stub_network).class
|
|
16
|
+
assert_equal RouterLink::VirtualLink, RouterLink.factory(:link_data=> '1.1.1.1', :router_link_type => :virtual_link).class
|
|
17
|
+
l1h = RouterLink.factory :router_link_type=>:point_to_point, :metric=>0, :tos_metrics=>[], :link_id=>"0.0.0.0", :link_data=>"0.0.0.0"
|
|
18
|
+
assert_equal l1h.to_shex , l1.to_shex
|
|
19
|
+
l1h = RouterLink.factory :router_link_type=>:point_to_point, :tos_metrics=>[], :link_id=>"0.0.0.0", :link_data=>"0.0.0.0"
|
|
20
|
+
assert_equal l1.to_shex, l1h.to_shex
|
|
21
|
+
l1h = RouterLink::PointToPoint.new :router_link_type=>:point_to_point, :tos_metrics=>[], :link_id=>"0.0.0.0", :link_data=>"0.0.0.0"
|
|
22
|
+
assert_equal l1.to_shex, l1h.to_shex
|
|
23
|
+
assert_equal l1.to_hash, l1h.to_hash
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
require "ie/router_link"
|
|
3
|
+
require 'ie/router_link_factory'
|
|
4
|
+
class TestIeRouterLink < Test::Unit::TestCase
|
|
5
|
+
include OSPFv2
|
|
6
|
+
def tests
|
|
7
|
+
assert RouterLink.new
|
|
8
|
+
assert_equal '000000000000000001000000', RouterLink.new.to_shex
|
|
9
|
+
assert_equal 4*3, RouterLink.new.encode.size
|
|
10
|
+
assert_equal '', RouterLink.new.router_link_type.to_s
|
|
11
|
+
assert_equal '010101010000000001000000', RouterLink.new( :link_id=> '1.1.1.1').to_shex
|
|
12
|
+
assert_equal '01010101ffffffff01000000',
|
|
13
|
+
RouterLink.new( :link_id=> '1.1.1.1', :link_data=> '255.255.255.255').to_shex
|
|
14
|
+
assert_equal '01010101ffffffff0100000a',
|
|
15
|
+
RouterLink.new( :link_id=> '1.1.1.1', :link_data=> '255.255.255.255', :metric=>10).to_shex
|
|
16
|
+
assert_equal '01010101ffffffff0101000a0a000014',
|
|
17
|
+
RouterLink.new( :link_id=> '1.1.1.1',
|
|
18
|
+
:link_data=> '255.255.255.255',
|
|
19
|
+
:metric=>10,
|
|
20
|
+
:mt_metrics =>{ :id=>10, :metric=>20}).to_shex
|
|
21
|
+
assert_equal '01010101ffffffff0102000a0a0000140b00001e',
|
|
22
|
+
RouterLink.new( :link_id=> '1.1.1.1',
|
|
23
|
+
:link_data=> '255.255.255.255',
|
|
24
|
+
:metric=>10,
|
|
25
|
+
:mt_metrics => [{:id=>10, :metric=>20},{:id=>11, :metric=>30}]
|
|
26
|
+
).to_shex
|
|
27
|
+
|
|
28
|
+
assert_equal '010101010000000001000000', RouterLink.new(:link_id=> '1.1.1.1').to_shex
|
|
29
|
+
assert_equal '000000000101010101000000', RouterLink.new(:link_data=> '1.1.1.1').to_shex
|
|
30
|
+
assert_equal '020202020101010101000000', RouterLink.new(:link_data=> '1.1.1.1', :link_id=>'2.2.2.2').to_shex
|
|
31
|
+
assert_equal '02020202010101010100000a', RouterLink.new(:link_data=> '1.1.1.1', :link_id=>'2.2.2.2', :metric=>10).to_shex
|
|
32
|
+
assert_equal '02020202010101010101000a0a000014',
|
|
33
|
+
RouterLink.new(:link_data=> '1.1.1.1', :link_id=>'2.2.2.2', :metric=>10, :mt_metrics =>{ :id=>10, :metric=>20}).to_shex
|
|
34
|
+
|
|
35
|
+
h = {
|
|
36
|
+
:link_id=> '1.1.1.1',
|
|
37
|
+
:link_data=> '255.255.255.255',
|
|
38
|
+
:metric=>10,
|
|
39
|
+
:mt_metrics => [{:id=>10, :metric=>20},{:id=>11, :metric=>30}]
|
|
40
|
+
}
|
|
41
|
+
assert_equal(h, RouterLink.new(h).to_hash)
|
|
42
|
+
assert RouterLink::PointToPoint.new({})
|
|
43
|
+
assert_equal '000000000000000001000000', RouterLink::PointToPoint.new({}).to_shex
|
|
44
|
+
assert_equal '000000000000000003000000', RouterLink::StubNetwork.new({}).to_shex
|
|
45
|
+
assert_equal '000000000000000004000000', RouterLink::VirtualLink.new({}).to_shex
|
|
46
|
+
assert_equal '000000000000000002000000', RouterLink::TransitNetwork.new({}).to_shex
|
|
47
|
+
assert_equal '010101010000000001000000', RouterLink::PointToPoint.new(:link_id=>'1.1.1.1').to_shex
|
|
48
|
+
assert_equal '000000000202020203000000', RouterLink::StubNetwork.new(:link_data=>'2.2.2.2').to_shex
|
|
49
|
+
assert_equal '00000000000000000400abcd', RouterLink::VirtualLink.new(:metric=>0xabcd).to_shex
|
|
50
|
+
assert_equal '0000000000000000020100000a000014',
|
|
51
|
+
RouterLink::TransitNetwork.new(:mt_metrics =>{ :id=>10, :metric=>20}).to_shex
|
|
52
|
+
|
|
53
|
+
assert_equal '000000000000000001000000', RouterLink.new(['000000000000000001000000'].pack('H*')).to_shex
|
|
54
|
+
assert_equal '000000000000000003000000', RouterLink.new(['000000000000000003000000'].pack('H*')).to_shex
|
|
55
|
+
assert_equal '000000000000000004000000', RouterLink.new(['000000000000000004000000'].pack('H*')).to_shex
|
|
56
|
+
assert_equal '000000000000000002000000', RouterLink.new(['000000000000000002000000'].pack('H*')).to_shex
|
|
57
|
+
assert_equal '0000000000000000020100000a000014', RouterLink.new(['0000000000000000020100000a000014'].pack('H*')).to_shex
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_point_2_point
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# puts RouterLink::PointToPoint.new(:link_data=> '2.2.2.2', :link_id=>'1.1.1.1').to_s
|
|
66
|
+
# puts RouterLink::PointToPoint.new(:link_data=> '2.2.2.2', :link_id=>'1.1.1.1').to_s_junos
|
|
67
|
+
# puts RouterLink::PointToPoint.new(:link_data=> '2.2.2.2', :link_id=>'1.1.1.1').to_s_ios
|
|
68
|
+
#
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def test_misc
|
|
79
|
+
h = {:router_link_type=>3, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
|
|
80
|
+
assert_equal "c0a80800fffffff003000001", RouterLink.factory(h).to_shex
|
|
81
|
+
h = {:router_link_type=>1, :metric=>1,:mt_metrics=>[{:id=>15, :metric=>14}, {:id=>13, :metric=>12}], :link_data=>"10.254.233.233",:link_id=>"2.2.2.2"}
|
|
82
|
+
assert_equal "020202020afee9e9010200010f00000e0d00000c", RouterLink.factory(h).to_shex
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_tos_metric
|
|
86
|
+
h = {:router_link_type=>1, :metric=>1, :link_data=>"10.254.233.233",:link_id=>"2.2.2.2"}
|
|
87
|
+
rlink = RouterLink.factory(h)
|
|
88
|
+
rlink << [33,20]
|
|
89
|
+
rlink << [34,255]
|
|
90
|
+
assert_equal "020202020afee9e90102000121000014220000ff", rlink.to_shex
|
|
91
|
+
rlink = RouterLink.new(h)
|
|
92
|
+
rlink << MtMetric.new([33,20])
|
|
93
|
+
rlink << MtMetric.new([34,255])
|
|
94
|
+
assert_equal("020202020afee9e90102000121000014220000ff", rlink.to_shex)
|
|
95
|
+
rlink = RouterLink.new(h)
|
|
96
|
+
rlink << [33,20] << [34,255]
|
|
97
|
+
assert_equal("020202020afee9e90102000121000014220000ff", rlink.to_shex)
|
|
98
|
+
rlink = RouterLink.new(h)
|
|
99
|
+
assert_raise(ArgumentError) { rlink << [33] }
|
|
100
|
+
assert_raise(ArgumentError) { rlink << [33,100,1] }
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_router_link_p2p
|
|
104
|
+
h = {:metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
|
|
105
|
+
assert_equal "PointToPoint:\n LinkId: 192.168.8.0\n LinkData: 255.255.255.240\n RouterLinkType: point_to_point\n Metric: 1",
|
|
106
|
+
RouterLink::PointToPoint.new(h).to_s
|
|
107
|
+
assert_equal "c0a80800fffffff001000001", RouterLink::PointToPoint.new(h).to_shex
|
|
108
|
+
assert_equal(:point_to_point, RouterLink::PointToPoint.new(h).to_hash[:router_link_type])
|
|
109
|
+
assert_equal(1, RouterLink::PointToPoint.new(h).to_hash[:metric])
|
|
110
|
+
assert_equal("255.255.255.240", RouterLink::PointToPoint.new(h).to_hash[:link_data])
|
|
111
|
+
assert_equal("192.168.8.0", RouterLink::PointToPoint.new(h).to_hash[:link_id])
|
|
112
|
+
assert_equal( RouterLink::PointToPoint.new(h).encode, RouterLink::PointToPoint.new( RouterLink::PointToPoint.new(h)).encode)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_new_from_hash
|
|
116
|
+
h = {:metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
|
|
117
|
+
assert_equal RouterLink::PointToPoint, RouterLink.new_point_to_point(h).class
|
|
118
|
+
assert_equal RouterLink::StubNetwork, RouterLink.new_stub_network(h).class
|
|
119
|
+
assert_equal RouterLink::TransitNetwork, RouterLink.new_transit_network(h).class
|
|
120
|
+
assert_equal RouterLink::VirtualLink, RouterLink.new_virtual_link(h).class
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_to_s
|
|
124
|
+
h = {:metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0",
|
|
125
|
+
:mt_metrics => [{:id=>10, :metric=>20},{:id=>11, :metric=>30}]}
|
|
126
|
+
assert_match( /PointToPoint:\n LinkId: 192.168.8.0\n/ ,RouterLink.new_point_to_point(h).to_s)
|
|
127
|
+
assert_match( /LinkData: 255.255.255.240\n/,RouterLink.new_point_to_point(h).to_s)
|
|
128
|
+
assert_match( /RouterLinkType: point_to_point\n Metric: 1/,RouterLink.new_point_to_point(h).to_s)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# id 0.0.0.2, data 192.168.2.1, Type PointToPoint (1)
|
|
132
|
+
# Topology count: 0, Default metric: 2
|
|
133
|
+
# id 192.168.2.0, data 255.255.255.0, Type Stub (3)
|
|
134
|
+
# Topology count: 0, Default metric: 2
|
|
135
|
+
# id 0.0.0.3, data 192.168.3.1, Type PointToPoint (1)
|
|
136
|
+
# Topology count: 0, Default metric: 2
|
|
137
|
+
# id 192.168.3.0, data 255.255.255.0, Type Stub (3)
|
|
138
|
+
# Topology count: 0, Default metric: 2
|
|
139
|
+
# id 0.0.0.4, data 192.168.4.1, Type PointToPoint (1)
|
|
140
|
+
# Topology count: 0, Default metric: 2
|
|
141
|
+
# id 192.168.4.0, data 255.255.255.0, Type Stub (3)
|
|
142
|
+
# Topology count: 0, Default metric: 2
|
|
143
|
+
#
|
|
144
|
+
def test_to_s_junos
|
|
145
|
+
h_link1 = {:router_link_type=>1, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
|
|
146
|
+
h_link2 = {:router_link_type=>2, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
|
|
147
|
+
h_link3 = {:router_link_type=>3, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
|
|
148
|
+
assert_equal(" id 192.168.8.0, data 255.255.255.240, Type Point-to-point (1)\n Topology count: 0, Default metric: 1", RouterLink.new(h_link1).to_s_junos)
|
|
149
|
+
assert_equal(" id 192.168.8.0, data 255.255.255.240, Type Transit (2)\n Topology count: 0, Default metric: 1", RouterLink.new(h_link2).to_s_junos)
|
|
150
|
+
assert_equal(" id 192.168.8.0, data 255.255.255.240, Type Stub (3)\n Topology count: 0, Default metric: 1", RouterLink.new(h_link3).to_s_junos)
|
|
151
|
+
h = {
|
|
152
|
+
:router_link_type => 2,
|
|
153
|
+
:link_id=> '1.1.1.1',
|
|
154
|
+
:link_data=> '255.255.255.255',
|
|
155
|
+
:metric=>10,
|
|
156
|
+
:mt_metrics => [{:id=>10, :metric=>20},{:id=>11, :metric=>30}]
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
# puts ""
|
|
160
|
+
# puts RouterLink.new(h).to_s_junos
|
|
161
|
+
assert_equal(" id 1.1.1.1, data 255.255.255.255, Type Transit (2)\n Topology count: 2, Default metric: 10\n Topology 10, Metric 20\n Topology 11, Metric 30", RouterLink.new(h).to_s_junos)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
__END__
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
OSPF Router with ID (1.1.1.1) (Process ID 1)
|
|
172
|
+
|
|
173
|
+
Router Link States (Area 0)
|
|
174
|
+
|
|
175
|
+
LS age: 1701
|
|
176
|
+
Options: (No TOS-capability, DC)
|
|
177
|
+
LS Type: Router Links
|
|
178
|
+
Link State ID: 1.1.1.1
|
|
179
|
+
Advertising Router: 1.1.1.1
|
|
180
|
+
LS Seq Number: 80000015
|
|
181
|
+
Checksum: 0xEEBC
|
|
182
|
+
Length: 84
|
|
183
|
+
Number of Links: 5
|
|
184
|
+
|
|
185
|
+
Link connected to: another Router (point-to-point)
|
|
186
|
+
(Link ID) Neighboring Router ID: 0.0.0.1
|
|
187
|
+
(Link Data) Router Interface address: 192.168.158.13
|
|
188
|
+
Number of TOS metrics: 0
|
|
189
|
+
TOS 0 Metrics: 1
|
|
190
|
+
|
|
191
|
+
Link connected to: a Stub Network
|
|
192
|
+
(Link ID) Network/subnet number: 192.168.158.0
|
|
193
|
+
(Link Data) Network Mask: 255.255.255.0
|
|
194
|
+
Number of TOS metrics: 0
|
|
195
|
+
TOS 0 Metrics: 1
|
|
196
|
+
|
|
197
|
+
Link connected to: a Transit Network
|
|
198
|
+
(Link ID) Designated Router address: 192.168.0.2
|
|
199
|
+
(Link Data) Router Interface address: 192.168.0.1
|
|
200
|
+
Number of TOS metrics: 0
|
|
201
|
+
TOS 0 Metrics: 10
|
|
202
|
+
|
|
203
|
+
Link connected to: a Stub Network
|
|
204
|
+
(Link ID) Network/subnet number: 20.0.0.3
|
|
205
|
+
(Link Data) Network Mask: 255.255.255.255
|
|
206
|
+
Number of TOS metrics: 0
|
|
207
|
+
TOS 0 Metrics: 1
|
|
208
|
+
|
|
209
|
+
Link connected to: a Stub Network
|
|
210
|
+
(Link ID) Network/subnet number: 20.0.0.1
|
|
211
|
+
(Link Data) Network Mask: 255.255.255.255
|
|
212
|
+
Number of TOS metrics: 0
|
|
213
|
+
TOS 0 Metrics: 1
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
R1#
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
LS age: 22
|
|
221
|
+
Options: 0x22 [DC,E]
|
|
222
|
+
LS Type: Router Links
|
|
223
|
+
Link State ID: 1.1.1.1
|
|
224
|
+
Advertising Router: 1.1.1.1
|
|
225
|
+
LS Seq Number: 80000019
|
|
226
|
+
Checksum: 0xE6C0
|
|
227
|
+
Length: 84
|
|
228
|
+
Number of Links: 5
|
|
229
|
+
|
|
230
|
+
Link connected to: another Router (point-to-point)
|
|
231
|
+
(Link ID) Neighboring Router ID: 0.0.0.1
|
|
232
|
+
(Link Data) Router Interface address: 192.168.158.13
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
Link connected to: a Stub Network
|
|
236
|
+
(Link ID) Network/subnet number: 192.168.158.0
|
|
237
|
+
(Link Data) Network Mask: 255.255.255.0
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
Link connected to: a Transit Network
|
|
241
|
+
(Link ID) Designated Router address: 192.168.0.2
|
|
242
|
+
(Link Data) Router Interface address: 192.168.0.1
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
Link connected to: a Stub Network
|
|
246
|
+
(Link ID) Network/subnet number: 20.0.0.3
|
|
247
|
+
(Link Data) Network Mask: 255.255.255.255
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
Link connected to: a Stub Network
|
|
251
|
+
(Link ID) Network/subnet number: 20.0.0.1
|
|
252
|
+
(Link Data) Network Mask: 255.255.255.255
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
LS Seq Number: 80000001
|
|
259
|
+
Checksum: 0xEC8D
|
|
260
|
+
Length: 72
|
|
261
|
+
Number of Links: 4
|
|
262
|
+
|
|
263
|
+
Link connected to: another Router (point-to-point)
|
|
264
|
+
(Link ID) Neighboring Router ID: 1.1.1.1
|
|
265
|
+
(Link Data) Router Interface address: 192.168.158.1
|
|
266
|
+
Number of TOS metrics: 0
|
|
267
|
+
TOS 0 Metrics: 1
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
Link connected to: a Stub Network
|
|
271
|
+
(Link ID) Network/subnet number: 192.168.158.1
|
|
272
|
+
(Link Data) Network Mask: 255.255.255.255
|
|
273
|
+
Number of TOS metrics: 0
|
|
274
|
+
TOS 0 Metrics: 1
|
|
275
|
+
|
|
276
|
+
|