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
data/test/unit/lsa/all
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
#TODO: finish external LSA and add Unit Tests.
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
|
|
5
|
+
# require "lsa/external"
|
|
6
|
+
require_relative "../../../lib/lsa/external"
|
|
7
|
+
|
|
8
|
+
class TestLsaExternal < Test::Unit::TestCase
|
|
9
|
+
include OSPFv2
|
|
10
|
+
def setup
|
|
11
|
+
AsExternal.reset
|
|
12
|
+
end
|
|
13
|
+
def tests
|
|
14
|
+
h_lsa = {
|
|
15
|
+
:advertising_router=>"1.1.1.1",
|
|
16
|
+
:ls_id=>"10.0.0.0",
|
|
17
|
+
:netmask => "255.255.255.0",
|
|
18
|
+
:forwarding_address => "1.2.3.0",
|
|
19
|
+
:metric => 1,
|
|
20
|
+
:type => :e2,
|
|
21
|
+
:tag=> 255
|
|
22
|
+
}
|
|
23
|
+
ext = OSPFv2::AsExternal.new(h_lsa)
|
|
24
|
+
assert_equal '000000050a0000000101010180000001b40b0024ffffff008000000101020300000000ff', ext.to_shex
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
ext.type=:e1
|
|
28
|
+
assert_equal '000000050a0000000101010180000001310f0024ffffff000000000101020300000000ff', ext.to_shex
|
|
29
|
+
ext.metric=10
|
|
30
|
+
assert_equal '000000050a00000001010101800000018bab0024ffffff000000000a01020300000000ff', ext.to_shex
|
|
31
|
+
ext.tag=0xff00
|
|
32
|
+
assert_equal '000000050a00000001010101800000018bab0024ffffff000000000a010203000000ff00', ext.to_shex
|
|
33
|
+
ext.forwarding_address='5.4.3.2'
|
|
34
|
+
assert_equal '000000050a0000000101010180000001eb430024ffffff000000000a050403020000ff00', ext.to_shex
|
|
35
|
+
h_lsa = {
|
|
36
|
+
:advertising_router=>"1.1.1.1", :network => '10.0.0.0/24',
|
|
37
|
+
:forwarding_address => "1.2.3.0",
|
|
38
|
+
:metric => 1,
|
|
39
|
+
:type => :e2,
|
|
40
|
+
:tag=> 255
|
|
41
|
+
}
|
|
42
|
+
ext2 = OSPFv2::AsExternal.new(h_lsa)
|
|
43
|
+
ext2.type=:e1
|
|
44
|
+
ext2.metric=10
|
|
45
|
+
ext2.tag=0xff00
|
|
46
|
+
ext2.forwarding_address='5.4.3.2'
|
|
47
|
+
assert_equal ext.encode, ext2.encode
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_count
|
|
51
|
+
AsExternal.new_lsdb
|
|
52
|
+
assert_equal "50.0.0.#{AsExternal.count}/24", AsExternal.network
|
|
53
|
+
AsExternal.new_lsdb
|
|
54
|
+
assert_equal 2, AsExternal.count
|
|
55
|
+
assert_equal "50.0.0.#{AsExternal.count}/24", AsExternal.network
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def test_new_lsdb
|
|
61
|
+
( AsExternal.new_lsdb :advertising_router=> 1)
|
|
62
|
+
( AsExternal.new_lsdb :advertising_router=> 1)
|
|
63
|
+
assert_equal 2, AsExternal.count
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_add_mt
|
|
67
|
+
h_lsa = {
|
|
68
|
+
:advertising_router=>"1.1.1.1", :network => '10.0.0.0/24',
|
|
69
|
+
:forwarding_address => "1.2.3.0",
|
|
70
|
+
:metric => 0,
|
|
71
|
+
:type => :e2,
|
|
72
|
+
:tag=> 255
|
|
73
|
+
}
|
|
74
|
+
ext = OSPFv2::AsExternal.new(h_lsa)
|
|
75
|
+
|
|
76
|
+
ext << {
|
|
77
|
+
:id=>20,
|
|
78
|
+
:forwarding_address => "1.2.3.0",
|
|
79
|
+
:metric => 20,
|
|
80
|
+
:type => :e2,
|
|
81
|
+
:tag=> 255
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
puts ext
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_add_mt
|
|
88
|
+
h_lsa = {
|
|
89
|
+
:advertising_router=>"1.1.1.1", :network => '10.0.0.0/24',
|
|
90
|
+
:forwarding_address => "1.2.3.0",
|
|
91
|
+
:metric => 0,
|
|
92
|
+
:type => :e2,
|
|
93
|
+
:tag=> 255,
|
|
94
|
+
|
|
95
|
+
:mt_metrics => [
|
|
96
|
+
{:mt_id=>20,
|
|
97
|
+
:forwarding_address => "1.2.3.0",
|
|
98
|
+
:metric => 20,
|
|
99
|
+
:type => :e2,
|
|
100
|
+
:tag=> 255
|
|
101
|
+
},
|
|
102
|
+
{:mt_id=>33,
|
|
103
|
+
:forwarding_address => "1.2.3.0",
|
|
104
|
+
:metric => 30,
|
|
105
|
+
:type => :e1,
|
|
106
|
+
:tag=> 255
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
ext = OSPFv2::AsExternal.new(h_lsa)
|
|
111
|
+
|
|
112
|
+
ext << {
|
|
113
|
+
:mt_id=>20,
|
|
114
|
+
:forwarding_address => "1.2.3.0",
|
|
115
|
+
:metric => 20,
|
|
116
|
+
:type => :e2,
|
|
117
|
+
:tag=> 255
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
assert_equal ext.encode, AsExternal.new(ext).encode
|
|
121
|
+
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
__END__
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
R1#show ip ospf database external
|
|
130
|
+
|
|
131
|
+
OSPF Router with ID (1.1.1.1) (Process ID 1)
|
|
132
|
+
|
|
133
|
+
Type-5 AS External Link States
|
|
134
|
+
|
|
135
|
+
Routing Bit Set on this LSA
|
|
136
|
+
LS age: 12
|
|
137
|
+
Options: (No TOS-capability, No DC)
|
|
138
|
+
LS Type: AS External Link
|
|
139
|
+
Link State ID: 50.0.1.0 (External Network Number )
|
|
140
|
+
Advertising Router: 0.1.0.1
|
|
141
|
+
LS Seq Number: 80000001
|
|
142
|
+
Checksum: 0x9556
|
|
143
|
+
Length: 48
|
|
144
|
+
Network Mask: /24
|
|
145
|
+
Metric Type: 1 (Comparable directly to link state metric)
|
|
146
|
+
TOS: 0
|
|
147
|
+
Metric: 0
|
|
148
|
+
Forward Address: 0.0.0.0
|
|
149
|
+
External Route Tag: 0
|
|
150
|
+
Metric Type: 1 (Comparable directly to link state metric)
|
|
151
|
+
TOS: 10
|
|
152
|
+
Metric: 20
|
|
153
|
+
Forward Address: 0.0.0.0
|
|
154
|
+
External Route Tag: 10
|
|
155
|
+
|
|
156
|
+
Routing Bit Set on this LSA
|
|
157
|
+
LS age: 19
|
|
158
|
+
Options: (No TOS-capability, No DC)
|
|
159
|
+
LS Type: AS External Link
|
|
160
|
+
Link State ID: 50.0.2.0 (External Network Number )
|
|
161
|
+
Advertising Router: 0.1.0.1
|
|
162
|
+
LS Seq Number: 80000001
|
|
163
|
+
Checksum: 0x8A60
|
|
164
|
+
Length: 48
|
|
165
|
+
Network Mask: /24
|
|
166
|
+
Metric Type: 1 (Comparable directly to link state metric)
|
|
167
|
+
TOS: 0
|
|
168
|
+
Metric: 0
|
|
169
|
+
Forward Address: 0.0.0.0
|
|
170
|
+
External Route Tag: 0
|
|
171
|
+
Metric Type: 1 (Comparable directly to link state metric)
|
|
172
|
+
TOS: 10
|
|
173
|
+
Metric: 20
|
|
174
|
+
Forward Address: 0.0.0.0
|
|
175
|
+
External Route Tag: 10
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
00000005
|
|
182
|
+
0a000000
|
|
183
|
+
01010101
|
|
184
|
+
80000001
|
|
185
|
+
b40b0024
|
|
186
|
+
|
|
187
|
+
ffffff00
|
|
188
|
+
80000001
|
|
189
|
+
01020300
|
|
190
|
+
000000ff
|
|
191
|
+
|
|
192
|
+
0 1 2 3
|
|
193
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
194
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
195
|
+
| LS age | Options | 5 |
|
|
196
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
197
|
+
| Link State ID |
|
|
198
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
199
|
+
| Advertising Router |
|
|
200
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
201
|
+
| LS sequence number |
|
|
202
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
203
|
+
| LS checksum | length |
|
|
204
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
205
|
+
| Network Mask |
|
|
206
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
207
|
+
|E| 0 | metric |
|
|
208
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
209
|
+
| Forwarding address |
|
|
210
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
211
|
+
| External Route Tag |
|
|
212
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
213
|
+
|E| TOS | TOS metric |
|
|
214
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
215
|
+
| Forwarding address |
|
|
216
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
217
|
+
| External Route Tag |
|
|
218
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
require "lsa/lsa_factory"
|
|
3
|
+
|
|
4
|
+
class TestLsaLsa < Test::Unit::TestCase
|
|
5
|
+
def test_asbr_summary
|
|
6
|
+
s = ['000000040101010101010101800000012f27001c0000000000000000'].pack('H*')
|
|
7
|
+
lsa = OSPFv2::Lsa.factory(s)
|
|
8
|
+
assert_equal OSPFv2::AsbrSummary, lsa.class
|
|
9
|
+
end
|
|
10
|
+
def test_summary
|
|
11
|
+
s = ['000000030a000000010101018000000188680024ffffff000000000121000014220000ff'].pack('H*')
|
|
12
|
+
lsa = OSPFv2::Lsa.factory(s)
|
|
13
|
+
assert_equal OSPFv2::Summary, lsa.class
|
|
14
|
+
end
|
|
15
|
+
def test_router
|
|
16
|
+
s = ['000022010047000b0047000b8000000155d70084000000090047000bffffffff030000010046000b0d0044b6010000010d0044b4fffffffc030000010047000a0d0044ba010000010d0044b8fffffffc030000010047000c0d0044c1010000010d0044c0fffffffc030000010048000b0d0045b1010000010d0045b0fffffffc03000001'].pack('H*')
|
|
17
|
+
lsa = OSPFv2::Lsa.factory(s)
|
|
18
|
+
assert_equal OSPFv2::Router, lsa.class
|
|
19
|
+
assert_equal s, lsa.encode
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_external
|
|
23
|
+
#TODO unit-test lsa factory external lsa
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_network
|
|
27
|
+
#TODO unit-test lsa factory network lsa
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_traffic_engineering_header_only
|
|
31
|
+
s = ['0000000a010000ff0202020280000001cd890014'].pack('H*')
|
|
32
|
+
lsa = OSPFv2::Lsa.factory(s)
|
|
33
|
+
assert_equal(OSPFv2::TrafficEngineering, lsa.class)
|
|
34
|
+
assert_equal(s, lsa.encode)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_traffic_engineering_link_tlv
|
|
38
|
+
s = '0000000a010000000000000080000001b2ac0074
|
|
39
|
+
0002 005c
|
|
40
|
+
0001 0001 01 000000
|
|
41
|
+
0002 0004 01020304
|
|
42
|
+
0003 0004 01010101
|
|
43
|
+
0004 0004 02020202
|
|
44
|
+
0005 0004 000000ff
|
|
45
|
+
0006 0004 449c4000
|
|
46
|
+
0007 0004 445ac000
|
|
47
|
+
0008 0020 4148000041480000414800004148000041480000414800004148000041480000'.split.join
|
|
48
|
+
lsa = OSPFv2::Lsa.factory([s].pack('H*'))
|
|
49
|
+
assert_equal(OSPFv2::TrafficEngineering, lsa.class)
|
|
50
|
+
assert_equal(s, lsa.to_shex)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# LSA #3
|
|
54
|
+
# Advertising Router 10.255.245.46, seq 0x8000001e, age 8s, length 104
|
|
55
|
+
# Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 5
|
|
56
|
+
# Options: [External, Demand Circuit]
|
|
57
|
+
# Link TLV (2), length: 100
|
|
58
|
+
# Link Type subTLV (1), length: 1, Point-to-point (1)
|
|
59
|
+
# Link ID subTLV (2), length: 4, 12.1.1.1 (0x0c010101)
|
|
60
|
+
# Local Interface IP address subTLV (3), length: 4, 192.168.208.88
|
|
61
|
+
# Remote Interface IP address subTLV (4), length: 4, 192.168.208.89
|
|
62
|
+
# Traffic Engineering Metric subTLV (5), length: 4, Metric 1
|
|
63
|
+
# Maximum Bandwidth subTLV (6), length: 4, 155.520 Mbps
|
|
64
|
+
# Maximum Reservable Bandwidth subTLV (7), length: 4, 155.520 Mbps
|
|
65
|
+
# Unreserved Bandwidth subTLV (8), length: 32
|
|
66
|
+
# TE-Class 0: 155.520 Mbps
|
|
67
|
+
# TE-Class 1: 155.520 Mbps
|
|
68
|
+
# TE-Class 2: 155.520 Mbps
|
|
69
|
+
# TE-Class 3: 155.520 Mbps
|
|
70
|
+
# TE-Class 4: 155.520 Mbps
|
|
71
|
+
# TE-Class 5: 155.520 Mbps
|
|
72
|
+
# TE-Class 6: 155.520 Mbps
|
|
73
|
+
# TE-Class 7: 155.520 Mbps
|
|
74
|
+
# Administrative Group subTLV (9), length: 4, 0x00000000
|
|
75
|
+
# 0200 0000 45c0 01b0 d0ff 0000 0159 7520
|
|
76
|
+
# c0a8 d067 e000 0005 0204 019c 0aff f531
|
|
77
|
+
# 0000 0000 2dde 0000 0000 0000 0000 0000
|
|
78
|
+
# 0000 0003 000a 2202 c0a8 a42f 0c01 0101
|
|
79
|
+
# 8000 0eba b7e3 0020 ffff fc00 0c01 0101
|
|
80
|
+
# 7c01 0001 000a 2201 0c01 0101 0c01 0101
|
|
81
|
+
# 8000 3313 0ed3 00e4 0000 0011 c0a8 d043
|
|
82
|
+
# c0a8 d044 0200 0001 c0a8 a42f c0a8 a42f
|
|
83
|
+
# 0200 0001 0c01 0101 ffff ffff 0300 0000
|
|
84
|
+
# 0aff f52f ffff ffff 0300 0000 7c01 0101
|
|
85
|
+
# 7c01 0002 0200 0001 7c01 0201 7c01 0003
|
|
86
|
+
# 0200 0001 0a01 0000 ffff 0000 0300 0001
|
|
87
|
+
# 0a01 0000 ffff 0000 0300 0001 0a02 0000
|
|
88
|
+
# ffff 0000 0300 0001 0a01 0000 ffff 0000
|
|
89
|
+
# 0300 0001 0a02 0000 ffff 0000 0300 0001
|
|
90
|
+
# 0aff f52e c0a8 d05b 0100 0001 c0a8 d05a
|
|
91
|
+
# ffff fffe 0300 0001 0aff f52e c0a8 d059
|
|
92
|
+
# 0100 0001 c0a8 d058 ffff fffe 0300 0001
|
|
93
|
+
# 0aff f52e c0a8 d057 0100 0001 c0a8 d056
|
|
94
|
+
# ffff fffe 0300 0001 0008 220a 0100 0005
|
|
95
|
+
# 0aff f52e 8000 001e d240 007c 0002 0064
|
|
96
|
+
# 0001 0001 0100 0000 0002 0004 0c01 0101
|
|
97
|
+
# 0003 0004 c0a8 d058 0004 0004 c0a8 d059
|
|
98
|
+
# 0005 0004 0000 0001 0006 0004 4b94 50c0
|
|
99
|
+
# 0007 0004 4b94 50c0 0008 0020 4b94 50c0
|
|
100
|
+
# 4b94 50c0 4b94 50c0 4b94 50c0 4b94 50c0
|
|
101
|
+
# 4b94 50c0 4b94 50c0 4b94 50c0 0009 0004
|
|
102
|
+
# 0000 0000
|
|
103
|
+
require 'packet/ospf_packet'
|
|
104
|
+
require 'lsa/tlv/tlv_factory'
|
|
105
|
+
|
|
106
|
+
def test_traffic_engineering_link_tlv_2
|
|
107
|
+
s = "
|
|
108
|
+
0204 019c
|
|
109
|
+
0aff f531
|
|
110
|
+
0000 0000
|
|
111
|
+
2dde 0000
|
|
112
|
+
0000 0000
|
|
113
|
+
0000 0000
|
|
114
|
+
|
|
115
|
+
0000 0003
|
|
116
|
+
|
|
117
|
+
000a 22 02
|
|
118
|
+
c0a8a42f
|
|
119
|
+
0c010101
|
|
120
|
+
80000eba
|
|
121
|
+
b7e3 0020
|
|
122
|
+
fffffc00
|
|
123
|
+
0c010101
|
|
124
|
+
7c010001
|
|
125
|
+
|
|
126
|
+
000a 22 01
|
|
127
|
+
0c010101
|
|
128
|
+
0c010101
|
|
129
|
+
80003313
|
|
130
|
+
0ed3 00e4
|
|
131
|
+
0000 0011
|
|
132
|
+
|
|
133
|
+
c0 a8d043
|
|
134
|
+
c0a8d044
|
|
135
|
+
0200 0001 c0a8 a42f c0a8 a42f
|
|
136
|
+
0200 0001 0c01 0101 ffff ffff 0300 0000
|
|
137
|
+
0aff f52f ffff ffff 0300 0000 7c01 0101
|
|
138
|
+
7c01 0002 0200 0001 7c01 0201 7c01 0003
|
|
139
|
+
0200 0001 0a01 0000 ffff 0000 0300 0001
|
|
140
|
+
0a01 0000 ffff 0000 0300 0001 0a02 0000
|
|
141
|
+
ffff 0000 0300 0001 0a01 0000 ffff 0000
|
|
142
|
+
0300 0001 0a02 0000 ffff 0000 0300 0001
|
|
143
|
+
0aff f52e c0a8 d05b 0100 0001 c0a8 d05a
|
|
144
|
+
ffff fffe 0300 0001 0aff f52e c0a8 d059
|
|
145
|
+
0100 0001 c0a8 d058 ffff fffe 0300 0001
|
|
146
|
+
0aff f52e c0a8 d057 0100 0001 c0a8 d056
|
|
147
|
+
ffff fffe 0300 0001 0008 220a 0100 0005
|
|
148
|
+
0aff f52e 8000 001e d240 007c
|
|
149
|
+
|
|
150
|
+
0002 0064
|
|
151
|
+
0001 0001 0100 0000
|
|
152
|
+
0002 0004 0c01 0101
|
|
153
|
+
0003 0004 c0a8 d058
|
|
154
|
+
0004 0004 c0a8 d059
|
|
155
|
+
0005 0004 0000 0001
|
|
156
|
+
0006 0004 4b94 50c0
|
|
157
|
+
0007 0004 4b94 50c0
|
|
158
|
+
0008 0020 4b94 50c0 4b94 50c0 4b94 50c0 4b94 50c0 4b94 50c0
|
|
159
|
+
4b94 50c0 4b94 50c0 4b94 50c0
|
|
160
|
+
0009 0004 0000 0000
|
|
161
|
+
".split.join
|
|
162
|
+
sbin = [s].pack('H*')
|
|
163
|
+
packet = OSPFv2::OspfPacket.factory([s].pack('H*'))
|
|
164
|
+
assert_equal(OSPFv2::LinkStateUpdate, packet.class)
|
|
165
|
+
assert_equal(3, packet.lsas.size)
|
|
166
|
+
assert_equal([OSPFv2::Network, OSPFv2::Router, OSPFv2::TrafficEngineering],
|
|
167
|
+
packet.lsas.collect { |lsa| lsa.class })
|
|
168
|
+
# puts packet.lsas[2].to_s_verbose
|
|
169
|
+
assert_equal(s, packet.to_shex)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def test_router_lsa_from_hash
|
|
173
|
+
|
|
174
|
+
h_lsa =
|
|
175
|
+
{
|
|
176
|
+
:sequence_number=>2147483650,
|
|
177
|
+
:advertising_router=>"1.2.0.0",
|
|
178
|
+
:ls_id=>"0.0.4.5",
|
|
179
|
+
:nwveb=>1,
|
|
180
|
+
:ls_type=>:router,
|
|
181
|
+
:options=> 0x21,
|
|
182
|
+
:ls_age=>10,
|
|
183
|
+
:links=>[
|
|
184
|
+
{
|
|
185
|
+
:link_id=>"1.1.1.1",
|
|
186
|
+
:link_data=>"255.255.255.255",
|
|
187
|
+
:router_link_type=>:point_to_point,
|
|
188
|
+
:metric=>11,
|
|
189
|
+
:mt_metrics=>[]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
:link_id=>"1.1.1.2",
|
|
193
|
+
:link_data=>"255.255.255.255",
|
|
194
|
+
:router_link_type=>:point_to_point,
|
|
195
|
+
:metric=>12,
|
|
196
|
+
:mt_metrics=>[]
|
|
197
|
+
}
|
|
198
|
+
],
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
lsa = OSPFv2::Lsa.factory h_lsa
|
|
202
|
+
assert_equal OSPFv2::Router, lsa.class
|
|
203
|
+
assert_equal h_lsa, lsa.to_hash
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def test_network_lsa_from_hash
|
|
207
|
+
h_lsa = {
|
|
208
|
+
:ls_id=>"192.168.0.1",
|
|
209
|
+
:ls_age=>0,
|
|
210
|
+
:ls_type=>:network,
|
|
211
|
+
:advertising_router=>"1.1.1.1",
|
|
212
|
+
:sequence_number=>2147483649,
|
|
213
|
+
:options=>0,
|
|
214
|
+
:network_mask=>"255.255.255.0",
|
|
215
|
+
:attached_routers=>["1.1.1.1", "2.2.2.2", "3.3.3.3"],
|
|
216
|
+
}
|
|
217
|
+
lsa = OSPFv2::Lsa.factory h_lsa
|
|
218
|
+
assert_equal OSPFv2::Network, lsa.class
|
|
219
|
+
assert_equal h_lsa, lsa.to_hash
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def test_summary_lsa_from_hash
|
|
223
|
+
h_lsa = {
|
|
224
|
+
:sequence_number=>2147483649,
|
|
225
|
+
:advertising_router=>"1.1.1.1",
|
|
226
|
+
:ls_id=>"10.0.0.0",
|
|
227
|
+
:ls_age=>0,
|
|
228
|
+
:options=>0,
|
|
229
|
+
:ls_type=>:summary,
|
|
230
|
+
:netmask=>"255.255.255.0",
|
|
231
|
+
:metric=>1,
|
|
232
|
+
:mt_metrics=>[{:id=>33, :metric=>20}, {:id=>34, :metric=>255}]
|
|
233
|
+
}
|
|
234
|
+
lsa = OSPFv2::Lsa.factory h_lsa
|
|
235
|
+
assert_equal OSPFv2::Summary, lsa.class
|
|
236
|
+
assert_equal h_lsa, lsa.to_hash
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def test_asbr_summary_lsa_hash
|
|
240
|
+
h_lsa = {
|
|
241
|
+
:sequence_number=>2147483649,
|
|
242
|
+
:advertising_router=>"1.1.1.1",
|
|
243
|
+
:ls_id=>"10.0.0.0",
|
|
244
|
+
:ls_age=>0,
|
|
245
|
+
:metric=>1,
|
|
246
|
+
:options=>0,
|
|
247
|
+
:ls_type=>:asbr_summary,
|
|
248
|
+
:netmask=>"255.255.255.0",
|
|
249
|
+
:mt_metrics=>[{:id=>33, :metric=>20}, {:id=>34, :metric=>255}]
|
|
250
|
+
}
|
|
251
|
+
lsa = OSPFv2::Lsa.factory h_lsa
|
|
252
|
+
assert_equal OSPFv2::AsbrSummary, lsa.class
|
|
253
|
+
assert_equal h_lsa, lsa.to_hash
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def test_external_lsa_hash
|
|
257
|
+
h_lsa = {
|
|
258
|
+
:sequence_number=>2147483649,
|
|
259
|
+
:ls_age => 13,
|
|
260
|
+
:options=>0,
|
|
261
|
+
:ls_type => :as_external,
|
|
262
|
+
:advertising_router=>"1.1.1.1",
|
|
263
|
+
:ls_id=>"10.0.0.0",
|
|
264
|
+
:netmask => "255.255.255.0",
|
|
265
|
+
:external_route=> {
|
|
266
|
+
:type=>:e2,
|
|
267
|
+
:forwarding_address=>"1.2.3.0",
|
|
268
|
+
:metric=>1,
|
|
269
|
+
:tag=>255
|
|
270
|
+
},
|
|
271
|
+
:mt_metrics=>[]
|
|
272
|
+
}
|
|
273
|
+
lsa = OSPFv2::Lsa.factory h_lsa
|
|
274
|
+
assert_equal OSPFv2::AsExternal, lsa.class
|
|
275
|
+
assert_equal h_lsa, lsa.to_hash
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def test_traffic_engineering_lsa_from_hash
|
|
279
|
+
h_lsa = {:ls_age=>0,
|
|
280
|
+
:ls_type=>:area,
|
|
281
|
+
:advertising_router=>"0.0.0.0",
|
|
282
|
+
:sequence_number=>2147483649,
|
|
283
|
+
:opaque_id=>0,
|
|
284
|
+
:opaque_type=>:te_lsa,
|
|
285
|
+
:top_lvl_tlv=>
|
|
286
|
+
{:tlv_type=>2,
|
|
287
|
+
:tlvs=>
|
|
288
|
+
[{:tlv_type=>1, :link_type=>1},
|
|
289
|
+
{:tlv_type=>2, :link_id=>"1.2.3.4"},
|
|
290
|
+
{:ip_address=>"1.1.1.1", :tlv_type=>3},
|
|
291
|
+
{:ip_address=>"2.2.2.2", :tlv_type=>4},
|
|
292
|
+
{:tlv_type=>5, :te_metric=>255},
|
|
293
|
+
{:max_bw=>10000, :tlv_type=>6},
|
|
294
|
+
{:tlv_type=>7, :max_resv_bw=>7000},
|
|
295
|
+
{:tlv_type=>8,
|
|
296
|
+
:unreserved_bw=>[100, 100, 100, 100, 100, 100, 100, 100]}]},
|
|
297
|
+
:options=>0}
|
|
298
|
+
|
|
299
|
+
lsa = OSPFv2::Lsa.factory h_lsa
|
|
300
|
+
assert_equal OSPFv2::TrafficEngineering, lsa.class
|
|
301
|
+
assert_equal h_lsa, lsa.to_hash
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def test_external_lsa_hash_mt_metrics
|
|
305
|
+
lsa1 = OSPFv2::AsExternal.new_lsdb(:advertising_router=> 1, :mt_metrics=>[{:mt_id=>10, :metric=>20, :tag=>10, :forwarding_address=> '1.1.1.1'}])
|
|
306
|
+
lsa2 = OSPFv2::Lsa.factory lsa1
|
|
307
|
+
assert_equal lsa1.to_shex, lsa2.to_shex
|
|
308
|
+
assert_equal lsa1.to_shex, OSPFv2::Lsa.factory(lsa2.to_hash).to_shex
|
|
309
|
+
assert_equal lsa1.to_hash, lsa2.to_hash
|
|
310
|
+
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
end
|
|
314
|
+
|