arp: decompose is_garp logic into a separate function
authorIhar Hrachyshka <ihrachys@redhat.com>
Thu, 18 May 2017 19:41:19 +0000 (12:41 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 21 May 2017 17:26:45 +0000 (13:26 -0400)
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 <ihrachys@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/arp.c

index 053492af8a6e364d97b8a98015e6d9e93a773124..ca6e1e6c1496d97b04b7a40260df4383132d376c 100644 (file)
@@ -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 &&
+                       !memcmp(tha, sha, dev->addr_len);
+
+       return is_garp;
+}
+
 /*
  *     Process an arp request.
  */
@@ -844,18 +865,8 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
                   It is possible, that this option should be enabled for some
                   devices (strip is candidate)
                 */
-               is_garp = tip == sip && addr_type == RTN_UNICAST;
-
-               /* Gratuitous ARP _replies_ also require target hwaddr to be
-                * the same as source.
-                */
-               if (is_garp && arp->ar_op == htons(ARPOP_REPLY))
-                       is_garp =
-                               /* IPv4 over IEEE 1394 doesn't provide target
-                                * hardware address field in its ARP payload.
-                                */
-                               tha &&
-                               !memcmp(tha, sha, dev->addr_len);
+               is_garp = arp_is_garp(dev, addr_type, arp->ar_op,
+                                     sip, tip, sha, tha);
 
                if (!n &&
                    ((arp->ar_op == htons(ARPOP_REPLY)  &&