RFC 1307
Dynamically Switched Link Control Protocol
RFC 1307: Dynamically Switched Link Control Protocol ๐ (Part 1 of 3)
okay bestie, this one is from March 1992 ๐ธ and it was written by J. Young and A. Nicholson over at Cray Research, Inc. ๐ It's Experimental, so it's giving "we're still cooking" energy and not a finished standard ๐งช. The title block doesn't list anything it obsoletes or updates, so it's a clean slate โจ
Status of This Memo ๐
this memo is an Experimental Protocol for the Internet community ๐งช they really want your feedback and ideas for making it better!! ๐ For where it stands in the standardization process, check the current edition of the "IAB Official Protocol Standards" ๐ and yes, distribution is totally unlimited ๐
Abstract ๐ฆ
okay so this is an experimental protocol that the project team at Cray Research, Inc. built while working on circuit-switched T3 services ๐ It's used to control network connections that sit outside a host but that the host still knows about ๐ซถ They wrote it up so that other people doing research can use it too ๐
while they were working with circuit-switched T3 networks, the devs at Cray had an idea ๐ก the host would generate control messages for a network switch. That whole story is in RFC 1306, "Experiences Supporting By-Request Circuit-Switched T3 Networks" ๐ To keep things simple, they decided the messy inconsistencies of switch control should be hidden from the host making the control messages ๐ So they defined and implemented a protocol to do exactly that โจ This RFC documents the Dynamically Switched Link Control Protocol (DSLCP), which a host uses to create and control downstream network links ๐ฅ
1.0. Introduction ๐ง
the Dynamically Switched Link Control Protocol (DSLCP) lets a host that knows about a special downstream network link send messages to control that link's status ๐
this document explains what DSLCP does to control external network connections ๐ธ
1.1. Motivation ๐
circuit switched networks are becoming available to the Internet community ๐ You get them by requesting a connection through a switch. Normally these links are disconnected, and they're so expensive that leaving them connected all the time is very costly ๐ธ
internet users and hosts want to send data over circuit switched networks, but they only want to connect the links when a transport connection is about to be established โจ Packet routers could help spot when a connection needs switching on and off, but honestly, only the transport provider can positively identify where a transport session begins and ends ๐ซถ So there has to be a mechanism to activate and deactivate the link at the start and end of a transport session ๐
DSLCP assumes the transport provider knows about a downstream link that must be set up before any data transfer can happen ๐ The details of link setup can vary by link type (circuit-switched or otherwise), by specific hardware, or by administrative differences ๐ญ DSLCP hides all of that from the transport provider by offering a simple request/release model of link preparation ๐ฆ The model assumes some entity is in control of the link, and that entity handles the details of connection preparation while responding to the transport provider's DSLCP commands. This entity is called the link controller ๐
DSLCP lets internet hosts dynamically change the fabric of the internet ๐ธ๏ธ They do it by sending messages through the internet ahead of time, before the data that will travel across the newly created links ๐
1.2. Scope ๐
DSLCP is meant to be an interface between transport providers and arbitrary network links that need creating, controlling, setting up, or conditioning before data communications can happen ๐
1.3. Interfaces ๐ซง
there are no specific user level interfaces to DSLCP, though they aren't ruled out ๐คทโโ๏ธ Link control is a function of the network layer, and it gets kicked off by requests from the transport provider ๐ซ
a DSLCP transaction is a transport provider communicating with a link controller for the duration of a transport session ๐ธ A network path between the host providing transport services and the link controller must exist before the DSLCP transaction starts ๐
either party in a DSLCP transaction can asynchronously generate messages ๐
1.4. Operation ๐
the whole point of DSLCP is letting a transport provider request that a downstream network link be set up so data can move through it ๐ DSLCP messages are assumed to be communicated between the transport provider and the link controller through a transport service, like UDP or TCP, or through a network service like IP ๐
DSLCP has messages for link setup and teardown ๐งธ All the details of link management are left to the link controller ๐ซถ The transport provider only cares about one thing: whether the link is ready to carry data โจ
1.5. Transmission ๐ฎ
DSLCP messages travel through the network in datagrams, using either IP or UDP ๐ DSLCP is designed so it does not require a reliable transport protocol ๐ฆ
2.0. DSLCP Architecture ๐๏ธ
DSLCP lives in a host environment ๐ Normally, transport users on the host ask a transport provider to carry data to other hosts ๐ฌ Some of those requests might need a downstream network link to be prepared first ๐ The transport provider knows about these special links and asks DSLCP to get the link ready to carry data ๐ All of this happens transparently to the transport user ๐ซถ
when a transport user asks for transport services, the transport provider will normally try to establish a connection โจ If the transport provider finds out the connection needs special link control, it will call on DSLCP to send a link setup message to the link controller ๐จ The transport provider does not try to use the connection until DSLCP tells it the link is set up or that the setup attempt failed ๐ญ If setup failed, the transport provider is free to look for another way to create a connection ๐
once the transport user is done using the services, the transport provider will call DSLCP to release the link ๐ After that, the transport provider may now assume the link is no longer available ๐
overall, DSLCP keeps track of the status of link control transactions and hides it from the transport provider ๐ That way, the transport provider doesn't have to juggle multiple DSLCP transactions ๐คนโโ๏ธ For example, say the transport provider asks for a link to be set up for a new transport user while another transport user already has the link active ๐ญ DSLCP may tell the transport provider the link is ready right away, as long as the link can support multiple transport connections โก
3.0. Functional Specification ๐
this document specifies both a message format and a state machine for DSLCP protocol transactions ๐ง
3.1. Control Message Format ๐งฉ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Total length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Function | Event Status |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Endpoint 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Endpoint 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Body |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Identifier: 16 bits ๐
the identifier is a value the DSLCP assigns to uniquely identify link setup transactions ๐ It's meant to be used with the endpoint addresses so a link controller can identify a transaction ๐
Total length: 16 bits ๐
this is the total length, in octets, of this DSLCP control message, header included ๐
Function: 16 bits ๐ฌ
this is the operation being processed or responded to ๐ซ
the functions currently defined are:
Bring up value 0
Bring down value 1
Event Status: 16 bits ๐ฆ
this is the state of the controlled link, relative to the last function request ๐
the possible event states are:
Setup request succeeded value 2
Setup request failed value 3
Teardown request succeeded value 4
Teardown request failed value 5
Asynchronous network down value 7
Endpoint addresses: 32 bits each ๐
these are the internet addresses of the two communicating parties the link is being prepared for ๐
Message body: arbitrary length up to 65499 octets ๐ฌ
this is an ASCII string that's meaningful to the link controller ๐ซถ When the requesting host is configured, the system administrator sets the control strings for each network link that the requesting host may access ๐งโ๐ปโจ
3.2 State Machine โจ
Okay bestie, so the transport provider only knows about 2 possible states for the controlled link: up or down ๐ . On top of that, transport users can request or release transport services from the transport provider whenever they want ๐ซถ. So DSLCP needs a state machine running between the transport provider and the controlled link. It's giving "hide the messy stuff," because the state machine keeps all the link control transactions away from the transport provider ๐ง. This state machine has 6 possible states:
- Down: There's no active transport connection, and the controlled link isn't set up ๐ธ.
- Coming Up: A transport user asked for a connection, and the transport provider sent a setup request to DSLCP. DSLCP has sent a setup request to the link controller and is waiting for a response โณ.
- Up: At least one transport connection is active, and the controlled link is set up โจ.
- Going Down: Every transport connection has been terminated, and the transport provider has sent an equivalent number of up requests and down requests to DSLCP. DSLCP has sent a teardown request to the link controller and is waiting for a response ๐ฅ.
- Bring Down: While DSLCP is in the Coming Up state, the transport provider asked for link teardown. As soon as a response comes back from the link controller, DSLCP will send a teardown request if the link setup was successful ๐.
- Bring Up: While in the Going Down state, the transport provider asked for connection setup. As soon as a response comes back from the link controller, DSLCP will send a setup request ๐ฆ.
DSLCP state diagram:
------- +----------------+
Transport | Down |<---------\
Connect ---->+----------------+ \
Request / ^ ^ \
------- Setup | | \
Send Failed | | Teardown \ Response Timeout
Setup /------ | | Success \ ---------------
/ / | | -------- |
| | | | |
| | | | |
| | Teardown Response | | |
| | Success Timeout | | |
| | ----------------- | | +----------+ |
| | Send---------|--|-----| Bring Up |--|----\
| | Setup | | +----------+ | | Transport
| | / | | ^ | | Teardown
| | / | | Transport | | Request
| | / | | Connect| | | ---------
| | / Setup | Request| | |
| | | Failed | -------| | |
v | v ------ | | | v
+--------------+ | | +-------------+
| Coming Up |----------+----|--|--Response--->| Going Down |
+--------------+ ^ | | Timeout +-------------+
| ^ | | | | -------- ^ ^
| | Transport | | | Send | |
| Transport Teardown | | | Teardown | |
| Connect Request | | | / |
| Request ------- | | | / |
| ------- v | | | / /
| \ +------------+ - | | / /
| -| Bring Down | ------ | / /
\ +------------+ --------|--Setup----- /
\ | Success /
\ | ------- /
\ Setup Network | Send / Transport
\ Success Is Down | Teardown / Teardown
\ ------- ------- | / Request
\ | / --------
\ | / Send
\ +---------------+ / Teardown
\----------->| Up |---
+---------------+
Events and State Transitions
DSLCP handles 3 types of events ๐:
- A link control request from the transport provider
- A DSLCP message from the link controller
- DSLCP message timeout
The transport provider makes link setup and teardown requests to DSLCP whenever transport users request or release services that need link control operations ๐. The transport provider SHOULD NOT keep track of a particular link's status, because that's DSLCP's job ๐ซง. The transport provider MAY be unaware of redirection or other processing of link setup requests that DSLCP does, so that's best left to DSLCP ๐ท. DSLCP will tell the transport provider whether a particular setup request worked or failed, and transport providers MAY assume teardown requests worked (DSLCP will ALWAYS send back a success response to a teardown request, no cap) ๐.
DSLCP runs link control transactions with link controllers ๐งโโ๏ธ. That includes accepting messages from link controllers that answer requests, plus unexpected messages from the link controller. Unexpected messages MAY include duplicate responses to duplicate requests that got sent because of timeouts ๐ญ.
Links and link controllers can be unavailable, so DSLCP SHOULD NOT wait forever for responses from link controllers it has messaged ๐. DSLCP doesn't need a reliable transport protocol to carry its messages, so DSLCP MUST have a timeout and retransmission mechanism ๐ก๏ธ. We used DSLCP in a local network with switch controllers that turn things around quickly (about 1 second), so we use a 5 second timeout with a 3 retransmit limit โฑ๏ธ. Those numbers would need adjusting for different networks and link controller setups, and a self-adapting algorithm would be the most iconic move for a general solution ๐.
The specific events DSLCP cares about are:
- Transport provider link setup request
- Transport provider link teardown request
- Link setup request failed
- Link setup request succeeded
- Link teardown request succeeded
- Link teardown request failed
- Network link is down
- Timeout waiting for DSLCP response from link controller
Here's the processing DSLCP does for each event in each state ๐:
Transport provider link setup request
- Down
- Send setup request to link controller.
- Enter Coming Up state.
- Notify transport provider to wait until link is up.
- Coming Up and Bring Up
- Notify transport provider to wait until link is up.
- Up
- Notify transport provider that link is up.
- Bring Down
- Enter Coming Up state.
- Notify transport provider to wait until link is up.
- Going Down
- Enter Bring Up state.
- Notify transport provider to wait until link is up.
Discussion:
If the controlled link can't support multiple transport connections, then DSLCP MUST return appropriate errors when it detects multiple transport setup requests for that link ๐ซ.
Transport provider link teardown request.
- Down, Bring Down, and Going Down
- Notify transport provider that link is down.
- Coming Up
- Enter Bring Down state.
- Notify transport provider that link is down.
- Bring Down
- Notify transport provider that link is down.
- Up
- Send teardown request.
- Enter Going Down state.
- Notify transport provider that link is down.
Link setup request failed
- Down, Going Down, and Bring Up
- Unexpected message, possibly due to duplicate requests. Ignore it ๐.
- Up
- Unexpected message. The link controller may be refusing multiple setup requests that were sent because of a timeout. Ignore it.
- Coming Up and Bring Down
- Enter Down state.
Link setup request succeeded
- Down
- Unexpected message, possibly due to duplicate requests and reordering of request packets by the network.
- Send teardown request.
- Going Down, Bring Up, and Up
- Unexpected message, possibly due to duplicate requests. Ignore it.
- Coming Up
- Enter Up state.
- Notify transport provider(s) waiting for the link that it is available ๐.
- Bring Down
- Send teardown request.
- Enter Going Down state.
Link teardown request succeeded
- Down, Coming Up, and Bring Down
- Unexpected message, possibly due to duplicate requests. Ignore it.
- Up
- Unexpected message, possibly due to duplicate requests and reordering of request packets by the network.
- Send teardown request.
- Enter Going Down state.
- Notify transport providers that the link has gone down.
- Bring Up
- Send setup request.
- Enter Coming Up state.
- Going Down
- Enter Down state.
Discussion:
If a teardown request succeeded message shows up while DSLCP is in the Up state, then some error has happened. The conservative approach is to bring the connection down and resynchronize ๐งน. However, it MAY be satisfactory to ignore the message without ill effect ๐คทโโ๏ธ.
Link teardown request failed
- Down, Coming Up, Bring Down, Bring Up, Going Down, and Up
- DSLCP sent a teardown request message for an invalid transaction. The link controller has no identifier/endpoints transaction record for the request.
- Continue as if the request had succeeded ๐ .
Network link is down
- Down
- Ignore message.
- Bring Down and Going Down
- Enter Down state.
- Coming Up, Bring Up, and Up
- Enter Down state.
- Notify transport provider that link is down.
Timeout waiting for DSLCP response from controller
- Down and Up
- DSLCP protocol error - fix bug, don't set timer when there are no outstanding requests ๐.
- Coming Up and Bring Down
- Send teardown request.
- Enter Going Down state.
- Going Down
- Enter Down state.
- Bring Up
- Send setup request.
- Enter Coming Up state.
References ๐
[1] Nicholson, et. al., "High Speed Networking at Cray Research", Computer Communications Review, January, 1991.
[2] Nicholson, A., and J. Young, "Experiences Supporting By-Request Circuit-Switched T3 Networks", RFC 1306, Cray Research, Inc., March 1992.
Security Considerations ๐
okay so the security part is short and honest ๐ this memo does not discuss security issues at all. no cap, that's the whole section. ๐
Authors' Addresses ๐
these are the lovely people who wrote it, with their contact info exactly as listed ๐ซถ
Jeff Young
Cray Research, Inc.
655F Lone Oak Drive
Eagan, MN 55123
Phone: (612) 452-6650
EMail: jsy@cray.com
Andy Nicholson
Cray Research, Inc.
655F Lone Oak Drive
Eagan, MN 55123
Phone: (612) 452-6650
EMail: droid@cray.com
and that's the whole doc, bestie! โจ๐ฆ
๐ฆ where this page comes from
- ietf: rfc1307 1992-03
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms