Commit Graph

60 Commits

Author SHA1 Message Date
4fa9c87644 Just fixing gofmt issues in other people's code.
Upstream-commit: 6756e786ac36d4e5cda46541b5d6e0b2913b6997
Component: engine
2013-08-30 22:02:05 +02:00
2865213e6d Make sure 'Ghost' container is available with allocated IP
Upstream-commit: 2f6ce27fde04456284457ff686c8f78ab9bd6d71
Component: engine
2013-08-21 22:37:58 +08:00
efc4a51c0c Fixed typos
Upstream-commit: 9b2a5964fc2067014f24e26bd2f99873751ebdc3
Component: engine
2013-08-12 18:53:06 +01:00
228a0e9732 Merge pull request #1435 from jpetazzo/userland-proxy-should-listen-on-inaddr-any
* Runtime: Let userland proxy handle container-bound traffic
Upstream-commit: a2f526dadc71e4f7b6aa8d8bbbd0594d24146a78
Component: engine
2013-08-07 15:48:17 -07:00
437d59d219 Let userland proxy handle container-bound traffic
Upstream-commit: fea2d5f2fe81d983efbdd803cef2fd1c70f98ebc
Component: engine
2013-08-06 17:44:39 -07:00
217ae3229e change network range to avoid conflict with EC2 DNS
Upstream-commit: 9f1c9686e0ee47289adeeedd6cf8d5296a058463
Component: engine
2013-08-06 17:24:10 -07:00
ce7a658e04 Make sure the routes IP are taken into consideration + add unit test for network overlap detection
Upstream-commit: f5a8e90d101cd2dbb4ce19543ed15fff48579877
Component: engine
2013-08-01 18:12:39 -07:00
2eba08c4b7 Handle ip route showing mask-less IP addresses
Sometimes `ip route` will show mask-less IPs, so net.ParseCIDR will fail. If it does we check if we can net.ParseIP, and fail only if we can't.
Fixes #1214
Fixes #362
Upstream-commit: 2e72882216ce13169a578614202830a5b084bfb4
Component: engine
2013-08-01 02:42:22 +02:00
be9f5063e4 Merge branch '858-disable-network-configuration' of https://github.com/stfp/docker into stfp-858-disable-network-configuration
Upstream-commit: 8165e51eccd15b7eed3939ada6017ed12b9e81b3
Component: engine
2013-07-23 08:44:12 +00:00
4f8c565f24 Allocate a /16 IP range by default, with fallback to /24. Try a total of 12 ranges instead of 3.
Upstream-commit: 4714f102d72f03159acd0f7be71cde3d169c06b8
Component: engine
2013-07-22 12:06:24 -07:00
ca9f0f0f1d Support completely disabling network configuration with docker -d -b none
Upstream-commit: 49673fc45cc5cfc15219bf1eb6eaff7621696919
Component: engine
2013-07-21 17:49:09 -07:00
c69035fce1 Add support for UDP (closes #33)
API Changes
-----------

The port notation is extended to support "/udp" or "/tcp" at the *end*
of the specifier string (and defaults to tcp if "/tcp" or "/udp" are
missing)

`docker ps` now shows UDP ports as "frontend->backend/udp". Nothing
changes for TCP ports.

`docker inspect` now displays two sub-dictionaries: "Tcp" and "Udp",
under "PortMapping" in "NetworkSettings".

Theses changes stand true for the values returned by the HTTP API too.

This changeset will definitely break tools built upon the API (or upon
`docker inspect`). A less intrusive way to add UDP ports in `docker
inspect` would be to simply add "/udp" for UDP ports but it will still
break existing applications which tries to convert the whole field to an
integer. I believe that having two TCP/UDP sub-dictionaries is better
because it makes the whole thing more clear and more easy to parse right
away (i.e: you don't have to check the format of the string, split it
and convert the right part to an integer)

Code Changes
------------

Significant changes in network.go:

- A second PortAllocator is instantiated for the UDP range;
- PortMapper maintains separate mapping for TCP and UDP;
- The extPorts array in NetworkInterface is now an array of Nat objects
  (so we can know on which protocol a given port was mapped when
  NetworkInterface.Release() is called);
- TCP proxying on localhost has been moved away in network_proxy.go.

localhost proxy code rewrite in network_proxy.go:

We have to proxy the traffic between localhost:frontend-port and
container:backend-port because Netfilter doesn't work properly on the
loopback interface and DNAT iptable rules aren't applied there.

- Goroutines in the TCP proxying code are now explicitly stopped when
  the proxy is stopped;
- UDP connection tracking using a map (more infos in [1]);
- Support for IPv6 (to be more accurate, the code is transparent to the
  Go net package, so you can use, tcp/tcp4/tcp6/udp/udp4/udp6);
- Single Proxy interface for both UDP and TCP proxying;
- Full test suite.

[1] https://github.com/dotcloud/docker/issues/33#issuecomment-20010400
Upstream-commit: fac0d87d00ada08309ea3b82cae69beeef637c89
Component: engine
2013-07-09 17:42:35 -07:00
8f5746f4d9 Mutex style change.
For structs protected by a single mutex, embed the mutex for more
concise usage.

Also use a sync.Mutex directly, rather than a pointer, to avoid the
need for initialization (because a Mutex's zero-value is valid and
ready to be used).
Upstream-commit: 1cf9c80e976fb60b4d5d489cd1c4c9959bcc4f7f
Component: engine
2013-07-02 15:53:08 -07:00
9cf4a66364 Remove code unreachable using Go 1.1
Upstream-commit: 50b70eeb6830040db73c8b2b389d881a3200de8d
Component: engine
2013-06-20 23:19:44 -04:00
231e68638d specify public port
Upstream-commit: 95d66ebc6b068f2762d1a8bf3f78cd78d6ab4900
Component: engine
2013-06-10 13:56:43 +00:00
82ddfc6a07 Put back panic for go1.0.3 compatibility
Upstream-commit: 7ef9833dbb299ebf796092a6921127ea77d38337
Component: engine
2013-06-04 14:26:40 -07:00
4747c5b99f linted names
Upstream-commit: fd224ee590dc9f003f6507b529a9f47cceb02c44
Component: engine
2013-06-04 18:00:22 +00:00
9c0086fb7d drop/omit
Upstream-commit: 86ada2fa5d00820288df8a59eca3deef83f4aeb6
Component: engine
2013-06-04 13:51:12 +00:00
51d3c4635e go vet
Upstream-commit: b515a5a9ec5792c67be5fe8476df96903f43df71
Component: engine
2013-06-04 13:24:58 +00:00
bc6fad489c Create a subpackage for utils
Upstream-commit: 2e69e1727b4d5698a90c24c5800eecd5401dc319
Component: engine
2013-05-14 22:37:35 +00:00
2d0d73c6f3 Shutdown loopback-to-loopback proxy when unmapping a port
Upstream-commit: 7f1a32b9ff31bd931e9495acc1d5ccdef4bd51b6
Component: engine
2013-04-19 20:44:25 -07:00
1cb0701d9b Emulate DNAT in userland for loopback-to-loopback connections. This makes container ports available from localhost.
Upstream-commit: 930e9a7e430a3d78e09a95bb32d9fb6052e7dae1
Component: engine
2013-04-19 19:35:44 -07:00
66366b4f1d Exclude loopback-to-loopback connections from DNAT rules, to allow userland proxying
Upstream-commit: 61259ab4b4bfe3404e75dd811a2da7c88e7c7133
Component: engine
2013-04-19 19:32:32 -07:00
ebb6835d20 Go fmt
Upstream-commit: 22893429ed29dbb7a01eed7a90a4d1fbecfd5d90
Component: engine
2013-04-12 07:37:24 -07:00
03ac5529c3 Make it more clear when Docker fails to allocate a free IP range for its bridge
Upstream-commit: 1601366cb6bfb9671ec28ced0bf88d11049264d3
Component: engine
2013-04-08 18:16:58 -07:00
329e4c0143 Changed default bridge interface do 'docker0'
Upstream-commit: 8cf30395a1a338c7c34adda0ae59ba8b2f9370cd
Component: engine
2013-04-05 14:16:19 -07:00
3bb1012d01 Merge remote-tracking branch 'origin/219-default-bridge-2'
Upstream-commit: 793c1ad9909701a8b89ac6731ac266048e48ec46
Component: engine
2013-04-05 14:02:16 -07:00
f49bdcbf33 Add tests of tcp port allocator
Upstream-commit: febaeebfb8848265267213b2f6a6fc3a40ad90f1
Component: engine
2013-04-05 13:03:24 -07:00
4e013b9e8e Fix a race condition when running the port allocator
Upstream-commit: d32f184696519f909d1db56a060b39f0a08b41c5
Component: engine
2013-04-05 13:03:04 -07:00
e9f0c90d6d Choose which TCP frontend port to allocate with '-p :PORT'
Upstream-commit: 2aad4a34785a1b0d02d910a14dbb9b0d6d3edc17
Component: engine
2013-04-04 22:58:01 -07:00
c15214a816 Refactored PortAllocator to allow for same-frontend constraint
Upstream-commit: a5fb1d6c0105bb6d93c6b6890aa33bd99115973a
Component: engine
2013-04-04 22:56:12 -07:00
cee3dd3980 Renamed PortAllocator.populate() to run()
Upstream-commit: f344212b93cc1de672a6a09906b719c2e287d558
Component: engine
2013-04-04 19:49:32 -07:00
6b2f94ee3c Print a less confusing error message when lxcbr0 doesn't exist
Upstream-commit: 0424998f3885b715ad0fae074170a9be19c95680
Component: engine
2013-04-04 19:14:10 -07:00
b7d6bc48b8 Merge remote-tracking branch 'dominikh/minor-code-touchups'
Upstream-commit: 586a79cca0c0b7f432e31807e3b8ca79d565c27e
Component: engine
2013-04-04 16:20:37 -07:00
7286773837 Continue cleaning up iptables rules from previous version, to avoid crashing after an upgrade
Upstream-commit: ebc837957fb45c4ba4768a2344ea7b551bbb86e5
Component: engine
2013-04-04 15:16:42 -07:00
f74f70aea0 stop looping remote:port from host to containers
Upstream-commit: 32f58114766886fc38b66949bc3c0625dc225ade
Component: engine
2013-04-04 23:07:10 +03:00
5140fcb35f Move the default bridge name to a constant
Upstream-commit: 1b370f9d8dbd1c476db766e8587617e795570d97
Component: engine
2013-04-04 05:33:28 -07:00
ad744d80e7 If bridge does not exists, try to create it
Upstream-commit: aa4bf4284b4d18874544368349cb9575d8412de8
Component: engine
2013-04-03 16:17:03 -07:00
d25d9d9cff Add an helper function to check if two network overlaps. Also add unit tests for this function
Upstream-commit: 90a6e310fe4c70b99f9fa5c8d8615e2382edba0b
Component: engine
2013-04-03 16:15:43 -07:00
ae8058f403 Put the bridge interface name in the command line
Upstream-commit: f39af7e05da437d6ac95b19ccfa401598d1fb5d9
Component: engine
2013-04-03 16:15:43 -07:00
0e99b6b989 Fix NAT problem with ports looping back to containers
Upstream-commit: 3b65be9127865fd894edea4d0b7de0ab92421018
Component: engine
2013-04-04 01:32:46 +03:00
d6aac87dba replace unreachable returns with panics
Not only is this a more common idiom, it'll make finding bugs easier,
and it'll make porting to Go 1.1 easier.

Go 1.1 will not require the final return or panic because it has a
notion of terminating statements.
Upstream-commit: 22f1cc955dbf25132e69d126f8db0e5498bffbd2
Component: engine
2013-04-03 11:18:23 +02:00
8a40ce58f3 Make IP allocator lazy
Instead of allocating all possible IPs in advance, generate them as
needed.

A loop will cycle through all possible IPs in sequential order,
allocating them as needed and marking them as in use. Once the loop
exhausts all IPs, it will wrap back to the beginning. IPs that are
already in use will be skipped. When an IP is released, it will be
cleared and be available for allocation again.

Two decisions went into this design:

1) Minimize memory footprint by only allocating IPs that are actually
in use

