While this project is fully functional, the dependencies are no longer up to date. You are still welcome to explore, learn, and use the code provided here. Or alternative repositories such as: sriov-cni sriov-network-device-plugin
This repository contains the sriov CNI plugin that allows DPDK driver binding as well as the orginal featuers of sriov-cni. To learn about CNI please visit containernetworking/cni.
NIC with SR-IOV capabilities works by introducing the idea of physical functions (PFs) and virtual functions (VFs).
PF is used by host. Each VFs can be treated as a separate physical NIC and assigned to one container, and configured with separate MAC, VLAN and IP, etc.
This plugin requires Go 1.5+ to build.
Go 1.5 users will need to set GO15VENDOREXPERIMENT=1
to get vendored dependencies. This flag is set by default in 1.6.
#./build
Upon successful build the plugin binary will be available in bin/sriov
.
Given Intel ixgbe NIC on CentOS, Fedora or RHEL:
# vi /etc/modprobe.conf
options ixgbe max_vfs=8,8
name
(string, required): the name of the networktype
(string, required): "sriov"if0
(string, optional): name of the PF, if not provided thenpfNetdevices
is requiredif0name
(string, optional): interface name in the ContainerpfNetdevices
(list, optional) PFs list, if not provided thenif0
is requiredl2enable
(boolean, optional): iftrue
then add VF as L2 mode only, IPAM will not be executedvlan
(int, optional): VLAN ID to assign for the VFipam
(dictionary, optional): IPAM configuration to be used for this network.dpdk
(dictionary, optional): DPDK configuration
If this plugin is use to bind a VF to dpdk driver then the IPAM configtuations will be ignored.
If given, The DPDK configuration expected to have the following parameters
kernel_driver
(string, required): kernel driver namedpdk_driver
(string, required): DPDK capable driver namedpdk_tool
(string, required): path to the dpdk-devbind.py script
# cat > /etc/cni/net.d/10-mynet.conf <<EOF
{
"name": "mynet",
"type": "sriov",
"if0": "enp1s0f1",
"ipam": {
"type": "host-local",
"subnet": "10.55.206.0/26",
"routes": [
{ "dst": "0.0.0.0/0" }
],
"gateway": "10.55.206.1"
}
}
EOF
eth0 Link encap:Ethernet HWaddr 66:D8:02:77:AA:AA
inet addr:10.55.206.46 Bcast:0.0.0.0 Mask:255.255.255.192
inet6 addr: fe80::64d8:2ff:fe77:aaaa/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:530 (530.0 b) TX bytes:988 (988.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
# cat > /etc/cni/net.d/20-mynet-dpdk.conf <<EOF
{
"name": "mynet",
"type": "sriov",
"if0": "enp1s0f1",
"if0name": "net0",
"dpdk": {
"kernel_driver":"ixgbevf",
"dpdk_driver":"igb_uio",
"dpdk_tool":"/opt/dpdk/usertools/dpdk-devbind.py"
}
}
EOF
# cat > /etc/cni/net.d/10-mynet.conf <<EOF
{
"name": "mynet",
"type": "sriov",
"pfNetdevices": ["enp2s0f0", "enp2s0f1"],
"ipam": {
"type": "host-local",
"subnet": "10.55.206.0/26",
"routes": [
{ "dst": "0.0.0.0/0" }
],
"gateway": "10.55.206.1"
}
}
EOF
For any questions about Multus CNI, please reach out on github issue or feel free to contact the developers @kural OR @ahalim in our Intel-Corp Slack