Bug 6071: Compute authentication data for Map-Notify 99/41599/2
authorLorand Jakab <lojakab@cisco.com>
Mon, 11 Jul 2016 13:17:22 +0000 (08:17 -0500)
committerLorand Jakab <lojakab@cisco.com>
Mon, 11 Jul 2016 13:17:22 +0000 (08:17 -0500)
Change-Id: I3856ca3dbb1e5f16c83f6918acd5b772e7e87078
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java
mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java
mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/authentication/LispAuthenticationUtil.java

index 9397d46dd07798066abb23e5be120b87f9d17300..88318bd7e8a3117c08a9e8c0e37b87f832c677dd 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapNotifyHandler;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync;
 import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService;
+import org.opendaylight.lispflowmapping.lisp.authentication.LispAuthenticationUtil;
 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
@@ -43,6 +44,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.ei
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItem;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItemBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
@@ -138,6 +140,15 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
             } else {
                 MapNotifyBuilderHelper.setFromMapRegister(builder, mapRegister);
             }
+            List<MappingRecordItem> mappings = builder.getMappingRecordItem();
+            if (mappings != null && mappings.get(0) != null && mappings.get(0).getMappingRecord() != null &&
+                    mappings.get(0).getMappingRecord().getEid() != null) {
+                MappingAuthkey authkey = mapService.getAuthenticationKey(mappings.get(0).getMappingRecord().getEid());
+                if (authkey != null) {
+                    builder.setAuthenticationData(LispAuthenticationUtil.createAuthenticationData(builder.build(),
+                            authkey.getKeyString()));
+                }
+            }
             notifyHandler.handleMapNotify(builder.build(), rlocs);
         }
     }
index a0fc1269588724140d879b8b12e3fb10bcf1cc93..497fdca0265c9a241f7d9df3a8f61eb36fc81d2e 100644 (file)
@@ -161,7 +161,8 @@ public class MapServerTest {
                 mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), false);
         Mockito.verify(mapService).addData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS,
                 subscriberSetMock_1);
-        Mockito.verify(notifyHandler).handleMapNotify(getDefaultMapNotifyBuilder(mapRegister).build(), null);
+        Mockito.verify(notifyHandler).handleMapNotify(getDefaultMapNotifyBuilder(mapRegister)
+                .setAuthenticationData(null).build(), null);
 
         // only 1 subscriber has timed out.
         assertEquals(1, subscriberSetMock_1.size());
@@ -184,7 +185,7 @@ public class MapServerTest {
         mapServer.handleMapRegister(mapRegister);
         Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(),
                 mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), true);
-        Mockito.verify(notifyHandler).handleMapNotify(mapNotifyBuilder.build(), null);
+        Mockito.verify(notifyHandler).handleMapNotify(mapNotifyBuilder.setAuthenticationData(null).build(), null);
     }
 
     @Test
@@ -476,7 +477,8 @@ public class MapServerTest {
                 .setNonce(mapRegister.getNonce())
                 .setKeyId(mapRegister.getKeyId())
                 .setMergeEnabled(mapRegister.isMergeEnabled())
-                .setMappingRecordItem(new ArrayList<>());
+                .setMappingRecordItem(new ArrayList<>())
+                .setAuthenticationData(new byte[]{});
         mapNotifyBuilder.getMappingRecordItem().add(getDefaultMappingRecordItemBuilder().build());
 
         return mapNotifyBuilder;
index dbed4887482c0587be4404046823bdd0eb30adf6..a63bebf658c1631da90585de5191bfdd81f38bc6 100644 (file)
@@ -8,7 +8,10 @@
 package org.opendaylight.lispflowmapping.lisp.authentication;
 
 import java.nio.ByteBuffer;
+
+import org.opendaylight.lispflowmapping.lisp.serializer.MapNotifySerializer;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkey;
@@ -49,6 +52,10 @@ public final class LispAuthenticationUtil {
                 key.getKeyString());
     }
 
+    public static byte[] createAuthenticationData(final MapNotify mapNotify, String authKey) {
+        return createAuthenticationData(MapNotifySerializer.getInstance().serialize(mapNotify), authKey);
+    }
+
     public static byte[] createAuthenticationData(final ByteBuffer buffer, String authKey) {
         final short keyId = buffer.getShort(MAP_REGISTER_AND_MAP_NOTIFY_KEY_ID_POS);
         final ILispAuthentication authentication = LispAuthenticationFactory.getAuthentication(