On Fri, Sep 14, 2018 at 05:19:24PM +0200, Lorenzo Bianconi wrote:
> Add buffering support for IPv4 packets that will be processed
> by arp {} action when L2 address is not discovered yet since
> otherwise the packet will be substituted with an ARP frame and
> this will result in the lost of the first packet of the connection
> 
> Signed-off-by: Lorenzo Bianconi <[email protected]>

Thanks for working on this!  I believe that users will find it useful.

A buffer queue depth of 64 sounds big to me.  Linux appears to default
to a depth of 3 (see unres_qlen in arp(7)).

A 30-second timeout seems long to me.  After that long, the sender will
have retransmitted the packet, probably multiple times.  I wasn't able
to figure out how long Linux buffers packets.

Do you think it makes sense to use the same timestamp for all of the
packets buffered for a single IP?  I believe that, currently, no packets
will ever expire from a buffer unless either the buffer limit is
exceeded or no new packets have been queued for the timeout interval.  I
think that would mean that there could be a packet buffered for a total
of 30 + 64 seconds.

It seems odd to me to convert the IP address to a string then use that
as the key.  Why not the binary form of the IP address?  I see that the
following patch adds IPv6 support, which could be one reason, but in
many places in OVS we use IPv6-mapped IPv4 addresses in places where
IPv4 and IPv6 are both possible (see in6_addr_mapped_ipv4() and
in6_addr_get_mapped_ipv4(), for example).

In the buffered_send_packets() prototype, I would use struct eth_addr
instead of an unsigned char *.

Thanks,

Ben.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to