bgp4r 0.0.11 → 0.0.12

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.
Files changed (44) hide show
  1. data/bgp/common.rb +14 -13
  2. data/bgp/iana.rb +26 -1
  3. data/bgp/messages/capability.rb +3 -2
  4. data/bgp/messages/message.rb +3 -2
  5. data/bgp/messages/open.rb +2 -1
  6. data/bgp/messages/update.rb +80 -30
  7. data/bgp/neighbor/add_path_cap.rb +125 -0
  8. data/bgp/{neighbor.rb → neighbor/neighbor.rb} +64 -68
  9. data/bgp/nlris/nlri.rb +289 -15
  10. data/bgp/nlris/prefix.rb +3 -2
  11. data/bgp/nlris/vpn.rb +1 -8
  12. data/bgp/optional_parameters/add_path.rb +160 -0
  13. data/bgp/optional_parameters/capabilities.rb +1 -0
  14. data/bgp/optional_parameters/capability.rb +6 -0
  15. data/bgp/optional_parameters/graceful_restart.rb +6 -6
  16. data/bgp/optional_parameters/optional_parameter.rb +1 -0
  17. data/bgp/path_attributes/as_path.rb +1 -1
  18. data/bgp/path_attributes/attribute.rb +12 -5
  19. data/bgp/path_attributes/mp_reach.rb +142 -96
  20. data/bgp/path_attributes/mp_unreach.rb +73 -20
  21. data/bgp/path_attributes/path_attribute.rb +28 -5
  22. data/bgp4r.gemspec +21 -6
  23. data/bgp4r.rb +1 -1
  24. data/examples/unit-testing/malformed_update.rb +2 -1
  25. data/examples/unit-testing/test.rb +82 -0
  26. data/examples/unit-testing/test1.rb +82 -0
  27. data/examples/unit-testing/test2.rb +44 -0
  28. data/test/common_test.rb +7 -0
  29. data/test/helpers/server.rb +20 -0
  30. data/test/iana_test.rb +43 -0
  31. data/test/messages/open_test.rb +7 -2
  32. data/test/messages/update_test.rb +133 -36
  33. data/test/neighbor/add_path_cap_test.rb +54 -0
  34. data/test/neighbor/neighbor_test.rb +161 -0
  35. data/test/nlris/ext_nlri_test.rb +25 -60
  36. data/test/nlris/nlri_test.rb +93 -115
  37. data/test/optional_parameters/add_path_test.rb +53 -0
  38. data/test/optional_parameters/capability_test.rb +10 -0
  39. data/test/optional_parameters/graceful_restart_test.rb +1 -0
  40. data/test/path_attributes/mp_reach_test.rb +206 -8
  41. data/test/path_attributes/mp_unreach_test.rb +113 -5
  42. data/test/path_attributes/path_attribute_test.rb +34 -2
  43. metadata +20 -7
  44. data/test/neighbor_test.rb +0 -62
@@ -30,12 +30,13 @@ module BGP
30
30
  attr_reader :safi, :nlris
31
31
 
32
32
  def initialize(*args)
33
- @safi, @nlris= 1, []
33
+ @safi, @nexthops, @nlris, @path_id= 1, [], [], nil # default is ipv4/unicast
34
34
  @flags, @type = OPTIONAL, MP_UNREACH
35
35
  if args[0].is_a?(String) and args[0].is_packed?
36
- parse(args[0])
36
+ parse(*args)
37
37
  elsif args[0].is_a?(self.class)
38
- parse(args[0].encode, *args[1..-1])
38
+ s = args.shift.encode
39
+ parse(s, *args)
39
40
  elsif args[0].is_a?(Hash) and args.size==1
40
41
  set(*args)
41
42
  else
@@ -43,27 +44,60 @@ module BGP
43
44
  end
44
45
  end
45
46
 
46
- def afi
47
+ def afi
47
48
  @afi ||= @nlris[0].afi
48
49
  end
49
50
 
51
+ # FIXME: refactor with mp_reach ....
50
52
  def set(h)
51
- @safi = h[:safi]
52
- h[:nlri] ||=[]
53
- h[:prefix] ||=[]
53
+ h[:nlris] ||=[]
54
54
  @afi = h[:afi] if h[:afi]
