bgp4r 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.
- data/COPYING +674 -0
- data/LICENSE.txt +53 -0
- data/README.rdoc +259 -0
- data/bgp/aggregator.rb +104 -0
- data/bgp/as_path.rb +223 -0
- data/bgp/atomic_aggregate.rb +42 -0
- data/bgp/attribute.rb +181 -0
- data/bgp/attributes.rb +34 -0
- data/bgp/cluster_list.rb +117 -0
- data/bgp/common.rb +204 -0
- data/bgp/communities.rb +139 -0
- data/bgp/extended_communities.rb +107 -0
- data/bgp/extended_community.rb +254 -0
- data/bgp/iana.rb +269 -0
- data/bgp/io.rb +116 -0
- data/bgp/label.rb +94 -0
- data/bgp/local_pref.rb +75 -0
- data/bgp/message.rb +894 -0
- data/bgp/mp_reach.rb +208 -0
- data/bgp/multi_exit_disc.rb +76 -0
- data/bgp/neighbor.rb +291 -0
- data/bgp/next_hop.rb +63 -0
- data/bgp/nlri.rb +303 -0
- data/bgp/orf.rb +88 -0
- data/bgp/origin.rb +88 -0
- data/bgp/originator_id.rb +73 -0
- data/bgp/path_attribute.rb +210 -0
- data/bgp/prefix_orf.rb +263 -0
- data/bgp/rd.rb +107 -0
- data/examples/bgp +65 -0
- data/examples/routegen +85 -0
- data/examples/routegen.yml +50 -0
- data/test/aggregator_test.rb +66 -0
- data/test/as_path_test.rb +149 -0
- data/test/atomic_aggregate_test.rb +35 -0
- data/test/attribute_test.rb +57 -0
- data/test/cluster_list_test.rb +39 -0
- data/test/common_test.rb +68 -0
- data/test/communities_test.rb +75 -0
- data/test/extended_communities_test.rb +111 -0
- data/test/extended_community_test.rb +93 -0
- data/test/label_test.rb +50 -0
- data/test/local_pref_test.rb +43 -0
- data/test/message_test.rb +294 -0
- data/test/mp_reach_test.rb +143 -0
- data/test/multi_exit_disc_test.rb +46 -0
- data/test/neighbor_test.rb +50 -0
- data/test/next_hop_test.rb +37 -0
- data/test/nlri_test.rb +189 -0
- data/test/origin_test.rb +57 -0
- data/test/originator_id_test.rb +38 -0
- data/test/path_attribute_test.rb +127 -0
- data/test/prefix_orf_test.rb +97 -0
- data/test/rd_test.rb +44 -0
- metadata +133 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require 'bgp/mp_reach'
|
24
|
+
require 'test/unit'
|
25
|
+
|
26
|
+
class Mp_reach_Test < Test::Unit::TestCase
|
27
|
+
include BGP
|
28
|
+
def test_1
|
29
|
+
s = '800e30000202102009000900190000000000000000000100402009000100000000402009000200000000402009000300000000'
|
30
|
+
sbin = [s].pack('H*')
|
31
|
+
mpr = Mp_reach.new(sbin)
|
32
|
+
assert_equal("\n AFI IPv6 (2), SAFI Multicast (2)\n nexthop: 2009:9:19::1\n 2009:1::/64\n 2009:2::/64\n 2009:3::/64", mpr.mp_reach)
|
33
|
+
assert_equal(2, mpr.afi)
|
34
|
+
assert_equal(2, mpr.safi)
|
35
|
+
assert_equal(s, mpr.to_shex)
|
36
|
+
end
|
37
|
+
def test_2
|
38
|
+
s = "800e2500020120200900090019000000000000000000012009000900190000000000000000000200"
|
39
|
+
sbin = [s].pack('H*')
|
40
|
+
mpr = Mp_reach.new(sbin)
|
41
|
+
assert_equal("\n AFI IPv6 (2), SAFI Unicast (1)\n nexthop: 2009:9:19::1, 2009:9:19::2", mpr.mp_reach)
|
42
|
+
assert_equal(2, mpr.afi)
|
43
|
+
assert_equal(1, mpr.safi)
|
44
|
+
assert_equal(s, mpr.to_shex)
|
45
|
+
end
|
46
|
+
def test_3
|
47
|
+
s = "800e0d000102080a0000010a00000200"
|
48
|
+
sbin = [s].pack('H*')
|
49
|
+
mpr = Mp_reach.new(sbin)
|
50
|
+
assert_equal("\n AFI IPv4 (1), SAFI Multicast (2)\n nexthop: 10.0.0.1, 10.0.0.2", mpr.mp_reach)
|
51
|
+
assert_equal(1, mpr.afi)
|
52
|
+
assert_equal(2, mpr.safi)
|
53
|
+
assert_equal(s, mpr.to_shex)
|
54
|
+
end
|
55
|
+
def test_4
|
56
|
+
s = "800e11000102040a0000010018c0a80118c0a802"
|
57
|
+
sbin = [s].pack('H*')
|
58
|
+
mpr = Mp_reach.new(sbin)
|
59
|
+
assert_equal("\n AFI IPv4 (1), SAFI Multicast (2)\n nexthop: 10.0.0.1\n 192.168.1.0/24\n 192.168.2.0/24", mpr.mp_reach)
|
60
|
+
assert_equal(1, mpr.afi)
|
61
|
+
assert_equal(2, mpr.safi)
|
62
|
+
assert_equal(s, mpr.to_shex)
|
63
|
+
end
|
64
|
+
def test_5
|
65
|
+
s = "800e39000204102009000900190000000000000000000100580006512009000100000000580006612009000200000000580006712009000300000000"
|
66
|
+
sbin = [s].pack('H*')
|
67
|
+
mpr = Mp_reach.new(sbin)
|
68
|
+
assert_equal("\n AFI IPv6 (2), SAFI Labeled NLRI (4)\n nexthop: 2009:9:19::1\n Label Stack=101 (bottom) 2009:1::/64\n Label Stack=102 (bottom) 2009:2::/64\n Label Stack=103 (bottom) 2009:3::/64", mpr.mp_reach)
|
69
|
+
assert_equal(2, mpr.afi)
|
70
|
+
assert_equal(4, mpr.safi)
|
71
|
+
assert_equal(s, mpr.to_shex)
|
72
|
+
#puts mpr
|
73
|
+
end
|
74
|
+
def test_6
|
75
|
+
mpr = Mp_reach.new(:safi=>2, :nexthop=> ['2009:9:19::1/128'], :prefix=> ['2009:1::/64', '2009:2::/64', '2009:3::/64'])
|
76
|
+
assert_equal("\n AFI IPv6 (2), SAFI Multicast (2)\n nexthop: 2009:9:19::1\n 2009:1::/64\n 2009:2::/64\n 2009:3::/64", mpr.mp_reach)
|
77
|
+
assert_equal(mpr.to_shex, Mp_reach.new(mpr.encode).to_shex)
|
78
|
+
mpr = Mp_reach.new(:safi=>1, :nexthop=> ['10.0.0.1','10.0.0.2'], :prefix=> '192.168.0.0/24')
|
79
|
+
assert_equal("\n AFI IPv4 (1), SAFI Unicast (1)\n nexthop: 10.0.0.1, 10.0.0.2\n 192.168.0.0/24", mpr.mp_reach)
|
80
|
+
assert_equal(mpr.to_shex, Mp_reach.new(mpr.encode).to_shex)
|
81
|
+
mpr = Mp_reach.new(:safi=>4, :nexthop=> ['10.0.0.1','10.0.0.2'], :nlri=> {:prefix=> '192.168.0.0/24', :label=>101} )
|
82
|
+
assert_equal("\n AFI IPv4 (1), SAFI Labeled NLRI (4)\n nexthop: 10.0.0.1, 10.0.0.2\n Label Stack=101 (bottom) 192.168.0.0/24", mpr.mp_reach)
|
83
|
+
assert_equal(mpr.to_shex, Mp_reach.new(mpr.encode).to_shex)
|
84
|
+
mpr = Mp_reach.new(:safi=>128, :nexthop=> ['10.0.0.1','10.0.0.2'], :nlri=> {:rd=> [100,100], :prefix=> '192.168.0.0/24', :label=>101})
|
85
|
+
assert_equal("\n AFI IPv4 (1), SAFI Labeled VPN Unicast (128)\n nexthop: 10.0.0.1, 10.0.0.2\n Label Stack=101 (bottom) RD=100:100, IPv4=192.168.0.0/24", mpr.mp_reach)
|
86
|
+
assert_equal(mpr.to_shex, Mp_reach.new(mpr.encode).to_shex)
|
87
|
+
mpr = Mp_reach.new(:safi=>128, :nexthop=> ['10.0.0.1','10.0.0.2'], :nlri=> {:rd=> Rd.new(100,100), :prefix=> Prefix.new('192.168.0.0/24'), :label=>101})
|
88
|
+
assert_equal("\n AFI IPv4 (1), SAFI Labeled VPN Unicast (128)\n nexthop: 10.0.0.1, 10.0.0.2\n Label Stack=101 (bottom) RD=100:100, IPv4=192.168.0.0/24", mpr.mp_reach)
|
89
|
+
assert_equal(mpr.to_shex, Mp_reach.new(mpr.encode).to_shex)
|
90
|
+
end
|
91
|
+
def test_7
|
92
|
+
mpr = Mp_reach.new(:safi=>2, :nexthop=> '2009:9:19::1/128', :prefix=> [
|
93
|
+
'2009:1::/64', '2009:2::/64', '2009:3::/64', '2009:4::/64', '2009:5::/64', '2009:6::/64'])
|
94
|
+
assert_equal("\n AFI IPv6 (2), SAFI Multicast (2)\n nexthop: 2009:9:19::1\n 2009:1::/64\n 2009:2::/64\n 2009:3::/64\n 2009:4::/64\n 2009:5::/64\n 2009:6::/64", mpr.mp_reach)
|
95
|
+
mpr = Mp_reach.new(:safi=>1, :nexthop=> '10.0.0.1', :prefix=> [
|
96
|
+
'192.168.0.0/24', '192.168.1.0/24', '192.168.2.0/24', '192.168.3.0/24', '192.168.4.0/24', '192.168.5.0/24'])
|
97
|
+
assert_equal("\n AFI IPv4 (1), SAFI Unicast (1)\n nexthop: 10.0.0.1\n 192.168.0.0/24\n 192.168.1.0/24\n 192.168.2.0/24\n 192.168.3.0/24\n 192.168.4.0/24\n 192.168.5.0/24", mpr.mp_reach)
|
98
|
+
end
|
99
|
+
def test_8
|
100
|
+
mpr = Mp_reach.new(:safi=>1, :nexthop=> '10.0.0.1', :prefix=> [
|
101
|
+
'192.168.0.0/24', '192.168.1.0/24', '192.168.2.0/24', '192.168.3.0/24', '192.168.4.0/24', '192.168.5.0/24'])
|
102
|
+
assert_equal(Mp_unreach,mpr.new_unreach.class)
|
103
|
+
mpr2 = Mp_reach.new(mpr)
|
104
|
+
assert_equal(mpr.encode, mpr2.encode)
|
105
|
+
assert_equal(Mp_unreach, Mp_unreach.new(mpr.new_unreach).class)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
class Mp_unreach_Test < Test::Unit::TestCase
|
110
|
+
include BGP
|
111
|
+
def test_1
|
112
|
+
mpur = Mp_unreach.new(:safi=>1, :prefix=>['10.0.0.0/16', '10.1.0.0/16'])
|
113
|
+
assert_raise(ArgumentError) { Mp_unreach.new }
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_2
|
117
|
+
mpur = Mp_unreach.new(:safi=>2, :prefix=>['192.168.1.0/24', '192.168.2.0/24'])
|
118
|
+
assert_equal('800f0b00010218c0a80118c0a802', mpur.to_shex)
|
119
|
+
|
120
|
+
mpur = Mp_unreach.new(:safi=>2, :prefix=>['2007:1::/64', '2007:2::/64','2007:3::/64'])
|
121
|
+
assert_equal('800f1e000202402007000100000000402007000200000000402007000300000000', mpur.to_shex)
|
122
|
+
|
123
|
+
#mpur = Mp_unreach.new(:safi=>2, :prefix=>['2007:1::/64, 101', '2007:2::/64,102','2007:3::/64, 103'])
|
124
|
+
mpur = Mp_unreach.new(:safi=>4, :nlri=> [
|
125
|
+
{:prefix=>'2007:1::/64', :label=> 101},
|
126
|
+
{:prefix=>'2007:2::/64', :label=> 102},
|
127
|
+
{:prefix=>'2007:3::/64', :label=> 103},])
|
128
|
+
assert_equal('800f27000204580006512007000100000000580006612007000200000000580006712007000300000000', mpur.to_shex)
|
129
|
+
assert_match(/^800f..000204/,mpur.to_shex)
|
130
|
+
assert_match(/58000651200700010000000058/,mpur.to_shex)
|
131
|
+
assert_match(/58000661200700020000000058/,mpur.to_shex)
|
132
|
+
assert_match(/580006712007000300000000$/,mpur.to_shex)
|
133
|
+
|
134
|
+
mpur = Mp_unreach.new(:safi=>128, :nlri=> [
|
135
|
+
{:rd=> Rd.new(100,100), :prefix=> Prefix.new('192.168.1.0/24'), :label=>101},
|
136
|
+
{:rd=> Rd.new(100,100), :prefix=> Prefix.new('192.168.2.0/24'), :label=>102},
|
137
|
+
{:rd=> Rd.new(100,100), :prefix=> Prefix.new('192.168.3.0/24'), :label=>103},])
|
138
|
+
assert_match(/^800f..000180/,mpur.to_shex)
|
139
|
+
assert_equal("700006510000006400000064c0a801",mpur.nlris[0].to_shex)
|
140
|
+
assert_equal("700006610000006400000064c0a802",mpur.nlris[1].to_shex)
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require "bgp/multi_exit_disc"
|
24
|
+
require 'test/unit'
|
25
|
+
class Multi_exit_disc_Test < Test::Unit::TestCase
|
26
|
+
include BGP
|
27
|
+
def test_1
|
28
|
+
assert_equal("80040400000000", Multi_exit_disc.new.to_shex)
|
29
|
+
assert_equal("80040400000064", Multi_exit_disc.new(100).to_shex)
|
30
|
+
assert_equal("800404000000c8", Multi_exit_disc.new(200).to_shex)
|
31
|
+
assert_equal("800404000000c8", Multi_exit_disc.new(:med=>200).to_shex)
|
32
|
+
assert_equal("800404000000c8", Multi_exit_disc.new(:multi_exit_disc=>200).to_shex)
|
33
|
+
assert_raise(ArgumentError) { Multi_exit_disc.new(:local_pref=>200) }
|
34
|
+
assert_equal("(0x00c8) 200", Multi_exit_disc.new(200).multi_exit_disc)
|
35
|
+
assert_equal("[Oncr] (4) Multi Exit Disc: [800404000000c8] '(0x00c8) 200'", Multi_exit_disc.new(200).to_s)
|
36
|
+
assert_raise(ArgumentError) { Multi_exit_disc.new({})}
|
37
|
+
end
|
38
|
+
def test_2
|
39
|
+
mp = Multi_exit_disc.new(200)
|
40
|
+
assert_equal("800404000000c8", Multi_exit_disc.new(mp.encode).to_shex)
|
41
|
+
assert_equal("(0x00c8) 200", Multi_exit_disc.new(200).multi_exit_disc)
|
42
|
+
assert_equal(200, Multi_exit_disc.new(200).to_i)
|
43
|
+
mp1 = Multi_exit_disc.new(mp)
|
44
|
+
assert_equal(mp.encode, mp.encode)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require "test/unit"
|
24
|
+
|
25
|
+
require "bgp/neighbor"
|
26
|
+
require 'bgp/message'
|
27
|
+
|
28
|
+
class TestBgpNeighbor < Test::Unit::TestCase
|
29
|
+
include BGP
|
30
|
+
def test_open_msg
|
31
|
+
neighbor = Neighbor.new \
|
32
|
+
:version=> 4,
|
33
|
+
:my_as=> 100,
|
34
|
+
:remote_addr => '192.168.1.200',
|
35
|
+
:local_addr => '192.168.1.5',
|
36
|
+
:id=> '1.1.1.1',
|
37
|
+
:holdtime=> 20
|
38
|
+
neighbor.capability Mbgp_cap.ipv4_unicast
|
39
|
+
neighbor.capability Mbgp_cap.ipv4_multicast
|
40
|
+
neighbor.capability Route_refresh_cap.new
|
41
|
+
neighbor.capability Route_refresh_cap.new 128
|
42
|
+
neighbor.capability As4_cap.new(100)
|
43
|
+
open_msg = neighbor.instance_eval { _open_msg_ }
|
44
|
+
assert_equal(5,open_msg.opt_parms.size)
|
45
|
+
assert_equal(4,open_msg.version)
|
46
|
+
assert_equal(20,open_msg.holdtime)
|
47
|
+
assert_equal(100,open_msg.local_as)
|
48
|
+
# puts neighbor
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require 'bgp/next_hop'
|
24
|
+
require 'test/unit'
|
25
|
+
class Next_hop_Test < Test::Unit::TestCase
|
26
|
+
include BGP
|
27
|
+
def test_1
|
28
|
+
next_hop = Next_hop.new('10.0.0.1')
|
29
|
+
assert_equal('10.0.0.1', next_hop.next_hop)
|
30
|
+
assert_equal("[wTcr] (3) Next Hop: [4003040a000001] '10.0.0.1'", next_hop.to_s)
|
31
|
+
assert_equal(167772161, next_hop.to_i)
|
32
|
+
assert_equal('4003040a000001', next_hop.to_shex)
|
33
|
+
assert_equal(next_hop.to_shex, Next_hop.new(next_hop.encode).to_shex)
|
34
|
+
next_hop1 = Next_hop.new(next_hop)
|
35
|
+
assert_equal(next_hop.encode, next_hop1.encode)
|
36
|
+
end
|
37
|
+
end
|
data/test/nlri_test.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require 'bgp/nlri'
|
24
|
+
require 'test/unit'
|
25
|
+
class NLRI_Ip4_Test < Test::Unit::TestCase
|
26
|
+
include BGP
|
27
|
+
def test_1
|
28
|
+
el = Nlri::Ip4.new('20.0.0.0/16')
|
29
|
+
el2 = Nlri::Ip4.new(el)
|
30
|
+
assert_equal(el2.to_shex, el.to_shex)
|
31
|
+
assert_equal(Nlri::Ip4, el2.class)
|
32
|
+
assert_equal('0f1400', Nlri::Ip4.new('20.0.0.0/15').to_shex)
|
33
|
+
assert_equal('101400', Nlri::Ip4.new('20.0.0.0/16').to_shex)
|
34
|
+
assert_equal('11140000', Nlri::Ip4.new('20.0.0.0/17').to_shex)
|
35
|
+
assert_equal('17140000', Nlri::Ip4.new('20.0.0.0/23').to_shex)
|
36
|
+
assert_equal('18140000', Nlri::Ip4.new('20.0.0.0/24').to_shex)
|
37
|
+
assert_equal('1914000000', Nlri::Ip4.new('20.0.0.0/25').to_shex)
|
38
|
+
assert_equal('20.0.0.0/25', Nlri::Ip4.new('20.0.0.0/25').to_s)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_2
|
42
|
+
assert_equal('0f1400',Nlri::Ip4.new(['0f1400'].pack('H*')).to_shex)
|
43
|
+
assert_equal('101400',Nlri::Ip4.new(['101400'].pack('H*')).to_shex)
|
44
|
+
assert_equal('11140000',Nlri::Ip4.new(['11140000'].pack('H*')).to_shex)
|
45
|
+
assert_equal('18140000',Nlri::Ip4.new(['18140000'].pack('H*')).to_shex)
|
46
|
+
assert_equal('1914000000',Nlri::Ip4.new(['1914000000'].pack('H*')).to_shex)
|
47
|
+
s = ['0f140010140011140000'].pack('H*')
|
48
|
+
ip4 = Nlri::Ip4.new(s)
|
49
|
+
assert_equal('10140011140000', s.unpack('H*')[0])
|
50
|
+
ip4 = Nlri::Ip4.new(s)
|
51
|
+
assert_equal('11140000', s.unpack('H*')[0])
|
52
|
+
ip4 = Nlri::Ip4.new(s)
|
53
|
+
assert_equal('', s.unpack('H*')[0])
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
class NLRI_Ip6_Test < Test::Unit::TestCase
|
58
|
+
include BGP
|
59
|
+
def test_1
|
60
|
+
assert_equal('0410',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/4').to_shex)
|
61
|
+
assert_equal('0510',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/5').to_shex)
|
62
|
+
assert_equal('0710',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/7').to_shex)
|
63
|
+
assert_equal('0811',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/8').to_shex)
|
64
|
+
assert_equal('091100',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/9').to_shex)
|
65
|
+
assert_equal('30111122223333',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/48').to_shex)
|
66
|
+
assert_equal('3111112222333300',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/49').to_shex)
|
67
|
+
assert_equal('401111222233334444',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/64').to_shex)
|
68
|
+
assert_equal('41111122223333444400',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/65').to_shex)
|
69
|
+
assert_equal('7f11112222333344445555666677778888',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/127').to_shex)
|
70
|
+
assert_equal('8011112222333344445555666677778888',Nlri::Ip6.new('1111:2222:3333:4444:5555:6666:7777:8888/128').to_shex)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class Withdrawn_Test < Test::Unit::TestCase
|
75
|
+
include BGP
|
76
|
+
def test_1
|
77
|
+
nlri1 = Withdrawn.new
|
78
|
+
assert_equal('0000', nlri1.to_shex)
|
79
|
+
nlri1 << Withdrawn::Ip4.new('20.0.0.0/15')
|
80
|
+
nlri1 << '20.0.0.0/17'
|
81
|
+
nlri1 << '20.0.0.0/24'
|
82
|
+
s = '0f140010140011140000'
|
83
|
+
nlri2 = Withdrawn.new([s].pack('H*'))
|
84
|
+
assert_equal('000a0f140010140011140000', nlri2.to_shex)
|
85
|
+
assert_equal('000a0f140010140011140000', nlri2.to_shex(true))
|
86
|
+
assert_equal('0f140010140011140000', nlri2.to_shex(false))
|
87
|
+
assert_equal(3,nlri2.nlris.size)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class Nlri_Test < Test::Unit::TestCase
|
92
|
+
include BGP
|
93
|
+
def test_1
|
94
|
+
nlri1 = Nlri.new
|
95
|
+
nlri1 << Nlri::Ip4.new('20.0.0.0/15')
|
96
|
+
nlri1 << '20.0.0.0/17'
|
97
|
+
nlri1 << '20.0.0.0/24'
|
98
|
+
s = '0f140010140011140000'
|
99
|
+
nlri2 = Nlri.new([s].pack('H*'))
|
100
|
+
assert_equal('0f140010140011140000', nlri2.to_shex)
|
101
|
+
assert_raise(ArgumentError) { nlri2.to_shex(true) }
|
102
|
+
assert_equal(3,nlri2.nlris.size)
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_2
|
107
|
+
nlri1 = Nlri.new
|
108
|
+
nlri1 << Nlri::Ip4.new('20.0.0.0/15')
|
109
|
+
nlri1 << '20.0.0.0/17'
|
110
|
+
nlri1 << '20.0.0.0/24'
|
111
|
+
s = '0f140010140011140000'
|
112
|
+
nlri2 = Nlri.new([s].pack('H*'))
|
113
|
+
assert_equal('0f140010140011140000', nlri2.to_shex)
|
114
|
+
assert_raise(ArgumentError) { nlri2.to_shex(true) }
|
115
|
+
assert_equal(3,nlri2.nlris.size)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
class Prefix_Test < Test::Unit::TestCase
|
120
|
+
include BGP
|
121
|
+
def test_1
|
122
|
+
assert_equal('::/128',Prefix.new.to_s)
|
123
|
+
assert_equal(2,Prefix.new.afi)
|
124
|
+
assert_equal('192.168.0.0/16',Prefix.new('192.168.0.0/16').to_s)
|
125
|
+
assert_equal(1,Prefix.new('192.168.0.0/16').afi)
|
126
|
+
assert(Prefix.new('192.168.0.0/16').ipv4?)
|
127
|
+
assert_equal('10c0a8',Prefix.new('192.168.0.0/16').to_shex)
|
128
|
+
assert_equal('402009000400040000',Prefix.new('2009:4:4::/64').to_shex)
|
129
|
+
assert('402009000400040000',Prefix.new('2009:4:4::/64').ipv6?)
|
130
|
+
assert_equal('2009:4:4::/64',Prefix.new('2009:4:4::/64').to_s)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
class Inet_unicast_Test < Test::Unit::TestCase
|
134
|
+
include BGP
|
135
|
+
def test_1
|
136
|
+
assert_equal(1,Inet_unicast.new('192.168.0.0/16').afi)
|
137
|
+
assert_equal(1,Inet_unicast.new('192.168.0.0/16').safi)
|
138
|
+
assert_equal(2,Inet_unicast.new('2009:4:4::/64').afi)
|
139
|
+
assert_equal(1,Inet_unicast.new('2009:4:4::/64').safi)
|
140
|
+
assert_equal(1,Inet_multicast.new('192.168.0.0/16').afi)
|
141
|
+
assert_equal(2,Inet_multicast.new('192.168.0.0/16').safi)
|
142
|
+
assert_equal(2,Inet_multicast.new('2009:4:4::/64').afi)
|
143
|
+
assert_equal(2,Inet_multicast.new('2009:4:4::/64').safi)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
class Vpn_Test < Test::Unit::TestCase
|
148
|
+
include BGP
|
149
|
+
def test_1
|
150
|
+
assert_equal('5800000001000000010a0000', Vpn.new('10.0.0.1/24', Rd.new(1,1)).to_shex)
|
151
|
+
assert_equal('00000001000000010a0000', Vpn.new('10.0.0.1/24', Rd.new(1,1)).to_shex(false))
|
152
|
+
assert_equal('RD=1:1, IPv4=10.0.0.0/24', Vpn.new('10.0.0.1/24', Rd.new(1,1)).to_s)
|
153
|
+
assert_equal(88, Vpn.new('10.0.0.1/24', Rd.new(1,1)).bit_length)
|
154
|
+
assert_equal(1,Vpn.new('10.0.0.1/24', Rd.new(1,1)).afi)
|
155
|
+
assert_equal(true,Vpn.new('10.0.0.1/24', Rd.new(1,1)).ipv4?)
|
156
|
+
assert_equal(false,Vpn.new('10.0.0.1/24', Rd.new(1,1)).ipv6?)
|
157
|
+
assert_equal(2,Vpn.new('2009:4:5::/105', Rd.new(1,1)).afi)
|
158
|
+
assert_equal(false,Vpn.new('2009:4:5::/105', Rd.new(1,1)).ipv4?)
|
159
|
+
assert_equal(true,Vpn.new('2009:4:5::/105', Rd.new(1,1)).ipv6?)
|
160
|
+
assert_equal('RD=1:1, IPv6=2009:4:5::/105',Vpn.new('2009:4:5::/105', Rd.new(1,1)).to_s)
|
161
|
+
assert_equal('700000000100000001200900040005',Vpn.new('2009:4:5::/48', Rd.new(1,1)).to_shex)
|
162
|
+
assert_equal(169,Vpn.new('2009:4:5::/105', Rd.new(1,1)).bit_length)
|
163
|
+
end
|
164
|
+
def test_2
|
165
|
+
vpn = Vpn.new(['5800000001000000010a0000'].pack('H*'))
|
166
|
+
assert_equal( '5800000001000000010a0000', vpn.to_shex)
|
167
|
+
assert_equal( '00000001000000010a0000', vpn.to_shex(false))
|
168
|
+
vpn = Vpn.new(['700000000100000001200900040005'].pack('H*'), 2)
|
169
|
+
assert_equal( '700000000100000001200900040005', vpn.to_shex)
|
170
|
+
vpn = Vpn.new(['700000000100000001200900040005'].pack('H*'), 2)
|
171
|
+
assert_equal( '700000000100000001200900040005', vpn.to_shex)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
class Labeled_Test < Test::Unit::TestCase
|
176
|
+
include BGP
|
177
|
+
def test_1
|
178
|
+
assert_equal('Label Stack=1,2,3 (bottom) 10.0.0.0/24', Labeled.new(Prefix.new('10.0.0.1/24'),1,2,3).to_s)
|
179
|
+
assert_equal(3*24+24, Labeled.new(Prefix.new('10.0.0.1/24'),1,2,3).bit_length)
|
180
|
+
assert_equal('600000100000200000310a0000', Labeled.new(Prefix.new('10.0.0.1/24'),1,2,3).to_shex)
|
181
|
+
assert_equal('6b0006510000006400000064c0a800',Labeled.new(Vpn.new('192.168.0.0/19', Rd.new(100,100)),101).to_shex)
|
182
|
+
assert_equal('d8000651000000640000006420090004000500000000000000000001',Labeled.new(Vpn.new('2009:4:5::1', Rd.new(100,100)),101).to_shex)
|
183
|
+
assert_equal(24+64+128,Labeled.new(Vpn.new('2009:4:5::1', Rd.new(100,100)),101).bit_length)
|
184
|
+
assert_equal(24+64+64,Labeled.new(Vpn.new('2009:4:5::1/64', Rd.new(100,100)),101).bit_length)
|
185
|
+
assert_equal(24*3+64+48,Labeled.new(Vpn.new('2009:4:5::1/48', Rd.new(100,100)),101,102,103).bit_length)
|
186
|
+
assert_equal('9800065100000064000000642009000400050000',Labeled.new(Vpn.new('2009:4:5::1/64', Rd.new(100,100)),101).to_shex)
|
187
|
+
assert_equal('9800065100000064000000642009000400050000',Labeled.new(['9800065100000064000000642009000400050000'].pack('H*'),2).to_shex)
|
188
|
+
end
|
189
|
+
end
|
data/test/origin_test.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require 'bgp/origin'
|
24
|
+
require 'test/unit'
|
25
|
+
class Origin_Test < Test::Unit::TestCase
|
26
|
+
include BGP
|
27
|
+
def test_1
|
28
|
+
assert_equal("40010100", Origin.new.to_shex)
|
29
|
+
assert_equal("40010100", Origin.new(:igp).to_shex)
|
30
|
+
assert_equal("40010101", Origin.new(:egp).to_shex)
|
31
|
+
assert_equal("40010102", Origin.new(:incomplete).to_shex)
|
32
|
+
end
|
33
|
+
def test_2
|
34
|
+
assert_equal("40010100", Origin.new(0).to_shex)
|
35
|
+
assert_equal("40010101", Origin.new(1).to_shex)
|
36
|
+
assert_equal("40010102", Origin.new(2).to_shex)
|
37
|
+
end
|
38
|
+
def test_3
|
39
|
+
assert_equal("40010100", Origin.new(:origin => 0 ).to_shex)
|
40
|
+
assert_equal("40010101", Origin.new(:origin => 1 ).to_shex)
|
41
|
+
assert_equal("40010102", Origin.new(:origin => 2 ).to_shex)
|
42
|
+
end
|
43
|
+
def test_4
|
44
|
+
assert_equal("40010100", Origin.new( Origin.new.encode).to_shex)
|
45
|
+
end
|
46
|
+
def test_5
|
47
|
+
assert_equal("igp", Origin.new.origin)
|
48
|
+
assert_equal("igp", Origin.new(:igp).origin)
|
49
|
+
assert_equal("egp", Origin.new(:egp).origin)
|
50
|
+
assert_equal("incomplete", Origin.new(:incomplete).origin)
|
51
|
+
end
|
52
|
+
def test_6
|
53
|
+
assert_equal("[wTcr] (1) Origin: [40010100] 'igp'", Origin.new.to_s)
|
54
|
+
assert_equal("[wTcr] (1) Origin: [40010100] 'igp'", Origin.new(:igp).to_s)
|
55
|
+
assert_equal("Origin (1), length: 1, Flags [T]: igp\n 0x0000: ", Origin.new.to_s(:tcpdump))
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2008, 2009 Jean-Michel Esnault.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# This file is part of BGP4R.
|
8
|
+
#
|
9
|
+
# BGP4R is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# BGP4R is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#++
|
22
|
+
|
23
|
+
require 'bgp/originator_id'
|
24
|
+
require 'test/unit'
|
25
|
+
class Originator_id_Test < Test::Unit::TestCase
|
26
|
+
include BGP
|
27
|
+
def test_1
|
28
|
+
orig_id = Originator_id.new('10.0.0.1')
|
29
|
+
assert_equal('10.0.0.1', orig_id.originator_id)
|
30
|
+
assert_equal("[Oncr] (9) Originator Id: [8009040a000001] '10.0.0.1'", orig_id.to_s)
|
31
|
+
assert_equal(167772161, orig_id.to_i)
|
32
|
+
assert_equal('8009040a000001', orig_id.to_shex)
|
33
|
+
assert_equal('80090401010101', Originator_id.new('1.1.1.1').to_shex)
|
34
|
+
assert_equal(orig_id.to_shex, Originator_id.new(orig_id.encode).to_shex)
|
35
|
+
orig_id1 = Originator_id.new(orig_id)
|
36
|
+
assert_equal(orig_id.encode, orig_id1.encode)
|
37
|
+
end
|
38
|
+
end
|