Add direct update support for static lsp 52/10352/2
authorMarek Gradzki <[email protected]>
Wed, 17 Jan 2018 15:25:36 +0000 (16:25 +0100)
committerMarek Gradzki <[email protected]>
Wed, 31 Jan 2018 14:56:24 +0000 (14:56 +0000)
This is workaround for HONEYCOMB-421
(subtree writers + default update does not work well currently).

Fixes HC2VPP-277 (at least basic scenarios).

Change-Id: I7659436d6c376bdc63eaa36291d5c08792faad94
Signed-off-by: Marek Gradzki <[email protected]>
(cherry picked from commit fc06ca33bc587ba2acff16e59645b3d386aa498d)

mpls/impl/src/main/java/io/fd/hc2vpp/mpls/StaticLspCustomizer.java
mpls/impl/src/test/java/io/fd/hc2vpp/mpls/ImposeAndForwardTest.java

index d93e034..6aab1ed 100644 (file)
@@ -68,6 +68,17 @@ final class StaticLspCustomizer implements ListWriterCustomizer<StaticLsp, Stati
         LOG.debug("MPLS LSP successfully configured: {}", dataAfter);
     }
 
+    @Override
+    public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<StaticLsp> id,
+                                        @Nonnull final StaticLsp dataBefore,
+                                        @Nonnull final StaticLsp dataAfter,
+                                        @Nonnull final WriteContext writeContext) throws WriteFailedException {
+        LOG.debug("Updating MPLS LSP: before={} after={}", dataBefore, dataAfter);
+        write(id, dataBefore, writeContext.getMappingContext(), false);
+        write(id, dataAfter, writeContext.getMappingContext(), true);
+        LOG.debug("MPLS LSP successfully configured: {}", dataAfter);
+    }
+
     @Override
     public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<StaticLsp> id,
                                         @Nonnull final StaticLsp dataBefore,
index 50c86ac..a4689a7 100644 (file)
@@ -59,14 +59,15 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
     private static final InstanceIdentifier<StaticLsp> IID = InstanceIdentifier.create(Routing.class).augmentation
         (Routing1.class).child(Mpls.class).augmentation(Mpls1.class).child(StaticLsps.class)
         .child(StaticLsp.class, new StaticLspKey(LSP_NAME));
-    private static final StaticLsp SIMPLE_LSP = getSimpleLsp();
+    private static final int LABEL = 111;
+    private static final StaticLsp SIMPLE_LSP = getSimpleLsp((long) LABEL);
     private static final StaticLsp COMPLEX_LSP = getComplexLsp();
 
     @Mock
     private FutureJVppCoreFacade jvpp;
     private StaticLspCustomizer customizer;
 
-    private static StaticLsp getSimpleLsp() {
+    private static StaticLsp getSimpleLsp(final long label) {
         return new StaticLspBuilder()
             .setName(LSP_NAME)
             .setConfig(new ConfigBuilder()
@@ -79,7 +80,7 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
                 .setOutSegment(new SimplePathBuilder()
                     .setNextHop(IpAddressBuilder.getDefaultInstance("5.6.7.8"))
                     .setOutgoingInterface(IF_NAME)
-                    .setOutgoingLabel(new MplsLabel(111L))
+                    .setOutgoingLabel(new MplsLabel(label))
                     .build())
                 .build())
             .build();
@@ -126,6 +127,14 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
         verify(jvpp).ipAddDelRoute(getRequestForComplexLsp(true));
     }
 
+    @Test
+    public void testUpdateSimple() throws WriteFailedException {
+        final int newLabel = LABEL + 1;
+        customizer.updateCurrentAttributes(IID, SIMPLE_LSP, getSimpleLsp(newLabel), writeContext);
+        verify(jvpp).ipAddDelRoute(getRequestForSimpleLsp(false, LABEL));
+        verify(jvpp).ipAddDelRoute(getRequestForSimpleLsp(true, newLabel));
+    }
+
     @Test
     public void testDeleteSimple() throws WriteFailedException {
         customizer.deleteCurrentAttributes(IID, SIMPLE_LSP, writeContext);
@@ -139,6 +148,10 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
     }
 
     private IpAddDelRoute getRequestForSimpleLsp(final boolean add) {
+        return getRequestForSimpleLsp(add, LABEL);
+    }
+
+    private IpAddDelRoute getRequestForSimpleLsp(final boolean add, final int label) {
         final IpAddDelRoute request = new IpAddDelRoute();
         request.nextHopSwIfIndex = IF_INDEX;
         request.isAdd = booleanToByte(add);
@@ -148,7 +161,7 @@ public class ImposeAndForwardTest extends WriterCustomizerTest implements ByteDa
         request.nextHopAddress = new byte[] {5, 6, 7, 8};
         request.nextHopNOutLabels = 1;
         request.nextHopViaLabel = LspWriter.MPLS_LABEL_INVALID;
-        request.nextHopOutLabelStack = new int[] {111};
+        request.nextHopOutLabelStack = new int[] {label};
         return request;
     }