RFC 826 is the one that says this:

    If it does not, it probably informs the caller that it is throwing
    the packet away (on the assumption the packet will be retransmitted
    by a higher network layer)

Not worth fixing for the reasons you mention. 

> On Aug 17, 2017, at 8:33 PM, Mike Karels <m...@karels.net> wrote:
> 
> Another $.02 (inline):
> 
> On 17 Aug 2017, at 18:39, Gopakumar Pillai wrote:
> 
>> Thank You Bjoern. Could you please point me to the RFC?
> 
> I don’t know if there is anything more recent than RFC1122 on this.  IIRC, it 
> requires queuing at least one packet.  Queing one packet is what BSD has done 
> essentially since ARP was implemented.
> 
>> If this is not a MUST behavior in RFC, would my fix be good? I agree that 
>> this would affect only ICMP/UDP traffic.
> 
> People have been asking for queuing of multiple packets for years.  That is a 
> more general change.  Consider another dumb application that starts out by 
> sending multiple UDP packets back-to-back.  However, well-designed 
> application protocols don’t experience problems like this.  I’ll quickly note 
> that ping isn’t an application, but a network measuring tool.  If you ask the 
> question “what happens if I start off a session with a single large packet 
> and I don’t support retransmission”, ping answers that question correctly.
> 
> If badly-designed protocols get bad performance, that doesn’t seem like a bug 
> to me, but a feature.
> 
>> On 8/17/17, 2:40 PM, "Bjoern A. Zeeb" <bzeeb-li...@lists.zabbadoz.net> wrote:
>> 
>>    On 17 Aug 2017, at 21:16, Gopakumar Pillai wrote:
>> 
>>    > Hi FreeBSD Networking Gurus,
>>    > I came across an issue with an old version of FreeBSD and looking at
>>    > the latest FreeBSD code, seems it exists even now. I am assuming that
>>    > this issue is not reported.
>>    >
>>    > Observation:
>>    > When a ping was performed with larger payload than MTU, the first ping
>>    > failed when the ARP entry was absent for that IP.
>> 
>>    That is because ping/ICMP has no retransmit.
>> 
>> 
>>    > Noticed on the wire that the last IP fragment was sent for the first
>>    > request and then the subsequent requests were fine.
>>    >
>>    > Root Cause:
>>    >   * ip_output fragments the packets and loops through the fragments to
>>    > send them to ether_output.
>>    >   * ether_output does an arpresolve and if there is no existing ARP
>>    > entry it'll return EWOULDBLOCK after sending ARP Request.
>>    >   * ether_output ignores the error and propagates success to ip_output
>>    > and it continues to send the remaining fragments.
>>    >   * llentry keeps only one mbuf and the last fragment is retained when
>>    > the ARP Reply comes and the fragment is sent.
>> 
>>    Yes, according to the spec (RFC) we are supposed to throw the packet
>>    away entirely and simply report that to the next upper layer.  However
>>    over the years people realised that this sucks for a TCP SYN packet with
>>    a retransmit timer and hence we store one of them.
>> 
>>    A large UDP packet would btw see the same behaviour to your ping.
>>    There’s no guarantee any of these packets will not be dropped anywhere
>>    on the network, so we can as well.
>> 
>>    Just my 2ct
>> 
>>    /bz
> 
>               Mike
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to