Search code examples
webrtcnatsdplibnice

Is there any reliable document or RFC on ICE Lite implementation?


ICE protocol was updated in RFC 8445. ICE lite predates that RFC. The details on ICE Lite in RFC 8445 is provided in Appendix A. It is very sketchy. However, way back in 2007, an attempt was made to formalize what ICE Lite was. That was in this draft RFC. It is fairly descriptive but some of the statements conflict those in RFC 8445. For example, RFC 8445 does allow for both peers to be ICE LITE while the draft document suggests otherwise.

Can someone point out the exceptions or corrections in the draft RFC on ICE LITE which will make it compatible with RFC 8445? Or point to a document that describes ICE LITE in more detail that the description in RFC 8445?

I am NOT using libnice but as there is no relevant tag on ICE, I used libnice hoping that users of libnice will have some info.


Solution

  • pion/ice has an option for ICE Lite. I did some things via trial and error, but here is what I learned along the way.

    From RFC 8445 6.1.1. Determining Role

       Both lite:  The initiating agent that started the ICE processing MUST
          take the controlling role, and the other MUST take the controlled
          role.  In this case, no connectivity checks are ever sent.
          Rather, once the candidates are exchanged, each agent performs the
          processing described in Section 8 without connectivity checks.  It
          is possible that both agents will believe they are controlled or
          controlling.  In the latter case, the conflict is resolved through
          glare detection capabilities in the signaling protocol enabling
          the candidate exchange.  The state of ICE processing for each data
          stream is considered to be Running, and the state of ICE overall
          is Running.
    

    I haven't found an extensive single place to learn about ICE Lite. But you can look at how pion/ice behaves, and happy to answer more individual questions!