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