src/internet/model/ipv6-route.cc
changeset 7161 7cc4506fb853
parent 6834 036f9a0b9899
child 7176 9f2663992e99
--- a/src/internet/model/ipv6-route.cc	Thu May 12 23:14:54 2011 -0700
+++ b/src/internet/model/ipv6-route.cc	Fri May 13 00:21:25 2011 -0700
@@ -82,13 +82,7 @@
 
 Ipv6MulticastRoute::Ipv6MulticastRoute ()
 {
-  uint32_t initial_ttl = MAX_TTL;
-
-  /* Initialize array to MAX_TTL, which means that all interfaces are "off" */
-  for (uint32_t i = 0; i < MAX_INTERFACES; i++)
-    {
-      m_ttls.push_back (initial_ttl);
-    }
+  m_ttls.clear();
 }
 
 Ipv6MulticastRoute::~Ipv6MulticastRoute ()
@@ -127,12 +121,34 @@
 
 void Ipv6MulticastRoute::SetOutputTtl (uint32_t oif, uint32_t ttl)
 {
-  m_ttls[oif] = ttl;
+  if (ttl >= MAX_TTL)
+    {
+      // This TTL value effectively disables the interface
+      std::map<uint32_t, uint32_t>::iterator iter;
+      iter = m_ttls.find(oif);
+      if (iter != m_ttls.end())
+        {
+          m_ttls.erase(iter);
+        }
+    }
+  else
+    {
+      m_ttls[oif] = ttl;
+    }
 }
 
-uint32_t Ipv6MulticastRoute::GetOutputTtl (uint32_t oif) const
+uint32_t Ipv6MulticastRoute::GetOutputTtl (uint32_t oif)
 {
-  return m_ttls[oif];
+  // We keep this interface around for compatibility (for now)
+  std::map<uint32_t, uint32_t>::const_iterator iter = m_ttls.find(oif);
+  if (iter == m_ttls.end())
+    return((uint32_t)MAX_TTL);
+  return(iter->second);
+}
+
+std::map<uint32_t, uint32_t> Ipv6MulticastRoute::GetOutputTtlMap() const
+{
+    return(m_ttls);
 }
 
 std::ostream& operator<< (std::ostream& os, Ipv6MulticastRoute const& route)