fixed ddn ack
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java
index b030967..fd44fce 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java
@@ -20,10 +20,11 @@
 import org.json.JSONObject;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.Ip4Prefix;
+import org.onosproject.fpcagent.util.CacheManager;
 import org.onosproject.fpcagent.workers.ZMQSBPublisherManager;
 import org.onosproject.fpcagent.workers.ZMQSBSubscriberManager;
 import org.onosproject.yang.gen.v1.fpc.rev20150105.fpc.ZmqDpnControlProtocol;
-import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.ClientIdentifier;
+import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.tenant.fpctopology.DefaultDpns;
 import org.onosproject.yang.gen.v1.ietfdmmfpcbase.rev20160803.ietfdmmfpcbase.FpcDpnId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,6 +35,7 @@
 import java.util.Optional;
 
 import static org.onosproject.fpcagent.util.Converter.*;
+import static org.onosproject.fpcagent.util.FpcUtil.getTopicFromNode;
 
 /**
  * DPDK DPN API over ZeroMQ for NGIC.
@@ -129,12 +131,27 @@
      *
      * @param body - The JSON body returned by the Control Plane in the DDN ACK
      */
-    public static void ddnAck(JSONObject body) {
+    public static void send_ddn_ack(JSONObject body) {
         try {
             ByteBuffer bb = ByteBuffer.allocate(14);
-            Short dpn = DpnAPIListener.getTopicFromDpnId(new FpcDpnId((String) body.get("dpn-id")));
-            bb.put(toUint8(dpn))
-                    .put(s11MsgType.DDN_ACK.getType());
+            byte topic = -1;
+            for (CacheManager cacheManager : CacheManager.cacheInfo.values()) {
+                final Optional<DefaultDpns> optionalDpn = cacheManager.dpnsCache.get(
+                        FpcDpnId.fromString((String) body.get("dpn-id"))
+                );
+
+                if (optionalDpn.isPresent()) {
+                    DefaultDpns dpn = optionalDpn.get();
+                    topic = getTopicFromNode(dpn.nodeId() + "/" + dpn.networkId());
+                    break;
+                }
+            }
+
+            if (topic == -1) {
+                throw new RuntimeException("DPN specified in DDN not found.");
+            }
+
+            bb.put(topic).put(s11MsgType.DDN_ACK.getType());
 
             if (body.has("dl-buffering-duration")) {
                 bb.put(toUint8((short) body.getInt("dl-buffering-duration")));
@@ -143,11 +160,11 @@
                 bb.put(toUint16((int) body.getInt("dl-buffering-suggested-count")));
             }
             bb.put(ZMQSBSubscriberManager.getInstance().getControllerTopic())
-                    .put(toUint32(Long.parseLong(new ClientIdentifier(body.getString("client-id")).getString())))
+                    .put(toUint32(Long.parseLong(body.getString("client-id"))))
                     .put(toUint32(body.getLong("op-id")));
 
             ZMQSBPublisherManager.getInstance().send(bb);
-        } catch (InterruptedException e) {
+        } catch (Exception e) {
             log.error("{}", ExceptionUtils.getFullStackTrace(e));
         }
 
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java
index a45b5d4..82b4790 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java
@@ -26,6 +26,8 @@
 import org.apache.http.impl.client.BasicResponseHandler;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
+import org.json.JSONObject;
+import org.onosproject.fpcagent.protocols.DpnNgicCommunicator;
 import org.onosproject.restconf.utils.RestconfUtils;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.DefaultYangAutoPrefixNotify;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.yangautoprefixnotify.value.DownlinkDataNotification;
@@ -105,6 +107,8 @@
 
                     if (notify.value() instanceof DownlinkDataNotification) {
                         String msg = handler.handleResponse(response);
+                        JSONObject json_body = new JSONObject(msg);
+                        DpnNgicCommunicator.send_ddn_ack(json_body);
                         log.info("Response {}", response);
                     }
                 } catch (Exception e) {