Merge remote-tracking branch 'git.irl/master'
diff --git a/examples/ccnx-pcap-example.cc b/examples/ccnx-pcap-example.cc
new file mode 100644
index 0000000..f3f9fc8
--- /dev/null
+++ b/examples/ccnx-pcap-example.cc
@@ -0,0 +1,110 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include <ctime>
+#include <sstream>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/ipv4-static-routing-helper.h"
+#include "ns3/ipv4-list-routing-helper.h"
+#include "ns3/annotated-topology-reader.h"
+#include <list>
+//#include "ns3/visualizer-module.h"
+#include "ns3/ccnx-consumer-helper.h"
+#include "ns3/ccnx-stack-helper.h"
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("CcnxPcapExample");
+
+int main (int argc, char *argv[])
+{
+ Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("10Mbps"));
+ Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("1ms"));
+
+ NodeContainer c;
+ c.Create (2);
+
+ NodeContainer n1 = NodeContainer (c.Get (0), c.Get (1));
+
+ PointToPointHelper p2p;
+ NetDeviceContainer ndc1 = p2p.Install (n1);
+
+// CcnxStackHelper ccnx;
+// Ptr<CcnxFaceContainer> cf = ccnx.Install (c);
+
+ //Ipv4AddressHelper ipv4;
+ //ipv4.SetBase ("192.168.1.0", "255.255.255.0");
+ //Ipv4InterfaceContainer i1 = ipv4.Assign (ndc1);
+
+ CcnxInterestHeader header;
+ Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
+ (*testname) ("test") ("test2");
+ header.SetName (testname);
+ header.SetNonce (1);
+
+ Packet packet (0);
+ packet.AddHeader (header);
+
+ Ptr<Node> nd = c.Get(0);
+ Ptr<PointToPointNetDevice> device = nd->GetDevice(nd->GetNDevices()-1)->GetObject<PointToPointNetDevice> ();
+
+
+
+ Ptr<CcnxNameComponents> testname2 = Create<CcnxNameComponents> ();
+ (*testname2) ("test3") ("test4");
+ header.SetName (testname2);
+ header.SetNonce (2);
+ Packet packet2 (0);
+ packet2.AddHeader (header);
+
+
+ p2p.EnablePcapAll("pcap-example.pcap");
+
+ Simulator::Stop (Seconds (20));
+
+ //NS_LOG_INFO ("Run Simulation.");
+ NS_LOG_INFO("Size1 = " << packet.GetSize());
+ NS_LOG_INFO("Size2 = " << packet2.GetSize());
+ device->Send(packet.Copy(),device->GetBroadcast(),0x7777);
+ NS_LOG_INFO(device->IsLinkUp());
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ NS_LOG_INFO(device->IsLinkUp());
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ NS_LOG_INFO(device->IsLinkUp());
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
+ NS_LOG_INFO ("Run Simulation.");
+ Simulator::Run ();
+ Simulator::Destroy ();
+ NS_LOG_INFO ("Done.");
+}
diff --git a/test/basic-regression-test.cc b/test/basic-regression-test.cc
new file mode 100644
index 0000000..b4625bb
--- /dev/null
+++ b/test/basic-regression-test.cc
@@ -0,0 +1,185 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ns3/test.h"
+#include "ns3/annotated-topology-reader.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/uinteger.h"
+#include "ns3/random-variable.h"
+#include <limits>
+#include "ns3/ccnx-header-helper.h"
+#include "ns3/header.h"
+#include "ns3/ccnx-name-components.h"
+#include "ns3/nstime.h"
+#include "ns3/buffer.h"
+#include "ns3/log.h"
+
+#include <ctime>
+#include <sstream>
+
+#include "ns3/internet-stack-helper.h"
+#include "ns3/ipv4-list-routing-helper.h"
+#include "ns3/ipv4-static-routing-helper.h"
+#include "ns3/point-to-point-helper.h"
+#include "ns3/application.h"
+#include "ns3/ipv4-static-routing-helper.h"
+#include "ns3/ipv4-list-routing-helper.h"
+#include "ns3/annotated-topology-reader.h"
+#include <list>
+
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("CcnxBasicRegressionTest");
+
+class BasicRegressionTest : public TestCase
+{
+public:
+
+ BasicRegressionTest ();
+ virtual ~BasicRegressionTest ();
+
+private:
+ virtual void DoRun (void);
+};
+
+BasicRegressionTest::BasicRegressionTest ()
+: TestCase ("Basic regression test")
+{
+}
+
+BasicRegressionTest::~BasicRegressionTest ()
+{
+}
+
+void
+BasicRegressionTest::DoRun(void)
+{
+ //string input ("/Users/iliamo/ns3-abstract-ndn/ns-3.11/src/NDNabstraction/examples/simpletopology.txt");
+
+ // Set up command line parameters used to control the experiment.
+ //CommandLine cmd;
+ //cmd.AddValue ("input", "Name of the input file.",
+ // input);
+ //cmd.Parse (argc, argv);
+
+
+ // ------------------------------------------------------------
+ // -- Read topology data.
+ // --------------------------------------------
+
+ string input = NS_TEST_SOURCEDIR;
+ input += "/testtopology.txt";
+
+ Ptr<AnnotatedTopologyReader> reader = CreateObject<AnnotatedTopologyReader> ();
+ reader->SetFileName (input);
+
+ NodeContainer nodes;
+ if (reader != 0)
+ {
+ nodes = reader->Read ();
+ }
+ else
+ {
+ NS_TEST_ASSERT_MSG_EQ (true, false, "file not found");
+ }
+
+ NS_TEST_ASSERT_MSG_EQ (7, reader->LinksSize (), "link count is wrong");
+
+
+ // ------------------------------------------------------------
+ // -- Create nodes and network stacks
+ // --------------------------------------------
+ NS_LOG_INFO ("creating internet stack");
+ InternetStackHelper stack;
+
+
+ //routing
+ /*Ipv4StaticRoutingHelper staticRouting;
+ Ipv4ListRoutingHelper listRH;
+ listRH.Add (staticRouting, 0);
+ stack.SetRoutingHelper (listRH); // has effect on the next Install ()
+ stack.Install (nodes);
+
+ NS_LOG_INFO ("creating ip4 addresses");
+ Ipv4AddressHelper address;
+ address.SetBase ("10.0.0.0", "255.255.255.252");*/
+
+ int totlinks = reader->LinksSize ();
+
+
+ /// applying settings
+ NS_LOG_INFO ("creating node containers");
+ NodeContainer* nc = new NodeContainer[totlinks];
+ TopologyReader::ConstLinksIterator iter;
+ int i = 0;
+ for ( iter = reader->LinksBegin (); iter != reader->LinksEnd (); iter++, i++ )
+ {
+ nc[i] = NodeContainer (iter->GetFromNode (), iter->GetToNode ());
+ }
+
+ NetDeviceContainer* ndc = new NetDeviceContainer[totlinks];
+ reader->ApplySettings(ndc,nc);
+ /// settings applied
+
+
+
+
+ // it creates little subnets, one for each couple of nodes.
+ /*NS_LOG_INFO ("creating ipv4 interfaces");
+ Ipv4InterfaceContainer* ipic = new Ipv4InterfaceContainer[totlinks];
+ for (int i = 0; i < totlinks; i++)
+ {
+ ipic[i] = address.Assign (ndc[i]);
+ address.NewNetwork ();
+ }
+
+ // ------------------------------------------------------------
+ // -- Run the simulation
+ // --------------------------------------------
+ NS_LOG_INFO ("Run Simulation.");
+ Simulator::Stop (Seconds (20));
+ Simulator::Run ();
+ Simulator::Destroy ();
+
+ delete[] ipic;
+ delete[] ndc;
+ delete[] nc;
+
+ NS_LOG_INFO ("Done.");
+
+ */
+}
+
+class BasicRegressionTestSuite : public TestSuite
+{
+public:
+ BasicRegressionTestSuite ();
+};
+
+BasicRegressionTestSuite::BasicRegressionTestSuite ()
+: TestSuite ("ccnx-basic-regression-test-suite", UNIT)
+{
+ SetDataDir (NS_TEST_SOURCEDIR);
+ AddTestCase (new BasicRegressionTest);
+}
+
+static BasicRegressionTestSuite suite;
diff --git a/test/content-object-test.cc b/test/content-object-test.cc
new file mode 100644
index 0000000..eff1304
--- /dev/null
+++ b/test/content-object-test.cc
@@ -0,0 +1,110 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ns3/test.h"
+#include "ns3/annotated-topology-reader.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/uinteger.h"
+#include "ns3/random-variable.h"
+#include <limits>
+#include "ns3/ccnx-header-helper.h"
+#include "ns3/header.h"
+#include "ns3/ccnx-name-components.h"
+#include "ns3/nstime.h"
+#include "ns3/buffer.h"
+#include "ns3/log.h"
+#include "ns3/ccnx-content-object-header.h"
+#include <iostream>
+#include <fstream>
+#include <sstream>
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("ContentObjectTest");
+
+class ContentObjectTest : public TestCase
+{
+public:
+ ContentObjectTest ();
+ virtual ~ContentObjectTest ();
+
+private:
+ virtual void DoRun (void);
+};
+
+ContentObjectTest::ContentObjectTest ()
+: TestCase ("Content Obejct Serialization Test")
+{
+}
+
+ContentObjectTest::~ContentObjectTest ()
+{
+}
+
+void
+ContentObjectTest::DoRun(void)
+{
+ Packet::EnablePrinting ();
+ Packet::EnableChecking ();
+ Packet packet (10);
+
+ CcnxContentObjectHeader header;
+ CcnxContentObjectTail trailer;
+
+ Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
+ (*testname) ("iwant")("icecream");
+ header.SetName(testname);
+
+ NS_LOG_INFO ("Source: \n" << header << trailer);
+
+ packet.AddHeader (header);
+ packet.AddTrailer (trailer);
+
+ // NS_LOG_INFO ("Deserialized packet: \n" << packet);
+
+ NS_LOG_INFO ("Removing and deserializing individual headers");
+
+ CcnxContentObjectHeader targetHeader;
+ CcnxContentObjectTail targetTrailer;
+
+ packet.RemoveHeader (targetHeader);
+ packet.RemoveTrailer (targetTrailer);
+
+
+ NS_TEST_ASSERT_MSG_EQ (targetHeader.GetName(), *testname, "Content Object name deserialization failed");
+
+ NS_TEST_ASSERT_MSG_EQ (packet.GetSize(), 10, "Content Object size inequality");
+}
+
+class ContentObjectTestSuite : public TestSuite
+{
+public:
+ ContentObjectTestSuite ();
+};
+
+ContentObjectTestSuite::ContentObjectTestSuite ()
+: TestSuite ("content-object-test-suite", UNIT)
+{
+ SetDataDir (NS_TEST_SOURCEDIR);
+ AddTestCase (new ContentObjectTest);
+}
+
+static ContentObjectTestSuite suite;
diff --git a/test/interest-header-serialization-test.cc b/test/interest-header-serialization-test.cc
index dbdf0c3..62d83a4 100644
--- a/test/interest-header-serialization-test.cc
+++ b/test/interest-header-serialization-test.cc
@@ -43,15 +43,9 @@
class InterestHeaderSerializationTest : public TestCase
{
public:
- //static const uint32_t N_RUNS = 5;
- //static const uint32_t N_BINS = 50;
- //static const uint32_t N_MEASUREMENTS = 1000000;
-
InterestHeaderSerializationTest ();
virtual ~InterestHeaderSerializationTest ();
- //double ChiSquaredTest (UniformVariable &u);
-
private:
virtual void DoRun (void);
};
@@ -68,20 +62,8 @@
void
InterestHeaderSerializationTest::DoRun(void)
{
- //ReportStart();
- //SetVerbose(true);
- std::ostringstream msgStream;
- msgStream << "Preved!";
+ Packet packet (0);
- //NS_TEST_EXPECT_MSG_NE (true,false, "DIRECTORY = " <<NS_TEST_SOURCEDIR);
-
- /*ReportTestFailure ("DIRECTORY = ", NS_TEST_SOURCEDIR,
- "", "",
- "", 0);*/
- string str = NS_TEST_SOURCEDIR;
- //str += "/hahaha";
- //CreateDataDirFilename(str);
- NS_LOG_INFO ("Test started");
uint32_t randomNonce = UniformVariable().GetInteger(1, std::numeric_limits<uint32_t>::max ());
Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
(*testname) ("test") ("test2");
@@ -104,23 +86,14 @@
interestHeader.SetMaxSuffixComponents(maxSuffixComponents);
interestHeader.SetMinSuffixComponents(minSuffixComponents);
- uint32_t size = interestHeader.GetSerializedSize();
- //uint32_t size = 5;
- NS_TEST_ASSERT_MSG_EQ (false, true, "GetSize = " << size);
- Buffer buf(size);
- Buffer::Iterator iter = buf.Begin ();
- //interestHeader.
- interestHeader.Serialize(iter);
-
- iter = buf.Begin ();
+ //serialization
+ packet.AddHeader (interestHeader);
+
+ //deserialization
CcnxInterestHeader target;
- target.Deserialize(iter);
+ packet.RemoveHeader (target);
+
- /*if(target.GetNonce() == randomNonce)
- {
-
- ReportCaseFailure();
- }*/
NS_TEST_ASSERT_MSG_EQ (target.GetNonce(), randomNonce, "Interest Header nonce deserialization failed");
NS_TEST_ASSERT_MSG_EQ (target.GetName(), *testname, "Interest Header name deserialization failed");
diff --git a/test/testtopology.txt b/test/testtopology.txt
new file mode 100644
index 0000000..8e39d06
--- /dev/null
+++ b/test/testtopology.txt
@@ -0,0 +1,8 @@
+7 7
+1 3 10000 1 80 120
+2 3 10000 1 110 150
+3 4 1000 1 40 30
+3 5 1000 50 55 50
+4 5 1000 1 10 20
+5 6 10000 1 15 35
+5 7 10000 50 25 45