55
+ @safi = h[:safi]
56
+ @path_id = path_id = h[:path_id]
55
57
  case @safi
56
- when 1,2
57
- @nlris = [h[:prefix]].flatten.collect { |p| p.is_a?(Prefix) ? p : Prefix.new(p) }
58
+ when 1
59
+ @nlris = [h[:nlris]].flatten.collect do |n|
60
+ case n
61
+ when String
62
+ nlri = Inet_unicast.new(n)
63
+ path_id ? Ext_Nlri.new(path_id, nlri) : nlri
64
+ when Hash
65
+ path_id = n[:path_id] if n[:path_id]
66
+ nlri = Inet_unicast.new(n[:prefix])
67
+ path_id ? Ext_Nlri.new(path_id, nlri) : nlri
68
+ else
69
+ raise ArgumentError, "Invalid: #{n.inspect}"
70
+ end
71
+ end
72
+ when 2
73
+ @nlris = [h[:nlris]].flatten.collect do |n|
74
+ case n
75
+ when String
76
+ nlri = Inet_multicast.new(n)
77
+ path_id ? Ext_Nlri.new(path_id, nlri) : nlri
78
+ when Hash
79
+ path_id = n[:path_id] if n[:path_id]
80
+ nlri = Inet_multicast.new(n[:prefix])
81
+ path_id ? Ext_Nlri.new(path_id, nlri) : nlri
82
+ else
83
+ raise ArgumentError, "Invalid: #{n.inspect}"
84
+ end
85
+ end
58
86
  when 4
59
- @nlris = [h[:nlri]].flatten.collect { |n|
87
+ @nlris = [h[:nlris]].flatten.collect do |n|
88
+ path_id = n[:path_id] || @path_id
60
89
  prefix = n[:prefix].is_a?(String) ? Prefix.new(n[:prefix]) : n[:prefix]
61
- Labeled.new(prefix, *n[:label])
62
- }
63
- when 128,129 ; @nlris = [h[:nlri]].flatten.collect { |n|
64
- prefix = n[:prefix].is_a?(Prefix) ? n[:prefix] : Prefix.new(n[:prefix])
65
- rd = n[:rd].is_a?(Rd) ? n[:rd] : Rd.new(*n[:rd])
66
- Labeled.new(Vpn.new(prefix,rd), *n[:label]) }
90
+ nlri = Labeled.new(prefix, *n[:label])
91
+ path_id ? Ext_Nlri.new(path_id, nlri) : nlri
92
+ end
93
+ when 128,129
94
+ @nlris = [h[:nlris]].flatten.collect do |n|
95
+ path_id = n[:path_id] || @path_id
96
+ prefix = n[:prefix].is_a?(Prefix) ? n[:prefix] : Prefix.new(n[:prefix])
97
+ rd = n[:rd].is_a?(Rd) ? n[:rd] : Rd.new(*n[:rd])
98
+ nlri = Labeled.new(Vpn.new(prefix,rd), *n[:label])
99
+ path_id ? Ext_Nlri.new(path_id, nlri) : nlri
100
+ end
67
101
  else
68
102
  end
69
103
  end
@@ -76,22 +110,41 @@ module BGP
76
110
  def to_s(method=:default)
77
111
  super(mp_unreach, method)
78
112
  end
79
-
80
- def parse(s)
113
+
114
+ def parse(s,arg=false)
115
+
81
116
  @flags, @type, len, value = super(s)
82
117
  @afi, @safi = value.slice!(0,3).unpack('nC')
118
+
119
+ if arg.respond_to?(:path_id?)
120
+ path_id_flag = arg.path_id? :recv, @afi, @safi
121
+ else
122
+ path_id_flag = arg
123
+ end
124
+
83
125
  while value.size>0
126
+ path_id = value.slice!(0,4).unpack('N')[0] if path_id_flag
84
127
  blen = value.slice(0,1).unpack('C')[0]
