mirror of
https://github.com/pion/ice.git
synced 2025-09-27 11:52:18 +08:00
Support IPv6 from mDNS
This commit is contained in:

committed by
Sean DuBois

parent
ae1ba6fcbb
commit
39c0392295
@@ -8,6 +8,7 @@ package ice
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/netip"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -17,21 +18,21 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func getLocalIPAddress(t *testing.T, networkType NetworkType) net.IP {
|
||||
func getLocalIPAddress(t *testing.T, networkType NetworkType) netip.Addr {
|
||||
net, err := stdnet.NewNet()
|
||||
require.NoError(t, err)
|
||||
localIPs, err := localInterfaces(net, nil, nil, []NetworkType{networkType}, false)
|
||||
_, localAddrs, err := localInterfaces(net, problematicNetworkInterfaces, nil, []NetworkType{networkType}, false)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, localIPs)
|
||||
return localIPs[0]
|
||||
require.NotEmpty(t, localAddrs)
|
||||
return localAddrs[0]
|
||||
}
|
||||
|
||||
func ipv6Available(t *testing.T) bool {
|
||||
net, err := stdnet.NewNet()
|
||||
require.NoError(t, err)
|
||||
localIPs, err := localInterfaces(net, nil, nil, []NetworkType{NetworkTypeTCP6}, false)
|
||||
_, localAddrs, err := localInterfaces(net, problematicNetworkInterfaces, nil, []NetworkType{NetworkTypeTCP6}, false)
|
||||
require.NoError(t, err)
|
||||
return len(localIPs) > 0
|
||||
return len(localAddrs) > 0
|
||||
}
|
||||
|
||||
func TestActiveTCP(t *testing.T) {
|
||||
@@ -43,8 +44,9 @@ func TestActiveTCP(t *testing.T) {
|
||||
type testCase struct {
|
||||
name string
|
||||
networkTypes []NetworkType
|
||||
listenIPAddress net.IP
|
||||
listenIPAddress netip.Addr
|
||||
selectedPairNetworkType string
|
||||
useMDNS bool
|
||||
}
|
||||
|
||||
testCases := []testCase{
|
||||
@@ -69,12 +71,16 @@ func TestActiveTCP(t *testing.T) {
|
||||
networkTypes: []NetworkType{NetworkTypeTCP6},
|
||||
listenIPAddress: getLocalIPAddress(t, NetworkTypeTCP6),
|
||||
selectedPairNetworkType: tcp,
|
||||
// if we don't use mDNS, we will very liekly be filtering out location tracked ips.
|
||||
useMDNS: true,
|
||||
},
|
||||
testCase{
|
||||
name: "UDP is preferred over TCP6", // This fails some time
|
||||
name: "UDP is preferred over TCP6",
|
||||
networkTypes: supportedNetworkTypes(),
|
||||
listenIPAddress: getLocalIPAddress(t, NetworkTypeTCP6),
|
||||
selectedPairNetworkType: udp,
|
||||
// if we don't use mDNS, we will very liekly be filtering out location tracked ips.
|
||||
useMDNS: true,
|
||||
},
|
||||
)
|
||||
}
|
||||
@@ -84,8 +90,9 @@ func TestActiveTCP(t *testing.T) {
|
||||
r := require.New(t)
|
||||
|
||||
listener, err := net.ListenTCP("tcp", &net.TCPAddr{
|
||||
IP: testCase.listenIPAddress,
|
||||
IP: testCase.listenIPAddress.AsSlice(),
|
||||
Port: listenPort,
|
||||
Zone: testCase.listenIPAddress.Zone(),
|
||||
})
|
||||
r.NoError(err)
|
||||
defer func() {
|
||||
@@ -107,14 +114,18 @@ func TestActiveTCP(t *testing.T) {
|
||||
r.NotNil(tcpMux.LocalAddr(), "tcpMux.LocalAddr() is nil")
|
||||
|
||||
hostAcceptanceMinWait := 100 * time.Millisecond
|
||||
passiveAgent, err := NewAgent(&AgentConfig{
|
||||
cfg := &AgentConfig{
|
||||
TCPMux: tcpMux,
|
||||
CandidateTypes: []CandidateType{CandidateTypeHost},
|
||||
NetworkTypes: testCase.networkTypes,
|
||||
LoggerFactory: loggerFactory,
|
||||
IncludeLoopback: true,
|
||||
HostAcceptanceMinWait: &hostAcceptanceMinWait,
|
||||
})
|
||||
InterfaceFilter: problematicNetworkInterfaces,
|
||||
}
|
||||
if testCase.useMDNS {
|
||||
cfg.MulticastDNSMode = MulticastDNSModeQueryAndGather
|
||||
}
|
||||
passiveAgent, err := NewAgent(cfg)
|
||||
r.NoError(err)
|
||||
r.NotNil(passiveAgent)
|
||||
|
||||
@@ -123,6 +134,7 @@ func TestActiveTCP(t *testing.T) {
|
||||
NetworkTypes: testCase.networkTypes,
|
||||
LoggerFactory: loggerFactory,
|
||||
HostAcceptanceMinWait: &hostAcceptanceMinWait,
|
||||
InterfaceFilter: problematicNetworkInterfaces,
|
||||
})
|
||||
r.NoError(err)
|
||||
r.NotNil(activeAgent)
|
||||
@@ -166,7 +178,8 @@ func TestActiveTCP_NonBlocking(t *testing.T) {
|
||||
defer test.TimeOut(time.Second * 5).Stop()
|
||||
|
||||
cfg := &AgentConfig{
|
||||
NetworkTypes: supportedNetworkTypes(),
|
||||
NetworkTypes: supportedNetworkTypes(),
|
||||
InterfaceFilter: problematicNetworkInterfaces,
|
||||
}
|
||||
|
||||
aAgent, err := NewAgent(cfg)
|
||||
|
Reference in New Issue
Block a user