Skip to main content

Diameter Group Signaling
RFC 9390

Yes

Robert Wilton

No Objection

(Alissa Cooper)
(Alvaro Retana)
(Deborah Brungard)
(Magnus Westerlund)
(Martin Vigoureux)

Note: This ballot was opened for revision 13 and is now closed.

Robert Wilton
Yes
Erik Kline
No Objection
Comment (2021-01-30 for -13) Sent
[[ nits ]]

[ section 10 ]

* s/Session-group-Control-Vector/Session-Group-Control-Vector/
Martin Duke
No Objection
Comment (2021-01-28 for -13) Sent
Sec 4.2.3 

"The server responds with a  service-specific auth response and includes one or multiple Session- Group-Info AVP with the SESSION_GROUP_ALLOCATION_ACTION flag set and
   the Session-Group-Id AVP identifying the session group, to which the  identified session is to be assigned.  With the same response  message, the server may send one or multiple Session-Group-Info AVPs with the SESSION_GROUP_ALLOCATION_ACTION flag cleared and the Session-Group-Id AVP identifying the session groups from which the
   identified session is to be removed."

s/may/MAY, to match similar text in 4.2.2. Much as in that section, it is a little subtle that the state can be totally inferred by the first requirement, and the second MAY requirement is purely advisory.
Murray Kucherawy
No Objection
Comment (2021-02-01 for -13) Sent
I agree with Barry's editorial suggestions.

What does the "*)" in the table in Section 3.3 mean?

From Section 10:

   [...]  if the Diameter client or server is
   compromised, an attacker could launch DoS attacks by terminating a
   large number of sessions with a limited set of commands using the
   session group management concept.

Is it worth mentioning that an attacker could also mess with the set of sessions associated with a group, possibly causing disruptions other than bulk session terminations?
Roman Danyliw
No Objection
Comment (2021-02-03 for -13) Sent
Thanks to Catherine Meadows for the SECDIR review.

** Section 3.3.  I had trouble reconciling the generic design principles espoused here with the more detailed specification of the protocol documented in Section 4.*.

The text here says:

This specification follows the most flexible model where both, a
   Diameter client and a Diameter server can create a new group and
   assign a new identifier to that session group.

And the table in this section says that the client could assign itself to a server owned session group.

Assign a Session to a non-owned Session Group   |    X   |    X   |

However, in Section 4.2.1

  If the Diameter server receives a command request from a Diameter
   client and the command includes at least one Session-Group-Info AVP
   having the SESSION_GROUP_ALLOCATION_ACTION flag in the Session-Group-
   Control-Vector AVP set, the server can accept or reject the request
   for group assignment.

It seems to me that this text in Section 4.2.1 is suggesting that the client could ask to be put into a group but the server has the ability reject it, which seems like an implicit permission model.

** Section 7.  In the table in this section the Session-Group-Id is of type OctetString, but in Section 7.3 it is UTF8String.

** Section 10.  Given the flexible permission model suggested in Section 3.3, is cautionary guidance needed to say that specific applications using this capability need to consider the decisions they make based on group membership?
Warren Kumari
No Objection
Comment (2021-02-02 for -13) Not sent
Question: 
Are there any implementations of this? A section/appendix documenting the improvements would be nice if so (decrease in CPU / how quickly N sessions can be changed, etc.)


Comment: 
I also found some of this to be quite heavy reading, but I'm assuming that the readers are likely to be Diameter implementers who are already involved / willing to put in the work.


Nit:
"to the appended Group-Response-Action AVP ." -- extra space before period. Yes, 'tis a nit, but it would bug me if I didn't mention it...
Éric Vyncke
No Objection
Comment (2021-02-02 for -13) Sent
Thank you for the work put into this document. Like Barry and other ADs, I found this document difficult to read: long and complex sentences do not help the reader (but I am not a native English speaker). Therefore, I trust the responsible AD for the correctness of all the details in the specification. E.g., FSM or time line diagrams would have been helpful.

Please find below some non-blocking COMMENT points (but replies would be appreciated), and some nits.

I hope that this helps to improve the document,

Regards,

-éric

== DISCUSS ==


== COMMENTS ==

Any reason why the authors affiliation is not shown ?

The shepherd write-up is dated back in 2018... Is it still applicable ?

