Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What does it mean to NOT nominate candidatePair? #179

Closed
jan-ivar opened this issue Oct 30, 2023 · 5 comments · Fixed by #189
Closed

What does it mean to NOT nominate candidatePair? #179

jan-ivar opened this issue Oct 30, 2023 · 5 comments · Fixed by #189
Assignees

Comments

@jan-ivar
Copy link
Member

The steps to nominate a candidate pair say: "If accepted is false, instruct the ICE agent to not nominate candidatePair, and instead to continue to perform connectivity checks."

What does it mean to "not nominate"? Can we just say "instruct the ICE agent to continue to perform connectivity checks"?

Or is it a nomination ban for that particular pair forever? If not, how long should the agent wait before trying again?

A non-normative note (with normative MAY?) suggests that calling setSelectedCandidatePair allows the agent to nominate again, but is that the only case?

image

Some clarifications of how and when the ICE agent is expected to respond would be useful for interoperability.

@jan-ivar
Copy link
Member Author

cc @sam-vi

@jan-ivar
Copy link
Member Author

It continues: "The ICE agent may continue to send data using the candidate pair indicated by candidatePair unless instructed to use another candidate pair with setSelectedCandidatePair."

Is this "may" a normative MAY, or a MUST? If not, we could use "will" and use a non-normative note if this is just an observation.

It's a bit tricky since we seem to be modifying ICE agent behavior here.

@sam-vi
Copy link
Contributor

sam-vi commented Oct 31, 2023

"not nominate" means that the ICE agent should continue to perform connectivity checks and maybe propose another candidate pair for nomination.

RFC8445 section 8.1.1 permits this flexibility:

The criteria for stopping the connectivity checks and for picking a pair for nomination are outside the scope of this specification. They are a matter of local optimization.

So whether a cancelled nomination is a ban or a deferral for a certain period is an implementation detail of the ICE agent. This shouldn't affect interoperability because the exact behaviour wasn't constrained to begin with by RFC8445 (or by webrtc-pc).

The non-normative note could be extended to clarify that the same candidate pair could be nominated again either by the ICE agent or as a result of setSelectedCandidatePair.

It continues: "The ICE agent may continue to send data using the candidate pair indicated by candidatePair unless instructed to use another candidate pair with setSelectedCandidatePair."

Is this "may" a normative MAY, or a MUST? If not, we could use "will" and use a non-normative note if this is just an observation.

It's a bit tricky since we seem to be modifying ICE agent behavior here.

This is not a normative statement, and the intention is not to modify ICE agent behaviour. This refers to RFC8445 section 12.1:

An ICE agent MAY send data on any valid pair before selected pairs have been produced for the data stream.

So your suggestion to change to "will" and extract out the observation into a non-normative note makes sense.

I can draft a PR with the clarifications.

@pthatcher
Copy link

Nominating a candidate pair means sending the USE_CANDIDATE STUN attribute (or the "nomination" attribute from draft-thatcher-ice-renomination-01). Not nominating means not sending that STUN attribute.

@jan-ivar
Copy link
Member Author

Understood. Algorithms however normally detail what steps to take, not steps not to take (which I think risks introducing ambiguity about when steps are done). How about:

"8. If accepted is false, abort these steps and instruct the ICE agent to continue to perform connectivity checks."

...and put the rest in a note?

Note: The ICE agent will continue to send data using the candidate pair indicated by candidatePair unless instructed to use another candidate pair with setSelectedCandidatePair.

Aborting the steps to ahead of the final step to "instruct the ICE agent to nominate the candidate pair indicated by candidatePair." is hopefully clear enough.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants