View | Details | Raw Unified | Return to bug 1072
Collapse All | Expand All

(-)a/src/common/packet-metadata-test.cc (+9 lines)
 Lines 774-779    Link Here 
774
  CHECK_HISTORY (p, 1, 500);
774
  CHECK_HISTORY (p, 1, 500);
775
  p->RemoveAtStart (10);
775
  p->RemoveAtStart (10);
776
  CHECK_HISTORY (p, 1, 490);
776
  CHECK_HISTORY (p, 1, 490);
777
778
  p = Create<Packet> (500);
779
  ADD_HEADER (p, 10);
780
  ADD_HEADER (p, 20);
781
  ADD_HEADER (p, 5);
782
  CHECK_HISTORY (p, 4, 5, 20, 10, 500);
783
  p1 = p->CreateFragment (0,6);
784
  p2 = p->CreateFragment (6,535-6);
785
  p1->AddAtEnd(p2);
777
}
786
}
778
//-----------------------------------------------------------------------------
787
//-----------------------------------------------------------------------------
779
class PacketMetadataTestSuite : public TestSuite
788
class PacketMetadataTestSuite : public TestSuite
(-)a/src/common/packet-metadata.cc (-1 / +62 lines)
 Lines 109-114    Link Here 
109
    }
109
    }
110
}
110
}
111
111
112
bool
113
PacketMetadata::IsSharedPointerOk (uint16_t pointer) const
114
{
115
  bool ok = pointer == 0xffff || pointer <= m_data->m_size;
116
  return ok;
117
}
118
bool
119
PacketMetadata::IsPointerOk (uint16_t pointer) const
120
{
121
  bool ok = pointer == 0xffff || pointer <= m_used;
122
  return ok;
123
}
124
125
bool
126
PacketMetadata::IsStateOk (void) const
127
{
128
  bool ok = m_used <= m_data->m_size;
129
  ok &= IsPointerOk (m_head);
130
  ok &= IsPointerOk (m_tail);
131
  uint16_t current = m_head;
132
  while (ok && current != 0xffff)
133
    {
134
      struct PacketMetadata::SmallItem item;
135
      PacketMetadata::ExtraItem extraItem;
136
      ReadItems (current, &item, &extraItem);
137
      ok &= IsSharedPointerOk (item.next);
138
      ok &= IsSharedPointerOk (item.prev);
139
      if (current != m_head)
140
        {
141
          ok &= IsPointerOk (item.prev);
142
        }
143
      if (current != m_tail)
144
        {
145
          ok &= IsPointerOk (item.next);
146
        }
147
      if (current == m_tail)
148
        {
149
          break;
150
        }
151
      current = item.next;
152
    }
153
  return ok;
154
}
155
112
uint32_t 
156
uint32_t 
113
PacketMetadata::GetUleb128Size (uint32_t value) const
157
PacketMetadata::GetUleb128Size (uint32_t value) const
114
{
158
{
 Lines 443-449    Link Here 
443
      AppendValue (extraItem->fragmentEnd, buffer);
487
      AppendValue (extraItem->fragmentEnd, buffer);
444
      buffer += fragEndSize;
488
      buffer += fragEndSize;
445
      Append32 (extraItem->packetUid, buffer);
489
      Append32 (extraItem->packetUid, buffer);
446
      m_used = buffer - &m_data->m_data[0];
490
      m_used = std::max (m_used, (uint16_t)(buffer - &m_data->m_data[0]));
491
      //m_used = buffer - &m_data->m_data[0];
447
      m_data->m_dirtyEnd = m_used;
492
      m_data->m_dirtyEnd = m_used;
448
      return;
493
      return;
449
    }
494
    }
 Lines 484-489    Link Here 
484
                           struct PacketMetadata::ExtraItem *extraItem) const
529
                           struct PacketMetadata::ExtraItem *extraItem) const
