RFC 1307

Dynamically Switched Link Control Protocol

๐Ÿ“… published March 1992, from ietf

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