Fix ietf-acl delete
authorMarek Gradzki <[email protected]>
Tue, 20 Sep 2016 06:58:39 +0000 (08:58 +0200)
committerMaros Marsalek <[email protected]>
Tue, 20 Sep 2016 11:08:36 +0000 (11:08 +0000)
Cancels classify tables assignment for interface
before classify table removal.

Change-Id: I8f1ec1f43dac89f64af306f02786166f713743f8
Signed-off-by: Marek Gradzki <[email protected]>
v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/IetfAClWriter.java

index 9c10982..3f75d67 100644 (file)
@@ -97,8 +97,11 @@ public final class IetfAClWriter {
             final CompletionStage<ClassifyTableByInterfaceReply> cs = jvpp.classifyTableByInterface(request);
             final ClassifyTableByInterfaceReply reply = TranslateUtils.getReplyForWrite(cs.toCompletableFuture(), id);
 
-            // We remove all ACL-related classify tables for given interface (we assume we are the only classify table
-            // manager)
+            // We unassign and remove all ACL-related classify tables for given interface (we assume we are the only
+            // classify table manager)
+
+            unassignClassifyTables(id, reply);
+
             removeClassifyTable(id, reply.l2TableId);
             removeClassifyTable(id, reply.ip4TableId);
             removeClassifyTable(id, reply.ip6TableId);
@@ -107,6 +110,20 @@ public final class IetfAClWriter {
         }
     }
 
+    private void unassignClassifyTables(@Nonnull final InstanceIdentifier<?> id,
+                                        final ClassifyTableByInterfaceReply currentState)
+        throws VppBaseCallException, WriteTimeoutException {
+        final InputAclSetInterface request = new InputAclSetInterface();
+        request.isAdd = 0;
+        request.swIfIndex = currentState.swIfIndex;
+        request.l2TableIndex = currentState.l2TableId;
+        request.ip4TableIndex = currentState.ip4TableId;
+        request.ip6TableIndex = currentState.ip6TableId;
+        final CompletionStage<InputAclSetInterfaceReply> inputAclSetInterfaceReplyCompletionStage =
+            jvpp.inputAclSetInterface(request);
+        TranslateUtils.getReplyForWrite(inputAclSetInterfaceReplyCompletionStage.toCompletableFuture(), id);
+    }
+
     private void removeClassifyTable(@Nonnull final InstanceIdentifier<?> id, final int tableIndex)
         throws VppBaseCallException, WriteTimeoutException {