85
- @nlris << Nlri.factory(value.slice!(0,(blen+7)/8+1), @afi, @safi)
128
+ nlri = Nlri.factory(value.slice!(0,(blen+7)/8+1), @afi, @safi)
129
+ if path_id_flag
130
+ @nlris << Ext_Nlri.new(path_id, nlri)
131
+ else
132
+ @nlris << nlri
133
+ end
86
134
  end
87
135
  raise RuntimeError, "leftover afer parsing: #{value.unpack('H*')}" if value.size>0
88
136
  end
137
+
89
138
 
90
139
  def encode
91
140
  super([afi, @safi, @nlris.collect { |n| n.encode }.join].pack('nCa*'))
141
+ rescue => e
142
+ p nlris[0].prefix
143
+ raise
92
144
  end
93
145
 
94
146
  end
147
+
95
148
  end
96
149
 
97
- load "../../test/path_attributes/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
150
+ load "../../test/path_attributes/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright 2008, 2009 Jean-Michel Esnault.
2
+ # Copyright 2008-2009, 2011 Jean-Michel Esnault.
3
3
  # All rights reserved.
4
4
  # See LICENSE.txt for permissions.
5
5
  #
@@ -21,6 +21,7 @@
21
21
  #++
22
22
 
23
23
  require 'bgp/path_attributes/attribute'
24
+ require 'bgp/neighbor/add_path_cap'
24
25
 
25
26
  module BGP
26
27
 
@@ -39,6 +40,7 @@ module BGP
39
40
  add(*args)
40
41
  end
41
42
  end
43
+
42
44
  def add(*args)
43
45
  @attributes ||=[]
44
46
  args.each { |arg| @attributes << arg if arg.is_a?(BGP::Attr) }
@@ -218,13 +220,32 @@ module BGP
218
220
  end
219
221
  end
220
222
  include BGP::ATTR
221
- def self.factory(s, as4byte=false)
223
+ def self.factory(s, arg=nil)
224
+ #FIXME:
225
+
226
+ if arg.is_a?(Neighbor::Capabilities)
227
+ as4byte_flag = arg.as4byte?
228
+ path_id_flag = arg
229
+ elsif arg.is_a?(Hash)
230
+ as4byte_flag=arg[:as4byte]
231
+ path_id_flag=arg[:path_id]
232
+ elsif arg.is_a?(TrueClass)
233
+ as4byte_flag=true
234
+ path_id_flag=nil
235
+ elsif arg.respond_to? :as4byte?
236
+ as4byte_flag = arg.as4byte?
237
+ path_id_flag = arg
238
+ else
239
+ as4byte_flag=nil
240
+ path_id_flag=nil
241
+ end
242
+
222
243
  flags, type = s.unpack('CC')
223
244
  case type
224
245
  when ORIGIN
225
246
  Origin.new(s)
226
247
  when AS_PATH
227
- As_path.new(s,as4byte)
248
+ As_path.new(s,as4byte_flag)
228
249
  when NEXT_HOP
229
250
  Next_hop.new(s)
230
251
  when MULTI_EXIT_DISC
@@ -244,12 +265,14 @@ module BGP
244
265
  when CLUSTER_LIST
245
266
  Cluster_list.new(s)
246
267
  when MP_REACH
247
- Mp_reach.new(s)
268
+ Mp_reach.new(s,path_id_flag)
248
269
  when MP_UNREACH
249
- Mp_unreach.new(s)
270
+ Mp_unreach.new(s,path_id_flag)
250
271
  when EXTENDED_COMMUNITY
251
272
  Extended_communities.new(s)
252
273
  else
274
+ #FIXME: raise UnknownPathAttributeError() ....
275
+ p s
253
276
  Unknown.new(s)
254
277
  end
255
278
  end
data/bgp4r.gemspec CHANGED
@@ -5,13 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bgp4r}
8
- s.version = "0.0.11"
8
+ s.version = "0.0.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jean-Michel Esnault"]
12
- s.date = %q{2011-01-08}
12
+ s.date = %q{2011-02-13}
13
13
  s.description = %q{BGP4R is a BGP-4 ruby library to create, send, and receive BGP messages in an object oriented manner}
14
- s.email = %q{jesnault@gmail.com}
14
+ s.email = %q{bgp4r@esnault.org}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -33,7 +33,8 @@ Gem::Specification.new do |s|
33
33
  "bgp/messages/route_refresh.rb",
