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) {