Commit Graph

105 Commits

Author SHA1 Message Date
Jana Radhakrishnan 9da326c854 Merge pull request #211 from mavenugo/bn
WIP : default configs for new network in bridge driver
2015-06-04 11:58:14 -07:00
Madhu Venugopal 64a0d66696 Copy default configs from default Bridge to new bridge if not user configured
Also fixed a minor bug in client to choose bridge as the default driver.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-06-04 11:48:31 -07:00
Jana Radhakrishnan d982a2dfeb Merge pull request #255 from mavenugo/dhd
Moving hostdiscovery under build tag
2015-06-04 11:33:43 -07:00
Madhu Venugopal 4e68dfb97a Merge pull request #239 from aboch/pmc
One port mapper per bridge network
2015-06-04 05:24:00 -07:00
Madhu Venugopal 4d06bbd2e6 Fixing a few go-vet issues
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-06-04 04:32:10 -07:00
Jana Radhakrishnan 4abd4bc1de Merge pull request #253 from aboch/ex
Change in bridge EndpointOperInfo()
2015-06-03 20:59:04 -07:00
Alessandro Boch 349def334c Change in bridge EndpointOperInfo()
- To also return the configured exposed ports, besides the
  port bindings; as now libnetwork/endpoint.go endpoint setters
  separate the exposed ports and port binding configs.
  Docker daemon will take care of aggregating the two sources
  for presentation.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-06-03 20:28:15 -07:00
aboch 5455132c59 Merge pull request #240 from Metaswitch/remote-driver-static-routes
Add static routes to the remote driver.
2015-06-03 16:51:56 -07:00
Tom Denham 54fe285107 Add static routes to the remote driver.
Signed-off-by: Tom Denham <tom.denham@metaswitch.com>
2015-06-03 16:31:21 -07:00
aboch 67c1ecb550 Merge pull request #241 from Metaswitch/remote-driver-dstprefix
Update remote driver to use destination prefix.
2015-06-03 14:40:36 -07:00
Madhu Venugopal 038e7efd83 Merge pull request #220 from jhowardmsft/10662-compile
Windows: Enable compile
2015-06-02 16:06:50 -07:00
Madhu Venugopal 9669dbaf0b Fixes https://github.com/docker/docker/issues/13426
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-06-02 15:50:38 -07:00
Jana Radhakrishnan 0a81ebd745 Modprobe bridge driver r specific kernel modules
Try too modprobe bridge driverer specic modulein case
they are not loaded into the kernel.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-06-02 15:49:45 -07:00
Tom Denham 3613483222 Update remote driver to use destiantion prefix.
Required since #193

Signedeoff-by: Tom Denham <tom.denham@metaswitch.com>
2015-06-01 15:35:57 -07:00
Alessandro Boch ba0a84f5d0 One port mapper per bridge network
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-06-01 13:14:29 -07:00
John Howard 1910fd5f93 Windows: Enable compile
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-05-26 10:46:21 -07:00
Tom Denham b646784859 Allow drivers to supply static routes for interfaces
Signed-off-by: Tom Denham <tom.denham@metaswitch.com>
2015-05-25 19:25:30 -07:00
Alessandro Boch fe8d356dde In bridge, network config to be validated last
- Currently validation is run before the processing
  of well-known labels is completed.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-24 12:01:55 -07:00
Alessandro Boch cb73df3d60 Bridge driver to support multiple networks
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-24 07:59:34 -07:00
Alessandro Boch 9f2286349b Support network options in rest api
- Also unexporting configuration structures in bridge
- Changes in dnet/network.go to set bridge name = network name

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-23 20:12:29 -07:00
Jana Radhakrishnan 647975a330 Modify driver Join api to only allow dst prefix
Currently the driver api allows the driver to specify the
full interface name for the interface inside the container.
This is not appropriate since the driver does not have the full
view of the sandbox to correcly allocate an unambiguous interface
name. Instead with this PR the driver will be allowed to specify
a prefix for the name and libnetwork and sandbox layers will
disambiguate it with an appropriate suffix.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-21 20:17:44 +00:00
Michael Bridgen b18eff4940 Remote driver implementation
In essense, this just involves marshalling structs back and forth to a
remote process, via the plugin client. There are a couple of types
that don't JSONify well, notably `net.IPNet`, so there is some
translation to be done.

To conform to the driverapi interface, we must give the list of
endpoint interfaces to the remote process, and let it puzzle out what
it's supposed to do; including the possibility of returning an error.

The constraints on EndpointInfo are enforced by the remote driver
implementation; namely:

 * It can't be nil

 * If it's got non-empty Interfaces(), the remote process can't put
   more in

In the latter case, or if we fail to add an interface for some
(future) reason, we try to roll the endpoint creation back. Likewise
for join -- if we fail to set the fields of the JoinInfo, we roll the
join back by leaving.

Signed-off-by: Michael Bridgen <mikeb@squaremobius.net>
2015-05-21 19:32:41 +01:00
Alessandro Boch 50964c9948 Provide interface to categorize errors
- Package types to define the interfaces libnetwork errors
  may implement, so that caller can categorize them.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-20 22:29:29 -07:00
Jana Radhakrishnan 7783fcd13f Move network types to types package
This is need to decouple types from netutils which has linux
dependencies. This way the client code which needs network types
can just pull in types package which makes client code platform
agnostic.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-20 20:28:46 +00:00
Alessandro Boch 56369550a7 Optional Userland Proxy
- Port https://github.com/docker/docker/pull/12165 to libnetwork
- More tests will be added later

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-18 18:13:39 -07:00
Jana Radhakrishnan d8ba1e2310 Driver api refactor
Refactored the driver api so that is aligns well with the design
of endpoint lifecycle becoming decoupled from the container lifecycle.
Introduced go interfaces to obtain address information during CreateEndpoint.
Go interfaces are also used to get data from driver during join.
This sort of deisgn hides the libnetwork specific type details from drivers.

Another adjustment is to provide a list of interfaces during CreateEndpoint. The
goal of this is many-fold:
     * To indicate to the driver that IP address has been assigned by some other
       entity (like a user wanting to use their own static IP for an endpoint/container)
       and asking the driver to honor this. Driver may reject this configuration
       and return an error but it may not try to allocate an IP address and override
       the passed one.
     * To indicate to the driver that IP address has already been allocated once
       for this endpoint by an instance of the same driver in some docker host
       in the cluster and this is merely a notification about that endpoint and the
       allocated resources.
     * In case the list of interfaces is empty the driver is required to allocate and
       assign IP addresses for this endpoint.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-18 22:36:00 +00:00
Madhu Venugopal c756c47613 Remote Driver integration with Plugin Framework
This commit brings in Remote driver integrated with the newly introduced
Plugin framework as a Docker Package.

The Plugin framework is designed as a Package and has no runtime
dependancy on Docker platform. It stands on its own and is a good
candidate for getting the remote drivers hooked to libnetwork

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-05-18 13:42:19 -07:00
Alessandro Boch ee72ee177d Remove pkg directory
- As recommended by Docker committers.
- Will introduce internal directory when go supports it

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-16 16:12:13 -07:00
Jana Radhakrishnan 3c1dd60ebb Fix issue in ipv6 when a non-default link-local ipv6 address is present.
If the bridge exists and it exists with a different link local ip address
than fe80::1/64 then we waifl to accept that as a valid configuration without
trying to add the default link local ip address. With this fix we always try
to add the default link local address if it doesn't exist.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-12 23:43:06 +00:00
Michael Bridgen c6e78965a9 Make driver packages register themselves via DriverCallback
In the present code, each driver package provides a `New()` method
which constructs a driver of its type, which is then registered with
the controller.

However, this is not suitable for the `drivers/remote` package, since
it does not provide a (singleton) driver, but a mechanism for drivers
to be added dynamically. As a result, the implementation is oddly
dual-purpose, and a spurious `"remote"` driver is added to the
controller's list of available drivers.

Instead, it is better to provide the registration callback to each
package and let it register its own driver or drivers. That way, the
singleton driver packages can construct one and register it, and the
remote package can hook the callback up with whatever the dynamic
driver mechanism turns out to be.

