Preguntas frecuentes al simular con NS/NAM

  1. ¿Dónde esta instalado ns?
  2. ¿Cómo puedo crear un script de simulación?
  3. ¿Cómo puedo ejecutar la simulación con ns en las aulas informáticas/laboratorios?
  4. ¿Cómo puedo solicitar una cuenta en los laboratorios del Departamento de Telemática?

Errores frecuentes al simular con NS/NAM

  1. ns: command not found
  2. nam: Error to reroute stdout
  3. nam no visualiza la simulación
  4. Segmentation fault/Violación de segmento
  5. Classfier::no-slot{} default handler (tcl/lib/ns-lib.tcl)
  6. [$n0 get-module "Manual"] add-route-to-adj-node -default $n2
  7. $ns lossmodel $em1 $nodo_buenos_aires $nodo_madrid
  8. wrong # args: should be "proc name args body"
  9. Couldn't schedule timer
  10. Otros errores
Si encuentras un error que no ha sido recogido en esta lista y consideras que es conveniente que se encuentre en esta lista, puedes enviarlo a los profesores de prácticas

¿Dónde esta instalado ns?

NS se encuentra instalado en las Aulas Informáticas Generales de la universidad y en los laboratorios del Departamento de Telemática (4.1.B.01 y 4.1.B.02). La forma de ejecución es diferente en Windows y en Linux.

¿Cómo puedo crear un script de simulación?

El script de simulación en un fichero de texto, que puede crearse con cualquier editor de textos, que permita salvar como sólo texto, por ejemplo: el block de notas de Windows (notepad.exe), vi, xemacs, etc. Si utilizas el block de notas de Windows, debes salvar el fichero con el nombre entre comillas, ya que de otro modo, el editor añadirá la extensión .txt al fichero.
arriba

¿Cómo puedo ejecutar la simulación con ns en las aulas informáticas/laboratorios?

Depende del sistema operativo que tenga el ordenador. arriba

¿Cómo puedo solicitar una cuenta en los laboratorios del Departamento de Telemática?

Los alumnos matriculados en asignaturas que emplean los laboratorios del Departamento de Telemática, pueden solicitar su cuenta en http://www.it.uc3m.es/etl/cuentas/cuentaAlumnos Esta página exige autenticación, el profesor de prácticas proporcionará el usuario y la contraseña.

ns: command not found

Este error se debe a que no se ha fijado correctamente la variable PATH, que debe contener el directorio instalación_ns/bin.
En los laboratorio 4.1.B.01 y 02 y las aulas linux de la Universidad, se soluciona de la siguiente forma:

nam: Error to reroute stdout

El sistema operativo Windows no permite lanzar nam desde la ejecución de la simulación. Debe iniciarse nam de forma manual, indicándole el fichero de traza. arriba

nam no visualiza la simulación

Este error se debe generalmente a que el fichero de traza que se ha indicado a nam no tiene el formato correcto. Los errores que aparecen en pantalla son similares a:
    (procedure "get_trace_item" line 3)
invoked from within
"get_trace_item "-t" $line"
(procedure "_o3" line 15)
(Animator infer-network-model line 15)
invoked from within
"$self infer-network-model $tracefile"
(procedure "_o3" line 84)
(Animator init line 84)
invoked from within
"_o3 init 100032796.tcl {}"
(Class create line 1)
invoked from within
"Animator create _o3 100032796.tcl {}"
invoked from within
"catch "$className create $o $args" msg"
(procedure "new" line 3)
invoked from within
"new $ANIMATOR_CLASS_ $tracefile [join $args"

La solución pasa por revisar la sentencia $ns namtrace-all y el nombre del fichero en el que se guarda la traza.
arriba

Segmentation fault/violación de segmento

Este error puede deberse a dos causas
  1. Al final del script de simulación se ha indicado la sentencia
    ns run
    Cuando lo correcto es
    $ns run
  2. Al asociar una fuente de mensajes a un agente, se ha redactado de forma errónea
    $fuente set attach-agent $agente
    Cuando lo correcto es
    $fuente attach-agent $agente
arriba

Classfier::no-slot{} default handler (tcl/lib/ns-lib.tcl)

Este error se debe a que se han fijado rutas estáticas ($ns rtproto Manual) y un nodo ha recibido un mensaje que no sabe a través de que enlace debe encaminarlo. El error concreto es similar a:
--- Classfier::no-slot{} default handler (tcl/lib/ns-lib.tcl) ---
_o15: no target for slot -1
_o15 type: Classifier/Hash/Dest
content dump:
classifier _o15
0 offset
0 shift
2147483647 mask
2 slots
slot 0: _o44 (Connector)
slot 1: _o182 (Classifier/Port)
-1 default
---------- Finished standard no-slot{} default handler ----------
La solución es repasar las tablas de rutas de los nodos.
arriba

[$n0 get-module "Manual"] add-route-to-adj-node -default $n2

Este error se debe a que se ha indicado la utilización del protocolo de encaminamiento manual ($ns rtproto Manual) después de la creación de los nodos. El mensaje completo de error es similar a:
invalid command name ""
    while executing
"[$n0 get-module "Manual"] add-route-to-adj-node -default $n2"
    (file "ejemplo.tcl" line 39)
La solución es poner la sentencia $ns rtproto Manual tras la creación del objeto simulador (al principio del script)
arriba

$ns lossmodel $em1 $nodo_buenos_aires $nodo_madrid

Este error se debe a que se ha intentado asociar un modelo de error a un enlace inexistente. El error que aparece es similar a:
invalid command name ""
while executing
"$link errormodule $lossobj"
(procedure "_o3" line 3)
(Simulator lossmodel line 3)
invoked from within
"$ns lossmodel $em1 $nodo_buenos_aires $nodo_madrid"
(file "ejemplo.tcl" line 45)

La solución consiste en repasar los enlaces creados y verificar que el enlace al que deseamos asociar el modelo de error, existe.
arriba

wrong # args: should be "proc name args body"

Este error se debe a un error de sintaxis en la creación de un procedimiento y las llaves ({}) que delimitan los argumentos y las sentencias del procedimientos no se han separado mediante un espacio del nombre del procedimiento. Error que aparece es el siguiente:
wrong # args: should be "proc name args body"
while executing
"proc terminar{}{ "
(file "100032796.tcl" line 14)
La solución pasa por corregir la sentencia afectada. Por ejemplo
proc terminar{}{
una vez corregida sería:
proc terminar {} {
arriba

Couldn't schedule timer

Este error se debe a que se ha ejecutado dos veces el método start de una fuente de mensajes.

La solución  pasa por determinar la fuente que se inicializa dos veces y eliminar la activación errónea.

arriba

Otros errores

En estos casos hay que fijarse en las últimas líneas de error, buscando el nombre del fichero con el script de simulación, y el número de línea que ha provocado el error.
invalid command name ""
    while executing
"[$n0 get-module "Manual"] add-route-to-adj-node -default $n2"
    (file "ejemplo.tcl" line 39)
Lo que nos indica que el error se ha producido en la línea 39 del fichero ejemplo.tcl
arriba