Skip to content
Snippets Groups Projects
  1. May 04, 2021
  2. Apr 23, 2021
  3. Apr 08, 2021
  4. Mar 22, 2021
    • Bin Meng's avatar
      net: Pad short frames to minimum size before sending from SLiRP/TAP · 969e50b6
      Bin Meng authored
      
      The minimum Ethernet frame length is 60 bytes. For short frames with
      smaller length like ARP packets (only 42 bytes), on a real world NIC
      it can choose either padding its length to the minimum required 60
      bytes, or sending it out directly to the wire. Such behavior can be
      hardcoded or controled by a register bit. Similarly on the receive
      path, NICs can choose either dropping such short frames directly or
      handing them over to software to handle.
      
      On the other hand, for the network backends like SLiRP/TAP, they
      don't expose a way to control the short frame behavior. As of today
      they just send/receive data from/to the other end connected to them,
      which means any sized packet is acceptable. So they can send and
      receive short frames without any problem. It is observed that ARP
      packets sent from SLiRP/TAP are 42 bytes, and SLiRP/TAP just send
      these ARP packets to the other end which might be a NIC model that
      does not allow short frames to pass through.
      
      To provide better compatibility, for packets sent from QEMU network
      backends like SLiRP/TAP, we change to pad short frames before sending
      it out to the other end, if the other end does not forbid it via the
      nc->do_not_pad flag. This ensures a backend as an Ethernet sender
      does not violate the spec. But with this change, the behavior of
      dropping short frames from SLiRP/TAP interfaces in the NIC model
      cannot be emulated because it always receives a packet that is spec
      complaint. The capability of sending short frames from NIC models is
      still supported and short frames can still pass through SLiRP/TAP.
      
      This commit should be able to fix the issue as reported with some
      NIC models before, that ARP requests get dropped, preventing the
      guest from becoming visible on the network. It was workarounded in
      these NIC models on the receive path, that when a short frame is
      received, it is padded up to 60 bytes.
      
      The following 2 commits seem to be the one to workaround this issue
      in e1000 and vmxenet3 before, and should probably be reverted.
      
        commit 78aeb23e ("e1000: Pad short frames to minimum size (60 bytes)")
        commit 40a87c6c ("vmxnet3: Pad short frames to minimum size (60 bytes)")
      
      Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      969e50b6
  5. Mar 15, 2021
  6. Jan 29, 2021
  7. Jan 08, 2021
  8. Mar 09, 2020
  9. Oct 01, 2019
  10. Sep 12, 2019
  11. May 17, 2019
  12. Mar 07, 2019
  13. Mar 06, 2019
  14. Feb 13, 2019
  15. Feb 07, 2019
  16. Jan 13, 2019
Loading