aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/avf
AgeCommit message (Expand)AuthorFilesLines
2018-07-26avf: used tx queue should be enabledDamjan Marion2-2/+8
2018-07-26avf: request queues supportJakub Grajciar3-3/+68
2018-07-26avf: fix interrupt modeDamjan Marion2-2/+25
2018-07-25avf: api fixJakub Grajciar4-7/+25
2018-07-20avf: don't enable interrupts before interface is admin upDamjan Marion1-1/+0
2018-07-20avf: Support interrupt modeSteven2-1/+5
2018-07-11avoid using thread local storage for thread indexDamjan Marion1-1/+1
2018-07-11avf: descriptor should be volatileDamjan Marion4-40/+60
2018-06-27avf: binary API and configurable RX/TX queue sizeJakub Grajciar9-12/+566
2018-06-15avf: tx node fixesDamjan Marion1-9/+9
2018-06-12avf: fix crash if device is busyJakub Grajciar1-1/+8
2018-06-09avf: properly cofigure RSS LUTDamjan Marion2-13/+40
2018-06-09avf: add support for intel X722 NICsDamjan Marion1-0/+1
2018-06-02AVF input node reworkDamjan Marion2-203/+334
2018-05-29Add VLIB_NODE_FN() macro to simplify multiversioning of node functionsDamjan Marion2-19/+3
2018-05-22avf plugin: add support for loggingJakub Grajciar2-5/+14
2018-04-04Doc updates prior to branchChris Luke1-1/+1
2018-03-28avf: keep input node in disabled state unless neededDamjan Marion1-1/+1
2018-03-26Intel Adaptive Virtual Function native device driver pluginDamjan Marion9-0/+2946
the vpp configuration. :return: True if the object is configured""" pass @abstractmethod def remove_vpp_config(self): """ Remove the configuration for this object from vpp. """ pass @abstractmethod def object_id(self): """ Return a unique string representing this object. """ pass class VppObjectRegistry(object): """ Class which handles automatic configuration cleanup. """ _shared_state = {} def __init__(self): self.__dict__ = self._shared_state if not hasattr(self, "_object_registry"): self._object_registry = [] if not hasattr(self, "_object_dict"): self._object_dict = dict() def register(self, o, logger): """ Register an object in the registry. """ if not o.object_id() in self._object_dict: self._object_registry.append(o) self._object_dict[o.object_id()] = o else: logger.debug("REG: duplicate add, ignoring (%s)" % o) def remove_vpp_config(self, logger): """ Remove configuration (if present) from vpp and then remove all objects from the registry. """ if not self._object_registry: logger.info("REG: No objects registered for auto-cleanup.") return logger.info("REG: Removing VPP configuration for registered objects") # remove the config in reverse order as there might be dependencies for o in reversed(self._object_registry): if o.query_vpp_config(): logger.info("REG: Removing configuration for %s" % o) o.remove_vpp_config() else: logger.info( "REG: Skipping removal for %s, configuration not present" % o) failed = [] for o in self._object_registry: if o.query_vpp_config(): failed.append(o) self._object_registry = [] self._object_dict = dict() if failed: logger.error("REG: Couldn't remove configuration for object(s):") for x in failed: logger.error(repr(x)) raise Exception("Couldn't remove configuration for object(s): %s" % (", ".join(str(x) for x in failed)))