diff --git a/interface-definitions/vpp.xml.in b/interface-definitions/vpp.xml.in index 749fb3fbfd..3b74e0d95e 100644 --- a/interface-definitions/vpp.xml.in +++ b/interface-definitions/vpp.xml.in @@ -785,6 +785,19 @@ + + + Interfaces settings + + + + + Allow VPP to use untested NICs. This disables official support for this system + + + + + IPv6 settings diff --git a/python/vyos/vpp/config_verify.py b/python/vyos/vpp/config_verify.py index 18859331bb..f2c7fe1ac9 100644 --- a/python/vyos/vpp/config_verify.py +++ b/python/vyos/vpp/config_verify.py @@ -28,6 +28,12 @@ from vyos.vpp.utils import human_memory_to_bytes, bytes_to_human_memory +# Community-tested DPDK drivers / not officially supported by VyOS +community_drivers_dpdk: list[str] = [ + 'iavf', +] + + def verify_vpp_remove_kernel_interface(config: dict): """Common verify for removed kernel-interfaces. Verify that removed kernel interface are not used in 'vpp kernel-interfaces'. @@ -172,6 +178,12 @@ def verify_dev_driver(iface_name: str, driver_type: str) -> bool: if driver_type == 'dpdk': if driver in drivers_dpdk: return True + if driver in community_drivers_dpdk: + Warning( + f"Driver '{driver}' on interface {iface_name} is community-supported and not tested by VyOS. " + f"This disables official support for this system." + ) + return True elif driver_type == 'xdp': if driver in drivers_xdp: return True diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py index abb68847eb..82e83ad0ab 100755 --- a/src/conf_mode/vpp.py +++ b/src/conf_mode/vpp.py @@ -44,6 +44,7 @@ from vyos.vpp import control_host from vyos.vpp.config_deps import deps_xconnect_dict from vyos.vpp.config_verify import ( + community_drivers_dpdk, verify_dev_driver, verify_vpp_minimum_cpus, verify_vpp_minimum_memory, @@ -549,6 +550,17 @@ def verify(config): raise ConfigError( f'Driver {iface_config["driver"]} is not compatible with interface {iface}!' ) + is_community_dpdk_driver = ( + iface_config['kernel_module'] in community_drivers_dpdk + ) + if is_community_dpdk_driver and 'allow-unsupported-nics' not in config.get( + 'settings', {} + ).get('interfaces', {}): + raise ConfigError( + f"Driver {iface_config['driver']} on interface {iface} is community-supported and could be enabled " + f"by configuring 'set vpp settings interfaces allow-unsupported-nics'" + ) + if iface_config['driver'] == 'xdp' and 'xdp_options' in iface_config: if iface_config['xdp_options']['num_rx_queues'] != 'all': rx_queues = iface_config['xdp_api_params']['rxq_num']