Warn when merge is on, but xTR-ID is 0 81/42181/4
authorLorand Jakab <lojakab@cisco.com>
Mon, 25 Jul 2016 13:38:43 +0000 (08:38 -0500)
committerLori Jakab <lorand.jakab@gmail.com>
Tue, 26 Jul 2016 13:01:18 +0000 (13:01 +0000)
Also, fix a NPE in SimpleMapCache.

Change-Id: Iee1b46bcfea6647996deae0c8bf9ca3b089f41db
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
integrationtest/src/test/java/org/opendaylight/lispflowmapping/integrationtest/MultiSiteScenario.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java
mappingservice/mapcache/src/main/java/org/opendaylight/lispflowmapping/mapcache/SimpleMapCache.java

index c30478fb20d2a082bd617aaa1db5b95d402a6d14..c50a4a028c2d4ee311be33126296cec44aff6da2 100644 (file)
@@ -22,7 +22,6 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.commons.lang3.ArrayUtils;
 import org.opendaylight.lispflowmapping.integrationtest.MultiSiteScenarioUtil.Site;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IFlowMapping;
@@ -36,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev16
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 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.eid.list.EidItem;
@@ -58,7 +58,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rl
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import com.google.common.net.InetAddresses;
 
 /**
@@ -80,6 +79,8 @@ class MultiSiteScenario {
     private final Boolean DEFAULT_LOCAL_LOCATOR = true;
     private final Boolean DEFAULT_RLOC_PROBED = false;
     private final Boolean DEFAULT_ROUTED = true;
+    private final byte[] DEFAULT_XTR_ID = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+    private final byte[] DEFAULT_SITE_ID = new byte[]{0, 1, 2, 3, 4, 5, 6, 7};
 
     private final MappingAuthkey NULL_AUTH_KEY = new MappingAuthkeyBuilder().setKeyType(0).build();
     private final IMappingService mapService;
@@ -125,6 +126,9 @@ class MultiSiteScenario {
 
     private void emitMapRegisterMessage(final Site dstSite, final boolean merge) {
         final MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder();
+        mapRegisterBuilder.setXtrSiteIdPresent(true);
+        mapRegisterBuilder.setXtrId(new XtrId(DEFAULT_XTR_ID));
+        mapRegisterBuilder.setSiteId(new SiteId(DEFAULT_SITE_ID));
         mapRegisterBuilder.setMergeEnabled(merge);
         final MappingRecordItemBuilder mappingRecordItemBuilder = new MappingRecordItemBuilder();
         mappingRecordItemBuilder.setMappingRecordItemId(MAP_RECORD_A);
index b88d6f0ec58eec70c7e02d7e3739e84d83bbe5ff..61e5b8a871d45a1f4ea23d693e209895e187597f 100644 (file)
@@ -12,13 +12,13 @@ import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.opendaylight.controller.md.sal.binding.api.NotificationService;
@@ -60,12 +60,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev15090
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import com.google.common.base.Preconditions;
 
 public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
 
     protected static final Logger LOG = LoggerFactory.getLogger(MapServer.class);
+    private static final byte[] ALL_ZEROES_XTR_ID = new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
     private final ClusterNodeModulSwitcherImpl clusterNodeModulSwitcher;
     private IMappingService mapService;
     private boolean subscriptionService;
@@ -99,6 +99,15 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
         Set<SubscriberRLOC> subscribers = null;
         MappingRecord oldMapping;
 
+        if (merge) {
+            if (!mapRegister.isXtrSiteIdPresent() || mapRegister.getXtrId() == null) {
+                LOG.error("Merge bit is set in Map-Register, but xTR-ID is not present. Will not merge.");
+                merge = false;
+            } else if (Arrays.equals(mapRegister.getXtrId().getValue(), ALL_ZEROES_XTR_ID)) {
+                LOG.warn("Merge bit is set in Map-Register, but xTR-ID is all zeroes.");
+            }
+        }
+
         for (MappingRecordItem record : mapRegister.getMappingRecordItem()) {
             MappingRecord mapping = record.getMappingRecord();
 
index 66ff495f07bdf23f61f9267c3b564f500e0682ff..5a90b918e4c7560e5c3fb01caa2e0a144f617f4d 100644 (file)
@@ -110,7 +110,7 @@ public class SimpleMapCache implements IMapCache {
         ILispDAO table = getOrInstantiateVniTable(key);
 
         ILispDAO xtrIdDao = null;
-        if (!shouldOverwrite) {
+        if (!shouldOverwrite && record.getXtrId() != null) {
             xtrIdDao = getOrInstantiateXtrIdTable(eid, table);
             xtrIdDao.put(record.getXtrId(), new MappingEntry<>(SubKeys.RECORD, value));
         }