Browse code

Windows: Plumb through -b on daemon

Signed-off-by: John Howard <jhoward@microsoft.com>

John Howard authored on 2015/07/14 04:34:58
Showing 6 changed files
... ...
@@ -15,6 +15,7 @@ const (
15 15
 // common across platforms.
16 16
 type CommonConfig struct {
17 17
 	AutoRestart    bool
18
+	Bridge         bridgeConfig // Bridge holds bridge network specific configuration.
18 19
 	Context        map[string][]string
19 20
 	CorsHeaders    string
20 21
 	DisableBridge  bool
... ...
@@ -22,8 +22,6 @@ type Config struct {
22 22
 
23 23
 	// Fields below here are platform specific.
24 24
 
25
-	// Bridge holds bridge network specific configuration.
26
-	Bridge               bridgeConfig
27 25
 	EnableSelinuxSupport bool
28 26
 	SocketGroup          string
29 27
 	Ulimits              map[string]*ulimit.Ulimit
... ...
@@ -2,6 +2,8 @@ package daemon
2 2
 
3 3
 import (
4 4
 	"os"
5
+
6
+	flag "github.com/docker/docker/pkg/mflag"
5 7
 )
6 8
 
7 9
 var (
... ...
@@ -10,6 +12,12 @@ var (
10 10
 	defaultExec    = "windows"
11 11
 )
12 12
 
13
+// bridgeConfig stores all the bridge driver specific
14
+// configuration.
15
+type bridgeConfig struct {
16
+	VirtualSwitchName string
17
+}
18
+
13 19
 // Config defines the configuration of a docker daemon.
14 20
 // These are the configuration settings that you pass
15 21
 // to the docker daemon when you launch it with say: `docker -d -e windows`
... ...
@@ -28,6 +36,6 @@ func (config *Config) InstallFlags() {
28 28
 	// First handle install flags which are consistent cross-platform
29 29
 	config.InstallCommonFlags()
30 30
 
31
-	// Then platform-specific install flags. There are none presently on Windows
32
-
31
+	// Then platform-specific install flags.
32
+	flag.StringVar(&config.Bridge.VirtualSwitchName, []string{"b", "-bridge"}, "", "Attach containers to a virtual switch")
33 33
 }
... ...
@@ -80,6 +80,7 @@ func populateCommand(c *Container, env []string) error {
80 80
 			network := c.NetworkSettings
81 81
 			en.Interface = &execdriver.NetworkInterface{
82 82
 				MacAddress: network.MacAddress,
83
+				Bridge:     c.daemon.config.Bridge.VirtualSwitchName,
83 84
 			}
84 85
 		}
85 86
 	default:
... ...
@@ -156,12 +157,6 @@ func (container *Container) GetSize() (int64, int64) {
156 156
 }
157 157
 
158 158
 func (container *Container) AllocateNetwork() error {
159
-
160
-	// TODO Windows. This needs reworking with libnetwork. In the
161
-	// proof-of-concept for //build conference, the Windows daemon
162
-	// invoked eng.Job("allocate_interface) passing through
163
-	// RequestedMac.
164
-
165 159
 	return nil
166 160
 }
167 161
 
... ...
@@ -174,11 +169,9 @@ func (container *Container) ExportRw() (archive.Archive, error) {
174 174
 }
175 175
 
176 176
 func (container *Container) ReleaseNetwork() {
177
-	// TODO Windows. Rework with libnetwork
178 177
 }
179 178
 
180 179
 func (container *Container) RestoreNetwork() error {
181
-	// TODO Windows. Rework with libnetwork
182 180
 	return nil
183 181
 }
184 182
 
... ...
@@ -15,6 +15,8 @@ import (
15 15
 	"github.com/microsoft/hcsshim"
16 16
 )
17 17
 
18
+const DefaultVirtualSwitch = "Virtual Switch"
19
+
18 20
 func (daemon *Daemon) Changes(container *Container) ([]archive.Change, error) {
19 21
 	return daemon.driver.Changes(container.ID, container.ImageID)
20 22
 }
... ...
@@ -125,7 +127,10 @@ func isBridgeNetworkDisabled(config *Config) bool {
125 125
 }
126 126
 
127 127
 func initNetworkController(config *Config) (libnetwork.NetworkController, error) {
128
-	// TODO Windows
128
+	// Set the name of the virtual switch if not specified by -b on daemon start
129
+	if config.Bridge.VirtualSwitchName == "" {
130
+		config.Bridge.VirtualSwitchName = DefaultVirtualSwitch
131
+	}
129 132
 	return nil, nil
130 133
 }
131 134
 
... ...
@@ -81,10 +81,6 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba
81 81
 	}
82 82
 
83 83
 	if c.Network.Interface != nil {
84
-
85
-		// TODO Windows: Temporary
86
-		c.Network.Interface.Bridge = "Virtual Switch"
87
-
88 84
 		dev := device{
89 85
 			DeviceType: "Network",
90 86
 			Connection: &networkConnection{
... ...
@@ -101,7 +97,11 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba
101 101
 			}
102 102
 		}
103 103
 
104
+		logrus.Debugf("Virtual switch '%s', mac='%s'", c.Network.Interface.Bridge, c.Network.Interface.MacAddress)
105
+
104 106
 		cu.Devices = append(cu.Devices, dev)
107
+	} else {
108
+		logrus.Debugln("No network interface")
105 109
 	}
106 110
 
107 111
 	configurationb, err := json.Marshal(cu)