Fixed filtering by referenced interface for locators
authorJan Srnicek <[email protected]>
Thu, 8 Sep 2016 07:46:46 +0000 (09:46 +0200)
committerMaros Marsalek <[email protected]>
Mon, 12 Sep 2016 09:51:06 +0000 (09:51 +0000)
Change-Id: I471e9b9f2d2ecb0f8e3b3e181118de42247ba7ec
Signed-off-by: Jan Srnicek <[email protected]>
lisp/lisp2vpp/src/main/java/io/fd/honeycomb/lisp/translate/read/InterfaceCustomizer.java

index d12c730..cc8bbf5 100755 (executable)
@@ -87,14 +87,22 @@ public class InterfaceCustomizer
     @Override
     public void readCurrentAttributes(InstanceIdentifier<Interface> id, InterfaceBuilder builder, ReadContext ctx)
             throws ReadFailedException {
-        checkState(id.firstKeyOf(LocatorSet.class) != null, "Cannot find reference to parent locator set");
-        final String name = id.firstKeyOf(LocatorSet.class).getName();
 
-        checkState(locatorSetContext.containsIndex(name, ctx.getMappingContext()));
-        final int interfaceIndex = locatorSetContext.getIndex(name, ctx.getMappingContext());
+        final String locatorSetName = id.firstKeyOf(LocatorSet.class).getName();
+        final String referencedInterfaceName = id.firstKeyOf(Interface.class).getInterfaceRef();
+
+        checkState(interfaceContext.containsIndex(referencedInterfaceName, ctx.getMappingContext()),
+                "No interface mapping for name %s", referencedInterfaceName);
+        checkState(locatorSetContext.containsIndex(locatorSetName, ctx.getMappingContext()),
+                "No locator set mapping for name %s", locatorSetName);
+
+        final int locatorSetIndexIndex = locatorSetContext.getIndex(locatorSetName, ctx.getMappingContext());
+        final int referencedInterfaceIndex =
+                interfaceContext.getIndex(referencedInterfaceName, ctx.getMappingContext());
+
         final LocatorDumpParams params = new LocatorDumpParams.LocatorDumpParamsBuilder()
                 .setFilter(LocatorDumpParams.LocatorDumpFilter.LOCAL)
-                .setLocatorSetIndex(interfaceIndex)
+                .setLocatorSetIndex(locatorSetIndexIndex)
                 .build();
 
         Optional<LispLocatorDetailsReplyDump> reply;
@@ -108,7 +116,7 @@ public class InterfaceCustomizer
             final LispLocatorDetails details = reply.get()
                     .lispLocatorDetails
                     .stream()
-                    .filter(a -> a.swIfIndex == interfaceIndex)
+                    .filter(a -> a.swIfIndex == referencedInterfaceIndex)
                     .collect(RWUtils.singleItemCollector());
 
             final String interfaceRef = interfaceContext.getName(details.swIfIndex, ctx.getMappingContext());