model: add queue length congestion detection and signaling
add PCON consumer app
refs #4578
Change-Id: I1b04e3d123510b1ed6134a708c2710ebbb217167
diff --git a/model/ndn-net-device-transport.cpp b/model/ndn-net-device-transport.cpp
index 32abaa6..17880d2 100644
--- a/model/ndn-net-device-transport.cpp
+++ b/model/ndn-net-device-transport.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2011-2016 Regents of the University of California.
+/*
+ * Copyright (c) 2011-2018 Regents of the University of California.
*
* This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
* contributors.
@@ -27,6 +27,8 @@
#include <ndn-cxx/interest.hpp>
#include <ndn-cxx/data.hpp>
+#include "ns3/queue.h"
+
NS_LOG_COMPONENT_DEFINE("ndn.NetDeviceTransport");
namespace ns3 {
@@ -49,6 +51,14 @@
this->setLinkType(linkType);
this->setMtu(m_netDevice->GetMtu()); // Use the MTU of the netDevice
+ // Get send queue capacity for congestion marking
+ PointerValue txQueueAttribute;
+ if (m_netDevice->GetAttributeFailSafe("TxQueue", txQueueAttribute)) {
+ Ptr<ns3::QueueBase> txQueue = txQueueAttribute.Get<ns3::QueueBase>();
+ // must be put into bytes mode queue
+ this->setSendQueueCapacity(txQueue->GetMaxBytes());
+ }
+
NS_LOG_FUNCTION(this << "Creating an ndnSIM transport instance for netDevice with URI"
<< this->getLocalUri());
@@ -64,6 +74,19 @@
NS_LOG_FUNCTION_NOARGS();
}
+ssize_t
+NetDeviceTransport::getSendQueueLength()
+{
+ PointerValue txQueueAttribute;
+ if (m_netDevice->GetAttributeFailSafe("TxQueue", txQueueAttribute)) {
+ Ptr<ns3::QueueBase> txQueue = txQueueAttribute.Get<ns3::QueueBase>();
+ return txQueue->GetNBytes();
+ }
+ else {
+ return nfd::face::QUEUE_UNSUPPORTED;
+ }
+}
+
void
NetDeviceTransport::doClose()
{