Make slirp MTU configurable (network_cmd_options)

The mtu default value is currently forced to 65520.
This let the user control it using the config key network_cmd_options,
i.e.: network_cmd_options=["mtu=9000"]

Signed-off-by: bitstrings <pino.silvaggio@gmail.com>
This commit is contained in:
bitstrings
2021-01-29 23:37:14 -05:00
committed by p
parent 2686e406a6
commit 0959196807
5 changed files with 22 additions and 2 deletions

View File

@ -15,6 +15,7 @@ import (
"path/filepath"
"regexp"
"sort"
"strconv"
"strings"
"syscall"
"time"
@ -42,6 +43,9 @@ const (
// slirp4netnsDNS is the IP for the built-in DNS server in the slirp network
slirp4netnsDNS = "10.0.2.3"
// slirp4netnsMTU the default MTU override
slirp4netnsMTU = 65520
)
// Get an OCICNI network config
@ -282,6 +286,7 @@ func (r *Runtime) setupSlirp4netns(ctr *Container) error {
enableIPv6 := false
outboundAddr := ""
outboundAddr6 := ""
mtu := slirp4netnsMTU
if ctr.config.NetworkOptions != nil {
slirpOptions = append(slirpOptions, ctr.config.NetworkOptions["slirp4netns"]...)
@ -345,6 +350,11 @@ func (r *Runtime) setupSlirp4netns(ctr *Container) error {
}
}
outboundAddr6 = value
case "mtu":
mtu, err = strconv.Atoi(value)
if mtu < 68 || err != nil {
return errors.Errorf("invalid mtu %q", value)
}
default:
return errors.Errorf("unknown option for slirp4netns: %q", o)
}
@ -358,8 +368,8 @@ func (r *Runtime) setupSlirp4netns(ctr *Container) error {
if disableHostLoopback && slirpFeatures.HasDisableHostLoopback {
cmdArgs = append(cmdArgs, "--disable-host-loopback")
}
if slirpFeatures.HasMTU {
cmdArgs = append(cmdArgs, "--mtu", "65520")
if mtu > -1 && slirpFeatures.HasMTU {
cmdArgs = append(cmdArgs, fmt.Sprintf("--mtu=%d", mtu))
}
if !noPivotRoot && slirpFeatures.HasEnableSandbox {
cmdArgs = append(cmdArgs, "--enable-sandbox")