A cloudSwxtch must exist to create a xNIC. See cloudSwXtch System Requirements for more information.
xNIC software
The xNIC software must be run on each virtual machine that is to be part of the IP multicast network and not a cloudSwXtch or a cloudSwXtch Bridge. This software can be installed on hosts which meet the following requirements:
Available Operating Systems
Linux | Windows |
---|---|
Minimum Kernel Version 4.18 |
|
Required Dependencies for xNIC
Certain versions of the available operating systems require additional dependencies for xNIC installation. These must be installed onto the VM before installing the xNIC.
Ubuntu 20.04.6 LTS (Focal Fossa)
libcrypt-dev_1%3a4.4.10-10ubuntu4_amd64.deb
libpcap-dev_1.9.1-3ubuntu1.20.04.1_amd64.deb
manpages-dev_5.05-1_all.deb
libonig5_6.9.4-1_amd64.deb
libctf-nobfd0_2.34-6ubuntu1.9_amd64.deb
libc6-dev_2.31-0ubuntu9.16_amd64.deb
libc-dev-bin_2.31-0ubuntu9.16_amd64.deb
linux-tools-5.4.0-200_5.4.0-200.220_amd64.deb
libpcap0.8-dev_1.9.1-3ubuntu1.20.04.1_amd64.deb
libctf0_2.34-6ubuntu1.9_amd64.deb
libbinutils_2.34-6ubuntu1.9_amd64.deb
libjq1_1.6-1ubuntu0.20.04.1_amd64.deb
binutils-x86-64-linux-gnu_2.34-6ubuntu1.9_amd64.deb
linux-tools-generic_5.4.0.200.196_amd64.deb
linux-libc-dev_5.4.0-200.220_amd64.deb
linux-tools-5.4.0-200-generic_5.4.0-200.220_amd64.deb
binutils_2.34-6ubuntu1.9_amd64.deb
jq_1.6-1ubuntu0.20.04.1_amd64.deb
binutils-common_2.34-6ubuntu1.9_amd64.deb
Ubuntu 22.04.5 LTS (Jammy Jellyfish)
libjpeg8_8c-2ubuntu10_amd64.deb
libfile-fcntllock-perl_0.22-3build7_amd64.deb
libwebp7_1.2.2-2ubuntu0.22.04.2_amd64.deb
linux-tools-5.15.0-126-generic_5.15.0-126.136_amd64.deb
manpages-dev_5.10-1ubuntu1_all.deb
libc-devtools_2.35-0ubuntu3.8_amd64.deb
libpcap-dev_1.10.1-4ubuntu1.22.04.1_amd64.deb
libdpkg-perl_1.21.1ubuntu2.3_all.deb
pkg-config_0.29.2-1ubuntu3_amd64.deb
libjpeg-turbo8_2.1.2-0ubuntu1_amd64.deb
libc-dev-bin_2.35-0ubuntu3.8_amd64.deb
linux-tools-5.15.0-126_5.15.0-126.136_amd64.deb
libtiff5_4.3.0-6ubuntu0.10_amd64.deb
libjq1_1.6-2.1ubuntu3_amd64.deb
libdbus-1-dev_1.12.20-2ubuntu4.1_amd64.deb
fontconfig-config_2.13.1-4.2ubuntu5_all.deb
linux-libc-dev_5.15.0-126.136_amd64.deb
rpcsvc-proto_1.4.2-0ubuntu6_amd64.deb
libcrypt-dev_1%3a4.4.27-1_amd64.deb
libgd3_2.3.0-2ubuntu2.3_amd64.deb
libjbig0_2.1-3.1ubuntu0.22.04.1_amd64.deb
libfontconfig1_2.13.1-4.2ubuntu5_amd64.deb
libpcap0.8-dev_1.10.1-4ubuntu1.22.04.1_amd64.deb
jq_1.6-2.1ubuntu3_amd64.deb
libtirpc-dev_1.3.2-2ubuntu0.1_amd64.deb
linux-tools-generic_5.15.0.126.125_amd64.deb
bzip2_1.0.8-5build1_amd64.deb
libxpm4_1%3a3.5.12-1ubuntu0.22.04.2_amd64.deb
libnsl-dev_1.3.0-2build2_amd64.deb
libc6-dev_2.35-0ubuntu3.8_amd64.deb
libonig5_6.9.7.1-2build1_amd64.deb
fonts-dejavu-core_2.37-2build1_all.deb
libdeflate0_1.10-2_amd64.deb
Red Hat Enterprise Linux 9.2 (Plow)
libnl3-3.7.0-1.el9.x86_64.rpm
libibverbs-44.0-2.el9.i686.rpm
libibverbs-44.0-2.el9.x86_64.rpm
glibc-2.34-60.el9_2.14.x86_64.rpm
glibc-2.34-60.el9_2.14.i686.rpm
libpcap-1.10.0-4.el9.i686.rpm
glibc-common-2.34-60.el9_2.14.x86_64.rpm
glibc-gconv-extra-2.34-60.el9_2.14.i686.rpm
glibc-gconv-extra-2.34-60.el9_2.14.x86_64.rpm
iproute-6.1.0-1.el9.x86_64.rpm
bash-5.1.8-6.el9_1.x86_64.rpm
libnetfilter_conntrack-1.0.9-1.el9.x86_64.rpm
pcre2-syntax-10.40-2.el9.noarch.rpm
zlib-1.2.11-39.el9.x86_64.rpm
libdb-5.3.28-53.el9.x86_64.rpm
oniguruma-6.9.6-1.el9.5.x86_64.rpm
libsepol-3.5-1.el9.x86_64.rpm
libnfnetlink-1.0.1-21.el9.x86_64.rpm
libnl3-3.7.0-1.el9.i686.rpm
ncurses-base-6.2-8.20210508.el9_2.1.noarch.rpm
ncurses-libs-6.2-8.20210508.el9_2.1.x86_64.rpm
oniguruma-6.9.6-1.el9.5.i686.rpm
libpcap-1.10.0-4.el9.x86_64.rpm
iproute-tc-6.1.0-1.el9.x86_64.rpm
setup-2.13.7-9.el9.noarch.rpm
tzdata-2024b-2.el9.noarch.rpm
bpftool-7.0.0-284.92.1.el9_2.x86_64.rpm
iptables-libs-1.8.8-6.el9_1.x86_64.rpm
libmnl-1.0.4-15.el9.x86_64.rpm
libselinux-3.5-1.el9.x86_64.rpm
elfutils-libelf-0.188-3.el9.x86_64.rpm
glibc-minimal-langpack-2.34-60.el9_2.14.x86_64.rpm
jq-1.6-14.el9.i686.rpm
redhat-release-9.2-0.15.el9.x86_64.rpm
redhat-release-eula-9.2-0.15.el9.x86_64.rpm
libbpf-1.0.0-2.el9.x86_64.rpm
libcap-2.48-9.el9_2.x86_64.rpm
pcre2-10.40-2.el9.x86_64.rpm
jq-1.6-14.el9.x86_64.rpm
psmisc-23.4-3.el9.x86_64.rpm
basesystem-11-13.el9.noarch.rpm
filesystem-3.16-2.el9.x86_64.rpm
libgcc-11.3.1-4.3.el9.x86_64.rpm
libgcc-11.3.1-4.3.el9.i686.rpm
CPU Architecture
x86_x64
Network Connectivity
1 NIC or 2 NICs for higher performance (one for each sub-net: ctrl-subnet and data-subnet)
1 NIC vs. 2 NICs
An xNIC instance may have 1 or 2 NICs depending on the subnet configuration of the cloudSwXtch.
If a cloudSwXtch has 2 NICs sharing a single subnet, an xNIC needs only 1 NIC (control). This NIC will share the same single subnet for control and data plane communications as the cloudSwXtch.
For high performance, a cloudSwXtch should have 2 NICs using 2 different subnets, an xNIC will need 2 NICs connected to separate subnets:
A subnet for control plane traffic (referred to as the ctrl-subnet from here on).
A subnet for data plane traffic (referred to as the data-subnet from here on).
Subnet Selection
The subnets must be the same subnets used for the cloudSwXtch.
The install requires a simple command that installs the xNIC from the cloudSwXtch. The install typically takes less than one minute per host. See the installation sections for more details.
Tunnel network for xNIC Type 1
The xNIC software must be installed on each virtual machine that is to send or receive multicast traffic. For xNIC Type 1, the software will create a tunnel network interface (called swxtch-tun0 for Linux and swxtch-tun for Windows) that presents to the application a network subnet of 172.30.X.Y. Each virtual machine running the xNIC software will be assigned an IP address in this range.
Please note: In almost all scenarios, it is recommended that users install xNIC Type 2 as this will bypass this requirement.
NOTE:
The swxtch tunnel interface should only be used for multicast traffic. Any other network traffic should target other network interfaces.
OCI Firewall rules and netplan
Set Firewall rules in iptables for OCI
Confirm that your iptables for your distro are allowing xNIC and cloudSwXtch control and data traffic to flow. The following is a sample iptable config that allows all traffic within a subnet CIDR range to flow.
Using sudo, add the following rules specifying your control and data CIDR ranges to the /etc/iptables/rules.v4 file, just before the -A INPUT -j —reject with icmp-host-prohibited rule.
-A INPUT -p all -s <your Control Subnet IP Address>/<mask> -j ACCEPT
-A INPUT -p all -s <your Data Subnet IP Address>/<mask> -j ACCEPT
Replace the CIDRs with your own CIDRs, corresponding to the ctrl and data subnets. These numbers can be the same if using a single-subnet configuration for both your VNICs.
Save file and reboot instance.
Important: XNIC v1 (swxtch-tun0) requires a third, similar rule for its subnet; example:
-A INPUT -p all -s 172.30.0.0/23 -j ACCEPT
Set DCHP in netplan for OCI 2nd NIC on Linux
If your xNIC has a 2nd NIC for data you will see that when you do a ip a the 2nd NIC does not show the IP address for the NIC. To fix this:
For Ubuntu:
Create the following file in the /etc/netplan folder and name it 02-datanic-static-config.yaml. Please note: You will need to add the Private IP Address and the correct mac address of the secondary VNIC into the file below.
network:
version: 2
ethernets:
ens4:
match:
macaddress: --<ADD macaddress of primary of 2nd VNIC> --
dhcp4: false
addresses:
- <ADD Primary IP ADDRESS OF 2ND VNIC>/<XX>
Where the <XX> is the net mask (or network mask) of ctrl-plane CIDR (in single-subnet configuration). Example:
network:
version: 2
ethernets:
ens4:
match:
macaddress: 02:00:17:31:7E:E8
dhcp4: false
addresses:
- 10.0.138.84/24
Run the following command to apply the changes:
sudo netplan apply
For RHEL and CentOS
• Create the following file in the /etc/sysconfig/network-scripts folder: ifcfg-ens4:
DEVICE=ens4
BOOTPROTO=none
ONBOOT=yes
PREFIX=24
IPADDR=10.0.192.196
MTU=9000
• Note: the file owner has to be root:root.
• Apply the changes
CentOS7 & RHEL 7:
sudo systemctl restart network
CentOS 8 & RHEL 8:
sudo systemctl restart NetworkManager