bgp4r 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/COPYING +674 -0
  2. data/LICENSE.txt +53 -0
  3. data/README.rdoc +259 -0
  4. data/bgp/aggregator.rb +104 -0
  5. data/bgp/as_path.rb +223 -0
  6. data/bgp/atomic_aggregate.rb +42 -0
  7. data/bgp/attribute.rb +181 -0
  8. data/bgp/attributes.rb +34 -0
  9. data/bgp/cluster_list.rb +117 -0
  10. data/bgp/common.rb +204 -0
  11. data/bgp/communities.rb +139 -0
  12. data/bgp/extended_communities.rb +107 -0
  13. data/bgp/extended_community.rb +254 -0
  14. data/bgp/iana.rb +269 -0
  15. data/bgp/io.rb +116 -0
  16. data/bgp/label.rb +94 -0
  17. data/bgp/local_pref.rb +75 -0
  18. data/bgp/message.rb +894 -0
  19. data/bgp/mp_reach.rb +208 -0
  20. data/bgp/multi_exit_disc.rb +76 -0
  21. data/bgp/neighbor.rb +291 -0
  22. data/bgp/next_hop.rb +63 -0
  23. data/bgp/nlri.rb +303 -0
  24. data/bgp/orf.rb +88 -0
  25. data/bgp/origin.rb +88 -0
  26. data/bgp/originator_id.rb +73 -0
  27. data/bgp/path_attribute.rb +210 -0
  28. data/bgp/prefix_orf.rb +263 -0
  29. data/bgp/rd.rb +107 -0
  30. data/examples/bgp +65 -0
  31. data/examples/routegen +85 -0
  32. data/examples/routegen.yml +50 -0
  33. data/test/aggregator_test.rb +66 -0
  34. data/test/as_path_test.rb +149 -0
  35. data/test/atomic_aggregate_test.rb +35 -0
  36. data/test/attribute_test.rb +57 -0
  37. data/test/cluster_list_test.rb +39 -0
  38. data/test/common_test.rb +68 -0
  39. data/test/communities_test.rb +75 -0
  40. data/test/extended_communities_test.rb +111 -0
  41. data/test/extended_community_test.rb +93 -0
  42. data/test/label_test.rb +50 -0
  43. data/test/local_pref_test.rb +43 -0
  44. data/test/message_test.rb +294 -0
  45. data/test/mp_reach_test.rb +143 -0
  46. data/test/multi_exit_disc_test.rb +46 -0
  47. data/test/neighbor_test.rb +50 -0
  48. data/test/next_hop_test.rb +37 -0
  49. data/test/nlri_test.rb +189 -0
  50. data/test/origin_test.rb +57 -0
  51. data/test/originator_id_test.rb +38 -0
  52. data/test/path_attribute_test.rb +127 -0
  53. data/test/prefix_orf_test.rb +97 -0
  54. data/test/rd_test.rb +44 -0
  55. metadata +133 -0
