summaryrefslogtreecommitdiff
path: root/cmd/rootlessport/wsl.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2022-04-30 06:38:19 -0400
committerGitHub <noreply@github.com>2022-04-30 06:38:19 -0400
commit80315b9c8615a9d5f4dada79b99c479ec1414304 (patch)
treea49282d1f792b06702a74b78e413ed86504af34e /cmd/rootlessport/wsl.go
parentd6f6d6129cf5378946356761296686b7430ff3a4 (diff)
parent772ead25318dfa340541197e92322bd2346df087 (diff)
downloadpodman-80315b9c8615a9d5f4dada79b99c479ec1414304.tar.gz
podman-80315b9c8615a9d5f4dada79b99c479ec1414304.tar.bz2
podman-80315b9c8615a9d5f4dada79b99c479ec1414304.zip
Merge pull request #14026 from n1hility/simulate-dualstack
Use simulated dual-stack binds when using WSL
Diffstat (limited to 'cmd/rootlessport/wsl.go')
-rw-r--r--cmd/rootlessport/wsl.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/cmd/rootlessport/wsl.go b/cmd/rootlessport/wsl.go
new file mode 100644
index 000000000..c1e67ba87
--- /dev/null
+++ b/cmd/rootlessport/wsl.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+ "net"
+ "strings"
+
+ "github.com/containers/common/pkg/machine"
+ rkport "github.com/rootless-containers/rootlesskit/pkg/port"
+)
+
+// WSL machines do not relay ipv4 traffic to dual-stack ports, simulate instead
+func splitDualStackSpecIfWsl(spec rkport.Spec) []rkport.Spec {
+ specs := []rkport.Spec{spec}
+ protocol := spec.Proto
+ if machine.MachineHostType() != machine.Wsl || strings.HasSuffix(protocol, "4") || strings.HasSuffix(protocol, "6") {
+ return specs
+ }
+
+ ip := net.ParseIP(spec.ParentIP)
+ splitLoopback := ip.IsLoopback() && ip.To4() == nil
+ // Map ::1 and 0.0.0.0/:: to ipv4 + ipv6 to simulate dual-stack
+ if ip.IsUnspecified() || splitLoopback {
+ specs = append(specs, spec)
+ specs[0].Proto = protocol + "4"
+ specs[1].Proto = protocol + "6"
+ if splitLoopback {
+ // Hacky, but we will only have one ipv4 loopback with WSL config
+ specs[0].ParentIP = "127.0.0.1"
+ }
+ if ip.IsUnspecified() {
+ specs[0].ParentIP = "0.0.0.0"
+ specs[1].ParentIP = "::"
+ }
+ }
+
+ return specs
+}