NB there are some method signature changes; in particular to
controller.New, which can return an error if the built-in driver
packages fail to initialise.

Signed-off-by: Michael Bridgen <mikeb@squaremobius.net>
2015-05-11 19:00:06 +01:00
Madhu Venugopal 37d554b85f Merge pull request #138 from fmzhen/test-dev
Add some tests
2015-05-10 11:08:31 -07:00
Jana Radhakrishnan 55ce254546 Merge pull request #132 from mavenugo/master
Fixed some convoluted texts in remote.md and fixed a remote driver bug
2015-05-10 10:56:38 -07:00
Mingzhen Feng de690d7348 Add some tests
Signed-off-by: Mingzhen Feng <fmzhen@zju.edu.cn>
2015-05-08 15:00:59 +08:00
Madhu Venugopal 3db57f2a0e Fixed some convoluted texts in remote.md and fixed a remote driver bug
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-05-07 11:55:46 -07:00
bin liu 51ec188af7 fix some typos
Signed-off-by: bin liu <liubin0329@gmail.com>
2015-05-07 09:22:06 +00:00
Madhu Venugopal 0011d46ead Remote Driver Registration
This commits brings in a functionality for remote drivers to register
with LibNetwork. The Built-In remote driver is responsible for the
actual "remote" plugin to be made available.

Having such a mechanism makes libnetwork core not dependent on any
external plugin mechanism and also the Libnetwork NB apis are free of
Driver interface.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-05-06 21:45:30 -07:00
Jana Radhakrishnan 44c96449c2 Brought in iptables package into libnetwork.
Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-06 23:52:50 +00:00
Jana Radhakrishnan 94fd20f941 Added support for network specific enable ipv6 label
Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-06 17:43:34 +00:00
Jana Radhakrishnan e1b5e17165 Moved most of the driver configuration to network configuration.
Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-06 17:43:24 +00:00
Jana Radhakrishnan 26779b6fea - Moved label definitions to a new package
- Added a network scope well-defined label
  to enable ipv6

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-06 17:21:19 +00:00
Alessandro Boch 91bc12ef2d In bridge.go: Join(), Leave(), getnetwork() are not thread safe
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-05 19:07:05 -07:00
Jana Radhakrishnan 511459f1af Properly handle Leave by
- Removing interface from the sandbox
  - Deleting Iptable rules in the bridge driver

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-06 00:34:38 +00:00
Alessandro Boch f21785e451 Separate ExposedPorts from PortBindings in libnetwork API
- Fix missing code in tests in 64cceb37ad1c16884d709fd49fba34e8a99d8c41

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-05 16:17:17 -07:00
Mingzhen Feng 417093c3f5 chang the type of ports form PortBinding to TransportPort in link.go
Signed-off-by: Mingzhen Feng <fmzhen@zju.edu.cn>
2015-05-05 16:17:17 -07:00
Jana Radhakrishnan 9897c23464 - Changed ContainerConfiguration to simply use strings
- Made ContainerConfiguration fields to be exported so
  options package can access them.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-05 20:52:12 +00:00
Alessandro Boch c203b3959e Reuse existing docker chain constant in link.go
- in bridge driver

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-05-04 23:53:32 -07:00
Madhu Venugopal 3678144103 Incorrect assumption with golang net package causes Overlapping IP
using a len(net.IP) to check for ipv4 or ipv6 is a bad idea.
And that was exactly done in NetworkOverlaps() function with the
assumption that any ipv4 net.IP will be of 4 bytes. Golang Net package
makes no such assumptions.

This assumption actually broke a particular use-case where the
NetworkOverlaps fails to identify a genuine overlap and that causes
datapath issues.

With this fix, we explicitely check for v4 or v6

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-05-04 22:31:16 -07:00
Jana Radhakrishnan 5f9906ddff - Removed sandbox override option from the driver.
- Reworked the host network mode support by introducing
  a new JoinOption.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-05 04:26:23 +00:00
Jana Radhakrishnan a7ac2c7454 Added mac address to EndpointInfo
Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-05 03:27:34 +00:00
Jana Radhakrishnan c8062e4ad4 Added "host" driver and test code.
Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-05-05 00:16:25 +00:00