Bugfix: Acknowledge to ETR only if want-map-notify is set to true

Change-Id: I684bc1f1a7958b9777f90fe512980523490598ac
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
index 2a7b740..2303f85 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
@@ -61,7 +61,9 @@
                 LispMapNotify mapNotify =
                         mapServer.processMapRegister((LispMapRegister) msg);
 
-                ctx.writeAndFlush(mapNotify);
+                if (mapNotify != null) {
+                    ctx.writeAndFlush(mapNotify);
+                }
             }
 
             if (msg instanceof LispInfoRequest) {
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
index 5661681..285b397 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
@@ -54,7 +54,7 @@
         LispEncapsulatedControl ecm = (LispEncapsulatedControl) message;
         LispMapRequest request = (LispMapRequest) ecm.getControlMessage();
 
-        // TODO: for now we always generate map-notify message and send to ITR
+        // TODO: for now we always generate map-reply message and send to ITR
         // no matter proxy bit is set or not
 
         // build map-reply message
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
index ffabf79..8c2a7b7 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
@@ -83,26 +83,32 @@
             return null;
         }
 
-        NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
-        notifyBuilder.withKeyId(authConfig.lispAuthKeyId());
-        notifyBuilder.withAuthDataLength(valueOf(authConfig.lispAuthKeyId()).getHashLength());
-        notifyBuilder.withAuthKey(authConfig.lispAuthKey());
-        notifyBuilder.withNonce(register.getNonce());
-        notifyBuilder.withMapRecords(register.getMapRecords());
+        // we only acknowledge back to ETR when want-map-notify bit is set to true
+        // otherwise, we do not acknowledge back to ETR
+        if (register.isWantMapNotify()) {
+            NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
+            notifyBuilder.withKeyId(authConfig.lispAuthKeyId());
+            notifyBuilder.withAuthDataLength(valueOf(authConfig.lispAuthKeyId()).getHashLength());
+            notifyBuilder.withAuthKey(authConfig.lispAuthKey());
+            notifyBuilder.withNonce(register.getNonce());
+            notifyBuilder.withMapRecords(register.getMapRecords());
 
-        LispMapNotify notify = notifyBuilder.build();
+            LispMapNotify notify = notifyBuilder.build();
 
-        InetSocketAddress address =
-                new InetSocketAddress(register.getSender().getAddress(), MAP_NOTIFY_PORT);
-        notify.configSender(address);
+            InetSocketAddress address =
+                    new InetSocketAddress(register.getSender().getAddress(), MAP_NOTIFY_PORT);
+            notify.configSender(address);
 
-        register.getMapRecords().forEach(record -> {
-            LispEidRecord eidRecord =
-                    new LispEidRecord(record.getMaskLength(), record.getEidPrefixAfi());
-            eidRlocMap.insertMapRecord(eidRecord, record);
-        });
+            register.getMapRecords().forEach(record -> {
+                LispEidRecord eidRecord =
+                        new LispEidRecord(record.getMaskLength(), record.getEidPrefixAfi());
+                eidRlocMap.insertMapRecord(eidRecord, record);
+            });
 
-        return notify;
+            return notify;
+        }
+
+        return null;
     }
 
     /**