blob: 1838d26bf24b1f0a719df1dc0fc9a9f891695344 [file] [log] [blame] [view]
# Netstack3 Implementation Details
This document describes various implementation details that are confusing enough
to be worth calling out explicitly, and cannot naturally be documented in inline
code comments.
## Ethernet Frame Padding
Ethernet frames have a minimum payload length. In order to ensure that this
minimum is achieved, small payloads must sometimes be padded with zeroes. The
Ethernet header's EtherType field may sometimes be used to encode a length. If
this is the case, then the real length of the payload (not including the padding)
can be encoded in the EtherType, and so the receiver will know how many bytes of
the payload to pay attention to.
However, the EtherType field is sometimes used to indicate the type of the
encapsulated packet (e.g., IPv4, ARP, etc). In this case, it does not encode the
payload length. When this happens, the receiver must a) be able to parse a
payload whose length is longer than the length of the real encapsulated packet
and, b) be able to infer from the payload's header (e.g., the IPv4 header, the
ARP header, etc) how many bytes of the payload to parse, and how many to treat
as padding, and thus to ignore.
See for details:
- https://stackoverflow.com/a/35077070
- https://serverfault.com/a/510688