| < draft-ietf-msdp-spec-09.txt | draft-ietf-msdp-spec-10.txt > | |||
|---|---|---|---|---|
| Network Working Group David Meyer (Editor) | Network Working Group David Meyer (Editor) | |||
| INTERNET DRAFT Bill Fenner (Editor) | INTERNET DRAFT Bill Fenner (Editor) | |||
| Category Standards Track | Category Standards Track | |||
| May, 2001 | May, 2001 | |||
| Multicast Source Discovery Protocol (MSDP) | Multicast Source Discovery Protocol (MSDP) | |||
| <draft-ietf-msdp-spec-09.txt> | <draft-ietf-msdp-spec-10.txt> | |||
| 1. Status of this Memo | 1. Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC 2026. | all provisions of Section 10 of RFC 2026. | |||
| Internet Drafts are working documents of the Internet Engineering | Internet Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that other | Task Force (IETF), its areas, and its working groups. Note that other | |||
| groups may also distribute working documents as Internet-Drafts. | groups may also distribute working documents as Internet-Drafts. | |||
| skipping to change at page 5, line 5 ¶ | skipping to change at page 5, line 5 ¶ | |||
| sources are advertised in the following manner: An RP packs its | sources are advertised in the following manner: An RP packs its | |||
| active sources into an SA message until the largest MSDP packet that | active sources into an SA message until the largest MSDP packet that | |||
| can be sent is built or there are no more sources, and then sends the | can be sent is built or there are no more sources, and then sends the | |||
| message. This process is repeated periodically within the SA- | message. This process is repeated periodically within the SA- | |||
| Advertisement-Period in such a way that all of the RP's sources are | Advertisement-Period in such a way that all of the RP's sources are | |||
| advertised. Note that the largest MSDP packet that can be sent has | advertised. Note that the largest MSDP packet that can be sent has | |||
| size that is the minimum of MTU of outgoing link minus size of TCP | size that is the minimum of MTU of outgoing link minus size of TCP | |||
| and IP headers, and 1400 (largest MSDP packet). Finally, the timer is | and IP headers, and 1400 (largest MSDP packet). Finally, the timer is | |||
| deleted when the MSDP process is deconfigured. | deleted when the MSDP process is deconfigured. | |||
| 8.3. SA Cache Timeout (SA-State-Timer) | 8.3. SA Cache Timeout (SA-State Timer) | |||
| Each entry in an SA Cache has an associated SA-State-Timer. A | Each entry in an SA Cache has an associated SA-State Timer. A | |||
| (S,G)-SA-State-Timer is started when an (S,G)-SA message is initially | (S,G)-SA-State-Timer is started when an (S,G)-SA message is initially | |||
| received by a MSDP peer. The timer is reset to [SA-State-Period] if | received by a MSDP peer. The timer is reset to [SA-State-Period] if | |||
| another (S,G)-SA message is received before the (S,G)-SA-State-Timer | another (S,G)-SA message is received before the (S,G)-SA-State Timer | |||
| expires. [SA-State-Period] MUST NOT be less than 90 seconds. | expires. [SA-State-Period] MUST NOT be less than 90 seconds. | |||
| 8.4. SA-Hold-Down-Timer | 8.4. SA-Hold-Down Timer | |||
| The per-(S,G) timer is set to [SA-Hold-Down-Period] when forwarding | The per-(S,G) timer is set to [SA-Hold-Down-Period] when forwarding | |||
| an SA message, and a SA message MUST only be forwarded when its | an SA message, and a SA message MUST only be forwarded when its | |||
| associated timer is not running. [SA-Hold-Down-Period] SHOULD be set | associated timer is not running. [SA-Hold-Down-Period] SHOULD be set | |||
| to 30 seconds. A MSDP peer MUST NOT forward a (S,G)-SA message it has | to 30 seconds. A MSDP peer MUST NOT forward a (S,G)-SA message it has | |||
| received in during the previous [SA-Hold-Down-Period] seconds. | received in during the previous [SA-Hold-Down-Period] seconds. | |||
| Finally, the timer is deleted when the SA cache entry is deleted. | Finally, the timer is deleted when the SA cache entry is deleted. | |||
| 8.5. Peer Hold Timer | 8.5. Peer Hold Timer | |||
| If a system has not received any MSDP message within the period | If a system has not received any MSDP message within the period | |||
| specified by the Hold Timer, then a Notification message with Hold | specified by the Hold Timer, then a Notification message with Hold | |||
| Timer Expired Error Code MUST be sent and the MSDP connection MUST be | Timer Expired Error Code MUST be sent and the MSDP connection MUST be | |||
| closed. [Hold-Time-Period] MUST be at least three seconds. A | closed. [HoldTime-Period] MUST be at least three seconds. The | |||
| suggested value for [Hold-Time-Period] is 90 seconds. | recommended value for [HoldTime-Period] is 90 seconds. | |||
| The Hold Timer is initialized to [Hold-Time-Period] when the peer's | The Hold Timer is initialized to [HoldTime-Period] when the peer's | |||
| transport connection is established, and is reset to [Hold-Time- | transport connection is established, and is reset to [HoldTime- | |||
| Period] when any MSDP message is received. Finally, the timer is | Period] when any MSDP message is received. Finally, the timer is | |||
| deleted when the peer's transport connection is closed. | deleted when the peer's transport connection is closed. | |||
| 8.6. KeepAlive Timer | 8.6. KeepAlive Timer | |||
| Once an MSDP transport connection is established, each side of the | Once an MSDP transport connection is established, each side of the | |||
| connection sends a KeepAlive message and sets a KeepAlive timer. If | connection sends a KeepAlive message and sets a KeepAlive timer. If | |||
| the KeepAlive timer expires, the local system sends a KeepAlive | the KeepAlive timer expires, the local system sends a KeepAlive | |||
| message and restarts its KeepAlive timer. | message and restarts its KeepAlive timer. | |||
| The KeepAlive timer is set to [KeepAlive-Period] when the peer comes | The KeepAlive timer is set to [KeepAlive-Period] when the peer comes | |||
| up. [KeepAlive-Period] SHOULD NOT be less than 75 seconds, and MUST | up. The timer is reset to [KeepAlive-Period] each time an MSDP | |||
| NOT be less than [Hold-Time-Period]. The timer is reset to | message is sent to the peer, and reset when the timer expires. | |||
| [KeepAlive-Period] each time an MSDP message is sent to peer, and | Finally, the KeepAlive timer is deleted when the peer's transport | |||
| reset when the timer expires. Finally, the KeepAlive timer is deleted | connection is closed. | |||
| when the peer's transport connection is closed. | ||||
| [KeepAlive-Period] MUST be less than [HoldTime-Period], and MUST be | ||||
| at least one second. The recommended value for [KeepAlive-Period] is | ||||
| 75 seconds. | ||||
| 8.7. ConnectRetry Timer | 8.7. ConnectRetry Timer | |||
| The ConnectRetry timer is used by an MSDP peer to transition from | The ConnectRetry timer is used by an MSDP peer to transition from | |||
| INACTIVE to CONNECTING states. There is one timer per peer, and the | INACTIVE to CONNECTING states. There is one timer per peer, and the | |||
| [ConnectRetry-Period] SHOULD be set to 30 seconds. The timer is | [ConnectRetry-Period] SHOULD be set to 30 seconds. The timer is | |||
| initialized to [ConnectRetry-Period] when an MSDP peer's active | initialized to [ConnectRetry-Period] when an MSDP speaker attempts to | |||
| connect attempt fails. When the timer expires, the peer retries the | actively open a TCP connection to its peer (see section 15, event E2, | |||
| connection and the timer is reset to [ConnectRetry-Period]. It is | action A2 ). When the timer expires, the peer retries the connection | |||
| deleted if either the connection transitions into ESTABLISHED state | and the timer is reset to [ConnectRetry-Period]. It is deleted if | |||
| or the peer is deconfigured. | either the connection transitions into ESTABLISHED state or the peer | |||
| is deconfigured. | ||||
| 9. Intermediate MSDP Peers | 9. Intermediate MSDP Peers | |||
| Intermediate MSDP speakers do not originate periodic SA messages on | Intermediate MSDP speakers do not originate periodic SA messages on | |||
| behalf of sources in other domains. In general, an RP MUST only | behalf of sources in other domains. In general, an RP MUST only | |||
| originate an SA for a source which would register to it, and ONLY RPs | originate an SA for a source which would register to it, and ONLY RPs | |||
| may originate SA messages. | may originate SA messages. | |||
| 10. SA Filtering and Policy | 10. SA Filtering and Policy | |||
| skipping to change at page 11, line 5 ¶ | skipping to change at page 11, line 5 ¶ | |||
| SA message from R2. In this case, both R1 and R3 will send | SA message from R2. In this case, both R1 and R3 will send | |||
| SA messages to each other (because they share common mesh-group | SA messages to each other (because they share common mesh-group | |||
| C), but neither of them will forward any further the SA messages | C), but neither of them will forward any further the SA messages | |||
| received from each other (as their peer-RPF neighbors do | received from each other (as their peer-RPF neighbors do | |||
| not lie in mesh-group C). | not lie in mesh-group C). | |||
| Note that since mesh-groups suspend peer-RPF checking of SAs received | Note that since mesh-groups suspend peer-RPF checking of SAs received | |||
| from a mesh-group member ((i). above), they allow for mis- | from a mesh-group member ((i). above), they allow for mis- | |||
| configuration to cause SA looping. | configuration to cause SA looping. | |||
| 15. MSDP Connection Establishment | 15. MSDP Connection State Machine | |||
| MSDP messages will be encapsulated in a TCP connection. An MSDP peer | MSDP uses TCP as its transport protocol. In a peering relationship, | |||
| listens for new TCP connections on port 639. One side of the MSDP | one MSDP peer listens for new TCP connections on the well-known port | |||
| peering relationship will listen on the well-known port and the other | 639. The other side makes an active connect to this port. The peer | |||
| side will do an active connect to the well-known port. The side with | with the higher IP address will listen. This connection establishment | |||
| the higher peer IP address will do the listen. This connection | algorithm avoids call collision. Therefore, there is no need for a | |||
| establishment algorithm avoids call collision. Therefore, there is no | call collision procedure. It should be noted, however, that the | |||
| need for a call collision procedure. It should be noted, however, | disadvantage of this approach is that it may result in longer startup | |||
| that the disadvantage of this approach is that it may result in | times at the passive side. | |||
| longer startup times at the passive end. | ||||
| An MSDP peer starts in the INACTIVE state. MSDP peers establish | An MSDP peer starts in the DISABLED state. MSDP peers establish | |||
| peering sessions according to the following state machine: | peering sessions according to the following state machine: | |||
| De-configured or | --------------->+----------+ | |||
| disabled | / | DISABLED |<---------- | |||
| +-------------------------------------------+ | | ------>+----------+ \ | |||
| | | | | / |E1->A1 | | |||
| | | | | | | | | |||
| Enable | | | | V |E7->A7 | |||
| +-----|--------->+----------+ Connect Retry Timer | | | | +----------+ E3->A3 +--------+ | |||
| | | +->| INACTIVE |----------------+ | | | | | INACTIVE |------->| LISTEN | | |||
| | | | +----------+ | | | | | +----------+ +--------+ | |||
| Deconf'ed | | | /|\ /|\ | | Lower Address | | | E2->A2| ^ |E5->A5 | |||
| or | | | | | | | | | | | | | | |||
| disabled | | | | | \|/ | | | |E7->A6 V |E6 | | |||
| | | | | | | +-------------+ | | \ +------------+ | | |||
| | | | | | +---------------| CONNECTING | | E7->A8 | ------| CONNECTING | | | |||
| | | | | | Timeout or +-------------+ | E8->A9 | +------------+ | | |||
| | | | | | Local Address Change | | E9->A10| |E4->A4 | | |||
| \|/ \|/ | | | | | E10->A11| | | | |||
| +----------+ | | | | | E11->A12| V | | |||
| | DISABLED | | | +---------------------+ | TCP Established | \ +-------------+ / | |||
| +----------+ | | | | | --------------| ESTABLISHED |<--------- | |||
| /|\ /|\ | | Connection Timeout, | | | +-------------+ | |||
| | | | | Local Address change, | | | ||||
| | | | | Authorization Failure | | | 15.1. Events | |||
| | | | | | | | ||||
| | | | | | \|/ | E1) Enable MSDP peering with P | |||
| | | | | +-------------+ | E2) Own IP address < P's IP address | |||
| | | Local | | | ESTABLISHED | | E3) Own IP address > P's IP address | |||
| | | Address | | Higher Address +-------------+ | E4) TCP established (active side) | |||
| | | Change | \|/ /|\ | | E5) TCP established (passive side) | |||
| | | | +--------+ | | | E6) ConnectRetry timer expired | |||
| | | +--| LISTEN |--------------------+ | | E7) Disable MSDP peering with P | |||
| | | +--------+ TCP Accept | | An example of when to do this is when one's own address is | |||
| | | | | | changed) | |||
| | | | | | E8) Hold Timer expired | |||
| | +---------------+ | | E9) Authorization failure | |||
| | De-configured or | | E10) Notification TLV received | |||
| | disabled | | E11) Error detected | |||
| | | | ||||
| +------------------------------------------------------+ | 15.2. Actions | |||
| De-configured or | ||||
| disabled | A1) Allocate resources for peering with P | |||
| Compare one's own and peer's IP addresses | ||||
| A2) TCP active OPEN | ||||
| Set ConnectRetry timer to [ConnectRetry-Period] | ||||
| A3) TCP passive OPEN (listen) | ||||
| A4) Delete ConnectRetry timer | ||||
| Send KeepAlive TLV | ||||
| Set KeepAlive timer to [KeepAlive-Period] | ||||
| Set Hold Timer to [HoldTime-Period] | ||||
| A5) Send KeepAlive TLV | ||||
| Set KeepAlive timer to [KeepAlive-Period] | ||||
| Set Hold Timer to [HoldTime-Period] | ||||
| A6) Abort TCP active OPEN attempt | ||||
| Release resources allocated for peering with P | ||||
| A7) Abort TCP passive OPEN attempt | ||||
| Release resources allocated for peering with P | ||||
| In action sets 8)-12), the action "Close peering session" includes | ||||
| the following steps: | ||||
| Close TCP connection | ||||
| Delete KeepAlive timer | ||||
| Delete Hold Timer | ||||
| Release resources allocated for peering with P | ||||
| A8) Send Notification TLV with Error Code "Cease" | ||||
| Close peering session | ||||
| A9) Send Notification TLV with Error Code "Hold Timer Expired" | ||||
| Close peering session | ||||
| A10) Notify management system unless this has already been done by | ||||
| the security mechanism | ||||
| Close peering session | ||||
| A11) Notify management system | ||||
| If the received Notification TLV's O-bit was cleared, close | ||||
| peering session. Otherwise, remain in ESTABLISHED state. | ||||
| A12) Send Notification TLV with appropriate Error Code | ||||
| Notify management system | ||||
| If the sent Notification TLV's O-bit was cleared, close peering | ||||
| session. Otherwise, remain in ESTABLISHED state. | ||||
| 15.3. Peer-specific Events | ||||
| The following peer-specific events can occur in the ESTABLISHED | ||||
| state, they do not cause a state transition. Appropriate actions are | ||||
| listed for each event. | ||||
| *) KeepAlive timer expired: | ||||
| -> Send KeepAlive TLV | ||||
| -> Set KeepAlive timer to [KeepAlive-Period] | ||||
| *) KeepAlive TLV received: | ||||
| -> Set Hold Timer to [HoldTime-Period] | ||||
| *) Source-Active TLV received: | ||||
| -> Set Hold Timer to [HoldTime-Period] | ||||
| -> Run Peer-RPF Forwarding algorithm (if caching, consider | ||||
| SA-Hold-Down Timer and SA-State Timer) | ||||
| -> Set KeepAlive timer to [KeepAlive-Period] for those peers the | ||||
| Source-Active TLV is forwarded to | ||||
| -> Send information to PIM-SM | ||||
| -> If caching, store information | ||||
| *) Source-Active Request TLV received: | ||||
| -> Set Hold Timer to [HoldTime-Period] | ||||
| -> If SA-Requests are accepted, send Source-Active Response TLV | ||||
| and set KeepAlive timer to [KeepAlive-Period] | ||||
| *) Source-Active Response TLV received: | ||||
| -> Set Hold Timer to [HoldTime-Period] | ||||
| -> If a corresponding SA-Request were previously sent, send | ||||
| information to PIM-SM. If not, an error has occured (event 11 | ||||
| above) | ||||
| -> If caching, store information | ||||
| 15.4. Peer-independent Events | ||||
| There are also a number of events that affect more than one peering | ||||
| session, but still require actions to be performed on a per-peer | ||||
| basis. If the MSDP speaker does not cache SA messages, ignore all | ||||
| events and actions pertaining to caching. | ||||
| *) SA-Advertisement-Timer expired: | ||||
| -> Start periodic transmission of Source-Active TLV(s) | ||||
| -> Set KeepAlive timer to [KeepAlive-Period] each time a | ||||
| Source-Active TLV is sent | ||||
| *) MSDP learns of a new active internal source (e.g. PIM-SM | ||||
| register received for a new source): | ||||
| -> Send Source-Active TLV | ||||
| -> Set KeepAlive timer to [KeepAlive-Period] | ||||
| *) Source-Active Request triggered (event not specified here): | ||||
| -> Send Source-Active Request TLV | ||||
| -> Set KeepAlive timer to [KeepAlive-Period] | ||||
| *) SA-State-Timer expired (one timer per cache entry): | ||||
| -> Implementation specific, typically mark the cache entry for | ||||
| deletion | ||||
| 16. Packet Formats | 16. Packet Formats | |||
| MSDP messages will be encoded in TLV format. If an implementation | MSDP messages will be encoded in TLV format. If an implementation | |||
| receives a TLV that has length that is longer than expected, the TLV | receives a TLV that has length that is longer than expected, the TLV | |||
| SHOULD be accepted. Any additional data SHOULD be ignored. | SHOULD be accepted. Any additional data SHOULD be ignored. | |||
| 16.1. MSDP TLV format: | 16.1. MSDP TLV format: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| skipping to change at page 16, line 29 ¶ | skipping to change at page 18, line 8 ¶ | |||
| IPv4 Source-Active Response TLV is type 3. | IPv4 Source-Active Response TLV is type 3. | |||
| Length x | Length x | |||
| Is the length of the control information in the message. x is 8 | Is the length of the control information in the message. x is 8 | |||
| octets (for the first two 32-bit quantities) plus 12 times Entry | octets (for the first two 32-bit quantities) plus 12 times Entry | |||
| Count octets. | Count octets. | |||
| 16.2.4. KeepAlive TLV | 16.2.4. KeepAlive TLV | |||
| A KeepAlive TLV is sent to an MSDP peer if and only if there were no | A KeepAlive TLV is sent to an MSDP peer if and only if there were no | |||
| MSDP messages sent to the peer after a period of time. This message | MSDP messages sent to the peer within [KeepAlive-Period] seconds. | |||
| is necessary for the active connect side of the MSDP connection. The | This message is necessary to keep the MSDP connection alive. | |||
| passive connect side of the connection knows that the connection will | ||||
| be reestablished when a TCP SYN packet is sent from the active | ||||
| connect side. However, the active connect side will not know when the | ||||
| passive connect side goes down. Therefore, the KeepAlive timeout will | ||||
| be used to reset the TCP connection. | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | 4 | 3 | | | 4 | 3 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| The length of the message is 3 octets which encompasses the one octet | The length of the message is 3 octets which encompasses the one octet | |||
| Type field and the two octet Length field. | Type field and the two octet Length field. | |||
| skipping to change at page 26, line 7 ¶ | skipping to change at page 28, line 7 ¶ | |||
| network, as routing using GRE follows the same routing that IPv4 uses | network, as routing using GRE follows the same routing that IPv4 uses | |||
| natively. Route filtering will remain unchanged. However packet | natively. Route filtering will remain unchanged. However packet | |||
| filtering at a firewall requires either that a firewall look inside | filtering at a firewall requires either that a firewall look inside | |||
| the GRE packet or that the filtering is done on the GRE tunnel | the GRE packet or that the filtering is done on the GRE tunnel | |||
| endpoints. In those environments in which this is considered to be a | endpoints. In those environments in which this is considered to be a | |||
| security issue it may be desirable to terminate the tunnel at the | security issue it may be desirable to terminate the tunnel at the | |||
| firewall. | firewall. | |||
| 21. Acknowledgments | 21. Acknowledgments | |||
| The editor would like to thank the original authors, Dino Farinacci, | The editors would like to thank the original authors, Dino Farinacci, | |||
| Yakov Rehkter, Peter Lothberg, Hank Kilmer, and Jermey Hall for their | Yakov Rehkter, Peter Lothberg, Hank Kilmer, and Jermey Hall for their | |||
| orginal contribution to the MSDP specification. In addition, Bill | orginal contribution to the MSDP specification. In addition, Bill | |||
| Fenner, Bill Nickless, John Meylor, Liming Wei, Manoj Leelanivas, | Nickless, John Meylor, Liming Wei, Manoj Leelanivas, Mark Turner, | |||
| Mark Turner, John Zwiebel, Cristina Radulescu-Banu, Brian Edwards and | John Zwiebel, Cristina Radulescu-Banu, Brian Edwards, Selina | |||
| IJsbrand Wijnands provided useful and productive design feedback and | Priestley and IJsbrand Wijnands provided useful and productive design | |||
| comments. In addition to many other contributions, Tom Pusateri | feedback and comments. In addition to many other contributions, Tom | |||
| Pusateri, Kristofer.Warell, Henning Eriksson, and Thomas Eriksson | ||||
| helped to clarify the connection state machine, Dave Thaler helped to | helped to clarify the connection state machine, Dave Thaler helped to | |||
| clarify the Notification message types. Ravi Shekhar helped clarify | clarify the Notification message types. Ravi Shekhar helped clarify | |||
| the semantics of mesh-groups, and countless others helped to clarify | the semantics of mesh-groups, and countless others helped to clarify | |||
| the Peer-RPF rules. | the Peer-RPF rules. | |||
| 22. Editors' Address: | 22. Editors' Address: | |||
| David Meyer | David Meyer | |||
| Cisco Systems, Inc. | Cisco Systems, Inc. | |||
| 170 Tasman Drive | 170 Tasman Drive | |||
| End of changes. 16 change blocks. | ||||
| 83 lines changed or deleted | 172 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||