mirror of
https://github.com/containers/podman.git
synced 2025-10-18 03:33:32 +08:00
Add support for setting the CIDR when using slirp4netns
This adds support for the --cidr parameter that is supported by slirp4netns since v0.3.0. This allows the user to change the ip range that is used for the network inside the container. Signed-off-by: Adis Hamzić <adis@hamzadis.com>
This commit is contained in:
@ -171,6 +171,7 @@ type slirpFeatures struct {
|
||||
HasMTU bool
|
||||
HasEnableSandbox bool
|
||||
HasEnableSeccomp bool
|
||||
HasCIDR bool
|
||||
HasOutboundAddr bool
|
||||
HasIPv6 bool
|
||||
}
|
||||
@ -199,6 +200,7 @@ func checkSlirpFlags(path string) (*slirpFeatures, error) {
|
||||
HasMTU: strings.Contains(string(out), "--mtu"),
|
||||
HasEnableSandbox: strings.Contains(string(out), "--enable-sandbox"),
|
||||
HasEnableSeccomp: strings.Contains(string(out), "--enable-seccomp"),
|
||||
HasCIDR: strings.Contains(string(out), "--cidr"),
|
||||
HasOutboundAddr: strings.Contains(string(out), "--outbound-addr"),
|
||||
HasIPv6: strings.Contains(string(out), "--enable-ipv6"),
|
||||
}, nil
|
||||
@ -227,6 +229,7 @@ func (r *Runtime) setupRootlessNetNS(ctr *Container) error {
|
||||
havePortMapping := len(ctr.Config().PortMappings) > 0
|
||||
logPath := filepath.Join(ctr.runtime.config.Engine.TmpDir, fmt.Sprintf("slirp4netns-%s.log", ctr.config.ID))
|
||||
|
||||
cidr := ""
|
||||
isSlirpHostForward := false
|
||||
disableHostLoopback := true
|
||||
enableIPv6 := false
|
||||
@ -240,6 +243,12 @@ func (r *Runtime) setupRootlessNetNS(ctr *Container) error {
|
||||
option, value := parts[0], parts[1]
|
||||
|
||||
switch option {
|
||||
case "cidr":
|
||||
ipv4, _, err := net.ParseCIDR(value)
|
||||
if err != nil || ipv4.To4() == nil {
|
||||
return errors.Errorf("invalid cidr %q", value)
|
||||
}
|
||||
cidr = value
|
||||
case "port_handler":
|
||||
switch value {
|
||||
case "slirp4netns":
|
||||
@ -309,6 +318,13 @@ func (r *Runtime) setupRootlessNetNS(ctr *Container) error {
|
||||
cmdArgs = append(cmdArgs, "--enable-seccomp")
|
||||
}
|
||||
|
||||
if cidr != "" {
|
||||
if !slirpFeatures.HasCIDR {
|
||||
return errors.Errorf("cidr not supported")
|
||||
}
|
||||
cmdArgs = append(cmdArgs, fmt.Sprintf("--cidr=%s", cidr))
|
||||
}
|
||||
|
||||
if enableIPv6 {
|
||||
if !slirpFeatures.HasIPv6 {
|
||||
return errors.Errorf("enable_ipv6 not supported")
|
||||
|
Reference in New Issue
Block a user