2) Minimize reuse of released IP addresses to avoid sending traffic to
the wrong containers

As a side effect, the functions for IP/Mask<->int conversion have been
rewritten to never be able to fail in order to reduce the amount of
error returns.

Fixes gh-231
Upstream-commit: 6f9a67a7c7cb717ad1a575df3e4c0fd2ec8bc651
Component: engine
2013-04-01 06:02:44 +02:00
46acd15bd1 Handling iptables() errors more usefully during portmapper setup
Upstream-commit: 523803d633e3bf7e4076ad41e73daba491da5d40
Component: engine
2013-03-28 14:44:54 -05:00
de000293fa Return error when iptables is not found
Upstream-commit: c66d2b6a532c657b554ffa3c80b2cf15e218ee8e
Component: engine
2013-03-28 14:30:56 -05:00
ef4aab72d7 Looking for iptables in PATH
Upstream-commit: dfc3904f778996a449ef5199e36fce6cabfb803a
Component: engine
2013-03-28 14:02:50 -05:00
b293dc1722 Merge pull request #138 from srid/handle-port-mapper-error
handle errors during the creation of port mapper
Upstream-commit: 51455b1ee0f120d20d511e3f76786b9d688ceeff
Component: engine
2013-03-24 10:27:03 -07:00
450d1a6d33 handle errors during the creation of port mapper
example:

  2013/03/22 21:42:55 Unable to setup port networking: Failed to create DOCKER chain

  (which was possibly introduced by commit 3c6b8bb88)
Upstream-commit: 371225520fc86fa58fadd182730b958a0f7ef9ab
Component: engine
2013-03-22 21:44:01 -07:00
8664639f32 Properly cleanup iptables rules inserted in OUTPUT (introduced in 3c6b8bb8882fcd2083d1c489df3cc40062b4896c)
Upstream-commit: 301a8afff578a8467e98f1081aa96323c458e1f1
Component: engine
2013-03-22 22:31:20 -07:00
2b380dac90 Fixing Issue #98: Adding DOCKER to output chain during iptables setup
Upstream-commit: 3c6b8bb8882fcd2083d1c489df3cc40062b4896c
Component: engine
2013-03-22 11:28:15 -05:00