A Simple Control Protocol for MPLS SFLs
Internet-Draft draft-ietf-mpls-sfl-control-03
Stewart Bryant
University of Surrey
sb@stewartbryant.com
George Swallow
Southend Technical Center
swallow.ietf@gmail.com
Siva Sivabalan
Ciena Corporation
ssivabal@ciena.com
06 August 2022
MPLS Working Group
In RFC 8957 the concept of MPLS synonymos flow labels (SFL) was introduced. This document describes a simple control protocol that runs over an associated control header to request, withdraw, and extend the lifetime of such labels. It is not the only control protocol that might be used to support SFL, but it has the benefit of being able to be used without modifying of the existing MPLS control protocols. The existence of this design is not intended to restrict the ability to enhance an existing MPLS control protocol to add a similar capability.
A Querier MUST wait a configured time (suggested wait of 60 seconds) before re-attempting a Withdraw request. No more than three Withdraw requests SHOULD be made. These restrictions are to prevent overloading the control plane of the actioning router.
Introduction
In [RFC8957] the concept of MPLS synonymous flow labels (SFL) was introduced.
This document describes a simple control protocol, that runs over an associated control header to request, withdraw, and extend the lifetime of such labels. This protocol is designed for use in a well-managed MPLS network It is not the only control protocol that might be used to support SFL, but it has the benefit of being able to be used without modifying of the existing MPLS control prodocols. The existance of this design is not intended to restrict the ability to enhance an existing MPLS control protocol to add a similar capability.
Requirements Language
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 BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
SFL Control
This document uses the terminology standardized in [RFC6374] which it is assumed that the reader is familiar with.
This section describes the process by which the [RFC6374] Querier requests SFLs, the process by which the [RFC6374] Responder sends them to the Querier, and the process for managing the SFL lifetime. SFL Control Messages are carried over the Generalized Associated Channel (GAcH), and are identified by a new Associated Channel Header (ACH), allocated by this document. The SFL ACH is carried over a Pseudowire(PW) in place of the PW Control Word (CW), over an MPLS LSP using the GAL, or over some other mutually agreed path. Similarly the response may be returned over a PW, over a bidirectional LSP or over some other mutually agreed path. See Section 4.
SFL Control Message
The format of an SFL Control message, which follows the ACH, is as follows:
SFL 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Flags |  Control Code |        Message Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Session Identifier          | SFL Batch |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Lifetime (seconds)              |   Num-SFL     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 SFL 0                 |      LFlags           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                                                               .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 SFL n                 |      LFlags           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Forwarding Equivalence Class (FEC)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The values for the fields are as follows:

Version        Protocol version. Set to zero in this specification.

Flags          Message control flags.

Control Code   Code identifying the query or response type.

Message Length Total length of this message in bytes.

Session Identifier  Set arbitrarily by the querier and used as a
               message handle.

SFL Batch      (6 bits) Used where the SFLs for this Session
               Identifier are managed across multiple SFL Control
               Messages. A given set of SFLs MUST be retained
               in the same batch.

Lifetime       The lifetime in seconds of the SFLs in this message.
               In a Query message it is the requested lifetime.
               In a Response message it is the lifetime that the
               SFLs have been allocated for by the Responder.
               The Querier MUST NOT use an SFL after expiry of
               its lifetime, a Responder MUST make the SFL
               available for at least its lifetime.

Num-SFL        The number of SFLs in this SFL Batch.  This MUST be
               constant for the lifetime of the batch.

SFL n          The n'th SFL carried in this TLV.  This is an MPLS
               label which is a component of a label stack entry as
               defined in Section 2.1 of [RFC3032].  The position
               of a label within a batch is constant for the
               lifetime of the batch.  Enumeration starts at zero.

LFlags         The set of flags associated with the immediately
               preceding SFL.  See below.

FEC            The Forwarding Equivalence Class that the SFLs in
               this TLV correspond to.  This is encoded as per
               Section 3.4.1 of [RFC5036].

