Bug 9172: Don't store subscribers with "No Address" source EID 78/63178/1
authorLorand Jakab <lojakab@cisco.com>
Fri, 15 Sep 2017 19:44:50 +0000 (22:44 +0300)
committerLorand Jakab <lojakab@cisco.com>
Fri, 15 Sep 2017 19:44:50 +0000 (22:44 +0300)
Change-Id: Ifc9bc62c875c4a6bd42bf9b53286dd461cd2f7cc
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolver.java

index 4bcc798ef9c5e69e49465f297406449be9f2eed4..cddc86abad66b84bcc97b5b7a2cf3c2ee2583a17 100644 (file)
@@ -31,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPath;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
@@ -117,7 +118,7 @@ public class MapResolver implements IMapResolverAsync {
             }
 
             if (itrRlocs != null && itrRlocs.size() != 0) {
-                if (subscriptionService) {
+                if (subscriptionService && isValidSourceEidForSubscriber(srcEid)) {
                     final Rloc resolvedRloc = resolveRloc(itrRlocs, sourceRloc);
                     updateSubscribers(resolvedRloc, eidRecord.getEid(), mapping.getEid(),
                             srcEid, mapping.getRecordTtl());
@@ -148,6 +149,13 @@ public class MapResolver implements IMapResolverAsync {
         return false;
     }
 
+    private static boolean isValidSourceEidForSubscriber(Eid eid) {
+        if (eid == null || eid.getAddress() instanceof NoAddress) {
+            return false;
+        }
+        return true;
+    }
+
     private Rloc resolveRloc(List<ItrRloc> itrRlocList, IpAddressBinary srcRloc) {
         if (srcRloc == null) {
             return itrRlocList.get(0).getRloc();