Skip to content

ICE negotiation failure for localhost nodes having multiple network interfaces #662

Open
@mangolas

Description

@mangolas

Libp2p tries to update webrtc transport to latest webrtc-rs, but it's smoke test is failing: libp2p/rust-libp2p#5448

Smoke test starts two localhost peers and just tests that they discover each other and starts a connection. After digging into it (as it was initially always the Github runner that failed the smoke test, and locally it passed) it has boiled down to this: if there are more than one networks locally available, ICE negotiation fails randomly.

Before this change 182406d smoke test worked.

When ICE gathering starts and it collects all the local candidates, the ICE agent then starts receive loops for STUN messages per candidate. So in the case of smoke test with two local ipv4 interfaces, there are two receivers on same port on 127.0.0.1 listening and it seems that when by chance the correct receiver can get STUN message with expected candidate, and connection can proceed.

Any idea what would be a correct way to remedy this. It's always the controlled side of ICE agent that get's stuck, it receives the nomination from controlling side, and the sends ping to verify the nominated candidate, but depending on which receive loop the response comes back, it either fails or not.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions