Neighbour table overflow
Marco Bravo
marco en matec.cl
Lun Oct 4 16:48:24 CLT 2004
aun estoy tratando de pillar que fue...
Un poco dificil con 4 switches de cuneta como los Dlink 1024R :-)
----- Original Message -----
From: <rbilbao en inzignia.cl>
To: "Discusion de Linux en Castellano" <linux en listas.inf.utfsm.cl>
Sent: Monday, October 04, 2004 4:19 PM
Subject: Re: Neighbour table overflow
> El Mon, Oct 04, 2004 at 02:15:27PM -0400, Marco Bravo escribio:
>> en gc_thresh1,2 y 3 tengo valores de 128, 512 y 1024 respectivamente..
>
> sip, ese es el default
>
>>
>> Lo que leo acerca de gc_thresh es q si aumento los valores solo
>> incrementaria el buffer para almacenar cache de ruteo?
>
> nopes, como veras de net/core/neighbour.c :
>
> static struct neighbour *neigh_alloc(struct neigh_table *tbl)
> {
> struct neighbour *n = NULL;
> unsigned long now = jiffies;
>
> if (tbl->entries > tbl->gc_thresh3 ||
> (tbl->entries > tbl->gc_thresh2 &&
> now - tbl->last_flush > 5 * HZ)) {
> if (!neigh_forced_gc(tbl) &&
> tbl->entries > tbl->gc_thresh3)
> goto out;
> }
> .....
> ....
> ..
> .
>
> }
>
> ademas en net/ipv4/route.c :
>
> ...
> ..
>
> static int rt_garbage_collect(void){
>
> ...
> ...
> ...
>
> /* Calculate number of entries, which we want to expire now. */
> goal = atomic_read(&ipv4_dst_ops.entries) -
> (ip_rt_gc_elasticity << rt_hash_log);
> if (goal <= 0) {
> if (equilibrium < ipv4_dst_ops.gc_thresh)
> equilibrium = ipv4_dst_ops.gc_thresh;
>
>
>
> ...
> ...
> ..
>
> }
>
> y en net/ipv4/arp.c :
>
>
> ...
> .gc_interval = 30 * HZ,
> .gc_thresh1 = 128,
> .gc_thresh2 = 512,
> .gc_thresh3 = 1024,
>
> ....
>
>
>
> o sea, los valores permiten un balance entre el tamanno de la tabla,
> la frecuencia y la cantidad de nodos que se limpian en cada "pasada".
>
>
> ** en resumen :
>
> gc_thresh1 = minimo
> gc_thresh2 = balance, o cuando debe comenzar a preocuparse
> gc_thresh3 = maximo permitido
>
> ** ademas puedes modificar el valor de :
>
> gc_stale_time = tiempo de vida de cada entrada en la tabla
>
> ** y de :
>
> gc_interval = cada cuanto debe correr el garbage_collector (GC) en la
> tabla.
>
>
> ** cuidado eso si que si tienes una tabla muy grande, con mucho trafico
> a distintos hosts y un GC muy seguido podrias hacer que el kernel entrara
> en un loop (algo asi como un auto DoS ;-D )
>
>
> suerte y que ojala te sirva, pero trata de determinar porque se te
> llenaron
> las tablas arp (algun virus o troyano quizas? ).
>
>
> slds
> mundo
>
>
>
>
Más información sobre la lista de distribución Linux