diff --git a/src/internet-stack/ipv4-l3-protocol.cc b/src/internet-stack/ipv4-l3-protocol.cc index d42484f51..0baae1e72 100644 --- a/src/internet-stack/ipv4-l3-protocol.cc +++ b/src/internet-stack/ipv4-l3-protocol.cc @@ -463,6 +463,12 @@ Ipv4L3Protocol::Receive( Ptr device, Ptr p, uint16_t pr } packet->RemoveHeader (ipHeader); + // Trim any residual frame padding from underlying devices + if (ipHeader.GetPayloadSize () < packet->GetSize ()) + { + packet->RemoveAtEnd (packet->GetSize () - ipHeader.GetPayloadSize ()); + } + if (!ipHeader.IsChecksumOk ()) { m_dropTrace (ipHeader, packet, DROP_BAD_CHECKSUM, interface); diff --git a/src/internet-stack/ipv6-l3-protocol.cc b/src/internet-stack/ipv6-l3-protocol.cc index d1487a5ac..e30eeea2f 100644 --- a/src/internet-stack/ipv6-l3-protocol.cc +++ b/src/internet-stack/ipv6-l3-protocol.cc @@ -695,6 +695,12 @@ void Ipv6L3Protocol::Receive (Ptr device, Ptr p, uint16 Ipv6Header hdr; packet->RemoveHeader (hdr); + // Trim any residual frame padding from underlying devices + if (hdr.GetPayloadLength () < packet->GetSize ()) + { + packet->RemoveAtEnd (packet->GetSize () - hdr.GetPayloadLength ()); + } + /* forward up to IPv6 raw sockets */ for (SocketList::iterator it = m_sockets.begin () ; it != m_sockets.end () ; ++it) {