xNIC System Requirements

Prev Next

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

  • AlmaLinux 8.8

  • Amazon Linux 2023

  • Centos 8 Minimum

  • Oracle Linux 8

  • RHEL 8.8

  • RHEL 9.2

  • Rocky Linux 8

  • Rocky Linux 9

  • Ubuntu 20.04

  • Ubuntu 22.04

  • Ubuntu 24.04

Minimum Kernel Version 4.18

  • Windows Server 2022

  • Windows Server 2019

  • Windows Server 2016

  • Windows 11 Pro/Enterprise

  • Windows 10 Pro/Enterprise

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.

  1. 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
  1. 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.

  2. 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