diff options
author | Octavian Purdila <opurdila@ixiacom.com> | 2010-01-18 07:58:44 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-19 05:12:34 -0500 |
commit | 6d955180b2f9ccff444df06265160868cabb289a (patch) | |
tree | 2ceaf1e1e49664712cc13bb07833538c8723f645 /net/ipv4/arp.c | |
parent | fa44a73cc766c7f3bac71a66d564e0049b800325 (diff) |
ipv4: allow warming up the ARP cache with request type gratuitous ARP
If the per device ARP_ACCEPT option is enable, currently we only allow
creating new ARP cache entries for response type gratuitous ARP.
Allowing gratuitous ARP to create new ARP entries (not only to update
existing ones) is useful when we want to avoid unnecessary delays for
the first packet of a stream.
This patch allows request type gratuitous ARP to create new ARP cache
entries as well. This is useful when we want to populate the ARP cache
entries for a large number of hosts on the same LAN.
Signed-off-by: Octavian Purdila <opurdila@ixiacom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/arp.c')
-rw-r--r-- | net/ipv4/arp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 078709233bc4..1940b4df7699 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -907,7 +907,8 @@ static int arp_process(struct sk_buff *skb) | |||
907 | devices (strip is candidate) | 907 | devices (strip is candidate) |
908 | */ | 908 | */ |
909 | if (n == NULL && | 909 | if (n == NULL && |
910 | arp->ar_op == htons(ARPOP_REPLY) && | 910 | (arp->ar_op == htons(ARPOP_REPLY) || |
911 | (arp->ar_op == htons(ARPOP_REQUEST) && tip == sip)) && | ||
911 | inet_addr_type(net, sip) == RTN_UNICAST) | 912 | inet_addr_type(net, sip) == RTN_UNICAST) |
912 | n = __neigh_lookup(&arp_tbl, &sip, dev, 1); | 913 | n = __neigh_lookup(&arp_tbl, &sip, dev, 1); |
913 | } | 914 | } |