-
Notifications
You must be signed in to change notification settings - Fork 0
/
evpn-savi.xml
647 lines (589 loc) · 34 KB
/
evpn-savi.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="no"?>
<?rfc subcompact="no"?>
<?rfc authorship="yes"?>
<?rfc tocappendix="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" ipr='trust200902' tocInclude="true" obsoletes=""
updates="" consensus="true" submissionType="IETF" xml:lang="en" version="3" docName="draft-levyabegnoli-bess-evpn-savi-02" >
<front>
<title abbrev="SAVI in an EVPN network">SAVI in an EVPN network</title>
<author initials='E' surname='Levy-Abegnoli' fullname='Eric Levy-Abegnoli'>
<organization abbrev='Cisco Systems'>Cisco Systems, Inc</organization>
<address>
<postal>
<street>Emerald Square, Batiment C</street>
<street>rue Evariste Galois </street>
<city>BIOT - Sophia Antipolis</city>
<code>06410</code>
<country>France</country>
</postal>
<phone>+33 497 23 26 20</phone>
<email>[email protected]</email>
</address>
</author>
<author initials='P' surname='Thubert' fullname='Pascal Thubert'>
<organization abbrev='Cisco Systems'>Cisco Systems, Inc</organization>
<address>
<postal>
<street>Emerald Square, Batiment C</street>
<street>rue Evariste Galois </street>
<city>BIOT - Sophia Antipolis</city>
<code>06410</code>
<country>France</country>
</postal>
<phone>+33 497 23 26 34</phone>
<email>[email protected]</email>
</address>
</author>
<author initials='R' surname='Kovacina' fullname='Ratko Kovacina'>
<organization abbrev='Cisco Systems'>Cisco Systems, Inc</organization>
<address>
<postal>
<street>2000 Innovation Dr</street>
<city>, Kanata, ON K2K 3E8, Canada</city>
<code>ON K2K 3E8</code>
<country>Canada</country>
</postal>
<phone>+1 613 254 4545 </phone>
<email>[email protected]</email>
</address>
</author>
<date/>
<area>Internet Area</area>
<workgroup>BESS</workgroup>
<keyword>Draft</keyword>
<abstract>
<t>
Source Address Validation procedures have been specified in the SAVI Working Group and provide a set of mechanisms and state
machines to verify Source Address ownership. The main mechanisms are described in RFC6620 and RFC7513.
</t>
<t>
RFC7432 and furthermore RFC9161 specify how an EVPN network could learn and distribute IP addressess.
RFC9161 describes a mechanism by which the PE can proxy some ND messages based on this information.
</t>
<t>
In this document, we review how these two sets of specifications and underlying mechanisms can interact to provide Source
Address Validation in an EVPN network.
</t>
</abstract>
<note title="Requirements Language">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in <xref target="RFC2119"/>.
</t>
</note>
</front>
<middle>
<section anchor="introduction"> <name>Introduction</name>
<t>
<xref target="RFC6620"/> describes a mechanism that provides Source Address Validation Improvements (SAVI)
for IPv6 networks based the First Come First Serve (FCFS) principle, applicable to any type of IPv6 addresses, including those
assigned through IPv6 <xref target="RFC4291"/><xref target="RFC8200"/> Neighbor Discovery (ND) <xref target="RFC4861"/>
Stateless Address Autoconfiguration (SLAAC) <xref target="RFC4862"/>.
According to that specification, an IPv6 entry freshly snooped on a SAVI device needs to reach the “VALID“ state before traffic
sourced with it can be forwarded.
</t>
<t>
Another SAVI specification, <xref target="RFC7513"/>, describes a similar mechanism for addresses assigned by DHCPv6/DHCPv4 server.
Again, traffic sourced which such addresses can only be forwarded when the address state is “BOUND”.
</t>
<t>
Section 10 of <xref target="RFC7432">"BGP MPLS-Based Ethernet VPN"</xref> (EVPN) indicates that a Provider Edge (PE) router may learn IP
addresses and advertise them to other PEs.
EVPN allows PEs to execute a proxy ARP/ND function that is further detailed in <xref target="RFC9161">"Operational Aspects of Proxy ARP/ND
in Ethernet Virtual Private Network"</xref>. According to section 3.2 of <xref target="RFC9161"/>, IPv6 addresses should be learnt by
snooping Neighbor Advertisements (NA), then advertised in an EVPN MAC/IP Advertisement route, and finally used on remote PEs to
perform said proxy ARP/ND function.
</t>
<t>Assuming one would want to perform Source Address Validation in an EVPN network, two models can be deployed:</t>
<ol>
<li>the SAVI function runs on SAVI switches not integrated with PEs</li>
<li>the SAVI function is integrated with the PEs</li>
</ol>
<t> These two models are reviewed in <xref target='models'/>. Corresponding interactions between SAVI and EVPN are reviewed as
well in this document.
</t>
</section > <!--Introduction-->
<section anchor='acronyms' > <name>Acronyms</name>
<t> This document uses the following abbreviations:</t>
<dl spacing='compact'>
<dt>CE:</dt><dd> Customer Edge (router)</dd>
<dt>DAD:</dt><dd>Duplicate Address Detection </dd>
<dt>NA:</dt><dd> Neighbor Advertisement (message)</dd>
<dt>ND:</dt><dd> Neighbor Discovery (protocol)</dd>
<dt>NDP:</dt><dd> Neighbor Discovery Protocol </dd>
<dt>NS:</dt><dd> Neighbor Solicitation (message) </dd>
<dt>PE:</dt><dd> Provider Edge (router)</dd>
<dt>VLAN:</dt><dd>Virtual Local Area Network</dd>
<dt>VxLAN:</dt><dd>Virtual Extensible LAN</dd>
<dt>EVPN:</dt><dd>Ethernet Virtual Private Network </dd>
<dt>VTEP:</dt><dd>VXLAN Tunnel EndPoint (node)</dd>
<dt>BGP:</dt><dd>Border Gateway Protocol </dd>
<dt>SAVI-PE:</dt><dd>A PE that integrates SAVI functionality </dd>
</dl>
</section><!-- Acronyms -->
<section anchor='savi' > <name>SAVI background</name>
<t>
As specified in the <xref target="RFC7039"/> SAVI instance enforces the hosts' use of legitimate IP source addresses and
to verify that the source address used in data packets actually belongs to the originator of the packet following three-step model:
</t>
<ol>
<li>Identify which IP source addresses are legitimate for a host, based on monitoring packets exchanged by the host.</li>
<li>Bind a legitimate IP address to the host's "binding anchor" which must be verifiable in every packet that the host sends.</li>
<li>Enforce that the IP source addresses in packets match the binding anchors to which they were bound.</li>
</ol>
<t>
SAVI devices form a perimeter separating trusted and untrusted regions of a network. As specified in <xref target="RFC6620"/> and
<xref target="RFC7513"/>, only validated addresses can inject traffic over the trusted perimeter.
</t>
<figure anchor='savi-net'><name>SAVI network</name>
<artwork><![CDATA[
protection perimeter
+- - - - - - - - - - - - - - - - - - - - - - -+
| |
| trusted perimeter |
| +- - - - - - - - - - - - - - - - - + |
| | | |
| | | |
+-------+ | +--+---+ +--+---+ | +-------+
| | | | SAVI | | SAVI | | | |
|Client | | | | L2-Network | | | |Client |
| | | |device| |device| | | |
+-------+ | +--+---+ +--+---+ | +-------+
| | | |
| +- - - - - - - - - - - - - - - - - + |
| |
+- - - - - - - - - - - - - - - - - - - - - - -+
]]></artwork>
</figure>
<t>
According to <xref target="RFC6620"/>, any address, used as the source of a packet or showing up as a target of a Neighbor Advertisement (NA)
or a target of a DAD Neighbor Solicitation (NS), which is not locally known and validated, is treated as a TENTATIVE address.
Validation process is initiated with a DAD NS (Duplicate Address Detection Neighbor Solicitation) message with this address
in the target field originated by the SAVI device and broadcasted to any validated or trusted port.
A response received implies a duplication and/or IP theft [B] and on the contrary, no response allows to progress
the state of the address from TENTATIVE to VALID [A].
</t>
<figure anchor='savi-flow'><name>SAVI flow</name>
<artwork><![CDATA[
+-------+ +---------+ +---------+ +-------+
|Client1| | SAVI1 | | SAVI2 | |Client2|
| | | | | | | |
+-----+-+ +---------+ +---------+ +--+----+
| | | |
| | | |
(*) |data, src=IP | |IP: VALID |
+-------------->|IP not found | |
| | | |
| IP:TENTATIVE| | |
| | | |
| | l2-multicast DAD NS | |
| | target=IP | |
+- | +---------------------->|DAD NS |
| | | +--------------->|
A | wait TENT_LT | |
| | | | |
| | | | |
| | IP: VALID| |IP: NO_BIND |
+- | | | |
DAD NS
+- | +---------------------->|DAD NS |
| | | NA, target=IP +--------------->|
B | |<---------------------------------------|
| | | | |
| | | | |
| | IP: NO_BIND |IP: VALID |
+- | Theft logging | |
(*) Any packet, including a DAD. For DAD and NA, src is found in target
field
]]></artwork>
</figure>
<t>
Note that a SAVI device stores only local entries (client facing)
</t>
<t>
Sequence goes like this for A:
</t>
<ol>
<li>Data sourced with S is received on the ingress SAVI instance. An entry for S is created in TENTATIVE state.</li>
<li>A DAD is built with target=S and broadcasted to all SAVI instances.</li>
<li>Only instances that have the entry "S" in VALID state or trusted ports forward the DAD.</li>
<li>In the absence of a response from Client, the state of the "S" entry at the ingress SAVI progresses to VALID.</li>
</ol>
<t>
For B, after step 3 Client responds to DAD with an NA (dst=all nodes).
</t>
<ol start="5">
<li>Upon receiving the NA, the ingress SAVI instance move the entry to NO_BIND and does not allow traffic from this source to be forwarded.</li>
</ol>
<t>
As described in step 3, only instances that have the entry "S" in VALID state or trusted ports forward the DAD.
</t>
</section> <!--savi-->
<section anchor="models"> <name>Deployment models</name>
<t>
In model 1, a SAVI device is inserted between client (host or CE) and PE (or VTEP). This first model is straight forward
and does not require any additional specification. It is presented in <xref target='model1'/>.
</t>
<t>
The SAVI devices operate as a verification perimeter between untrusted clients (CEs or Hosts) and PEs (or VTEPs).
As specified in <xref target="RFC6620"/> and <xref target="RFC7513"/>, only validated addresses can inject traffic over the
trusted perimeter. The mechanisms to validate addresses are specified in these two RFCs. Note that IPv6 DAD NS (IP source is set to
the unspecified address, see section section-2.5.2 of <xref target="RFC4291"/> ), used by SAVI for validation, can still be
forwarded by EVPN but are not used by EVPN proxy for learning. Therefore, as long as an address is not validated by SAVI, it remains
unknown by EVPN.
</t>
<figure anchor='model1'><name>Deployment model 1</name>
<artwork><![CDATA[
protection perimeter
+- - - - - - - - - - - - - - - - - - - - - - -+
| |
| trusted perimeter |
| +- - - - - - - - - -+ |
| | | |
| | L3 NETWORK | |
| | VTEP VTEP | |
+-------+ | +------+ ++------+ +------++ +------+ | +-------+
| | | | SAVI | | | | | | SAVI | | | |
|HOST/CE| | | | |EVPN/PE| |EVPN/PE| | | | |HOST/CE|
| | | |device| | | | | |device| | | |
+-------+ | +------+ ++------+ +------++ +------+ | +-------+
| | | |
| | | |
| | | |
| | | |
| +- - - - - - - - - -+ |
| |
| |
+- - - - - - - - - - - - - - - - - - - - - - -+
]]></artwork>
</figure>
<t>
In this model, the SAVI device and the PE/VTEP can also be colapsed into the same box referenced as a SAVI-PE.
The injection happens over an API between SAVI instance and EVPN rather than over a physical wire. Furthermore,
only validated sources are learnt per section 3.2 of <xref target="RFC9161"/>.
</t>
<t>
In model 2, SAVI Instance is integrated with te EVPN PE/VTEP, It is presented in <xref target='model2'/>.
In this model it is possible and even desirable to leverage the knowledge of remote IP entries stored in the VTEP EVPN tables
to make SAVI validation process more efficient.
</t>
<figure anchor='model2'><name>Deployment model 2</name>
<artwork><![CDATA[
protection perimeter
+- - - - - - - - - - - - - - - - - -- - -- - +
| |
| trusted perimeter |
| +- - - -- - - - - - -+ |
| | | |
| | L3 NETWORK | |
| SAVI-PE | | SAVI-PE |
+-------+ | +--------+-+------+ +------+-+--------+ | +-------+
| | | |SAVI | | | | SAVI | | | |
|HOST/CE| | | | EVPN | | EVPN | | | |HOST/CE|
| | | |instance| | | |instance| | | |
+-------+ | +--------+-+------+ +------+-+--------+ | +-------+
| | | |
| | | |
| | | |
| | | |
| +- - - - ---- - - - -+ |
| |
| |
+- - - - - - - - - - - - - - - - - - - - - - +
protection perimeter
]]></artwork>
</figure>
<t>
The next section review interactions between SAVI and EVPN for different type of addresses
</t>
</section><!-- models -->
<section anchor="dhcp"> <name>DHCP assigned addresses</name>
<section> <name> SAVI-DHCP background </name>
<t>
The <xref target="RFC7513">"SAVI Solution for DHCP"</xref> specification describes a mechanism that provides source address validation
for IPv6 networks where addresses are assigned by DHCPv6 server.
The address validation is achieved by snooping DHCPv6 address assignments, which is known as DHCP Snooping,
or validating discovered address with the DHCP server which is described as Data Snooping process.
Both processes are described in detail in <xref target="RFC7513"/>.
</t>
<t>
During DHCP Snooping process and according to associated state machine, an IP entry freshly snooped on a SAVI device progresses
from NO_BIND to BOUND.
</t>
</section><!--DHCP SAVI background -->
<section> <name> Interactions between RFC7513 and EVPN </name>
<t>
The whole DHCP address assignment procedure is performed using IPv6 Link-Local addresses, which are expected to be VALID prior to
the beginning of this process. The DHCP server or relay can then be located anywhere in the EVPN network without the DHCP messages
being blocked by SAVI. EVPN itself does not learn from DHCP, so until the address is assigned, DAD completed and the host
have sent an NA (response to a lookup or unsolicited NA), EVPN is not aware of the assigned address. After the NA is sent,
the address can be learnt by EVPN, stored locally by the EVPN proxy-ND, and distributed by BGP per <xref target="RFC9161"/>.
</t>
<t>
Source validation of DHCP assigned addresses in EVPN is described in
<xref target="I-D.sajassi-bess-evpn-first-hop-security">"EVPN First Hop Security"</xref>
</t>
</section><!--"Interactions between SAVI/RFC7513 and EVPN" -->
</section><!--"DHCP assigned addresses -->
<section anchor="slaac"> <name>SLAAC and other IPv6 addresses</name>
<section> <name> SAVI-FCFS background </name>
<t>
According to <xref target="RFC6620"/>, any address, used as the source of a packet or showing up as a target of a Neighbor
Advertisement (NA) or a target of a DAD Neighbor Solicitation (NS), which is not locally known and validated, is treated as
a TENTATIVE address and a DAD NS (Duplicate Address Detection Neighbor Solicitation) message with this address in the target
field is originated by the SAVI device and broadcasted to any validated or trusted port. A response received implies a
duplication and/or IP theft and on the contrary, no response allow to progress the state of the address from TENTATIVE to VALID.
</t>
</section><!--"SAVI-FCFS background" -->
<section> <name> Interactions between SAVI-FCFS and EVPN </name>
<t>
Main interactions are listed below:
</t>
<ul>
<li>Sources not validated by SAVI are not learnt nor distributed by EVPN: SAVI does not allow NA to be forwarded (model 1)
or signaled (model 2) to EVPN.</li>
<li>During the validation process for a Source, SAVI (ingress) originates a broadcast DAD, with target set to "Source"
and forwards (model 1) or signals (model 2) it to EVPN, which delivers it to remote SAVI devices (over the wire or an API).
Only SAVI devices that have a local validated entry or a trusted interface forward the DAD to enable the target to defend itself.</li>
<li>In case a response is sent by one of the DAD recipients, it is a broadcast NA (to "all-nodes"), processed by SAVI (egress).
The source is expected to be a SAVI validated source, and as such, delivered from (egress) SAVI to EVPN for delivery to all VTEPs and finally
to (ingress) SAVI to complete the validation process of the target "Source".</li>
<li>The first NA sent by this Source triggers EVPN proxy learning and EVPN distribution to all VTEPs per <xref target="RFC9161"/>.</li>
</ul>
<t>
In model 2 where SAVI is co-located with EVPN table, upon starting the validation process for an address,
SAVI MAY perform a lookup into EVPN table, where entry can be 1) not found, 2) local or 3) remote.
</t>
<t>
If the entry is local, this is an error as it is expected only VALID entries should be learnt by EVPN ND proxy. The entry in the EVPN
table MUST be deleted.
</t>
<t>Other cases are described in the next sections</t>
<t>
As described in <xref target="RFC6620"/>, when validating a source address that is not known in the local SAVI table, a multicast
DAD NS message is sent to all remote SAVI instances to check for the presence of this address on any of these instances.
This process can be optimized by leveraging the content of EVPN tables on VTEPs and "unicast-forward" the DAD to the known
address owner, if any, more in <xref target="RFC6085"/>.
</t>
<t>
Depending on the presence of the address in the EVPN table and if present, whether the address is active or not,
there are three possible scenarios as described below.
</t>
<ol>
<li>Address not found in EVPN table.</li>
<li>Address found in EVPN table, remote not active.</li>
<li>Address found in EVPN table, remote active.</li>
</ol>
<t>
It is important to note that EVPN table is simply a "helper" for SAVI verification. It may happen that the entry is not
present in the EVPN table due to following reasons:
</t>
<ul>
<li>Race condition (BGP did not converge yet for that entry).</li>
<li>EVPN decided not to distribute it (that may be the case for IPv6 Link-Local addresses on some implementations).</li>
<li>The entry has not been detected in the network yet.</li>
</ul>
<t>
If the entry is not present in the EVPN table and not present in the SAVI table, the verification will fallback on
sending a multicast (l2-broadcast) packet to all remote SAVI-PEs.
</t>
<t>
Similarly, in the case the EVPN lookup for the IP returns a local entry, SAVI will also fallback on broadcasting the DAD NS
used for verification to all remote SAVI-PEs. This may happen if EVPN installs the entry for IP before SAVI get a chance to
initiate the verification process, which could be the case in "loose-mode" described below.
</t>
<section anchor="not_found"> <name>Address not found</name>
<t>
Since the source address that is being validated by SAVI process might not be present in the EVPN table for reasons described above, it means
it cannot be moved to VALID state directly without performing validation as per <xref target="RFC6620"/>. It will be created as TENTATIVE in SAVI,
and the verification will fallback on sending a multicast (l2-broadcast) packet to all remote SAVI-PEs.
</t>
<t>
In the case when entry is not present in the EVPN table due to race condition or entry is not distributed by the EVPN,
multicast NS DAD will be converted to unnicast on remote SAVI-PEs before forwarding to the target. In the case when entry is not
detected in the network, multicast NS DAD will be stopped at remote SAVI-PEs.
</t>
<t>
Note that to prevent race condition where a host is VALID in the local SAVI instance but not yet present in the EVPN table, SAVI
MAY signal the entry to EVPN as soon as it becomes VALID.
</t>
</section><!--"Address not found"-->
<section anchor="inactive"> <name>Address found in EVPN table, remote not active</name>
<t>
When the source address that is being validated by SAVI process is present in the EVPN table, then the multicast NS DAD sent
by SAVI can be "unicast-forwarded" per section 3.4. "Unicast-Forward Sub-function" of <xref target="RFC9161"/>.
</t>
<t>
If the address is no longer active on the remote location, there will be no response and the validation process will follow
the steps as specified in <xref target="RFC6620"/> to move the entry to VALID state. Once the entry is in VALID state, the traffic
received from that address will be forwarded into EVPN network and the IP address will be learned by the EVPN. This is shown in
<xref target="mobility"/>
</t>
<t>
SAVI instance MAY signal the entry to EVPN as soon as it becomes VALID.
</t>
<t>
Note than, by default, waiting "TENT_LT" (TIMEOUT is TENTATIVE lifetime - default is 500ms) before moving entry to VALID state
will delay mobility by this amount of time.
</t>
<t>
Until validation is complete, traffic sourced from IP will be blocked. It is also expected that EVPN will start the mobility
procedure only at the end of the validation (after TENT_LT) process. This delay can however be improved in some cases.
</t>
<t>
If the MACs (bound to IP) are the same on both locations, the EVPN MAC mobility procedure may start immediately after detection
of the MAC at the new location, and traffic from the IP can be allowed "optimistically", to the exception of ARP/ND/DHCP messages
that could change the status-quo (mac, dhcp lease, etc.). See case 1 in the figure below. This is sometimes referred to as "loose mode"
as opposed to "strict mode" (nothing allowed till validation is complete).
</t>
<t>
By doing so, traffic will resume to new location as soon as BGP has re-converged, and in case of an IP-theft, mobility procedure
and/or SAVI validation (whichever completes first) will re-establish the previous situation (case 2 in the figure below).
</t>
<t>
If the MAC bound to the IP is different from the one already known, the MAC will be advertised immediately, but not the IP which
will be delayed by TENT_LT. In this case, traffic from the IP or ARP/ND traffic announcing the MAC change should also be delayed.
</t>
<figure anchor='mobility'><name>Remote not responding - Mobility</name>
<artwork><![CDATA[
local PE Remote PE
+------+ +---------+ +---------+ +------+
| HOST | | SAVI-PE | | SAVI-PE | | HOST |
| | | | | | | |
+----+-+ +---------+ +---------+ +--+---+
| | | |
| | | |
(1)data, src=IP | |IP: VALID |
+-------------->|IP:REMOTE IP:LOCAL| |
| | | |
| IP:TENTATIVE| | |
| | | |
| IP:REMOTE | | |
| found in | | |
| EVPN table| | |
| | | |
| | (2)l2-unicast DAD NS | |
| | target=IP | |
| +---------------------->|(3)DAD NS |
| | +--------------->|
| wait TENT_LT | |
| | | |
| | | |
| IP: VALID| | |
| | | |
| | IP: LOCAL |IP:NO_BIND |
| | in EVPN table | |
| | | |
| +--IP BGP advertized-> | |
| | IP:REMOTE| |
]]></artwork>
</figure>
</section><!--"Address found in EVPN table, remote not active"-->
<section anchor="active"> <name>Address found in EVPN table, remote active</name>
<t>
As in previous section, local SAVI sends the multicast NS DAD to the known (by EVPN, as a remote entry) target but this time,
the target responds with a multicast NA. The validation process will follow the steps as specified in
<xref target="RFC6620"/> and move the entry to NO_BIND state. Any NA received on this local SAVI instance from the validating
port will not be signalled to EVPN and will not be learnt by EVPN ND proxy. This is a IP duplication / theft use case and should
be signalled through logging or by triggering an alarm.
</t>
<t>
This is shown in <xref target="theft"/>
</t>
<figure anchor='theft'><name>Remote active - IP theft</name>
<artwork><![CDATA[
local PE Remote PE
+------+ +---------+ +---------+ +------+
| HOST | | SAVI-PE | | SAVI-PE | | HOST |
| | | | | | | |
+----+-+ +-----+---+ +-----+---+ +--+---+
| | | |
| | | |
| src=IP | |IP: VALID |
+-------------->|IP:REMOTE IP:LOCAL| |
| | | |
| IP:TENTATIVE| | |
| | | |
| IP:REMOTE | | |
| found in | | |
| EVPN table| | |
| | | |
| | (2)l2-unicast DAD NS | |
| | target=IP | |
| +---------------------->|(3)DAD NS |
| | +--------------->|
| | | NA |
| | |<---------------|
| |<----------------------| allowed |
| IP:NO_BIND | | |
| Theft signalled | |
]]></artwork>
</figure>
</section><!--"Address found in EVPN table, remote active"-->
</section><!--"SAVI/EVPN interaction"-->
<section anchor='ipv4'> <name>IPv4 address considerations</name>
<t>
While <xref target="RFC6620"/> does not mention IPv4, a very similar mechanism as the one described for
IPv6 addresses could be used for IPv4. NS DAD is simply replaced by ARP ACD (Address Conflict Detection) as
specified in <xref target="RFC5227"/> in all previous diagrams.
</t>
</section><!--IPv4 considerations -->
<section anchor='savnet'> <name>Interaction with SAVNET considerations</name>
<t>
The Source Address Validation Architecture (SAVA) <xref target="RFC5210"/> proposes a multi-fence approach
that implements SAV at three levels of the network: access, intra-domain, and inter-domain.
As described in <xref target="RFC6620"/> and <xref target="RFC7039"/> the applicability of FCFS SAVI is limited to local
traffic, to verify if the traffic generated by the hosts attached to the local link contains a valid source address.
The verification of the source address of the inter-subnet traffic is out of the scope of FCFS SAVI.
Other techniques are recommended to validate inter-subnet traffic. The scope of the Source Address Validation in Intra-domain
and Inter-domain Networks (SAVNET) includes the SAV function for both intra-domain and inter-domain networks. It identifies
the technical gaps and fundamental problems with current mechanism and techniques, and specifies the practical requirements
for the solution of these problems.
In that sense, FCFS SAVI complements SAVNET and the security level can be increased by combining these two techniques.
</t>
</section><!--Interaction with SAVNET considerations -->
</section><!--"SLAAC"-->
<section anchor='sec' > <name>Security Considerations</name>
</section><!-- "Security Considerations" -->
<section > <name>IANA Considerations</name>
<t>
This specification does not require IANA action.
</t>
</section>
<section > <name>Contributors</name>
</section>
<section > <name>Acknowledgments</name>
</section><!-- ack -->
</middle>
<back>
<references > <name>Normative References</name>
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml'/> <!-- Key words for use in RFCs to Indicate Requirement Levels -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml'/> <!-- neighbor Discovery for IP version 6 (IPv6) -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5210.xml'/> <!-- A Source Address Validation Architecture (SAVA) Testbed -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5227.xml'/> <!-- IPv4 Address Conflict Detection -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6620.xml'/> <!-- FCFS SAVI: First-Come, First-Served Source -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6085.xml'/> <!-- Address Mapping of IPv6 Multicast Packets on Ethernet -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7039.xml'/> <!-- (SAVI) Framework -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7513.xml'/> <!-- (SAVI) Solution for DHCP -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7432.xml'/> <!-- BGP MPLS-Based Ethernet VPN -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml'/> <!-- IPv6-->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9161.xml'/> <!-- Operational Aspects of Proxy ARP/ND in Ethernet Virtual Private Networks -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.sajassi-bess-evpn-first-hop-security.xml'/> <!-- EVPN FHS-->
</references>
<references > <name>Informative References</name>
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml'/> <!-- IP Version 6 Addressing Architecture -->
<xi:include href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4862.xml'/> <!-- IPv6 Stateless address Autoconfiguration -->
</references>
</back>
</rfc>