Commit Graph

836 Commits

Author SHA1 Message Date
Justin Cormack
41d71a29ce Merge pull request #159 from justincormack/diag
update diagnostics now tap-vsockd only runs on WIndows
2016-05-31 15:08:19 +01:00
Justin Cormack
41c1231c47 update diagnostics now tap-vsockd only runs on WIndows
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2016-05-31 15:07:33 +01:00
Rolf Neugebauer
be61d79537 Merge pull request #152 from rneugeba/net-config
[DO NOT MERGE (yet)] config: overwrite resolv.conf and interfaces from database
2016-05-30 14:24:37 +02:00
Rolf Neugebauer
81c8a2a53d config: overwrite resolv.conf and interfaces from database
Allow the host to configure a static IP address for eth0 by setting the
following DB keys:
- net/config: "static" (default or not set -> dhcp)
- net/address: IP address
- net/netmask: netmask in dot notation
- net/gateway: default gateway

Also allow overwriting/setting "/etc/resolve.conf" by writing to
the "etc/resolv.conf" key.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2016-05-30 10:01:42 +02:00
Justin Cormack
d14b248205 Merge pull request #158 from justincormack/driverdir
define driverdir in host setting
2016-05-27 12:05:23 -07:00
Justin Cormack
171921dc9e define driverdir in host setting
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2016-05-27 12:04:49 -07:00
Justin Cormack
79409e4d00 Merge pull request #157 from justincormack/movemount
move log mount to hostsettings not docker startup
2016-05-27 11:47:39 -07:00
Justin Cormack
a597292272 move log mount to hostsettings not docker startup
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2016-05-27 11:41:46 -07:00
Justin Cormack
a6ceb0a580 Merge pull request #156 from justincormack/nologcopy
Do not try to keep log files, fix #154
2016-05-26 14:57:53 -07:00
Justin Cormack
4f7f9cd2fa Do not try to keep log files, fix #154
Signed-off-by: Justin Cormack <justin.cormack@docker.com>
2016-05-26 14:24:05 -07:00
David Scott
a6a1c4b1a6 proxy: remove the dynamic vsock port allocation
On both Mac and Windows we have one well-known port and a SOCKS-like
port to tunnel connections through it. This was necessary on Windows
where ports have well-known GUIDs, but we might as well do it the same
way on both platforms for consistency.

This patch removes the dynamic binding of vsock ports, which fails on
a Windows Moby anyway.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-26 17:01:27 +01:00
Dave Scott
8bc6e72020 Merge pull request #148 from djs55/port-filesystem
On Hyper-V, mount the /port filesystem
2016-05-26 02:51:39 -07:00
Rolf Neugebauer
0f3ef552e1 Merge pull request #151 from rneugeba/virtsock-up
virtsock: update vendored virtosck package
2016-05-23 21:36:04 +01:00
Rolf Neugebauer
8d38a260a7 virtsock: update vendored virtosck package
This fixes a bug on WIndows build newer than 10586.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2016-05-23 21:34:38 +01:00
Dave Scott
53cc46fe71 Merge pull request #150 from rneugeba/kernel-patches-update
kernel: update kernel patches
2016-05-23 12:44:08 -07:00
Rolf Neugebauer
8d32faa823 Merge pull request #149 from djs55/fix-windows-sharing
Hyper-V: mount the filesystem from the default gateway via eth0
2016-05-23 19:35:03 +01:00
Rolf Neugebauer
07a5affe3b kernel: update kernel patches
Added a patch to reduce verbosity of vmbus for unknown GUIDs.
Thes happen on every Hyper-V socket connection.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
2016-05-23 19:01:13 +01:00
Dave Scott
84902f1a55 Merge pull request #131 from djs55/9pmount-vsock
On Hyper-V, mount the database 9P filesystem
2016-05-23 10:24:59 -07:00
David Scott
cce2fd4f85 Hyper-V: mount the filesystem from the default gateway via eth0
When running in VPN mode eth0 and eth1 have default routes, but
eth1 has the lowest metric. However the host CIFS server can
only be contacted via eth0, so always use the eth0 address.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-23 18:18:32 +01:00
David Scott
b921ae7c36 On Hyper-V, mount the /port filesystem
This allows localhost port forwards to be requested if

  native/port-forwarding=true

if set.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-22 18:43:07 +01:00
Dave Scott
6288e9826c Merge pull request #146 from djs55/port-vsockd
proxy: add a multiplexing server frontend
2016-05-22 04:51:53 -07:00
Dave Scott
f5aa6fe66a Merge pull request #147 from djs55/error-on-startup
tap-vsockd: only try to start on Hyper-V
2016-05-22 04:51:34 -07:00
David Scott
d46052773d proxy: update the 9P protocol
We now tell the 9P server

 proto1:ip1:port1:<address for forwarding>

which means please listen on proto1:ip1:port1, then connect to the port
proxy in Moby and tell it the connection is for <address for forwarding>.

Note this requires a corresponding change in hostnet/vpnkit.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-22 12:43:24 +01:00
David Scott
980588b68f proxy: add a multiplexing server frontend
On a Hyper-V system we can only register one listening endpoint (with
a GUID), so we need to accept connections, read a header and then
start the proxy.

