Search code examples
packetbpf

Why tcpdump -dd accepting packet instruction choosese exactly 0x4000 as size?


Why tcpdump -dd always use 0x4000 as the size of packet to return in the accepting case? I know it's big enough to return the entire packet. But why exactly that value and not for example 65536


Solution

  • When in doubt, just search for the value in the source code, in our case in libpcap (by the way: it's 0x40000).

    /*
     * Maximum snapshot length.
     *
     * Somewhat arbitrary, but chosen to be:
     *
     *    1) big enough for maximum-size Linux loopback packets (65549)
     *       and some USB packets captured with USBPcap:
     *
     *           http://desowin.org/usbpcap/
     *
     *       (> 131072, < 262144)
     *
     * and
     *
     *    2) small enough not to cause attempts to allocate huge amounts of
     *       memory; some applications might use the snapshot length in a
     *       savefile header to control the size of the buffer they allocate,
     *       so a size of, say, 2^31-1 might not work well.
     *
     * We don't enforce this in pcap_set_snaplen(), but we use it internally.
     */
    #define MAXIMUM_SNAPLEN     262144