in simulation/src/sixlowpan/model/sixlowpan-header.cc [274:386]
uint32_t SixLowPanHc1::Deserialize (Buffer::Iterator start)
{
Buffer::Iterator i = start;
uint32_t serializedSize = 3;
uint8_t dispatch = i.ReadU8 ();
if (dispatch != SixLowPanDispatch::LOWPAN_HC1)
{
return 0;
}
uint8_t encoding = i.ReadU8 ();
m_hopLimit = i.ReadU8 ();
m_srcCompression = LowPanHc1Addr_e (encoding >> 6);
m_dstCompression = LowPanHc1Addr_e ( (encoding >> 4) & 0x3);
m_tcflCompression = (encoding >> 3) & 0x1;
m_nextHeaderCompression = LowPanHc1NextHeader_e ( (encoding >> 1) & 0x3);
m_hc2HeaderPresent = encoding & 0x1;
switch (m_srcCompression)
{
case HC1_PIII:
for ( int j = 0; j < 8; j++)
{
m_srcPrefix[j] = i.ReadU8 ();
}
for ( int j = 0; j < 8; j++)
{
m_srcInterface[j] = i.ReadU8 ();
}
serializedSize += 16;
break;
case HC1_PIIC:
for ( int j = 0; j < 8; j++)
{
m_srcPrefix[j] = i.ReadU8 ();
}
serializedSize += 8;
break;
case HC1_PCII:
for ( int j = 0; j < 8; j++)
{
m_srcInterface[j] = i.ReadU8 ();
}
serializedSize += 8;
break;
case HC1_PCIC:
break;
}
switch (m_dstCompression)
{
case HC1_PIII:
for ( int j = 0; j < 8; j++)
{
m_dstPrefix[j] = i.ReadU8 ();
}
for ( int j = 0; j < 8; j++)
{
m_dstInterface[j] = i.ReadU8 ();
}
serializedSize += 16;
break;
case HC1_PIIC:
for ( int j = 0; j < 8; j++)
{
m_dstPrefix[j] = i.ReadU8 ();
}
serializedSize += 8;
break;
case HC1_PCII:
for ( int j = 0; j < 8; j++)
{
m_dstInterface[j] = i.ReadU8 ();
}
serializedSize += 8;
break;
case HC1_PCIC:
break;
}
if ( m_tcflCompression == false )
{
m_trafficClass = i.ReadU8 ();
uint8_t temp[3];
i.Read (temp, 3);
m_flowLabel = temp[2];
m_flowLabel = (m_flowLabel << 8) | temp[1];
m_flowLabel = (m_flowLabel << 8) | temp[0];
serializedSize += 4;
}
switch ( m_nextHeaderCompression )
{
case HC1_NC:
m_nextHeader = i.ReadU8 ();
serializedSize++;
break;
case HC1_TCP:
m_nextHeader = Ipv6Header::IPV6_TCP;
break;
case HC1_UDP:
m_nextHeader = Ipv6Header::IPV6_UDP;
break;
case HC1_ICMP:
m_nextHeader = Ipv6Header::IPV6_ICMPV6;
break;
}
NS_ASSERT_MSG ( m_hc2HeaderPresent != true, "Can not compress HC2, exiting. Very sorry." );
return GetSerializedSize ();
}