Draft: draft-ietf-ice-rfc5245bis

Commentary: Removal of timer Tc . Instead timer Ta is used to trigger connectivity checks . Whenever Ta fires , one check list is selected , and a connectivity check is performed for a candidate pair within that check list .
Once the agent has computed the check lists as described in sec-
forming, the agent will begin performing ordinary checks and
triggered checks.  For triggered checks, the agent maintains a FIFO
queue, triggered check queue, which contains candidate pairs for
which checks are to be sent at the next available opportunity.
The generation of ordinary and triggered checks is govererned by a
timer, Tc.  Each active check list is associated with an instance of
Tc, and whenever Tc for a given check list fires a check is performed
for a candidate pair within that check list.
The value of Tc is Ta*N seconds, where N is the number of active
check lists.  Whenver the number of active check lists change, the
agent SHOULD re-calculate the Tc value.  Multiplying by N allows this
aggregate check throughput to be split between all active check
lists.  Tc associated with the first check list fires immediately,
causing the agent to start performing connectivity checks as soon as
the intitial states of the candidate pairs in each check list have
been calculated.
Implementations SHOULD spread out the starting of the Tc timers
associated with each check list, so that Tc for each check list do
not fire at the same time.
Based on local policy, an agent MAY set the Tc value to a number
bigger than described above, in order for Tc to fire less frequently.
If there is no candidate in the Waiting or Frozen state, the agent
MUST terminate timer Tc for that check list and re-calculate Tc
for the remaining active check lists.
Once a candidate pair has been selected, the agent performs the check
by sending a STUN request from the base associated with the local
candiditate of the pair to the remote candidiate of the pair, as
described in sec-send-check.
Based on local policy, an agent MAY choose to terminate perfoming the
connectivity checks for one or more active checks lists (and
terminate the Tc associated with those check lists) at any time.
Once the agent has computed the check lists and created the CHECK
LIST SET, as described in sec-forming, the agent will begin
performing connectivity checks (ordinary and triggered).  For
triggered connectivity checks, the agent maintains a FIFO queue for
each check list, called the triggered check queue, which contains
candidate pairs for which checks are to be sent at the next available
opportunity.
The generation of ordinary and triggered connectivity checks is
govererned by timer Ta.  As soon as the initial states for the
candidiate pairs in the CHECK LIST SET have been set, a check is
performed for a candidate pair within the first check list in the
Running state, following the procedures in sec-connectivity_check.
After that, whenever Ta fires the next check list in the Running
state in the CHECK LIST SET is selected, and a check is performed for
a candidiate within that check list.  After the last check list in
the Running state in the CHECK LIST SET has been processed, the first
check list is selected again.  Etc.
NOTE: When timer Ta fires, and the agent processes a check list, if
no check is performed for a pair in the check list (based on the
rules below), the agent can immediately select the next check list in
the Running state, without waiting for timer Ta to expire again.
If there is no candidate pair in the Waiting state, and if there
are one or more pairs in the Frozen state, for each pair in the
Frozen state the the agent checks the foundation associated with
the pair.  For a given foundation, if there is no pair (in any
check list in the CHECK LIST SET) in the Waiting or In-Progress
state, the agent performs a connectivity check on the pair and
puts the pair state to In-Prograss.  If, for the same foundation,
there are one or more pairs in the Waiting or In-Progress state,
(in any check list in the CHECK LIST SET) the agent does not
perform a connectivity check on the pair.
Once the agent has selected a candidate pair, for which a
connectivity check is to be performed, the agent performs the check
by sending a STUN request from the base associated with the local
candiditate of the pair to the remote candidiate of the pair, as
described in sec-send-check.
Based on local policy, an agent MAY choose to terminate perfoming the
connectivity checks for one or more checks lists in the CHECK LIST
SET at any time.  However, only the controlling agent is allowed to
conclude ICE (sec-conclude).
The Initiator performs the ordinary checks on receiving the candidate
information from the Peer (responder) and having formed the
checklists.  On the other hand the responding agent either performs
the triggered or ordinary checks as described above.
The Initiator performs the ordinary checks on receiving the candidate
information from the Peer (responder) and having formed the check
lists.  On the other hand the responding agent either performs the
triggered or ordinary checks as described above.