From b632c7d49cd7634eb9b58f96fb81f8f289568e9f Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Tue, 30 May 2023 15:30:07 -0400 Subject: [PATCH] Workaround for shadow in lieu of AF_NETLINK support For details, see https://github.com/shadow/shadow/issues/2980 --- client/lib/webrtc.go | 7 +++++++ go.mod | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index 7d986d3..fedf299 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -12,6 +12,7 @@ import ( "time" "github.com/pion/ice/v2" + "github.com/pion/transport/v2/stdnet" "github.com/pion/webrtc/v3" "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/event" ) @@ -194,6 +195,12 @@ func (c *WebRTCPeer) preparePeerConnection(config *webrtc.Configuration) error { var err error s := webrtc.SettingEngine{} s.SetICEMulticastDNSMode(ice.MulticastDNSModeDisabled) + // Use the SetNet setting https://pkg.go.dev/github.com/pion/webrtc/v3#SettingEngine.SetNet + // to get snowflake working in shadow (where the AF_NETLINK family is not implemented). + // These two lines of code functionally revert a new change in pion by silently ignoring + // when net.Interfaces() fails, rather than throwing an error + vnet, _ := stdnet.NewNet() + s.SetNet(vnet) api := webrtc.NewAPI(webrtc.WithSettingEngine(s)) c.pc, err = api.NewPeerConnection(*config) if err != nil { diff --git a/go.mod b/go.mod index 4d64230..9c2087b 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/pion/ice/v2 v2.3.8 github.com/pion/sdp/v3 v3.0.6 github.com/pion/stun v0.6.1 + github.com/pion/transport/v2 v2.2.1 github.com/pion/webrtc/v3 v3.2.11 github.com/prometheus/client_golang v1.16.0 github.com/prometheus/client_model v0.4.0 @@ -49,7 +50,6 @@ require ( github.com/pion/rtp v1.7.13 // indirect github.com/pion/sctp v1.8.7 // indirect github.com/pion/srtp/v2 v2.0.15 // indirect - github.com/pion/transport/v2 v2.2.1 // indirect github.com/pion/turn/v2 v2.1.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect