path stretch support
diff --git a/model/ccnx-path-stretch-tag.cc b/model/ccnx-path-stretch-tag.cc
new file mode 100644
index 0000000..f2759be
--- /dev/null
+++ b/model/ccnx-path-stretch-tag.cc
@@ -0,0 +1,92 @@
+/* -*-  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 "ccnx-path-stretch-tag.h"
+
+namespace ns3 {
+
+WeightsPathStretchTag::WeightsPathStretchTag()
+    : m_weightPathStretch(0)
+{
+}
+
+WeightsPathStretchTag::WeightsPathStretchTag(const WeightsPathStretchTag &o)
+    : m_weightPathStretch(o.m_weightPathStretch)
+{
+}
+
+WeightsPathStretchTag &WeightsPathStretchTag::operator = (const WeightsPathStretchTag &o)
+{
+    if (this == &o)
+        return *this;
+
+    m_weightPathStretch = o.m_weightPathStretch;
+    return *this;
+}
+
+bool WeightsPathStretchTag::operator == (WeightsPathStretchTag const &o) const
+{
+    return (m_weightPathStretch == o.m_weightPathStretch);
+}
+
+TypeId WeightsPathStretchTag::GetTypeId(void)
+{
+    static TypeId tid = TypeId("ns3::WeightsPathStretchTag")
+        .SetParent<Tag>()
+        .AddConstructor<WeightsPathStretchTag>()
+        ;
+    return tid;
+}
+
+TypeId WeightsPathStretchTag::GetInstanceTypeId(void) const
+{
+    return GetTypeId();
+}
+
+uint32_t WeightsPathStretchTag::GetSerializedSize(void) const
+{
+    return sizeof(uint32_t);
+}
+
+void WeightsPathStretchTag::Serialize(TagBuffer i) const
+{
+    i.WriteU32(m_weightPathStretch);
+}
+
+void WeightsPathStretchTag::Deserialize(TagBuffer i)
+{
+    m_weightPathStretch = i.ReadU32();
+}
+
+void WeightsPathStretchTag::Print(std::ostream &os) const
+{
+    os << "Path Stretch (Weights) = " << m_weightPathStretch << std::endl;
+}
+
+void WeightsPathStretchTag::AddNewHop(uint32_t weight)
+{
+    m_weightPathStretch +=weight;
+}
+uint32_t WeightsPathStretchTag::GetValue()
+{
+  return m_weightPathStretch;
+}
+} // namespace ns3
+