Commit Graph

83 Commits

Author SHA1 Message Date
Gabi Beyer
e93bf967d2 network: Add tuntap device
The tuntap network device is for tuntap interfaces to connect
to the container. A specific use case is the slirp4netns tap
interface for rootless kata-runtime.

Fixes: #1878

Signed-off-by: Gabi Beyer <gabrielle.n.beyer@intel.com>
2019-09-26 16:17:16 +02:00
Peng Tao
d90eba8593 network: always cold unplug network devices
We don't really need to unplug it from guest because we have
already stopped it. Just detach it and clean it up.

Fixes: #1968
Signed-off-by: Peng Tao <bergwolf@hyper.sh>
2019-08-15 00:02:52 -07:00
Archana Shinde
df7cf77a08 network: Ignore routes with proto as "kernel"
Routes with proto "kernel" are routes that are automatically added
by the kernel.
It is a route added automatically when you assign an address to an
interface which is not /32.
With this commit, these routes are ignored. The guest kernel
would add these routes on the guest side. A corresponding commit on the
agent side would no longer delete these routes while updating them.

Without this commit, netlink gives an error complaining that a route
already exists when you try to add a route with the same dest subnet.

Something like:
dest: 192.168.1.0/24 device:net1 source:192.168.1.217 scope:253
dest: 192.168.1.0/24 device:net2 source:192.168.1.218 scope:253

Depends-on: github.com/kata-containers/agent#624

Fixes: #1811

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2019-08-06 21:39:11 +00:00
Fupan Li
100db8abdc Merge pull request #1670 from xs3c/fix-vfio-hang
shim v2: Close vhostfd after vm get vhostfd
2019-05-21 14:53:26 +08:00
Yang, Wei
071030b784 shimv2: Close vhostfd after vm get vhostfd
If kata containers is using vfio and vhost net,the unbinding
of vfio would be hang. In the scenario, vhost net kernel thread
takes a reference to the qemu's mm, and the reference also includes
the mmap regions on the vfio device file. so vhost kernel thread
would be not released when qemu is killed as the vhost file
descriptor still is opened by shim v2 process, and the vfio device
is not released because there's still a reference to the mmap.

Fixes: #1669

Signed-off-by: Yang, Wei <w90p710@gmail.com>
Signed-off-by: Eric Ernst <eric.ernst@intel.com>
2019-05-16 13:31:11 +08:00
Zha Bin
bdb1047a67 network: delete IP addrs on bridge model to prevent ARP conflict
Fixes: #1673

Signed-off-by: Zha Bin <zhabin@linux.alibaba.com>
2019-05-15 22:48:23 +08:00
Zha Bin
dd0808ae54 network: pass network interface RawFlags to agent
In order to support NOARP in ipvlan interface, the runtime
will pass the rawflags to agent, which also apply to other
network interfaces, not just ipvlan.

Fixes: #1391

Signed-off-by: Zha Bin <zhabin@linux.alibaba.com>
2019-04-23 09:42:00 +08:00
Archana Shinde
385268226f network: Change the package level network default
Change the package level default network model to tcfilter.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2019-04-15 09:34:58 -07:00
Gabi Beyer
c42507903d vc: Deprecate CC proxy and shim
Clear Containers proxy and shim are no longer supported. This
was mentioned in issue #1113. Their functionalities are thus
removed from the runtime.

Fixes #1419

Signed-off-by: Gabi Beyer <gabrielle.n.beyer@intel.com>
2019-04-12 10:48:08 -07:00
Ruidong Cao
36141d27fc Network: add ipvlan unmarshal
We have 7 types of endpoints, but forget ipvlan in unmarshal funciton.
So add it and refactor for cyclomatic complexity reason.

Fixes #1254

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2019-02-23 01:25:26 +08:00
Samuel Ortiz
18dcd2c2f7 virtcontainers: Decouple the network API from the sandbox one
In order to fix #1059, we want to create a hypervisor package. Some of
the hypervisor implementations (qemu) depend on the network and endpoint
interfaces. We can not have a virtcontainers -> hypervisor -> network,
endpoint -> virtcontainers cyclic dependency.
So before creating the hypervisor package, we need to decouple the
network API from the virtcontainers one.

Fixes: #1180

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-25 15:25:49 +01:00
Samuel Ortiz
b39cb1d13a virtcontainers: Remove the network interface
There's only one real implementer of the network interface and no real
need to implement anything else. We can just go ahead and remove this
abstraction.

Fixes: #1179

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-25 15:25:46 +01:00
Samuel Ortiz
b25f43e865 virtcontainers: Add Capabilities to the types package
In order to move the hypervisor implementations into their own package,
we need to put the capabilities type into the types package.