Flags: The format of the Flags field is shown below.

                       +-+-+-+-+
                       |R|0|0|0|
                       +-+-+-+-+

                SFL Control Message Flags.

The meanings of the flag bits are:

R: Query/Response indicator.  Set to 0 for a Query and set
   to 1 for a Response.

0: Set to zero by the Sender and ignored by the Receiver.

Control Code: Set as follows according to whether the message is a Query or a Response as identified by the R flag.
For a Query:

0x0: SFL Request. This indicates that the responder is requested
to allocate the set of SFLs marked with the R LFlag in this
message.

0x1: SFL Refresh. This indicates that the responder is requested
to refresh the set of SFLs marked with the V LFlag in this message.

0x2: SFL Withdraw. This indicates that the querier will no longer
use the set of SFLs marked with the V Lflag and the responder
may expire their lifetime.

For a Response:

Codes 0x0-0xF are reserved for non-error responses.

0x1: SFL Grant. This indicates that the responder allocated the
set of SFLs marked with the A LFlag in this Message.

0x2: SFL Refresh-Ack. This indicates that the responder has
refreshed the set of SFLs marked with the V LFlag in this message,
and the lifetime is now as indicated by the lifetime field.

0x3: SFL Withdraw-Ack. This indicates that the responder has
received the Withdraw message and will withdraw the SFLs

0x10: Unspecified Error.  Indicates that the operation
failed for an unspecified reason.

0x11: SFL-Unable. The Responder was unable to satisfy the SFL
Request.  The details of the failure can be determined by
comparing the Request and Grant messages.

Editors Note - We need to revisit the RFC6374 errors and the protocol to see if we need some more error codes.
The LFlags field is defined as follows:
LFlags Bit Definition

     0                   1
     0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+
    |0|1|2|3|        MBZ    |
    +-+-+-+-+-+-+-+-+-+-+-+-+

Where:

0 (Valid (V))  The Label value of the corresponding SFL is valid.
               In an SFL Request setting the V Lflag indicates a
               request for the specified label value.  Where an
               SFL has a valid flag clear in a request message
               this indicates that any SFL value is acceptable.

1 (Request (R))  Indicates to the Querier that this member of the
               SFL batch is requested.  Where a value is specified
               in the request, but the Responder is unable honour
               that request, no SFL is allocated and the
               corresponding A flag MUST be cleared.

2 (Allocated (A)  Indicates to the Querier that this SFL was
               allocated.

3 (Withdraw (W))  Indicates to the Responder that this SFL is to be
               withdrawn and to the Querier that the withdrawal has
               been carried out.

MBZ            MUST be sent as zero and ignored on receive.

A flag value of one is true/set and a flag value of zero is false/ clear. The use of these bits is described in more detail in the following sub-sections.
SFL Control Procedures
Request/Grant
To request a batch of SFLs the Querier constructs an SFL Control Request, encapsulates it in an SFL Control ACH and sends it to the Responder via an appropriate path. The Querier sets the Control Message Flag to Query and the Control Code to Request. The Querier chooses a session identifier as a handle for this transaction and as a way of binding this batch of SFLs to other operations that will use members of this SFL batch. Since members of the batch are treated as a group, the SFL Batch identifier is used to identify different SFL batches used in conjunction with the same session identifier.
The Querier sets the requested lifetime. This is the number of seconds from the time of the query to the time when the batch of SFLs will expire unless refreshed.
The Num-SFL field is set to the SFL batch size.
Each SFL is set as follows: if a specific value is requested (for example for continuity across system restarts) this is written into the SFL n field and the V LFlag set. Otherwise, and including spare SFLs where an allocation is not requested, the label value is set to zero and the V LFlag is cleared. For each SFL entry where an allocation is requested the R LFlag is set. All other LFlags are cleared.
The Forwarding Equivalence Class (FEC) is set to the FEC for which the SFLs are requested.
The Message Length is determined and filled in.
The Responder proceeds as follows:
The Responder sets the control Message Flag to Response and initially sets the Control Code to Grant.
For each SFL with an R flag set, the Responder determines whether it can honour the request. If it can honour the request, it sets the A Lflag, and if the SFL value in the query was zero it overwrites it with the allocated SFL label value. In all other cases it leaves the SFL value and LFlag unchanged.
The lifetime field is updated with the lifetime of the SFLs if this is different from the requested lifetime.
All other fields in the Query message are left unchanged and the message is sent back to the Querier using the signaled or previously agreed message path.
Where the offered lifetime is other than the requested lifetime the Querier may accept the proposed value, or withdraw the SFLs and attempt to negotiate a new set of SFLs with a different lifetime.
If the Responder is unable to allocate all of the requested SFLs it MUST respond with a response code of SFL-Unable. The Querier MUST determine whether the allocated SFLs were adequate for its purposes and MUST send a withdraw if there are not adequate. A Querier MUST NOT attempt to hoard labels in the hope that the residual labels needed may become available in the future.
A Querier MUST wait a configured time (suggested wait of 60 seconds) before re-attempting negotiation for a resource. Any failure to negotiate the required resources MUST be notified through the management interface of both Querier and Responder.
A Querier MUST NOT send an expired SFL to a Responder since to do so may invalidate another SFL operation.
Refresh
To request the lifetime refresh of a batch of SFLs the Querier constructs an SFL Refresh Request, encapsulates it in an SFL Control ACH and sends it to the Responder via an appropriate path. The Querier sets the Control Message Flag to Query and the Control Code to Refresh. The Querier uses the session identifier and the SFL Batch identifier that it used to request this SFL batch.
The Querier sets the requested lifetime. This is the number of seconds from the time of the query to the time when the batch of SFLs will expire unless refreshed.
The Querier sets the Num-SFL field to the SFL batch size.
The Querier sets each SFL as follows: the allocated SFL label value is written into the SFL n field and the V LFlag set. All other LFlags are cleared.
The Forwarding Equivalence Class (FEC) is set to the FEC for which the SFLs are requested.
The Message Length is determined and filled in.
The Responder proceeds as follows:
The Responder sets the control Message Flag to Response and sets the Control Code to Refresh-Ack.
The Responder sets the lifetime to the lifetime of the SFL.
All other fields in the Query message are left unchanged and the message is sent back to the Querier using the signaled or previously agreed message path.
Where the offered lifetime is other than the requested lifetime the Querier may accept the proposed value, or withdraw the SFLs and attempt to negotiate a new set of SFLs with a different lifetime.
A Querier MUST wait a configured time (suggested wait of 60 seconds) before re-attempting negotiation for a resource. Any failure to negotiate the required resources MUST be notified through the management interface of both Querier and Responder.
Withdraw
To request the withdrawal of some or all of a batch of SFLs the Querier constructs an SFL Withdraw Request, encapsulates it in an SFL Control ACH and sends it to the Responder via an appropriate path. The Querier sets the Control Message Flag to Query and the Control Code to Withdraw. It uses the session identifier and the SFL Batch identifier that it used to request this SFL batch.
The Querier sets the requested lifetime to zero.
The Querier sets the Num-SFL field to the SFL batch size.
Each SFL being withdrawn is set as follows: the allocated SFL label value is written into the SFL n field and the V and W LFlags set. All other LFlags are cleared.
The Forwarding Equivalence Class (FEC) is set to the FEC for which the SFLs are requested.
The Message Length field is determined and filled in.
The Responder proceeds as follows:
The Responder sets the control Message Flag to Response and sets the Control Code to Withdraw-Ack.
All other fields in the Query message are left unchanged and the message is sent back to the Querier using the signaled or previously agreed message path.
A Querier MUST wait a configured time (suggested wait of 60 seconds) before re-attempting a Withdraw request. No more than three Withdraw requests SHOULD be made. These restrictions are to prevent overloading the control plane of the actioning router.
Timer Accuracy
The lifetime of SFLs is expected to be sufficiently long that there are no significant constraints on timer accuracy. A node should be conservative in its assumptions concerning the lifetime of an SFL. A Querier MUST stop using a SFL significantly before the expiry of its lifetime and a Responder must maintain an SFL in active operation significantly beyond nominal expiry. A margin of the order of minutes is RECOMMENDED.
Return Path
Where the LSP (or other MPLS construct) is multi-point to point, or multi-point to multi- point the RFC6374 Address TLV MUST be included in Query packet, even if the response is requested in-band, since this is needed to provide the necessary return address for this request.
Privacy Considerations
The inclusion of originating and/or flow information in a packet provides more identity information and hence potentially degrades the privacy of the communication. Whilst the inclusion of the additional granularity does allow greater insight into the flow characteristics it does not specifically identify which node originated the packet other than by inspection of the network at the point of ingress, or inspection of the control protocol packets. This privacy threat may be mitigated by encrypting the control protocol packets, regularly changing the synonymous labels and by concurrently using a number of such labels.
Security Considerations
It is assumed that this protocol is run in a well-managed MPLS network with strict access controls preventing unwanted parties from generating MPLS packets. The control protocol described in this memo thus introduced no additional MPLS security vulnerabilities.
IANA Considerations
Allocation of MPLS Generalized Associated Channel (G-ACh) Type
As per the IANA considerations in [RFC5586], IANA is requested to allocate the following Channel Type in the "MPLS Generalized Associated Channel (G-ACh) Types" registry:

Value  Description                          TLV Follows Reference
------ ------------------------------------ ----------- ---------
0x0XXX SFL Control                              No          This

A value of 0x5A is suggested.
Creation of SFL Simple Control Code Registry
IANA is requested to created a new "SFL Simple Control Code" registry within the Generic Associated Channel (G-ACh) Parameters namespace. This registry is divided into two separate parts, one for Query Codes and the other for Response Codes, with formats and initial allocations as follows:

Query Codes

Code Description                         Reference
---- ----------------------------------- ---------
0x0  SFL Request                         This document
0x1  SFL Refresh                         This document
0x2  SFL Withdraw                        This document

Response Codes

Code Description                         Reference
---- ----------------------------------- ---------
0x0  Reserved                            This document
0x1  SFL Grant                           This document
0x2  SFL Refresh-Ack                     This document
0x3  SFL Withdraw-Ack                    This document
0x10 Unspecified Error                   This document
0x11 SFL-Unable

IANA should indicate that the values 0x0 - 0xF in the Response Code section are reserved for non-error response codes.
The range of the Code field is 0 - 255.
The allocation policy for this registry is IETF Review.
Acknowledgments
The authors thank Haomian Zheng for his review comments.
RFC Editor please remove this note which is used to force the following references to appear [RFC3032] [RFC5036]
References
Normative References
[RFC2119]

Key words for use in RFCs to Indicate Requirement Levels
S. Bradner
March 1997
BCP 14
RFC 2119
DOI 10.17487/RFC2119
[RFC3032]

MPLS Label Stack Encoding
E. Rosen
D. Tappan
G. Fedorkow
Y. Rekhter
D. Farinacci
T. Li
A. Conta
January 2001
RFC 3032
DOI 10.17487/RFC3032
[RFC5036]

LDP Specification
L. Andersson, Ed.
I. Minei, Ed.
B. Thomas, Ed.
October 2007
RFC 5036
DOI 10.17487/RFC5036
[RFC5586]

MPLS Generic Associated Channel
M. Bocci, Ed.
M. Vigoureux, Ed.
S. Bryant, Ed.
June 2009
RFC 5586
DOI 10.17487/RFC5586
[RFC6374]

Packet Loss and Delay Measurement for MPLS Networks
D. Frost
S. Bryant
September 2011
RFC 6374
DOI 10.17487/RFC6374
[RFC8174]

Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words
B. Leiba
May 2017
BCP 14
RFC 8174
DOI 10.17487/RFC8174
Informative References
[RFC8957]

Synonymous Flow Label Framework
S. Bryant
M. Chen
G. Swallow
S. Sivabalan
G. Mirsky
January 2021
RFC 8957
DOI 10.17487/RFC8957