Matias Elo(matiaselo) replied on github web page:

platform/linux-generic/pktio/socket.c
line 14
@@ -643,6 +643,10 @@ static int sock_mmsg_recv(pktio_entry_t *pktio_entry, int 
index ODP_UNUSED,
                uint16_t pkt_len = msgvec[i].msg_len;
                int ret;
 
+               if (odp_unlikely(msgvec[i].msg_hdr.msg_flags & MSG_TRUNC)) {
+                       odp_packet_free(pkt);


Comment:
The most specific error type an application can see is 
odp_packet_has_l2_error(), so it cannot trust packet contents anyway.


> Matias Elo(matiaselo) wrote:
> Will fix.


>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>> The error bit simply says the packet was truncated to max length. Perhaps 
>> the application is only interested in the first few bytes of a packet?


>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>> `ring->frame_num = next_frame(first_frame_num + nb_tx - 1, frame_count);` 
>>> is an alternative here.


>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>> Since `ring->rd_num` is a power of two, is the concern here that the `%` 
>>>> operator might result in a division if the compiler doesn't know that it's 
>>>> a power of two? In that case:
>>>> ```
>>>> return ++cur_frame & (frame_count - 1);
>>>> ```
>>>> solves that problem and avoids conditional branching.


>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>> If we're cleaning up, might as well delete that extraneous `+` in the 
>>>>> above line: `TPACKET_ALIGNMENT + + (pz - 1)) & (-pz);` I'm surprised the 
>>>>> compiler doesn't flag that since it's normally so picky about issuing 
>>>>> warnings.


>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>> Not sure I understand what `out_octets_tbl` is accumulating here. If I'm 
>>>>>> sending three 100 byte packets this will set `out_octets_tbl[0]` to 100, 
>>>>>> `out_octets_tbl[1]` to 200, and `out_octets_tbl[2]` to 300. 


>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>> Since you're doing miscellaneous cleanups anyway, perhaps changing 
>>>>>>> `len` to `num` here should be considered? `len` is confusing since it 
>>>>>>> doesn't represent packet length.


>>>>>>>> Matias Elo(matiaselo) wrote:
>>>>>>>> The odp_pktin_maxlen() API states:
>>>>>>>> > Maximum frame length in bytes that the packet IO interface can 
>>>>>>>> > receive.
>>>>>>>> 
>>>>>>>> I interpret this so that the application shouln't see packets which 
>>>>>>>> exceed pktin max length.
>>>>>>>> 


>>>>>>>>> muvarov wrote
>>>>>>>>> same here.


>>>>>>>>>> muvarov wrote
>>>>>>>>>> maybe to just set error bit and deliver this packet to application?


https://github.com/Linaro/odp/pull/397#discussion_r162325080
updated_at 2018-01-18 12:18:07

Reply via email to