Browse code

Allow mtu to be configured at daemon start

Michael Crosby authored on 2013/12/20 08:16:54
Showing 6 changed files
... ...
@@ -18,6 +18,7 @@ type DaemonConfig struct {
18 18
 	DefaultIp                   net.IP
19 19
 	InterContainerCommunication bool
20 20
 	GraphDriver                 string
21
+	Mtu                         int
21 22
 }
22 23
 
23 24
 // ConfigFromJob creates and returns a new DaemonConfig object
... ...
@@ -41,5 +42,10 @@ func ConfigFromJob(job *engine.Job) *DaemonConfig {
41 41
 	config.DefaultIp = net.ParseIP(job.Getenv("DefaultIp"))
42 42
 	config.InterContainerCommunication = job.GetenvBool("InterContainerCommunication")
43 43
 	config.GraphDriver = job.Getenv("GraphDriver")
44
+	if mtu := job.GetenvInt("Mtu"); mtu != -1 {
45
+		config.Mtu = mtu
46
+	} else {
47
+		config.Mtu = DefaultNetworkMtu
48
+	}
44 49
 	return &config
45 50
 }
... ...
@@ -582,7 +582,7 @@ func (container *Container) Start() (err error) {
582 582
 		params = append(params,
583 583
 			"-g", network.Gateway,
584 584
 			"-i", fmt.Sprintf("%s/%d", network.IPAddress, network.IPPrefixLen),
585
-			"-mtu", "1500",
585
+			"-mtu", strconv.Itoa(container.runtime.config.Mtu),
586 586
 		)
587 587
 	}
588 588
 
... ...
@@ -40,6 +40,7 @@ func main() {
40 40
 		flInterContainerComm = flag.Bool("icc", true, "Enable inter-container communication")
41 41
 		flGraphDriver        = flag.String("s", "", "Force the docker runtime to use a specific storage driver")
42 42
 		flHosts              = docker.NewListOpts(docker.ValidateHost)
43
+		flMtu                = flag.Int("mtu", docker.DefaultNetworkMtu, "Set the containers network mtu")
43 44
 	)
44 45
 	flag.Var(&flDns, "dns", "Force docker to use specific DNS servers")
45 46
 	flag.Var(&flHosts, "H", "Multiple tcp://host:port or unix://path/to/socket to bind in daemon mode, single connection otherwise")
... ...
@@ -87,6 +88,7 @@ func main() {
87 87
 		job.Setenv("DefaultIp", *flDefaultIp)
88 88
 		job.SetenvBool("InterContainerCommunication", *flInterContainerComm)
89 89
 		job.Setenv("GraphDriver", *flGraphDriver)
90
+		job.SetenvInt("Mtu", *flMtu)
90 91
 		if err := job.Run(); err != nil {
91 92
 			log.Fatal(err)
92 93
 		}
... ...
@@ -37,6 +37,7 @@ To list available commands, either run ``docker`` with no parameters or execute
37 37
       -icc=true: Enable inter-container communication
38 38
       -ip="0.0.0.0": Default IP address to use when binding container ports
39 39
       -iptables=true: Disable docker's addition of iptables rules
40
+      -mtu=1500: Set the containers network mtu
40 41
       -p="/var/run/docker.pid": Path to use for daemon PID file
41 42
       -r=true: Restart previously running containers
42 43
       -s="": Force the docker runtime to use a specific storage driver
... ...
@@ -32,6 +32,7 @@ func mkRuntime(f utils.Fataler) *docker.Runtime {
32 32
 	config := &docker.DaemonConfig{
33 33
 		Root:        root,
34 34
 		AutoRestart: false,
35
+		Mtu:         docker.DefaultNetworkMtu,
35 36
 	}
36 37
 	r, err := docker.NewRuntimeFromDirectory(config)
37 38
 	if err != nil {
... ...
@@ -19,6 +19,7 @@ import (
19 19
 const (
20 20
 	DefaultNetworkBridge = "docker0"
21 21
 	DisableNetworkBridge = "none"
22
+	DefaultNetworkMtu    = 1500
22 23
 	portRangeStart       = 49153
23 24
 	portRangeEnd         = 65535
24 25
 	siocBRADDBR          = 0x89a0
... ...
@@ -118,7 +119,6 @@ func CreateBridgeIface(config *DaemonConfig) error {
118 118
 		"192.168.44.1/24",
119 119
 	}
120 120
 
121
-
122 121
 	nameservers := []string{}
123 122
 	resolvConf, _ := utils.GetResolvConf()
124 123
 	// we don't check for an error here, because we don't really care