Signed-off-by: msabansal <sabansal@microsoft.com>
msabansal authored on 2016/06/10 04:09:13... | ... |
@@ -221,6 +221,18 @@ func (daemon *Daemon) initNetworkController(config *Config, activeSandboxes map[ |
221 | 221 |
return nil, err |
222 | 222 |
} |
223 | 223 |
|
224 |
+ defaultNetworkExists := false |
|
225 |
+ |
|
226 |
+ if network, err := controller.NetworkByName(runconfig.DefaultDaemonNetworkMode().NetworkName()); err == nil { |
|
227 |
+ options := network.Info().DriverOptions() |
|
228 |
+ for _, v := range hnsresponse { |
|
229 |
+ if options[winlibnetwork.HNSID] == v.Id { |
|
230 |
+ defaultNetworkExists = true |
|
231 |
+ break |
|
232 |
+ } |
|
233 |
+ } |
|
234 |
+ } |
|
235 |
+ |
|
224 | 236 |
// discover and add HNS networks to windows |
225 | 237 |
// network that exist are removed and added again |
226 | 238 |
for _, v := range hnsresponse { |
... | ... |
@@ -237,6 +249,8 @@ func (daemon *Daemon) initNetworkController(config *Config, activeSandboxes map[ |
237 | 237 |
controller.WalkNetworks(s) |
238 | 238 |
if n != nil { |
239 | 239 |
v.Name = n.Name() |
240 |
+ // This will not cause network delete from HNS as the network |
|
241 |
+ // is not yet populated in the libnetwork windows driver |
|
240 | 242 |
n.Delete() |
241 | 243 |
} |
242 | 244 |
|
... | ... |
@@ -254,10 +268,12 @@ func (daemon *Daemon) initNetworkController(config *Config, activeSandboxes map[ |
254 | 254 |
} |
255 | 255 |
|
256 | 256 |
name := v.Name |
257 |
- // There is only one nat network supported in windows. |
|
258 |
- // If it exists with a different name add it as the default name |
|
259 |
- if runconfig.DefaultDaemonNetworkMode() == containertypes.NetworkMode(strings.ToLower(v.Type)) { |
|
257 |
+ |
|
258 |
+ // If there is no nat network create one from the first NAT network |
|
259 |
+ // encountered |
|
260 |
+ if !defaultNetworkExists && runconfig.DefaultDaemonNetworkMode() == containertypes.NetworkMode(strings.ToLower(v.Type)) { |
|
260 | 261 |
name = runconfig.DefaultDaemonNetworkMode().NetworkName() |
262 |
+ defaultNetworkExists = true |
|
261 | 263 |
} |
262 | 264 |
|
263 | 265 |
v6Conf := []*libnetwork.IpamConf{} |
... | ... |
@@ -292,26 +308,38 @@ func initBridgeDriver(controller libnetwork.NetworkController, config *Config) e |
292 | 292 |
winlibnetwork.NetworkName: runconfig.DefaultDaemonNetworkMode().NetworkName(), |
293 | 293 |
} |
294 | 294 |
|
295 |
- ipamV4Conf := libnetwork.IpamConf{} |
|
296 |
- if config.bridgeConfig.FixedCIDR == "" { |
|
297 |
- ipamV4Conf.PreferredPool = defaultNetworkSpace |
|
295 |
+ var ipamOption libnetwork.NetworkOption |
|
296 |
+ var subnetPrefix string |
|
297 |
+ |
|
298 |
+ if config.bridgeConfig.FixedCIDR != "" { |
|
299 |
+ subnetPrefix = config.bridgeConfig.FixedCIDR |
|
298 | 300 |
} else { |
299 |
- ipamV4Conf.PreferredPool = config.bridgeConfig.FixedCIDR |
|
301 |
+ // TP5 doesn't support properly detecting subnet |
|
302 |
+ osv := system.GetOSVersion() |
|
303 |
+ if osv.Build < 14360 { |
|
304 |
+ subnetPrefix = defaultNetworkSpace |
|
305 |
+ } |
|
300 | 306 |
} |
301 | 307 |
|
302 |
- v4Conf := []*libnetwork.IpamConf{&ipamV4Conf} |
|
303 |
- v6Conf := []*libnetwork.IpamConf{} |
|
308 |
+ if subnetPrefix != "" { |
|
309 |
+ ipamV4Conf := libnetwork.IpamConf{} |
|
310 |
+ ipamV4Conf.PreferredPool = subnetPrefix |
|
311 |
+ v4Conf := []*libnetwork.IpamConf{&ipamV4Conf} |
|
312 |
+ v6Conf := []*libnetwork.IpamConf{} |
|
313 |
+ ipamOption = libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil) |
|
314 |
+ } |
|
304 | 315 |
|
305 | 316 |
_, err := controller.NewNetwork(string(runconfig.DefaultDaemonNetworkMode()), runconfig.DefaultDaemonNetworkMode().NetworkName(), "", |
306 | 317 |
libnetwork.NetworkOptionGeneric(options.Generic{ |
307 | 318 |
netlabel.GenericData: netOption, |
308 | 319 |
}), |
309 |
- libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil), |
|
320 |
+ ipamOption, |
|
310 | 321 |
) |
311 | 322 |
|
312 | 323 |
if err != nil { |
313 | 324 |
return fmt.Errorf("Error creating default network: %v", err) |
314 | 325 |
} |
326 |
+ |
|
315 | 327 |
return nil |
316 | 328 |
} |
317 | 329 |
|