Valor invalido en tabla de enrutamiento

Valor invalido en tabla de enrutamiento

de Joaquin Vidal Fiorella -
Número de respuestas: 3

Buenas! Espero se encuentren bien.

Cuando el router recibe un paquete que no es para el buscamos en la tabla de enrutamiento a quién debemos enviarselo. Al hacer esto vemos que la tabla de enrutamiento tiene los siguientes valores. 

Destination     Gateway         Mask    Iface

100.0.0.1               100.0.0.1       255.255.255.255 eth1

100.0.0.0               0.0.0.0 255.255.255.0   eth1

10.0.0.0                0.0.0.0 255.255.255.0   eth2

10.0.2.0                0.0.0.0 255.255.255.0   eth3

10.0.1.0                10.0.0.2        255.255.255.0   eth2

206.101.21.24           229.15.0.0      168.235.142.79  g


De los cuales el último nos llama la atención ya que tiene valores muy dispares a los anteriores. Además de esto, al recorrerla nos encontramos con un error de segmentation fault. Para recorrerla nos fijamos que el nodo en el que estamos parados no sea nulo, sin embargo, esto no evita el error ya que si logueamos a donde apunta el puntero luego de ese último nodo vemos que no es nulo sino que es 0x20. Esta dirección de memoria entendemos que es inaccesible para nuestro programa y por eso el error. 

Este es un caso que debemos manejar? O puede ser que los valores de la tabla de enrutamiento sean incorrectos por algún motivo? Menciono que nosotros no la modificamos en ningún momento. 


Desde ya muchas gracias!

Saludos, 

Joaquín

En respuesta a Joaquin Vidal Fiorella

Re: Valor invalido en tabla de enrutamiento

de Santiago Freire Lopez -
Buenas tardes Joaquín,

Parecería que están accediendo a datos que no son los que corresponden, como valores no inicializados o mal casteados, a la hora de leer las entradas de la tabla. Les diría que revisen a fondo su código para ver en qué parte de la lectura puede estar pasando.

Asegúrense de que todo lo que están leyendo esté inicializado y sea válido, para ello pueden utilizar la herramienta Valgrind (instalándola en la máquina virtual vía apt y agregando la llamada en el script que inicia el router) que les ayuda a ver, por ejemplo, si están leyendo de variables no inicializadas, memoria ya liberada y demás, y les dice también la línea de código del archivo donde ocurre la lectura inválida.

Sin embargo la herramienta puede no ayudarles si están haciendo casts mal; fíjense que estén haciendo todos los casts sobre datos correctos, porque hacer un cast en datos incorrectos puede no dar errores de memoria, pero los valores resultantes van a ser, probablemente, muy distintos a lo que deberían dar.

El error que ven puede tener varios orígenes, pero considero que debe ser por leer basura de memoria o por hacer casts mal. Les diría entonces que revisen lo que comenté y cualquier cosa nos vuelven a escribir.

Saludos,
Santiago.
En respuesta a Santiago Freire Lopez

Re: Valor invalido en tabla de enrutamiento

de Joaquin Vidal Fiorella -
Muchas gracias por la respuesta!

Estuvimos revisando el código a detalle y no terminamos de encontrar algo que pueda no estar inicializado o que se haya casteado mal. En lo que refiere a la tabla de enrutamiendo no realizamos ningún casteo.

Para buscar en ella la obtenemos directamente de la instancia del router (sr->routing_table) y luego la recorremos utilizando el puntero next que tiene cada entry. En cada nodo de la tabla obtenemos la dirección y la enmascaramos para luego comparar con la ip de destino que obtenemos del header ip.

No se si el procedimiento que hacemos es incorrecto, o habría que inicializar la tabla de alguna forma.
Probamos imprimirla con el metodo sr_print_routing_table pero vemos el mismo error.
En respuesta a Joaquin Vidal Fiorella

Re: Valor invalido en tabla de enrutamiento

de Matias Richart -
Hola,

El error parece indicar que la tabla quedó mal armada y que el puntero del último elemento de la lista no apunta a null.
Por eso tanto su recorrida como la de la función de imprimir falla al llegar al final (claramente el último valor de la tabla es el resultado de leer memoria con basura).

Como están actualizando la tabla? Que funciones de pwospf_topology están usando?
Yo revisaría si las están usando correctamente y si es así pasen por acá que están usando y nosotros revisamos si alguna función tiene algún problema.

Saludos