ospfv2 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|