Fixes: #1119

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-14 20:30:06 +01:00
Samuel Ortiz
3ab7d077d1 virtcontainers: Alias for pkg/types
Since we're going to have both external and internal types packages, we
alias the external one as vcTypes. And the internal one will be usable
through the types namespace.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-01-08 14:24:06 +01:00
Sebastien Boeuf
0f1fde498d virtcontainers: network: Use multiqueue flag only when appropriate
The multiqueue flag associated with the TUNTAP network device cannot
be used if the number of queues indicates 0. When 0, this means the
multiqueue is not supported, and we cannot use the according flag.

Fixes #1051

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-12-18 11:06:06 -08:00
Sebastien Boeuf
a1af1cb099 virtcontainers: network: Rely on hypervisor capabilities for multi queues
In order to properly setup the network, hence allocate or not multiple
queues, this commit makes sure that the hypervisor capabilities are
checked for this.

Fixes #1027

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-12-14 15:39:25 -08:00
Sebastien Boeuf
0bcd221fad virtcontainers: network: Rename numCPUs to queues
The point of knowing the number of CPUs from the network perspective
is to determine the number of queues that can be allocated to the
network interface of the our virtual machine.

Therefore, it's more logical to name it queues from a network.go
perspective.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-12-14 15:08:55 -08:00
Sebastien Boeuf
2cb4bb9db7 virtcontainers: network: Reorganize endpoints interconnection
In order to prevent from future duplication of calls into the
hypervisor interface, the hypervisor is directly passed as part
of the xConnectVMNetwork() function. Because this does not apply
the disconnection case, this commit splits the former function
into two separate ones.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-12-14 14:50:11 -08:00
Ruidong Cao
2f98b3ee90 network: support hotplug a nic several times
Bind back the nic's MAC in HotDetach. So we don't need to modify
nic's MAC in description to hotplug it again.

Fixes: #894

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-11-09 17:21:03 +08:00
Archana Shinde
f81db93ef0 Merge pull request #885 from caoruidong/test
network: Use constant string for "none" network model
2018-11-05 14:18:04 -08:00
Ruidong Cao
8ddc0ceefb network: Use constant string for "none" network model
Align with other network models.

Fixes #884.

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-11-06 02:28:49 +08:00
Sebastien Boeuf
7bf84d05ad types: Replace agent/pkg/types with virtcontainers/pkg/types
This commit replaces every place where the "types" package from the
Kata agent was used, with the new "types" package from virtcontainers.

In order to do so, it introduces a few translation functions between
the agent and virtcontainers types, since this is needed by the kata
agent implementation.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-11-02 08:46:11 -07:00
Peng Tao
e9aa870255 network: enable network hotplug for vm factory
After we scan the netns, we should hotplug the network interface to
the guest after it is kicked off running.

Fixes: #871

Signed-off-by: Peng Tao <bergwolf@gmail.com>
2018-11-01 09:33:16 +08:00
Peng Tao
21a671eabe network: set endpoint pci address when hotplug
So that agent can use it to check and wait for the requested nic.

Signed-off-by: Peng Tao <bergwolf@gmail.com>
2018-10-30 11:43:40 +08:00
Peng Tao
6d17e27de0 Merge pull request #852 from amshinde/ipvlan
Add support for ipvlan network driver
2018-10-29 16:41:05 +08:00
Sebastien Boeuf
309dcf9977 vendor: Update the agent vendoring based on pkg/types
Some agent types definition that were generic enough to be reused
everywhere, have been split from the initial grpc package.

This prevents from importing the entire protobuf package through
the grpc one, and prevents binaries such as kata-netmon to stay
in sync with the types definitions.

Fixes #856

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-10-26 09:35:59 -07:00
Archana Shinde
0acbbf0651 network: Add support for ipvlan
Support ipvlan interfaces by setting up tc redirect rules.

Fixes #591

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-25 18:58:48 -07:00
Archana Shinde
17be8e37f5 network: Introduce constants for the network model strings
Introduce constants for the network model strings, so as to
avoid using the strings directly at multiple places.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-24 13:37:54 -07:00
Archana Shinde
e20dbd04e0 network: Use tc redirect filter to redirect traffic to the VM
Introduce a new mode that uses tc filters to redirect traffic from
the network interface created by the network plugin to a
tap interface that we connect to the VM.
This mode will help support ipvlan as well.

Fixes #144

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-24 10:46:00 -07:00
zhangwei_cs
5a8b738818 Merge pull request #733 from caoruidong/qemu-ns
cli: add configuration option to use or not use host netns
2018-10-24 11:35:33 +08:00
Ruidong Cao
14e5437cae cli: add configuration option to use or not use host netns
If `disable_new_netns` set to true, create VM and shim processes in the host netns

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-10-22 21:06:58 +08:00
Ruidong Cao
6935279beb network: add new NetInterworkingModel "none" and endpoint type TapEndpoint
This model is for not creating a new net ns for VM and directly
creating taps in the host net ns.

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-10-22 21:06:58 +08:00
Ruidong Cao
f8f29622a4 virtcontainers: refactor hotplug qmp functions
Refactor these functions so differernt types of endpoints can use a unified
function to hotplug nics.

