Comments regarding draft-nishida-tsvwg-sctp-failover-03.txt
Michael Tüxen <Michael.Tuexen@lurchi.franken.de> Mon, 22 August 2011 19:03 UTC
Return-Path: <Michael.Tuexen@lurchi.franken.de>
X-Original-To: tsvwg@ietfa.amsl.com
Delivered-To: tsvwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 37E4721F87D9 for <tsvwg@ietfa.amsl.com>; Mon, 22 Aug 2011 12:03:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.699
X-Spam-Level:
X-Spam-Status: No, score=-1.699 tagged_above=-999 required=5 tests=[AWL=-0.600, BAYES_00=-2.599, J_CHICKENPOX_28=0.6, J_CHICKENPOX_48=0.6, MIME_8BIT_HEADER=0.3]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SIGV8ux2VFlw for <tsvwg@ietfa.amsl.com>; Mon, 22 Aug 2011 12:03:38 -0700 (PDT)
Received: from mail-n.franken.de (drew.ipv6.franken.de [IPv6:2001:638:a02:a001:20e:cff:fe4a:feaa]) by ietfa.amsl.com (Postfix) with ESMTP id D55D221F85FE for <tsvwg@ietf.org>; Mon, 22 Aug 2011 12:03:37 -0700 (PDT)
Received: from [192.168.1.103] (p5481B166.dip.t-dialin.net [84.129.177.102]) (Authenticated sender: macmic) by mail-n.franken.de (Postfix) with ESMTP id 9C1511C0C0BD8 for <tsvwg@ietf.org>; Mon, 22 Aug 2011 21:04:42 +0200 (CEST)
From: Michael Tüxen <Michael.Tuexen@lurchi.franken.de>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Subject: Comments regarding draft-nishida-tsvwg-sctp-failover-03.txt
Date: Mon, 22 Aug 2011 21:04:41 +0200
Message-Id: <D9D4D27D-0234-444C-801A-B4916F1D9A5A@lurchi.franken.de>
To: tsvwg list <tsvwg@ietf.org>
Mime-Version: 1.0 (Apple Message framework v1084)
X-Mailer: Apple Mail (2.1084)
X-BeenThere: tsvwg@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Transport Area Working Group <tsvwg.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/tsvwg>
List-Post: <mailto:tsvwg@ietf.org>
List-Help: <mailto:tsvwg-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 22 Aug 2011 19:03:39 -0000
Dear all,
as promised at the last TSVWG session I would like to bring up
some comments regarding draft-nishida-tsvwg-sctp-failover-03.txt.
Randy and myself implemented the ID during the last IETF, so
these comments are based on some implementation experience.
Editorial comments:
* I would suggest to have a section 4 which describes existing
stuff. Basically it should contain only what is now in section 4.1
and 4.2.
* In another section I would describe the the suggested method.
This would cover section 4.3, 5.1 and 5.2.
This would result in having the suggested method and its discussion
in one section.
The rules given in 4.3 should be enumerated. Then one can easily refer
to them.
For the following comments, I will paste them for simpler reading
of this e-mail:
o The sender maintains a new tunable parameter called Potentially-
failed.Max.Retrans (PFMR). An association's PFMR value MUST be
lower than the association's PMR value. The recommended value of
PFMR = 0.
I think "MUST be lower" is not the appropriate formulation. What you
want to say is that if PFMR >= PMR, than quick failover is basically
switched off. This is a valid choice of parameters.
In FreeBSD, we have used this as the default (PFMR = 0xffff).
o The sender never transmits data to a PF destination. However,
when all destinations are in either PF or Inactive state, the
sender SHOULD transition a destination marked PF to the active
state and transmit data to this destination. The destination's
error counter MUST NOT be cleared during this state transition.
It is recommended that the sender transitions the PF destination
with least error count (fewest consecutive timeouts) to the active
state. In case of a tie (multiple PF destinations with same error
count), the sender MAY choose the last active destination.
I would prefer to make a weaker formulation than "never transmits data
to a PF destination" and not take destinations out of PF. This is because
I would prefer doing it similar to the handling of the unreachable state
and there taking it out would result in sending up notifications.
So choose a formulation that you want to avoid sending to PF destinations,
but do it if no non PF and reachable destinations are available.
o Only heartbeats MUST be sent to PF destination(s) once per RTO.
This means the sender SHOULD ignore HB.interval for PF
destinations. If an heartbeat is unanswered, the sender
increments the error counter and exponentially backs off the RTO
value. If error counter is less than PMR, the sender SHOULD
transmit another heartbeat immediately after T3-timer expiration.
An implementation MAY use protocol parameter 'PFHB.interval' for
the interval of heartbeat transmissions. If PFHB.interval is non-
zero, a heartbeat packet is sent once per RTO of each destination
address plus PFHB.interval with jittering of +/- 50% of the RTO
value. Use of PFHB.interval can reduce the frequency of failover,
which might be useful where the characteristic of the paths are
mostly equal.
I'm not sure if it is worth to have a PFHB.interval. At least in FreeBSD
we just use 0... So maybe just get rid of it.
o When the sender receives an heartbeat ACK from a PF destination,
the sender clears the destination's error counter and transitions
the PF destination back to active state. This state transition
MUST NOT be notified to the ULP unless it is explicitly requested.
This destination's cwnd is set to 1 MTU (TODO: or 2? Needs more
text discussing rationale; can revisit later?)
We don't have defined a notification. I don't see the value
of it. So maybe you want to get rid of it?
o When all destinations are in the Inactive state, the sender
transitions one of the destinations back to the Active state and
continues data transmission to this destination. This proposal
recommends that the sender transitions the Inactive destination
with least error count (fewest consecutive timeouts) to the active
state. In case of a tie (multiple Inactive destinations with same
error count), the sender MAY choose the last active destination.
As said above: Moving one to the active state would require sending
up notifications. At least the FreeBSD stack does not move the
state to active, it just uses an unreachable (but confirmed) destination
address.
I think it would also be good for the application to control the thresholds
involved. So I suggest to add a socket API section.
The following describes what FreeBSD does:
<section title="Socket API Considerations">
<t>This section describes how the socket API defined in
<xref target='I-D.ietf-tsvwg-sctpsocket'/> is extended
to provide a way for the application to control the quick
failover behavior.</t>
<t>Please note that this section is informational only.</t>
<t>A socket API implementation based on
<xref target='I-D.ietf-tsvwg-sctpsocket'/>
is extended by adding a new read/write socket option for the
level IPPROTO_SCTP and the name SCTP_PEER_ADDR_THLDS
as described below.</t>
<t>Support for the SCTP_PEER_ADDR_THLDS socket option needs
also to be added to the function sctp_opt_info().</t>
<section title="Peer Address Thresholds (SCTP_PEER_ADDR_THLDS) socket option">
<t>Applications can control the quick failover behavior by getting or
setting the number of timeouts before a peer address is considered
potentially failed or unreachable.</t>
<t>The following structure is used to access and modify the thresholds:
<figure>
<artwork>
struct sctp_paddrthlds {
sctp_assoc_t spt_assoc_id;
struct sockaddr_storage spt_address;
uint16_t spt_pathmaxrxt;
uint16_t spt_pathpfthld;
};
</artwork>
</figure>
<list style='hanging'>
<t hangText="spt_assoc_id:">
This parameter is ignored for one-to-one style sockets.
For one-to-many style sockets the application may fill in an association
identifier or SCTP_FUTURE_ASSOC for this query.
It is an error to use SCTP_{CURRENT|ALL}_ASSOC in spt_assoc_id.</t>
<t hangText="spt_address:">
This specifies which peer address is of interest. If a wildcard address
is provided, this socket option applies to all current and future peer addresses.</t>
<t hangText="spt_pathmaxrxt:">
Each peer address of interest is considered unreachable,
if its path error counter exceeds spt_pathmaxrxt.</t>
<t hangText="spt_pathpfthld:">
Each peer address of interest is considered potentially failed,
if its path error counter exceeds spt_pathpfthld.</t>
</list></t>
</section>
</section>
Feel free to use this text or change it...
Best regards
Michael
- Comments regarding draft-nishida-tsvwg-sctp-failo… Michael Tüxen
- Re: Comments regarding draft-nishida-tsvwg-sctp-f… Preethi Natarajan
- Re: Comments regarding draft-nishida-tsvwg-sctp-f… Yoshifumi Nishida
- Re: Comments regarding draft-nishida-tsvwg-sctp-f… Michael Tüxen
- Re: Comments regarding draft-nishida-tsvwg-sctp-f… Michael Tüxen
- Re: Comments regarding draft-nishida-tsvwg-sctp-f… Yoshifumi Nishida