If the binary has argv[0] == "proxy-vsockd" then run this new frontend.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-22 12:43:18 +01:00
David Scott
eeba63f8d6 tap-vsockd: only try to start on Hyper-V
This avoids an unnecessary boot-up error on non-Hyper-V hosts.

From review comments on #130

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-22 12:12:01 +01:00
Dave Scott
c779594ab4 Merge pull request #130 from djs55/tap
Add Hyper-V sockets to ethernet proxy
2016-05-22 03:56:40 -07:00
David Scott
da954e93e3 tap-vsockd: add tap-vsockd service to bring up eth1
The tap-vsockd service is started from eth1's pre-up script.

On the Mac: the bind of the AF_HYPERV socket fails, and eth1 is skipped.
On Windows: if there is no database then eth1 is skipped.
On Windows: if the database has network=native then eth1 is brought up.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 21:58:38 +01:00
David Scott
129f7836fd mobyconfig: on Hyper-V connect to the db over AF_HYPERV
We detect Hyper-V by the presence of /sys/bus/vmbus and then run the
/sbin/9pmount-vsock command to establish a socket connection and then
pass the fd to /bin/mount

This patch also hard-codes the database directory

  com.docker.driver.amd64-linux

since we can't use the kernel commandline on Hyper-V hosts. It would
probably be better to expose a generic directory name ( / ?) on all
platforms and configure the datbase to store each VM's configuration
in a different directory.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 21:51:11 +01:00
Dave Scott
49ca65ede8 Merge pull request #145 from djs55/tap-vsockd-tool
tuntap vsock tool
2016-05-21 13:50:03 -07:00
Dave Scott
4482790f48 Merge pull request #144 from djs55/9pmount-vsock-tool
9pmount vsock tool
2016-05-21 13:48:57 -07:00
David Scott
537efa03be 9pmount-vsock: add .gitignore
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 21:42:52 +01:00
David Scott
af556bdc23 9pmount-vsock: add to /sbin
This patch adds the binary to /sbin but does not hook it up.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 21:41:50 +01:00
David Scott
d7863c8882 tap-vsockd: add to /sbin
Install the daemon in /sbin, but don't start it up yet.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 21:15:11 +01:00
Rolf Neugebauer
b6c367d4ac Merge pull request #143 from rneugeba/kernel-vmbus-fix
kernel: update VMBus fix patch from MSFT
2016-05-21 15:27:27 +01:00
David Scott
4fa937d11d tap-vsockd: if the client closes, be prepared to reconnect
In `connect` mode the client looping calling `connect` and `close` on a timer.
This could result in the server accepting the connection and the client accidentally
closing it immediately. This patch makes `tap-vsockd` keep trying to (re-)establish
the connection. Note that daemonization is delayed until after the first successful
negotiation, so attempts to send a packet afterwards should succeed.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:51:32 +01:00
David Scott
1e96379e3f tap-vsockd: use stderr rather than syslog if service guid is wrong
Our convention is to print command-line parse failures to the terminal
to allow easier interactive debugging, rather than sending them to
the syslog.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:51:32 +01:00
David Scott
1805c803a9 tap-vsockd: remove the Windows compatibility shim
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:51:32 +01:00
David Scott
a1d91d2a3d tap-vsockd: support daemonization via a --daemon arg
We daemonize after checking the command-line and binding/connecting
the socket and creating the tap device. Only the ethernet frame
processing happens afterwards.

This patch also includes a new well-known service GUID for the
VPN-proxy ethernet service.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:50:52 +01:00
David Scott
f636321b81 tap-vsockd: support both connect() and accept()
Older versions of the Linux AF_HVSOCK can only accept() as they
don't allow connections to the parent partition. Support both
modes for now.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
f74d52574e tap-vsockd: add a --pidfile <pidfile> argument
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
a4a8d02560 tap-vsockd: exit non-zero if the server cannot start
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
4ffd1742dd tap-vsockd: add basic logging support
By default we write to syslog. If the `--debug` argument is provided
then we also write to stderr.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
4f4c807245 tap-vsockd: set the MAC address on the TAP device
The vmnet protocol expects to tell the client what the MAC address is.
This patch sets it on the TAP device.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
b45ac6d9a8 tap-vsockd: proxy between the hyper-v socket and the tap device
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
853d17e04f tap-vsockd: open the tap device, connect the hvsock and negotiate
Signed-off-by: David Scott <dave@recoil.org>
2016-05-21 14:49:55 +01:00
David Scott
3533ff526e tap-vsockd: remove dead code and ASL references
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
66534816a7 tap-vsockd: add the vmnet protocol definitions
Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 14:49:55 +01:00
David Scott
cd441c5f29 tap-vsockd: add a function to open a TAP device
Signed-off-by: David Scott <dave@recoil.org>
2016-05-21 14:49:55 +01:00
David Scott
17ced40bf4 tap-vsockd: add skeleton with hyper-v sockets
Signed-off-by: David Scott <dave@recoil.org>
2016-05-21 14:49:50 +01:00
David Scott
2f3b1cce02 9pmount-vsock: retry the mount if it fails
The client on the host may time-out the connection attempt after we have
accepted it. If the mount fails, sleep for 1s and try again.

Signed-off-by: David Scott <dave.scott@docker.com>
2016-05-21 13:56:40 +01:00