@@ -0,0 +1,107 @@
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
+
24
+ require 'bgp/attribute'
25
+ require 'bgp/extended_community'
26
+
27
+ module BGP
28
+
29
+ class Extended_communities < Attr
30
+
31
+ attr_reader :communities
32
+
33
+ def initialize(*args)
34
+ @flags, @type = OPTIONAL_TRANSITIVE, EXTENDED_COMMUNITY
35
+
36
+ if args[0].is_a?(String) and args[0].is_packed?
37
+ parse(args[0])
38
+ elsif args[0].is_a?(self.class)
39
+ parse(args[0].encode, *args[1..-1])
40
+ else
41
+ add(*args)
42
+ end
43
+ end
44
+
45
+ def add(*args)
46
+ @communities ||=[]
47
+ args.flatten.each do |arg|
48
+ if arg.is_a?(String) and arg.split(' ').size>1
49
+ arg.split.each { |v| @communities << Extended_community.factory(v) }
50
+ elsif arg.is_a?(String) and arg.split(',').size>1
51
+ arg.split(',').each { |v| @communities << Extended_community.factory(v) }
52
+ elsif arg.is_a?(Extended_community)
53
+ @communities << arg
54
+ else
55
+ @communities << Extended_community.factory(arg)
56
+ end
57
+ end
58
+ self
59
+ end
60
+ alias << add
61
+
62
+ def extended_communities
63
+ len = @communities.size*8
64
+ s=[]
65
+ s << ''
66
+ s << " Carried Extended communities"
67
+ s << " " + @communities.collect { |c| c.to_s }.join("\n ")
68
+ s.join("\n")
69
+ end
70
+
71
+ def to_s(method=:default)
72
+ super(extended_communities, method)
73
+ end
74
+
75
+ def to_arr
76
+ @communities.collect { |c| c.to_i }
77
+ end
78
+
79
+ def encode
80
+ super(@communities.collect { |comm| comm.encode }.join)
81
+ end
82
+
83
+ def parse(s)
84
+ @flags, @type, len, value=super(s)
85
+ while value.size>0
86
+ self << Extended_community.factory(value.slice!(0,8).is_packed)
87
+ end
88
+ end
89
+
90
+ def sort
91
+ Extended_communities.new(*to_arr.sort)
92
+ end
93
+
94
+ def sort!
95
+ @communities = @communities.sort_by { |c| c.to_i }
96
+ self
97
+ end
98
+
99
+ def <=>(other)
100
+ sort.to_shex <=> other.sort.to_shex
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+
107
+ load "../test/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
@@ -0,0 +1,254 @@
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
+
24
+ require 'bgp/common'
25
+ require 'bgp/attribute'
26
+
27
+ module BGP
28
+
29
+ module ATTR::XTENDED_COMMUNITY
30
+
31
+ ROUTE_TARGET = 2
32
+ ROUTE_ORIGIN = 3
33
+ OSPF_DOMAIN_ID = 5
34
+ OSPF_ROUTER_ID = 7
35
+ BGP_DATA_COLLECT = 8
36
+
37
+ IANA_AUTHORITY_BIT = 0x8
38
+ NON_TRANSITIVE = 0x4
39
+
40
+ TWO_OCTET_AS = 0
41
+ IPV4_ADDR = 1
42
+ OPAQUE = 3
43
+
44
+ def _encoded_value_
45
+ case @type & 3
46
+ when TWO_OCTET_AS
47
+ [@global, @local].pack('nN')
48
+ when IPV4_ADDR
49
+ [@global, @local].pack('Nn')
50
+ when OPAQUE
51
+ [@global].pack('H12')
52
+ else
53
+ raise RuntimeError, "bogus type: #{@type}"
54
+ end
55
+ end
56
+
57
+ def encode
58
+ [@type, @subtype, _encoded_value_].pack('CCa6')
59
+ end
60
+
61
+ def parse(s)
62
+ @type, @subtype = s.slice!(0,2).unpack('CC')
63
+ case @type & 3
64
+ when TWO_OCTET_AS ; @global, @local = s.unpack('nN')
65
+ when IPV4_ADDR
66
+ @global, @local = s.unpack('Nn')
67
+ when OPAQUE
68
+ @global = s.unpack('H12')
69
+ end
70
+ end
71
+
72
+ def is_opaque?
73
+ @type & OPAQUE > 0
74
+ end
75
+
76
+ def is_ipv4_addr?
77
+ @type & IPV4_ADDR > 0
78
+ end
79
+
80
+ def is_two_octet_asn?
81
+ @type & 3 == TWO_OCTET_AS
82
+ end
83
+
84
+ def two_octet
85
+ @type &= ~3
86
+ end
87
+
88
+ def ipv4_addr
89
+ @type &= ~3
90
+ @type |= 1
91
+ end
92
+
93
+ def opaque
94
+ @type |= 3
95
+ end
96
+
97
+ def non_transitive
98
+ @type |= 0x40
99
+ end
100
+
101
+ def transitive
102
+ @type &= ~0x40
103
+ end
104
+
105
+ def is_transitive?
106
+ @type & 0x40 == 0
107
+ end
108
+
109
+ def non_transitive?
110
+ not is_transitive?
111
+ end
112
+
113
+ def to_i
114
+ encode.unpack('H*')[0].to_i(16)
115
+ end
116
+
117
+ def <=>(other)
118
+ to_i <=> other.to_i
119
+ end
120
+
121
+ def name
122
+ self.class.to_s.split('::').last.gsub('_',' ')
123
+ end
124
+
125
+ end
126
+
127
+
128
+ class Extended_community
129
+ include ATTR::XTENDED_COMMUNITY
130
+ include Comparable
131
+
132
+ def self.factory(_s)
133
+ if _s.is_a?(Bignum) or _s.is_a?(Fixnum)
134
+ s = [format("%16.16x",_s)].pack('H*')
135
+ else
136
+ s = _s
137
+ end
138
+ type, subtype, value = s.unpack('CCa6')
139
+ case subtype
140
+ when ROUTE_TARGET ; Route_target.new(s)
141
+ when ROUTE_ORIGIN ; Route_origin.new(s)
142
+ when OSPF_DOMAIN_ID ; Ospf_domain_id.new(s)
143
+ when OSPF_ROUTER_ID ; Ospf_router_id.new(s)
144
+ when BGP_DATA_COLLECT ; Bgp_data_collect.new(s)
145
+ else
146
+ puts "too bad type #{type}, subtype #{subtype} : #{s.unpack('H*')}"
147
+ Extended_community.new(s)
148
+ end
149
+ end
150
+
151
+ def initialize(*args)
152
+ @type=TWO_OCTET_AS
153
+ if args.size==1 and args[0].is_a?(String) and args[0].is_packed?
154
+ parse(args[0])
155
+ elsif args.size==3
156
+ @type, @subtype, value = args
157
+ raise ArgumentError, "invalid argument #{args.inspect}" unless instance_of?(Opaque)
158
+ @type |= OPAQUE
159
+ @global, @local=value, nil
160
+ elsif args.size==4
161
+ raise ArgumentError, "This is a base class and should not be instanciated" if instance_of?(Extended_community)
162
+ @type, @subtype, @global, @local = args
163
+ if @global.is_a?(String) and @local.is_a?(Fixnum)
164
+ @type |= IPV4_ADDR
165
+ @global = IPAddr.new(@global).to_i
166
+ end
167
+ elsif args.size==1 and args[0].is_a?(Bignum)
168
+ parse([s].pack('H*'))
169
+ elsif args.empty?
170
+ @type, @subtype, @global, @local = 0,0,0,0
171
+ else
172
+ raise ArgumentError, "invalid arg #{args.inspect}"
173
+ end
174
+ end
175
+
176
+ def to_s
177
+ case @type & 3
178
+ when TWO_OCTET_AS
179
+ "#{name}: #{@global}:#{@local}"
180
+ when IPV4_ADDR
181
+ "#{name}: #{IPAddr.create(@global)}:#{@local}"
182
+ when OPAQUE
183
+ "#{name}: #{@global}"
184
+ else
185
+ raise RuntimeError, "bogus type: #{@type}"
186
+ end
187
+ end
188
+
189
+ end
190
+
191
+ class Route_target < Extended_community
192
+ def initialize(*args)
193
+ if args[0].is_a?(String) and args[0].is_packed?
194
+ super(*args)
195
+ else
196
+ super(0, ROUTE_TARGET, *args)
197
+ end
198
+ end
199
+ end
200
+
201
+ class Route_origin < Extended_community
202
+ def initialize(*args)
203
+ if args[0].is_a?(String) and args[0].is_packed?
204
+ super(*args)
205
+ else
206
+ super(0,ROUTE_ORIGIN,*args)
207
+ end
208
+ end
209
+ end
210
+
211
+ class Ospf_domain_id < Extended_community
212
+ def initialize(*args)
213
+ if args[0].is_a?(String) and args[0].is_packed?
214
+ super(*args)
215
+ else
216
+ args += [0]
217
+ super(1,OSPF_DOMAIN_ID,*args)
218
+ end
219
+ end
220
+ end
221
+
222
+ class Ospf_router_id < Extended_community
223
+ def initialize(*args)
224
+ if args[0].is_a?(String) and args[0].is_packed?
225
+ super(*args)
226
+ else
227
+ args += [0]
228
+ super(1,OSPF_ROUTER_ID,*args)
229
+ end
230
+ end
231
+ end
232
+
233
+ class Bgp_data_collect < Extended_community
234
+ def initialize(*args)
235
+ if args[0].is_a?(String) and args[0].is_packed?
236
+ super(*args)
237
+ else
238
+ super(0,BGP_DATA_COLLECT,*args)
239
+ end
240
+ end
241
+ end
242
+
243
+ class Opaque < Extended_community
244
+ def initialize(*args)
245
+ if args[0].is_a?(String) and args[0].is_packed?
246
+ super(*args)
247
+ else
248
+ raise ArgumentError, "not an opaque extended community" if [2,3,5,7,8].include?(args[0])
249
+ super(0,*args)
250
+ end
251
+ end
252
+ end
253
+
254
+ end
data/bgp/iana.rb ADDED
@@ -0,0 +1,269 @@
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
+
24
+ module IANA
25
+ def self.afi(afi)
26
+ case afi
27
+ when AFI::IP ; 'IPv4'
28
+ when AFI::IP6 ; 'IPv6'
29
+ else
30
+ ''
31
+ end
32
+ end
33
+ def self.safi(safi)
34
+ case safi
35
+ when SAFI::UNICAST_NLRI ; 'Unicast'
36
+ when SAFI::MULTICAST_NLRI ; 'Multicast'
37
+ when SAFI::LABEL_NLRI ; 'Labeled NLRI'
38
+ when SAFI::MCAST_VPN ; 'Multicast VPN'
39
+ when SAFI::MPLS_VPN_UNICAST ; 'Labeled VPN Unicast'
40
+ when SAFI::MPLS_VPN_Multicast ; 'Labeled VPN Multicast'
41
+ else
42
+ ''
43
+ end
44
+ end
45
+ module AFI
46
+ IP = 1
47
+ IP6 = 2
48
+ NSAP = 3
49
+ HDLC = 4
50
+ BBN = 5
51
+ IEEE_802 = 6
52
+ E163 = 7
53
+ E164 = 8
54
+ F69 = 9
55
+ X121 = 10
56
+ IPX = 11
57
+ Appletalk = 12
58
+ Decnet_IV = 13
59
+ Banyan_Vines = 14
60
+ E164_NSAP = 15
61
+ DNS = 16
62
+ Distinguished_Name = 17
63
+ AS_Number = 18
64
+ XTPv4 = 19
65
+ XTPv6 = 20
66
+ XTP = 21
67
+ FCWWPN = 22
68
+ FCWWNN = 23
69
+ GWID = 24
70
+ L2VPN = 25
71
+ end
72
+ module SAFI
73
+ UNICAST_NLRI = 1
74
+ MULTICAST_NLRI = 2
75
+ LABEL_NLRI = 4
76
+ MCAST_VPN = 5
77
+ MULTI_SEGMENT_PW_NLRI = 6
78
+ ENCASPSULATION_SAFI = 7
79
+ TUNNEL = 64
80
+ VPLS = 65
81
+ BGP_MDT = 66
82
+ BGP4over6 = 67
83
+ BGP6over4 = 68
84
+ L1_VPN_AUTO_DISCOVERY = 69
85
+ MPLS_VPN_UNICAST = 128
86
+ MPLS_VPN_Multicast = 129
87
+ ROUTE_TARGET_CONSTRAINTS = 132
88
+ FLOW_SPEC_RULES_1 = 133
89
+ FLOW_SPEC_RULES_2 = 134
90
+ VPN_AUTO_DISCOVERY = 140
91
+ end
92
+ end
93
+
94
+ __END__
95
+
96
+ http://www.iana.org/assignments/address-family-numbers/
97
+
98
+
99
+
100
+ Registry:
101
+ Number Description Reference
102
+ ---------- ---------------------------------------------------------------- -----------------
103
+ 0 Reserved
104
+ 1 IP (IP version 4)
105
+ 2 IP6 (IP version 6)
106
+ 3 NSAP
107
+ 4 HDLC (8-bit multidrop)
108
+ 5 BBN 1822
109
+ 6 802 (includes all 802 media plus Ethernet "canonical format")
110
+ 7 E.163
111
+ 8 E.164 (SMDS, Frame Relay, ATM)
112
+ 9 F.69 (Telex)
113
+ 10 X.121 (X.25, Frame Relay)
114
+ 11 IPX
115
+ 12 Appletalk
116
+ 13 Decnet IV
117
+ 14 Banyan Vines
118
+ 15 E.164 with NSAP format subaddress [UNI-3.1][Malis]
119
+ 16 DNS (Domain Name System)
120
+ 17 Distinguished Name [Lynn]
121
+ 18 AS Number [Lynn]
122
+ 19 XTP over IP version 4 [Saul]
123
+ 20 XTP over IP version 6 [Saul]
124
+ 21 XTP native mode XTP [Saul]
125
+ 22 Fibre Channel World-Wide Port Name [Bakke]
126
+ 23 Fibre Channel World-Wide Node Name [Bakke]
127
+ 24 GWID [Hegde]
128
+ 25 AFI for L2VPN information [RFC4761]
129
+ 26-16383 Unassigned
130
+ 16384 EIGRP Common Service Family [Savage]
131
+ 16385 EIGRP IPv4 Service Family [Savage]
132
+ 16386 EIGRP IPv6 Service Family [Savage]
133
+ 16387-32767 Unassigned
134
+ 32768-65534 Unassigned
135
+ 65535 Reserved
136
+
137
+
138
+ http://www.iana.org/assignments/safi-namespace
139
+
140
+
141
+ Registries included below
142
+ - SAFI Values
143
+
144
+
145
+ Registry Name: SAFI Values
146
+ Reference: [RFC4760]
147
+ Range Registration Procedures Note
148
+ --------- --------------------------------------------------- --------------------
149
+ 1-63 Standards Action or Early Allocation policy
150
+ 64-127 First Come First Served
151
+ 128-240 Some recognized assignments below, others Reserved
152
+ 241-254 Reserved for Private Use Not to be assigned
153
+
154
+ Registry:
155
+ Value Description Reference
156
+ ------- ---------------------------------------------- ---------
157
+ 0 Reserved [RFC4760]
158
+
159
+ 1 Network Layer Reachability Information used [RFC4760]
160
+ for unicast forwarding
161
+
162
+ 2 Network Layer Reachability Information used [RFC4760]
163
+ for multicast forwarding
164
+
165
+ 3 Reserved [RFC4760]
166
+
167
+ 4 Network Layer Reachability Information (NLRI) [RFC3107]
168
+ with MPLS Labels
169
+
170
+ 5 MCAST-VPN [draft-ietf-l3vpn-2547bis-mcast-bgp]
171
+ (TEMPORARY - Expires 2009-06-19)
172
+
173
+ 6 Network Layer Reachability Information used [draft-ietf-pwe3-dynamic-ms-pw]
174
+ for Dynamic Placement of Multi-Segment
175
+ Pseudowires
176
+ (TEMPORARY - Expires 2009-08-23)
177
+
178
+ 7 Encapsulation SAFI [RFC-ietf-softwire-encaps-safi-05.txt]
179
+
180
+ 8-63 Unassigned
181
+
182
+ 64 Tunnel SAFI [Nalawade]
183
+
184
+ 65 Virtual Private LAN Service (VPLS) [RFC4761]
185
+
186
+ 66 BGP MDT SAFI [Nalawade]
187
+
188
+ 67 BGP 4over6 SAFI [Cui]
189
+
190
+ 68 BGP 6over4 SAFI [Cui]
191
+
192
+ 69 Layer-1 VPN auto-discovery information [RFC-ietf-l1vpn-bgp-auto-discovery-05.txt]
193
+
194
+ 70-127 Unassigned
195
+
196
+ 128 MPLS-labeled VPN address [RFC4364]
197
+
198
+ 129 Multicast for BGP/MPLS IP Virtual Private [RFC2547]
199
+ Networks (VPNs)
200
+
201
+ 130-131 Reserved [RFC4760]
202
+
203
+ 132 Route Target constrains [RFC4684]
204
+
205
+ 133 Dissemination of flow specification rules [draft-marques-idr-flow-spec]
206
+
207
+ 134 Dissemination of flow specification rules [draft-marques-idr-flow-spec]
208
+
209
+ 135-139 Reserved [RFC4760]
210
+
211
+ 140 VPN auto-discovery [draft-ietf-l3vpn-bgpvpn-auto]
212
+
213
+ 141-240 Reserved [RFC4760]
214
+
215
+ 241-254 Private Use [RFC4760]
216
+
217
+ 255 Reserved [RFC4760]
218
+
219
+
220
+ References
221
+ ----------
222
+ [RFC2547] E. Rosen and Y. Rekhter, "BGP/MPLS VPNs", RFC 2547, March 1999.
223
+
224
+ [RFC3107] Y. Rekhter and E. Rosen, "Carrying Label Information in
225
+ BGP-4", RFC 3107, May 2001.
226
+
227
+ [RFC4364] E. Rosen and Y. Rekhter, "BGP/MPLS IP VPNs", RFC 4364, February 2006.
228
+
229
+ [RFC4684] P. Marques, R. Bonica, L. Fang, L. Martini, R. Raszuk, K. Patel
230
+ and J. Guichard, "Constrained VPN Route Distribution", RFC 4684,
231
+ November 2006.
232
+
233
+ [RFC4760] T. Bates, R. Chandra, D. Katz and Y. Rekhter, "Multiprotocol
234
+ Extensions for BGP-4", RFC 4760, January 2007.
235
+
236
+ [RFC4761] K. Kompella and Y. Rekhter, "Virtual Private LAN Service
237
+ (VPLS) Using BGP for Auto-discovery and Signaling", RFC 4761,
238
+ January 2007.
239
+
240
+ [RFC-ietf-l1vpn-bgp-auto-discovery-05.txt]
241
+ H. Brahim, D. Fedyk, Y. Rekhter, "BGP-based Auto-Discovery for
242
+ Layer-1 VPNs", RFC XXXX, Month Year.
243
+
244
+ [draft-ietf-l3vpn-bgpvpn-auto] Work in progress
245
+
246
+ [draft-ietf-pwe3-dynamic-ms-pw] Work in progress
247
+
248
+ [draft-marques-idr-flow-spec] Work in progress
249
+
250
+ [draft-ietf-l3vpn-2547bis-mcast-bgp] Work in progress
251
+
252
+ [RFC-ietf-softwire-encaps-safi-05.txt]
253
+ P. Mohapatra, E. Rosen, "BGP Encapsulation SAFI and BGP Tunnel
254
+ Encapsulation Attribute", RFC XXXX, Month Year.
255
+
256
+ People
257
+ ------
258
+ [Bates] Tony Bates, <tbates&cisco.com>, July 2000.
259
+
260
+ [Cui] Yong Cui, <cuiyong&tsinghua.edu.cn>, 15 August 2006, 20 September 2006.
261
+
262
+ [Nalawade] Gargi Nalawade, <gargi&cisco.com>, January 2004.
263
+ (draft-nalawade-kapoor-tunnel-safi-01.txt)
264
+ (draft-nalawade-idr-mdt-safi-00.txt), February 2004.
265
+
266
+ (created 2000-07)
267
+
268
+ []
269
+