diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2022-04-30 06:38:19 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-30 06:38:19 -0400 |
commit | 80315b9c8615a9d5f4dada79b99c479ec1414304 (patch) | |
tree | a49282d1f792b06702a74b78e413ed86504af34e /cmd/rootlessport/wsl.go | |
parent | d6f6d6129cf5378946356761296686b7430ff3a4 (diff) | |
parent | 772ead25318dfa340541197e92322bd2346df087 (diff) | |
download | podman-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.go | 37 |
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 +} |