34
34
  "bgp/messages/update.rb",
35
35
  "bgp/misc/live_feed.rb",
36
- "bgp/neighbor.rb",
36
+ "bgp/neighbor/add_path_cap.rb",
37
+ "bgp/neighbor/neighbor.rb",
37
38
  "bgp/nlris/inet.rb",
38
39
  "bgp/nlris/label.rb",
39
40
  "bgp/nlris/labeled.rb",
@@ -42,6 +43,7 @@ Gem::Specification.new do |s|
42
43
  "bgp/nlris/prefix.rb",
43
44
  "bgp/nlris/rd.rb",
44
45
  "bgp/nlris/vpn.rb",
46
+ "bgp/optional_parameters/add_path.rb",
45
47
  "bgp/optional_parameters/as4.rb",
46
48
  "bgp/optional_parameters/capabilities.rb",
47
49
  "bgp/optional_parameters/capability.rb",
@@ -79,8 +81,13 @@ Gem::Specification.new do |s|
79
81
  "examples/unit-testing/malformed_update.rb",
80
82
  "examples/unit-testing/no_export.rb",
81
83
  "examples/unit-testing/prepend_aspath.rb",
84
+ "examples/unit-testing/test.rb",
85
+ "examples/unit-testing/test1.rb",
86
+ "examples/unit-testing/test2.rb",
82
87
  "examples/unit-testing/unknown_transitive_attr.rb",
83
88
  "test/common_test.rb",
89
+ "test/helpers/server.rb",
90
+ "test/iana_test.rb",
84
91
  "test/messages/capability_test.rb",
85
92
  "test/messages/keepalive_test.rb",
86
93
  "test/messages/markers_test.rb",
@@ -91,12 +98,14 @@ Gem::Specification.new do |s|
91
98
  "test/messages/update_test.rb",
92
99
  "test/misc/live_feed_test.rb",
93
100
  "test/misc/misc.rb",
94
- "test/neighbor_test.rb",
101
+ "test/neighbor/add_path_cap_test.rb",
102
+ "test/neighbor/neighbor_test.rb",
95
103
  "test/nlris/ext_nlri_test.rb",
96
104
  "test/nlris/inet_test.rb",
97
105
  "test/nlris/labeled_test.rb",
98
106
  "test/nlris/nlri_test.rb",
99
107
  "test/nlris/rd_test.rb",
108
+ "test/optional_parameters/add_path_test.rb",
100
109
  "test/optional_parameters/as4_test.rb",
101
110
  "test/optional_parameters/capability_test.rb",
102
111
  "test/optional_parameters/dynamic_test.rb",
@@ -132,6 +141,9 @@ Gem::Specification.new do |s|
132
141
  s.summary = %q{A BGP-4 Ruby Library}