-- Section 7.2 --
About the flag bits, I wonder why the values are not 0x01 and 0x02 rather than 0x01 and 0x10. Isn't this a waste of bits ? Should the IANA sub-registry for those flags be mentioned?
Alissa Cooper Former IESG member
No Objection
No Objection (for -13) Not sent

                            
Alvaro Retana Former IESG member
No Objection
No Objection (for -13) Not sent

                            
Barry Leiba Former IESG member
No Objection
No Objection (2021-01-31 for -13) Sent
I have to say that I found this to be challenging to read: much of it is very dense, with paragraphs giving sometimes-subtly-different conditions, and I would be reading it thinking, “Does this paragraph apply to my situation?  I don’t think so, but what about the next one?  Wait, maybe it was the other one after all.”  I just have to assume that someon actually implementing Diameter would have an easier time following it.

I have some editorial comments that won’t help with that aspect, but that I hope will help with clarity in general:

— Section 3.1 —

   A session group, which has sessions assigned, can be deleted, e.g.,
   due to a change in multiple users' subscription profile so that the
   group's assigned sessions do not share certain characteristics

It appears that “has sessions assigned” is restrictive (it’s a required description, not just extra information).  If so, it should say, “A session group that has sessions assigned can be deleted, e.g., due to...” without the internal commas.

Another way to put it might be, “A session group can be deleted even if it has sessions assigned, e.g., due to...”

— Section 3.3 —

   This specification follows the most flexible model where both, a
   Diameter client and a Diameter server can create a new group and

Nit: no comma here

   Either the client and the server
   can assign a session to a group.

Nit: “Either the client or the server can”, or “Both the client and the server can”.

   Details about
   enforcing a more constraint permission model

I think the word you want is “constrained”.

— Section 4.2 —

   Diameter AAA
   applications typically assign client and server roles to the Diameter
   nodes, which are referred to as relevant Diameter nodes to utilize
   session grouping and issue group commands.

I’m having trouble parsing this sentence and determining what you’re trying to tell me.  Can you please rephrase or repunctuate it to make it clearer?  What are referred to as “relevant Diameter nodes”?  What goes with “to utilize session grouping”?

   Diameter nodes, which are group-aware, MUST store and maintain an
   entry about the group assignment together with a session's state.

Similar to earlier: is “are group aware” meant to be restrictive (there are Diameter nodes that are group aware and those that are not, and you’re talking about the former), or non-restrictive (all Diameter nodes are group aware, and you’re just pointing that fact out).  It is currently written as non-restrictive, but I think you mean it to be restrictive.  If that is correct, remove both commas and change “which” to “that”.

   A Diameter node MUST also keep a record about sessions, which
   have been assigned to a session group by itself.

The comma shouldn’t be there, and “which” should be “that”.  But it’s a bit awkward anyway: may I suggest rephrasing in active voice as, “Each Diameter node MUST also keep a record about sessions that it has assigned to a session group.”

— Section 4.2.1 —

   If the
   response from the server indicates success in the result code but
   solely the assignment of the session to a session group has been
   rejected by the server, the client treats the session as single
   session without group assignment.

What does “solely” mean in this sentence?

   A Diameter client, which sent a request for session initiation

Please remove the comma (and change “which” to “that”).

— Section 4.2.2 —

   The session, which is to be removed from a group, is

Make it, “The session that is to be removed from the group is”

   When a Diameter client decides to remove a session from all session
   groups, to which the session has been previously assigned,

Remove the comma after “groups”.

   The session, which is to be removed from all groups, to
   which the session has been previously assigned, is identified in the
   Session-Id AVP of the command request.

Make it, “The session that is to be removed from all groups to which it had been previously assigned is identified in the Session-Id AVP of the command request.”

— Section 7.3 —

   The
   <DiameterIdentity> portion of the Session-Group-Id MUST identify the
   Diameter node, which owns the session group.

Please remove the comma and change “which” to “that”.
Benjamin Kaduk Former IESG member
No Objection
No Objection (2021-02-02 for -13) Sent
I agree with the other commenters that an editorial pass over the
document before it is sent to the RFC Editor is probably in order; I
only noted the more eggregious nits that have obvious fixes but skipped
the ones where I did not have a resolution ready at hand to suggest.
Barry's remarks about restrictive vs non-restrictive clauses are
particularly important.

I also have several high-level issues that don't quite rise to
discuss-level but seem worth getting resolution on; they mostly involve
edge cases where the current text either leaves me unclear on what is
supposed to happen or seems to present conflicting guidance:

- what's the error handling in cases of partial success?
  * For operations adding/removing sessions to/from groups, it seems that
    the general principle is that the new changes introduced with any
    group-relevant CCF exchange are to be treated atomically: either all
    group additions/removals succeed or all fail (and when it fails the
    session is forced into a single-session fallback mode).  But for
    server-initiated modifications this is enforced by "if the client
    can't do it, the client MUST tear down the affected session(s)", and
    I'm not sure if there's a case where the client can send a new
    request that includes some modifications and the server also tries
    to make some modifications in its response; such a scenario might in
    effect allow partial success and might also be hard to correctly
    interpret.
  * For operations acting on groups, we do allow partial success
    (DIAMETER_LIMITED_SUCCESS) and attempt to mandate fallback to
    single-session operation for affected sessions, but the specifics of
    how the Failed-AVP effectuates this are not clear to me (see my
    comment on Section 4.4.3).

