summaryrefslogtreecommitdiffstats
path: root/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java
diff options
context:
space:
mode:
Diffstat (limited to 'routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java')
-rw-r--r--routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java28
1 files changed, 25 insertions, 3 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java
index 0a0fa3e47..c0d5d083b 100644
--- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java
+++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/ControlPlaneProtocolCustomizer.java
@@ -20,7 +20,9 @@ import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import io.fd.hc2vpp.common.translate.util.NamingContext;
+import io.fd.hc2vpp.routing.services.FibTableService;
import io.fd.honeycomb.translate.MappingContext;
+import io.fd.honeycomb.translate.read.ReadFailedException;
import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
import io.fd.honeycomb.translate.write.WriteContext;
import io.fd.honeycomb.translate.write.WriteFailedException;
@@ -30,17 +32,23 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.routing.control.plane.protocols.ControlPlaneProtocolKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev180319.RoutingProtocolVppAttr;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Customizer for handling of write operations for {@link ControlPlaneProtocol}
*/
final class ControlPlaneProtocolCustomizer
implements ListWriterCustomizer<ControlPlaneProtocol, ControlPlaneProtocolKey> {
+ private static final Logger LOG = LoggerFactory.getLogger(ControlPlaneProtocolCustomizer.class);
private final NamingContext routingProtocolContext;
+ private final FibTableService fibTableService;
- ControlPlaneProtocolCustomizer(@Nonnull final NamingContext routingProtocolContext) {
+ ControlPlaneProtocolCustomizer(@Nonnull final NamingContext routingProtocolContext,
+ FibTableService fibTableService) {
this.routingProtocolContext = routingProtocolContext;
+ this.fibTableService = fibTableService;
}
@Override
@@ -57,8 +65,22 @@ final class ControlPlaneProtocolCustomizer
// enclosed in synchronized block to prevent change of state after containsName/before addName
synchronized (routingProtocolContext) {
if (!routingProtocolContext.containsName(tableId, mappingContext)) {
- // if not present in mapping,create assignment to table id. This works only with auto-create flag enabled
- // while using ip_add_del_table
+ // Todo HC2VPP-317: A proper solution for Fib table management should be implemented. This is a
+ // temporary workaround.
+
+ // if not present in mapping,create assignment to table id, then create ip v4/v6 fib table on device
+ try {
+ fibTableService.checkTableExist(tableId, writeContext.getModificationCache());
+ } catch (ReadFailedException e) {
+ LOG.error("VRF Fib table read failed for table {} with iid: {}. Aborting write operation", tableId,
+ instanceIdentifier);
+ throw new WriteFailedException(instanceIdentifier, e);
+ } catch (FibTableService.FibTableDoesNotExistException e) {
+ LOG.trace("VRF Fib table does not exist. creating new entry for Fib table.");
+ //Write IPv4 and IPv6 Fib table for this VRF
+ fibTableService.write(instanceIdentifier, tableId, "Vrf-IPv4-" + tableId, false);
+ fibTableService.write(instanceIdentifier, tableId, "Vrf-IPv6-" + tableId, true);
+ }
routingProtocolContext.addName(tableId, newProtocolName, mappingContext);
} else {
// prevent to fail while restoring data(trying to remap already mapped name)