void ByteTagList::AddAtStart (int32_t adjustment, int32_t prependOffset) { NS_LOG_FUNCTION (this << adjustment << prependOffset); if (adjustment == 0 && !IsDirtyAtStart (prependOffset)) { return; } ByteTagList list; ByteTagList::Iterator i = BeginAll (); while (i.HasNext ()) { ByteTagList::Iterator::Item item = i.Next (); item.start += adjustment; item.end += adjustment; if (item.end <= prependOffset) { continue; } else if (item.end > prependOffset && item.start < prependOffset) { item.start = prependOffset; } else { // nothing to do. } TagBuffer buf = list.Add (item.tid, item.size, item.start, item.end); buf.CopyFrom (item.buf); } *this = list; }
TagBuffer ByteTagList::Add (TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) { NS_LOG_FUNCTION (this << tid << bufferSize << start << end); uint32_t spaceNeeded = m_used + bufferSize + 4 + 4 + 4 + 4; NS_ASSERT (m_used <= spaceNeeded); if (m_data == 0) { m_data = Allocate (spaceNeeded); m_used = 0; } else if (m_data->size < spaceNeeded || (m_data->count != 1 && m_data->dirty != m_used)) { struct ByteTagListData *newData = Allocate (spaceNeeded); std::memcpy (&newData->data, &m_data->data, m_used); Deallocate (m_data); m_data = newData; } TagBuffer tag = TagBuffer (&m_data->data[m_used], &m_data->data[spaceNeeded]); tag.WriteU32 (tid.GetUid ()); tag.WriteU32 (bufferSize); tag.WriteU32 (start); tag.WriteU32 (end); m_used = spaceNeeded; m_data->dirty = m_used; return tag; }
void ByteTagList::Add (const ByteTagList &o) { NS_LOG_FUNCTION (this << &o); ByteTagList::Iterator i = o.BeginAll (); while (i.HasNext ()) { ByteTagList::Iterator::Item item = i.Next (); TagBuffer buf = Add (item.tid, item.size, item.start, item.end); buf.CopyFrom (item.buf); } }
void ByteTagList::Iterator::PrepareForNext (void) { NS_LOG_FUNCTION (this); while (m_current < m_end) { TagBuffer buf = TagBuffer (m_current, m_end); m_nextTid = buf.ReadU32 (); m_nextSize = buf.ReadU32 (); m_nextStart = buf.ReadU32 (); m_nextEnd = buf.ReadU32 (); if (m_nextStart >= m_offsetEnd || m_nextEnd <= m_offsetStart) { m_current += 4 + 4 + 4 + 4 + m_nextSize; } else { break; } } }
void SocketSetDontFragmentTag::Deserialize (TagBuffer i) { NS_LOG_FUNCTION (this << &i); m_dontFragment = (i.ReadU8 () == 1) ? true : false; }
void SocketSetDontFragmentTag::Serialize (TagBuffer i) const { NS_LOG_FUNCTION (this << &i); i.WriteU8 (m_dontFragment ? 1 : 0); }
void SocketIpv6HopLimitTag::Deserialize (TagBuffer i) { m_hopLimit = i.ReadU8 (); }
void SocketIpv6HopLimitTag::Serialize (TagBuffer i) const { i.WriteU8 (m_hopLimit); }
void SocketIpTtlTag::Deserialize (TagBuffer i) { NS_LOG_FUNCTION (this << &i); m_ttl = i.ReadU8 (); }
void SocketIpv6TclassTag::Serialize (TagBuffer i) const { i.WriteU8 (m_ipv6Tclass); }
void LtePhyTag::Serialize (TagBuffer i) const { i.WriteU16 (m_cellId); }
void DelayJitterEstimationTimestampTag::Deserialize (TagBuffer i) { m_creationTime = i.ReadU64 (); }
void DelayJitterEstimationTimestampTag::Serialize (TagBuffer i) const { i.WriteU64 (m_creationTime); }
virtual void Deserialize (TagBuffer i) { m_val = i.ReadU16(); }
virtual void Serialize (TagBuffer i) const { i.WriteU16 (m_val); }
void SocketIpTosTag::Serialize (TagBuffer i) const { i.WriteU8 (m_ipTos); }
void SocketIpTosTag::Deserialize (TagBuffer i) { m_ipTos = i.ReadU8(); }
void LtePhyTag::Deserialize (TagBuffer i) { m_cellId = i.ReadU16 (); }
void SocketIpv6TclassTag::Deserialize (TagBuffer i) { m_ipv6Tclass = i.ReadU8(); }
void SocketIpTtlTag::Serialize (TagBuffer i) const { NS_LOG_FUNCTION (this << &i); i.WriteU8 (m_ttl); }