133
142
  s.test_files = [
134
143
  "test/common_test.rb",
144
+ "test/helpers",
145
+ "test/helpers/server.rb",
146
+ "test/iana_test.rb",
135
147
  "test/messages",
136
148
  "test/messages/capability_test.rb",
137
149
  "test/messages/keepalive_test.rb",
@@ -144,7 +156,9 @@ Gem::Specification.new do |s|
144
156
  "test/misc",
145
157
  "test/misc/live_feed_test.rb",
146
158
  "test/misc/misc.rb",
147
- "test/neighbor_test.rb",
159
+ "test/neighbor",
160
+ "test/neighbor/add_path_cap_test.rb",
161
+ "test/neighbor/neighbor_test.rb",
148
162
  "test/nlris",
149
163
  "test/nlris/ext_nlri_test.rb",
150
164
  "test/nlris/inet_test.rb",
@@ -152,6 +166,7 @@ Gem::Specification.new do |s|
152
166
  "test/nlris/nlri_test.rb",
153
167
  "test/nlris/rd_test.rb",
154
168
  "test/optional_parameters",
169
+ "test/optional_parameters/add_path_test.rb",
155
170
  "test/optional_parameters/as4_test.rb",
156
171
  "test/optional_parameters/capability_test.rb",
157
172
  "test/optional_parameters/dynamic_test.rb",
data/bgp4r.rb CHANGED
@@ -4,4 +4,4 @@ require 'bgp/messages/messages'
4
4
  require 'bgp/path_attributes/attributes'
5
5
  require 'bgp/nlris/nlris'
6
6
  require 'bgp/optional_parameters/capabilities'
7
- require 'bgp/neighbor'
7
+ require 'bgp/neighbor/neighbor'
@@ -36,6 +36,7 @@ class TestBgp < Test::Unit::TestCase
36
36
  msg = recv(queue)
37
37
  assert msg, "Did not receive expected BGP update message."
38
38
  assert_instance_of(Notification, msg)
39
+ sleep 0.3
39
40
  assert_equal 'Missing Well-known Attribute', msg.to_string
40
41
  assert @n100.is_idle?
41
42
  end
@@ -61,7 +62,7 @@ class TestBgp < Test::Unit::TestCase
61
62
  nil
62
63
  end
63
64
  end
64
-
65
+
65
66
  def malformed_update
66
67
  update = Update.new(
67
68
  Path_attribute.new(
@@ -0,0 +1,82 @@
1
+
2
+ require 'bgp4r'
3
+ require 'timeout'
4
+
5
+ Thread.abort_on_exception=true
6
+
7
+
8
+ include BGP
9
+
10
+ Log.create
11
+ Log.level=Logger::DEBUG
12
+
13
+ N100 = Class.new(BGP::Neighbor)
14
+
15
+ class RecvMsgHandler
16
+ def initialize(q)
17
+ @q = q
18
+ end
19
+ def update(bgp_msg)
20
+ @q.enq bgp_msg
21
+ end
22
+ end
23
+
24
+ def setup
25
+ @n100 = N100.new(:my_as=> 100, :remote_addr => '40.0.0.2', :local_addr => '40.0.0.1', :id=> '13.11.19.59')
26
+ start_peering
27
+ end
28
+
29
+ def test_verify_missing_well_known_attribute_is_greeting_with_a_notification_from_as200
30
+ queue = Queue.new
31
+ @n100.add_observer RecvMsgHandler.new(queue)
32
+ @n100.send_message malformed_update
33
+ msg = recv(queue)
34
+ end
35
+
36
+ def teardown
37
+ @n100.stop
38
+ sleep(0.5)
39
+ end
40
+
41
+ private
42
+
43
+ def start_peering
44
+ @n100.capability :as4_byte
45
+ @n100.start
46
+ end
47
+
48
+ def recv(q, timeout=5)
49
+ begin
50
+ Timeout::timeout(timeout) do |t|
51
+ msg = q.deq
52
+ end
53
+ rescue Timeout::Error => e
54
+ nil
55
+ end
56
+ end
57
+
58
+ def malformed_update
59
+ update = Update.new(
60
+ Path_attribute.new(
61
+ Origin.new(0),
62
+ Multi_exit_disc.new(100),
63
+ Local_pref.new(100),
64
+ As_path.new(100)
65
+ ),
66
+ Nlri.new('77.0.0.0/17', '78.0.0.0/18', '79.0.0.0/19')
67
+ )
68
+ end
69
+
70
+ setup
71
+ p @n100.inspect
72
+ p @n100.inspect
73
+ p @n100.inspect
74
+ p @n100.inspect
75
+ p @n100.inspect
76
+ p @n100.inspect
77
+ p @n100.inspect
78
+ p @n100.inspect
79
+ p @n100.instance_eval { @cap }
80
+
81
+ test_verify_missing_well_known_attribute_is_greeting_with_a_notification_from_as200
82
+ teardown
@@ -0,0 +1,82 @@
1
+ require "test/unit"
2
+ require 'bgp4r'
3
+ require 'timeout'
4
+
5
+ Thread.abort_on_exception=true
6
+
7
+ include BGP
8
+
9
+ Log.create
10
+ Log.level=Logger::DEBUG
11
+
12
+ N100 = Class.new(BGP::Neighbor)
13
+ N300 = Class.new(BGP::Neighbor)
14
+
15
+ class RecvMsgHandler
16
+ def initialize(q)
17
+ @q = q
18
+ end
19
+ def update(bgp_msg)
20
+ @q.enq bgp_msg
21
+ end
22
+ end
23
+
24
+ def setup
25
+ @n100 = N100.new(:my_as=> 100, :remote_addr => '40.0.0.2', :local_addr => '40.0.0.1', :id=> '13.11.19.59')
26
+ @n300 = N300.new(:my_as=> 300, :remote_addr => '40.0.1.1', :local_addr => '40.0.1.2', :id=> '13.11.19.57')
27
+ start_peering
28
+ end
29
+
30
+ def test_verify_that_200_is_prepended_to_aspath
31
+ queue = Queue.new
32
+ @n300.add_observer RecvMsgHandler.new(queue)
33
+ send_update_to @n100
34
+ msg = recv(queue)
35
+ puts msg
36
+ end
37
+
38
+ def teardown
39
+ [@n100, @n300].each { |n| n.stop }
40
+ sleep(0.5)
41
+ end
42
+
43
+ private
44
+
45
+ def start_peering
46
+ [@n100, @n300].each { |n|
47
+ n.capability :as4_byte
48
+ n.start
49
+ }
50
+ end
51
+
52
+ def recv(q, timeout=5)
53
+ begin
54
+ Timeout::timeout(timeout) do |t|
55
+ msg = q.deq
56
+ end
57
+ rescue Timeout::Error => e
58
+ nil
59
+ end
60
+ end
61
+
62
+ def update1
63
+ update = Update.new(
64
+ Path_attribute.new(
65
+ Origin.new(0),
66
+ Next_hop.new('40.0.0.1'),
67
+ Multi_exit_disc.new(100),
68
+ Local_pref.new(100),
69
+ As_path.new(100),
70
+ Communities.new('1311:1 311:59 2805:64')
71
+ ),
72
+ Nlri.new('77.0.0.0/17', '78.0.0.0/18', '79.0.0.0/19')
73
+ )
74
+ end
75
+
76
+ def send_update_to(n)
77
+ n.send_message update1
78
+ end
79
+
80
+ setup
81
+ test_verify_that_200_is_prepended_to_aspath
82
+
@@ -0,0 +1,44 @@
1
+
2
+ require 'bgp4r'
3
+ require 'test/helpers/server'
4
+
5
+ include BGP
6
+ include BGP::OPT_PARM::CAP
7
+ include BGP::TestHelpers
8
+
9
+ def test_start
10
+ start_server(3456)
11
+ @c = Neighbor.new(4, 100, 180, '0.0.0.2', '127.0.0.1', '127.0.0.1')
12
+ @c.start :port=> 3456
13
+ end
14
+
15
+ def test_start_no_blocking
16
+ start_server(3333)
17
+ @c = Neighbor.new(4, 100, 180, '0.0.0.2', '127.0.0.1', '127.0.0.1')
18
+ @c.start :port=> 3333, :no_blocking=>true
19
+ assert_equal('OpenSent', @c.state)
20
+ assert_match(/(Active|OpenSent)/, @s.state)
21
+ stop_server
22
+ end
23
+
24
+ def test_send_and_receive_path_id_afi_1_safi_1
25
+ server_add_path_cap = BGP::OPT_PARM::CAP::Add_path.new
26
+ server_add_path_cap.add(:send_and_recv, 1, 1)
27
+ start_server(3456, server_add_path_cap)
28
+ @c = Neighbor.new(4, 100, 180, '0.0.0.2', '127.0.0.1', '127.0.0.1')
29
+ @c.add_cap server_add_path_cap
30
+ @c.start :port=> 3456
31
+ assert @s.session_info.recv_inet_unicast?,
32
+ "Should have the capability to recv inet unicast reachability path info."
33
+ assert @s.session_info.send_inet_unicast?,
34
+ "Should have the capability to send inet unicast reachability path info."
35
+ assert @c.session_info.recv_inet_unicast?,
36
+ "Should have the capability to recv inet unicast reachability path info."
37
+ assert @c.session_info.send_inet_unicast?,
38
+ "Should have the capability to send inet unicast reachability path info."
39
+ stop_server
40
+ end
41
+
42
+ start_server(3456)
43
+ @c = Neighbor.new(4, 100, 180, '0.0.0.2', '127.0.0.1', '127.0.0.1')
44
+ @c.start :port=> 3456
data/test/common_test.rb CHANGED
@@ -46,6 +46,13 @@ class Common_Test < Test::Unit::TestCase
46
46
  assert_equal('255.255.255.254', IPAddr.new('1.1.1.1/31').netmask)
47
47
  assert_equal('255.255.255.252', IPAddr.new('1.1.1.1/30').netmask)
48
48
  assert_equal('255.255.255.248', IPAddr.new('1.1.1.1/29').netmask)
49
+ assert_equal('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',IPAddr.new('2011:1:18::1').netmask)
50
+ assert_equal('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe',IPAddr.new('2011:1:18::1/127').netmask)
51
+ assert_equal('ffff:ffff:ffff:ffff:8000:0000:0000:0000',IPAddr.new('2011:1:18::1/65').netmask)
52
+ assert_equal('ffff:ffff:ffff:ffff:0000:0000:0000:0000',IPAddr.new('2011:1:18::1/64').netmask)
53
+ assert_equal('ffff:ffff:ffff:fffe:0000:0000:0000:0000',IPAddr.new('2011:1:18::1/63').netmask)
54
+ assert_equal('ffff:ffff:ffff:0000:0000:0000:0000:0000',IPAddr.new('2011:1:18::1/48').netmask)
55
+ assert_equal('ffff:ffff:0000:0000:0000:0000:0000:0000',IPAddr.new('2011:1:18::1/32').netmask)
49
56
  end
50
57
  def test_ipaddr_4
51
58
  ip1 = IPAddr.new('10.0.0.1/28')
@@ -0,0 +1,20 @@
1
+ module BGP
2
+ module TestHelpers
3
+ def stop_server
4
+ @s.stop if @s
5
+ @c.stop if @c
6
+ @server.close if @server
7
+ @thread.kill if @thread
8
+ end
9
+ def start_server(port, cap=nil)
10
+ @server = TCPServer.new(port)
11
+ @thread = Thread.new do
12
+ while (session = @server.accept())
13
+ @s = Neighbor.new(4, 100, 180, '0.0.0.1', '127.0.0.1', '127.0.0.1')
14
+ @s.add_cap cap if cap
15
+ @s.start_session(session)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
data/test/iana_test.rb ADDED
@@ -0,0 +1,43 @@
1
+ #--
2
+ # Copyright 2011 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/iana"
24
+
25
+ require 'test/unit'
26
+ class TestBgpIana < Test::Unit::TestCase
27
+ def test_afi?
28
+ assert_equal 1, IANA.afi?(:ip)
29
+ assert_equal 2, IANA.afi?(:ip6)
30
+ assert_equal 5, IANA.afi?(:bbn)
31
+ assert_equal 12, IANA.afi?(:appletalk)
32
+ assert_equal 'IP', IANA.afi?(1)
33
+ assert_equal 'IP6',IANA.afi?(2)
34
+ end
35
+ def test_safi?
36
+ assert_equal 1, IANA.safi?(:unicast_nlri)
37
+ assert_equal 2, IANA.safi?(:multicast_nlri)
38
+ assert_equal 4, IANA.safi?(:label_nlri)
39
+ assert_equal 5, IANA.safi?(:mcast_vpn)
40
+ assert_equal 64, IANA.safi?(:tunnel)
41
+ assert_equal 65, IANA.safi?(:vpls)
42
+ end
43
+ end
@@ -92,7 +92,12 @@ class Open_Test < Test::Unit::TestCase
92
92
  assert_equal s, open.to_shex
93
93
  end
94
94
  def test_4
95
+ open = Open.new(4,100, 200, '10.0.0.1')
96
+ open << OPT_PARM::CAP::As4.new(100)
97
+ open << OPT_PARM::CAP::Route_refresh.new
98
+ open << OPT_PARM::CAP::Add_path.new(:recv, 1, 1)
99
+ assert open.find(As4)
100
+ assert open.find(Route_refresh)
101
+ assert open.find(Add_path)
95
102
  end
96
-
97
-
98
103
  end