Hello, On Thu, 18 May 2017, Ihar Hrachyshka wrote:
> The code is quite involving already to earn a separate function for > itself. If anything, it helps arp_process readability. > > Signed-off-by: Ihar Hrachyshka <ihrac...@redhat.com> > --- > net/ipv4/arp.c | 35 +++++++++++++++++++++++------------ > 1 file changed, 23 insertions(+), 12 deletions(-) > > diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c > index 053492a..ca6e1e6 100644 > --- a/net/ipv4/arp.c > +++ b/net/ipv4/arp.c > @@ -641,6 +641,27 @@ void arp_xmit(struct sk_buff *skb) > } > EXPORT_SYMBOL(arp_xmit); > > +static bool arp_is_garp(struct net_device *dev, int addr_type, > + __be16 ar_op, > + __be32 sip, __be32 tip, > + unsigned char *sha, unsigned char *tha) > +{ > + bool is_garp = tip == sip && addr_type == RTN_UNICAST; > + > + /* Gratuitous ARP _replies_ also require target hwaddr to be > + * the same as source. > + */ > + if (is_garp && ar_op == htons(ARPOP_REPLY)) > + is_garp = > + /* IPv4 over IEEE 1394 doesn't provide target > + * hardware address field in its ARP payload. > + */ > + tha && All 4 patches look ok to me with only a small problem which comes from patch already included in kernel. I see that GARP replies can not work for 1394, is_garp will be cleared. May be 'tha' check should be moved in if expression, for example: if (is_garp && ar_op == htons(ARPOP_REPLY) && tha) is_garp = !memcmp(tha, sha, dev->addr_len); > + !memcmp(tha, sha, dev->addr_len); > + > + return is_garp; > +} Regards -- Julian Anastasov <j...@ssi.bg>