diff --git a/libnetwork/drivers/bridge/bridge.go b/libnetwork/drivers/bridge/bridge.go index dd46384cdc..356d229d1d 100644 --- a/libnetwork/drivers/bridge/bridge.go +++ b/libnetwork/drivers/bridge/bridge.go @@ -543,6 +543,9 @@ func (d *driver) getNetworks() []*bridgeNetwork { // Create a new network using bridge plugin func (d *driver) CreateNetwork(id string, option map[string]interface{}, ipV4Data, ipV6Data []driverapi.IPAMData) error { + if len(ipV4Data) == 0 || ipV4Data[0].Pool.String() == "0.0.0.0/0" { + return types.BadRequestErrorf("ipv4 pool is empty") + } // Sanity checks d.Lock() if _, ok := d.networks[id]; ok { diff --git a/libnetwork/drivers/overlay/ov_network.go b/libnetwork/drivers/overlay/ov_network.go index f0b9b2b1f5..306806a8b8 100644 --- a/libnetwork/drivers/overlay/ov_network.go +++ b/libnetwork/drivers/overlay/ov_network.go @@ -63,6 +63,9 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}, ipV4Dat if id == "" { return fmt.Errorf("invalid network id") } + if len(ipV4Data) == 0 || ipV4Data[0].Pool.String() == "0.0.0.0/0" { + return types.BadRequestErrorf("ipv4 pool is empty") + } // Since we perform lazy configuration make sure we try // configuring the driver when we enter CreateNetwork diff --git a/libnetwork/libnetwork_test.go b/libnetwork/libnetwork_test.go index 44348dc1cc..44b636f10d 100644 --- a/libnetwork/libnetwork_test.go +++ b/libnetwork/libnetwork_test.go @@ -2356,3 +2356,10 @@ func TestParallel2(t *testing.T) { func TestParallel3(t *testing.T) { runParallelTests(t, 3) } + +func TestNullIpam(t *testing.T) { + _, err := controller.NewNetwork(bridgeNetType, "testnetworkinternal", libnetwork.NetworkOptionIpam(ipamapi.NullIPAM, "", nil, nil, nil)) + if err == nil || err.Error() != "ipv4 pool is empty" { + t.Fatal("bridge network should complain empty pool") + } +}