@@ -0,0 +1,2320 @@
+package org.batfish.dataplane.ibdp;%0A%0Aimport java.util.Map;%0Aimport javax.annotation.Nonnull;%0Aimport javax.annotation.ParametersAreNonnullByDefault;%0Aimport org.batfish.datamodel.AbstractRouteDecorator;%0Aimport org.batfish.dataplane.rib.RibDelta;%0A%0A/**%0A * Interface that all routing processes must implement.%0A *%0A * @param %3CT%3E the topology type for determining neighbor adjacencies%0A * @param %3CR%3E the route type this process produces for merging into main RIB%0A */%0A@ParametersAreNonnullByDefault%0Apublic interface RoutingProcess%3CT, R extends AbstractRouteDecorator%3E %7B%0A  /**%0A   * Initialization of the routing process. Called exactly once per computation of the dataplane.%0A   */%0A  void initialize();%0A%0A  /**%0A   * Topology update. Called every time the dataplane engine determines that a change to the%0A   * protocol-specific topology is available, which could result in neighbor adjacency updates.%0A   *%0A   * @param topology the updated protocol-specific topology%0A   */%0A  void updateTopology(T topology);%0A%0A  /**%0A   * Execute one iteration of dataplane computation. Involves processing route updates from%0A   * neighbors and sending out any necessary routing updates.%0A   *%0A   * %3Cp%3ECalled exactly once per iteration (of route propagation)%0A   *%0A   * @param allNodes map of all available nodes that are participating in the computation.%0A   */%0A  void executeIteration(final Map%3CString, Node%3E allNodes);%0A%0A  /**%0A   * Must return a %7B@link RibDelta%7D indicating which RIB updates need to be propagated to the main%0A   * RIB.%0A   *%0A   * %3Cp%3ECalled exactly once per iteration (of route propagation)%0A   */%0A  @Nonnull%0A  RibDelta%3CR%3E getUpdatesForMainRib();%0A%0A  /**%0A   * Announce main RIB updates since the last iteration of the dataplane computation to the process.%0A   * The process may choose to redistribute these routes if configured to do so.%0A   *%0A   * %3Cp%3E%3Cstrong%3ENote:%3C/strong%3E this may include updates generated by %7B@link #getUpdatesForMainRib()%7D%0A   *%0A   * %3Cp%3ECalled exactly once per iteration (of route propagation)%0A   *%0A   * @param mainRibDelta %7B@link RibDelta%7D containing updates to the main RIB.%0A   */%0A  void redistribute(RibDelta%3C? extends AbstractRouteDecorator%3E mainRibDelta);%0A%0A  /**%0A   * Returns true if any outstanding computation remains (e.g., unprocessed messages or non-empty%0A   * %7B@link RibDelta deltas%7D%0A   */%0A  boolean isDirty();%0A%7D%0A

Add interface for RoutingProcess (#3534)