- we require that group identifiers are globally unique, which can be
  done with the diameter-node namespace prefix.  But for the portion
  after that prefix, we seem to suggest reusing the construction from
  Section 8.8 of RFC 6733, which is just (in essence) a 64-bit global
  counter.  In the vein of draft-gont-numeric-ids-sec-considerations,
  that seems overly constrained, in that it reveals sequencing across
  group creation and rate of per-node group creation to the remote peer.
  It seems that a construction akin to a keyed hash of a counter would
  preserve the guaranteed uniqueness property but avoid leaking such
  information to the network.

- the permissions model is a bit unorthodox, with groups "owned" by
  their creator but the binding of a session to a group "owned" by the
  node that performed the binding.  It seems like there is some risk of
  deadlock situations or conflict, e.g., where a client has added a
  session to a group G but the server wants to remove the session from
  G, or where a session is part of a group but the owner of the group
  wants to delete the group.  For the latter case, my understanding is
  that group deletion "trumps" ownership of the session/group binding,
  such that deletion can proceed even while sessions are in the group,
  but I'm less sure what should happen in the former case (or others).

- Is it possible to have a group with no member sessions?  Section 3.3
  suggests that if the last session is removed the group should be
  deleted, but AFAICT this would still require the node performing the
  removal to unset SESSION_GROUP_STATUS_IND, and I didn't see a
  requirement to do that spelled out.  I do see how it is impossible to
  create a group directly in a state with no member sessions.

- Is there a requirement to always send the current state of group
  membership when acting on a session?  I could (perhaps naively)
  imagine a case where due to previous interactions a session belongs to
  groups G1, G2, and G3, but in some subsequent request the client only
  mentions G1.  Does the membership in G2 and G3 get implicitly retained
  in the absence of an explicit unset SESSION_GROUP_ALLOCATION_ACTION or
  are there some other constraints that make such a scenario impossible?

- Is there supposed to be a strong distinction between "including" an
  AVP and "appending" one?  I see that 6733 does make some fairly clear
  distinction between the terms, but it seems that (e.g.) in Section
  4.2.1 we use both phrasings to discuss Session-Group-Info.

Now for some section-by-section (mostly editorial or nit-level) notes.

Abstract, Introduction

   a million concurrent Diameter sessions.  Recent use cases have
   revealed the need for Diameter nodes to apply the same operation to a
   large group of Diameter sessions concurrently.  The Diameter base

I note that the -00 is from 2012; are these use cases still "recent"?

Section 3

As an editorial note, the way the current text jumps in to say that
sessions can be assigned to groups leaves the reader uncertain whether
this is describing preexisting functionality or the new mechanisms added
by this document.  A top-level intro paragraph for Section 3 that says
roughly "to accomodate bulk operations on Diameter sessions, the concept
of session groups is introduced; once sessions are added to a group, a
command acting on the group will affect all the member sessions" might
help.

Section 3.3