485
{
530
{
486
  NS_LOG_FUNCTION (this << current);
531
  NS_LOG_FUNCTION (this << current);
532
  NS_ASSERT (current <= m_data->m_size);
487
  const uint8_t *buffer = &m_data->m_data[current];
533
  const uint8_t *buffer = &m_data->m_data[current];
488
  item->next = buffer[0];
534
  item->next = buffer[0];
489
  item->next |= (buffer[1]) << 8;
535
  item->next |= (buffer[1]) << 8;
 Lines 599-606    Link Here 
599
void 
645
void 
600
PacketMetadata::AddHeader (const Header &header, uint32_t size)
646
PacketMetadata::AddHeader (const Header &header, uint32_t size)
601
{
647
{
648
  NS_ASSERT (IsStateOk ());
602
  uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
649
  uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
603
  DoAddHeader (uid, size);
650
  DoAddHeader (uid, size);
651
  NS_ASSERT (IsStateOk ());
604
}
652
}
605
void
653
void
606
PacketMetadata::DoAddHeader (uint32_t uid, uint32_t size)
654
PacketMetadata::DoAddHeader (uint32_t uid, uint32_t size)
 Lines 627-632    Link Here 
627
{
675
{
628
  uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
676
  uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
629
  NS_LOG_FUNCTION (this << uid << size);
677
  NS_LOG_FUNCTION (this << uid << size);
678
  NS_ASSERT (IsStateOk ());
630
  if (!m_enable) 
679
  if (!m_enable) 
631
    {
680
    {
632
      m_metadataSkipped = true;
681
      m_metadataSkipped = true;
 Lines 667-678    Link Here 
667
    {
716
    {
668
      m_head = item.next;
717
      m_head = item.next;
669
    }
718
    }
719
  NS_ASSERT (IsStateOk ());
670
}
720
}
671
void 
721
void 
672
PacketMetadata::AddTrailer (const Trailer &trailer, uint32_t size)
722
PacketMetadata::AddTrailer (const Trailer &trailer, uint32_t size)
673
{
723
{
674
  uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
724
  uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
675
  NS_LOG_FUNCTION (this << uid << size);
725
  NS_LOG_FUNCTION (this << uid << size);
726
  NS_ASSERT (IsStateOk ());
676
  if (!m_enable)
727
  if (!m_enable)
677
    {
728
    {
678
      m_metadataSkipped = true;
729
      m_metadataSkipped = true;
 Lines 687-698    Link Here 
687
  m_chunkUid++;
738
  m_chunkUid++;
688
  uint16_t written = AddSmall (&item);
739
  uint16_t written = AddSmall (&item);
689
  UpdateTail (written);
740
  UpdateTail (written);
741
  NS_ASSERT (IsStateOk ());
690
}
742
}
691
void 
743
void 
692
PacketMetadata::RemoveTrailer (const Trailer &trailer, uint32_t size)
744
PacketMetadata::RemoveTrailer (const Trailer &trailer, uint32_t size)
693
{
745
{
694
  uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
746
  uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
695
  NS_LOG_FUNCTION (this << uid << size);
747
  NS_LOG_FUNCTION (this << uid << size);
748
  NS_ASSERT (IsStateOk ());
696
  if (!m_enable) 
749
  if (!m_enable) 
697
    {
750
    {
698
      m_metadataSkipped = true;
751
      m_metadataSkipped = true;
 Lines 733-743    Link Here 
733
    {
786
    {
734
      m_tail = item.prev;
787
      m_tail = item.prev;
735
    }
788
    }
789
  NS_ASSERT (IsStateOk ());
736
}
790
}
737
void
791
void
738
PacketMetadata::AddAtEnd (PacketMetadata const&o)
792
PacketMetadata::AddAtEnd (PacketMetadata const&o)
739
{
793
{
740
  NS_LOG_FUNCTION (this << &o);
794
  NS_LOG_FUNCTION (this << &o);
795
  NS_ASSERT (IsStateOk ());
741
  if (!m_enable) 
796
  if (!m_enable) 
742
    {
797
    {
743
      m_metadataSkipped = true;
798
      m_metadataSkipped = true;
 Lines 748-753    Link Here 
748
      // We have no items so 'AddAtEnd' is 
803
      // We have no items so 'AddAtEnd' is 
749
      // equivalent to self-assignment.
804
      // equivalent to self-assignment.
750
      *this = o;
805
      *this = o;
806
      NS_ASSERT (IsStateOk ());
751
      return;
807
      return;
752
    }
808
    }
753
  if (o.m_head == 0xffff)
809
  if (o.m_head == 0xffff)
 Lines 803-808    Link Here 
803
        }
859
        }
804
      current = item.next;
860
      current = item.next;
805
    }
861
    }
862
  NS_ASSERT (IsStateOk ());
806
}
863
}
807
void
864
void
808
PacketMetadata::AddPaddingAtEnd (uint32_t end)
865
PacketMetadata::AddPaddingAtEnd (uint32_t end)
 Lines 817-822    Link Here 
817
PacketMetadata::RemoveAtStart (uint32_t start)
874
PacketMetadata::RemoveAtStart (uint32_t start)
818
{
875
{
819
  NS_LOG_FUNCTION (this << start);
876
  NS_LOG_FUNCTION (this << start);
877
  NS_ASSERT (IsStateOk ());
820
  if (!m_enable) 
878
  if (!m_enable) 
821
    {
879
    {
822
      m_metadataSkipped = true;
880
      m_metadataSkipped = true;
 Lines 873-883    Link Here 
873
      current = item.next;
931
      current = item.next;
874
    }
932
    }
875
  NS_ASSERT (leftToRemove == 0);
933
  NS_ASSERT (leftToRemove == 0);
934
  NS_ASSERT (IsStateOk ());
876
}
935
}
877
void 
936
void 
878
PacketMetadata::RemoveAtEnd (uint32_t end)
937
PacketMetadata::RemoveAtEnd (uint32_t end)
879
{
938
{
880
  NS_LOG_FUNCTION (this << end);
939
  NS_LOG_FUNCTION (this << end);
940
  NS_ASSERT (IsStateOk ());
881
  if (!m_enable) 
941
  if (!m_enable) 
882
    {
942
    {
883
      m_metadataSkipped = true;
943
      m_metadataSkipped = true;
 Lines 936-941    Link Here 
936
      current = item.prev;
996
      current = item.prev;
937
    }
997
    }
938
  NS_ASSERT (leftToRemove == 0);
998
  NS_ASSERT (leftToRemove == 0);
999
  NS_ASSERT (IsStateOk ());
939
}
1000
}
940
uint32_t
1001
uint32_t
941
PacketMetadata::GetTotalSize (void) const
1002
PacketMetadata::GetTotalSize (void) const
(-)a/src/common/packet-metadata.h (+3 lines)
 Lines 317-322    Link Here 
317
                      struct PacketMetadata::SmallItem *item,
317
                      struct PacketMetadata::SmallItem *item,
318
                      struct PacketMetadata::ExtraItem *extraItem) const;
318
                      struct PacketMetadata::ExtraItem *extraItem) const;
319
  void DoAddHeader (uint32_t uid, uint32_t size);
319
  void DoAddHeader (uint32_t uid, uint32_t size);
320
  bool IsStateOk (void) const;
321
  bool IsPointerOk (uint16_t pointer) const;
322
  bool IsSharedPointerOk (uint16_t pointer) const;
320
323
321
324
322
  static struct PacketMetadata::Data *Create (uint32_t size);
325
  static struct PacketMetadata::Data *Create (uint32_t size);

Return to bug 1072