diff --git a/vpp/reconciler.py b/vpp/reconciler.py index 6ce7c41..544d1ee 100644 --- a/vpp/reconciler.py +++ b/vpp/reconciler.py @@ -30,17 +30,28 @@ class Reconciler(): self.vpp = VPPApi() self.cfg = cfg - def phys_exist(self, ifname_list): - """ Return True if all interfaces in the `ifname_list` exist as physical interface names + def phys_exist_in_vpp(self): + """ Return True if all PHYs in the config exist as physical interface names in VPP. Return False otherwise.""" ret = True - for ifname in ifname_list: + for ifname in interface.get_phys(self.cfg): if not ifname in self.vpp.config['interface_names']: self.logger.warning("Interface %s does not exist in VPP" % ifname) ret = False return ret + def phys_exist_in_config(self): + """ Return True if all interfaces in VPP exist as physical interface names + in the config. Return False otherwise.""" + + ret = True + for ifname in self.vpp.get_phys(): + if not ifname in interface.get_interfaces(self.cfg): + self.logger.warning("Interface %s does not exist in the config" % ifname) + ret = False + return ret + def vpp_readconfig(self): if not self.vpp.readconfig(): self.logger.error("Could not (re)read config from VPP") diff --git a/vpp/vppapi.py b/vpp/vppapi.py index 50af1ab..13020a2 100644 --- a/vpp/vppapi.py +++ b/vpp/vppapi.py @@ -236,7 +236,7 @@ class VPPApi(): return bvis def get_phys(self): - phys = [self.config['interfaces'][x].interface_name for x in self.config['interfaces'] if self.config['interfaces'][x].interface_dev_type=='dpdk' and self.config['interfaces'][x].sw_if_index == self.config['interfaces'][x].sup_sw_if_index] + phys = [self.config['interfaces'][x].interface_name for x in self.config['interfaces'] if self.config['interfaces'][x].sw_if_index == self.config['interfaces'][x].sup_sw_if_index and self.config['interfaces'][x].interface_dev_type not in ['virtio', 'BVI', 'Loopback', 'VXLAN', 'local', 'bond']] return phys def get_bondethernets(self): diff --git a/vppcfg b/vppcfg index 15f3307..83bd229 100755 --- a/vppcfg +++ b/vppcfg @@ -18,7 +18,6 @@ import sys import yaml import logging from config import Validator -import config.interface as interface from vpp.reconciler import Reconciler try: @@ -63,10 +62,14 @@ def main(): if not r.vpp_readconfig(): sys.exit(-3) - if not r.phys_exist(interface.get_phys(cfg)): + if not r.phys_exist_in_vpp(): logging.error("Not all PHYs in the config exist in VPP") sys.exit(-4) + if not r.phys_exist_in_config(): + logging.error("Not all PHYs in VPP exist in the config") + sys.exit(-5) + failed = False if not r.prune(): if not args.force: