Hi,

I'm having a positive 'odp_packet_error()' in a test environment.

The source for these are in 'odp_packet_parse', specifically:

        if (odp_unlikely(len < ODPH_ETH_LEN_MIN)) {
                pkt_hdr->error_flags.frame_len = 1;
                return;
        } else if (len > ODPH_ETH_LEN_MAX) {

Thing is, in Linux, packets originated from host's net-stack may be
shorter than 64 bytes. Usually the HW takes care of padding to a legal
Ethernet frame size upon transmission.

The test setup is a sandboxed setup involving a 'veth' pair.
Host fires (ping) on 'veth0', ODP application listens on the peer
interface.

As 'veth' interfaces are virtual (software interfaces), the ethernet
packets arriving at the "veth peer" may be short.

Thus, when ODP parses these packets using linux-generic's helper
function 'odp_packet_parse', these are classified errorneous.

IMO the 'len < ODPH_ETH_LEN_MIN' is too strict.

The consequence is linux-generic ODP implementation can't be used on
some _virtual_ interfaces (as these may "receive" packets originated 
by host netstack).

Is such a usecase of interest?

Can't we assume, that in case of physical interfaces, HW already took
care of validating Eth frame length, and as such, avoid this sanity
check?

Regards,
Shmulik

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to