Fixes #731

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-10-22 21:06:56 +08:00
Archana Shinde
21d38e9948 network: Marshal BridgedMacvlanEndpoint and MacvtapEndpoint
These were skipped.
Fixes #842

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-19 09:29:24 -07:00
Archana Shinde
ab15498bdf network: Explicitly check for veth type
Explicitly check for "veth" intergace type while creating a
veth endpoint. Error out for unsupported network interfaces.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-11 14:45:57 -07:00
Archana Shinde
3c590b0e2c network: Rename VirtualEndpoint to VethEndpoint
As this really represents a veth pair rather than a generic
virtual interface, rename VirtualEndpoint to VethEndpoint.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-11 14:45:57 -07:00
Archana Shinde
adcd9106f9 network: Refactor network.go
Split endpoint implementations into their own file.

Fixes #799

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-11 14:45:55 -07:00
Archana Shinde
8f1b28da34 network: Sort endpoints by name
Sort endpoints by name to control the order in which
they are passed to the VM as the interface name inside
the VM depends on the order in which it is passed.

Long term we should come up with a more robust approach.

Fixes #785

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-11 09:23:49 -07:00
Archana Shinde
def070d651 golint: Refactor to reduce cyclomatic complexity
Introduce function  getLinkForEndpoint to reduce cyclomatic
complexity.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-02 17:39:48 -07:00
Archana Shinde
417c1f07f9 macvtap: Add support for macvtap
Plugin may provide a macvtap interface. Add support for
directly attaching this to the VM.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-02 17:39:48 -07:00
Archana Shinde
581ff17857 macvlan: Assign random MAC address
Macvtap interfaces require mac addresses to be unique even
though they may be in a separate namespace. Hence use a randomly
generate MAC address.

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-02 16:23:50 -07:00
Archana Shinde
8847af8343 network: Add support for macvlan driver
Add support for macvlan driver by bridging it with a macvtap or
tap+bridge and moving the mac and ip address from the
macvlan to the bridged interface.

Fixes #162

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-10-02 16:23:50 -07:00
Ruidong Cao
ec87dca2d8 virtcontainers: support vhost and physical endpoints in AddInterface
Support to hotplug vhost and physical endpoints by AddInterface API

Fixes #758

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-09-22 03:10:59 +08:00
Sebastien Boeuf
1406d99aba virtcontainers: Start network monitor from virtcontainers
This patch enables the code responsible for starting and stopping
the network monitor.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-09-14 09:15:53 -07:00
Sebastien Boeuf
29e2fa0fed virtcontainers: Avoid conflict with network monitor
Because the network monitor will be listening to every event received
through the netlink socket, it will be notified everytime a new link
will be added/updated/modified in the network namespace it's running
into. The goal being to detect new interface added by Docker such as
a veth pair.

The problem is that kata-runtime will add other internal interfaces
when the network monitor will ask for the addition of the new veth
pair. And we need a way to ignore those new interfaces being created
as they relate to the veth pair that is being added. That's why, in
order to prevent from running into an infinite loop, virtcontainers
needs to tag the internal interfaces with the "kata" suffix so that
the network monitor will be able to ignore them.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-09-14 09:15:53 -07:00
Ruidong
225e10cfc4 cli: add configuration option to enable/disable vhost_net
Add `disable_vhost_net` option to enable or disable the use of
vhost_net. Vhost_net can improve network performance.

Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
2018-09-14 00:14:03 +08:00
Archana Shinde
63785caf04 network: Use the number of CPUS to set the multiqueue size
Instead of using a default queue size of 8 for macvtap fds,
use the number of CPUs on the guest as the queue size.
This is the recommended approach. This also shown better
performance results.

Fixes #680

Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
2018-09-12 12:18:48 -07:00
James O. D. Hunt
ed1e343b93 Merge pull request #655 from WeiZhang555/add-ref-counter-for-devices
Add ref counter for devices
2018-09-06 09:51:07 +01:00
Wei Zhang
7f4b221bc3 devices: share genericDevice logic among devices
Fixes #635

Shares generic device logic among all device drivers to reduce
duplicated codes.

Signed-off-by: Wei Zhang <zhangwei555@huawei.com>
2018-08-31 09:53:01 +08:00
Sebastien Boeuf
cb351dca10 network: Create network namespace from the CLI
This commit moves the network namespace creation out of virtcontainers
in order to anticipate the move of the OCI hooks to the CLI through a
follow up commit.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-08-24 14:19:23 -07:00