David Brean writes:
> I'm testing a fault scenario where the recovery operation of a device
> attached to the network changes the link layer address corresponding to
> its IP address. The device is not sending gratuitous ARPs when this
> operation occurs.
It'd help to know what version you're using, because there've been
changes in this area over time.
Note that on the current code, it's _not_ necessary for that device to
send out gratuitous ARPs. Any ARP broadcast (query or response) with
the device's correct IP and hardware address will update the cache in
OpenSolaris. This was fixed as part of CR 4157198.
> By default, the Solaris operating system refreshes its arp cache every
> 1200000ms (20 minutes). Due to this large arp cache refresh interval,
> the Solaris gets the new link layer address of the device after 20
> minutes. That means the Solaris will look for the old link layer
> address of the failover IP until its arp cache gets updated.
>
> I plan to lower the ip_ire_arp_interval to 1 minute. Is that sufficient
> or does the arp_cleanup_interval also need to be lowered?
The ip_ire_arp_interval is the rate at which we scan the list of
IRE_CACHE entries. On each scan, we look for entries that are more
than one scan interval old, and delete them.
IRE_CACHE entries represent IP's view of resolved ARP entries. When
IP doesn't have an IRE_CACHE entry for a directly attached
destination, then it'll query the ARP module to get the answer.
In the current OpenSolaris code, when IP asks ARP to resolve an entry,
and ARP either has no cache entry or if its cache entry is older than
arp_cleanup_interval, we will transmit a new ARP request on the wire.
We can satisfy the request out of the ARP module's cache if the entry
isn't stale.
So, you'll probably want to reduce arp_cleanup_interval (on /dev/arp)
as well, assuming that you're running current bits.
> Also, can either of these parameters be set in /etc/system or does a
> startup script need to be added that uses ndd(1m)?
You need a script that invokes ndd. /etc/system sets ordinary kernel
variables ("int foo;"), and 'ndd' is implemented using tables of
strings and pointers. (We'd very much like to get past ndd, as it's
hackish.)
--
James Carlson, Solaris Networking <[EMAIL PROTECTED]>
Sun Microsystems / 35 Network Drive 71.232W Vox +1 781 442 2084
MS UBUR02-212 / Burlington MA 01803-2757 42.496N Fax +1 781 442 1677
_______________________________________________
networking-discuss mailing list
[email protected]