If I understand correctly, the lines in the table for "remove a session
from an owned Session Group"/"remove a session from a non-owned Session
Group" mean only that this operation can be done sometimes, not that it
can always be done (per the lines about "created the assignment".  Would
it be helpful to indicate this, perhaps by using a different symbol for
those lines and adding a footnote?

Section 4

While I understand the desire to keep the document structure as it is,
with the actual AVPs specified in Section 7, it would have been very
helpful to have a toplevel introductory paragraph here that mentions or
references that there is a containing Session-Group-Info grouped AVP
that contains the Session-Group-Control-Vector with information about
the action and group, and zero or one(?) Session-Group-Id AVP to
identify the group when a specific group is being identified.  This
would also allow clarifying whether the Session-Group-Id AVP is
currently only defined to appear within the Session-Group-Info.

Section 4.1.1

                                           Such applications provide
   intrinsic discovery for the support of session grouping capability
   using the assigned Application Id advertised during the capability
   exchange phase two Diameter peers establish a transport connection
   (see Section 5.3 of [RFC6733]).

nit: I think there's a missing word here, perhaps "where" after "phase"?

Section 4.2.1

   The client may also indicate in the request that the server is
   responsible for the assignment of the session in one or multiple
   sessions owned by the server.  [...]

nit(?): is this supposed to be "assignment of the session into one or
multiple session *groups* owned by the server"?  I'm having a hard time
understanding it as written.

   If the assignment of the session to one or some of the multiple
   identified session groups fails, the session group assignment is
   treated as failure.  In such case the session is treated as single
   session without assignment to any session group by the Diameter
   nodes.  The server sends the response to the client and MAY include
   those Session-Group-Info AVPs for which the group assignment failed.
   The SESSION_GROUP_ALLOCATION_ACTION flag of included Session-Group-
   Info AVPs MUST be cleared.

I guess I understand the part where the entire set of group-assignment
operations has to succeed or fail as an atomic unit, but this text
perhaps implies some semantics that the server is supposed to only
explicitly include in the response the subset of group assignments that
were unable to be processed, omitting the ones that could have been
processed (but were not processed since a failure on one means that none
of the operations get applied).  If that's the intent, I'd suggest being
a bit more explicit about what is and isn't sent.

   A Diameter client, which sent a request for session initiation to a
   Diameter server and appended a single or multiple Session-Group-Id
   AVPs but cannot find any Session-Group-Info AVP in the associated

(editorial) the phrase "cannot find" makes me wonder how hard it's
expected to be looking; more definitive statements about "not present"
seem more typical for RFC style.

Section 4.2.3

   When a Diameter server enforces an update to the assigned groups mid-

nit: this seems to be the only time we use the word "enforce" in this
sense in the document; previous discussion seems to just use "decides to
make an update" or similar.

   answer.  The client subsequently sends a service-specific re-
   authorization request containing one or multiple Session-Group-Info
   AVPs with the SESSION_GROUP_ALLOCATION_ACTION flag set and the
   Session-Group-Id AVP identifying the session group to which the
   session had been previously assigned.  [...]

nit: I think this has to be "group or groups" to be consistent with the
rest of the doc.

Section 4.4.1

   Either Diameter node (client or server) can request the recipient of
   a request to process an associated command for all sessions assigned
   to one or multiple groups by identifying these groups in the request.
   The sender of the request appends for each group, to which the
   command applies, a Session-Group-Info AVP including the Session-
   Group-Id AVP to identify the associated session group.  Both, the
   SESSION_GROUP_ALLOCATION_ACTION flag as well as the
   SESSION_GROUP_STATUS_IND flag MUST be set.

What's the error handling if one or both listed flags are not set --
just ignore the request?

   Action AVP to ALL_GROUPS (1) or PER_GROUP (2).  If the answer can be
   sent before the complete process of the request for all the sessions
   or if the request timeout timer is high enough, the sender MAY set
   the Group-Response-Action AVP to ALL_GROUPS (1) or PER_GROUP (2).

(side note) just the phrase "high enough" doesn't give much of an
indication of what the criteria are and what numerical values might be
appropriate.  That said, it's not entirely clear how much guidance we
can really give in this situation.

Section 4.4.2

   If the received request identifies multiple groups in multiple
   appended Session-Group-Id AVPs, the receiver SHOULD process the
   associated command for each of these groups.  If a session has been
   assigned to more than one of the identified groups, the receiver MUST
   process the associated command only once per session.

Why is this only a SHOULD for each group -- what other behaviors could
the receiver do?

Section 4.4.3

   In the case of limited success, the sessions, for which the
   processing of the group command failed, MUST be identified using a
   Failed-AVP AVP as per Section 7.5 of [RFC6733].  [...]

My reading of the referenced part of RFC 6733 is that there is a single
Failed-AVP pointing to a single AVP that could not be processed
properly.  Is there such a single failed AVP in the case where
processing failed for multiple sessions in the group(s)?  It seems that
the "largest containing AVP" that includes all failed groups might be so
large so as to not be useful in indicating the problem.

Section 7.2

   SESSION_GROUP_STATUS_IND (0x00000010)

If there's a mnemonic for the "IND" part of "SESSION_GROUP_STATUS_IND",
that would be helpful to expand.

Section 9.2

The Specification Required policy includes review by Designated Experts;
is there any guidance we should provide to the DEs?

Appendix A.1

      Discon    GASA received                  Cleanup      Idle

Spot-checking against RFC 6733's state machine, the non-group ASA
received case only makes this transition when there was a previous ASR
that was successfully sent.  Is that am important distinction?  (Also,
as an editorial nit, RFC 6733 spells "Clean up" as two words.)
Deborah Brungard Former IESG member
No Objection
No Objection (for -13) Not sent

                            
Magnus Westerlund Former IESG member
No Objection
No Objection (for -13) Not sent

                            
Martin Vigoureux Former IESG member
No Objection
No Objection (for -13) Not sent