Redes.IPv4
Class NivelIPv4

java.lang.Object
  extended byRedes.Nivel
      extended byRedes.IPv4.NivelIPv4

public class NivelIPv4
extends Nivel

Módulo IPv4


Field Summary
(package private)  java.util.Vector enEspera
          Cola de datagramas que estan en espera de que se reciba una respuesta ARP
(package private)  int instanteActual
          Instante actual
(package private)  ModuloARP moduloARP
          Modulo ARP asociado al nivel IPv4
(package private)  ModuloICMP moduloICMP
          Modulo ICMP asociado al nivel IPv4
(package private)  java.util.Vector reensamblados
          Datos con paquetes que estan siendo reensamblados
 TablaDeRutas tablaDeRutas
          Tabla de rutas, facimente accesible desde el 'equipo'
 
Fields inherited from class Redes.Nivel
colaEntrada, colaSalida, equipo, parametros
 
Constructor Summary
NivelIPv4(Equipo equipo, ModuloARP moduloARP, ModuloICMP moduloICMP)
          Constructor
 
Method Summary
protected  boolean ComprobarEntrada(Dato dato)
          Comprueba si el dato esta bien formado
protected  boolean ComprobarSalida(Dato dato)
          Compruenba si el dato de salida es correcto
private  void Enviar(Dato dato, boolean enEsperaARP)
          Envia al nivel inferior el dato especificado, fragmentandolo si es necesario y realizando las consultas necesarias a la tabla ARP (enviando peticiones...)
private  void EnviarConFragmentacion(Dato dato, Direccion dirFisica, Interfaz interfaz)
          Enviamos un datagrama al nivel inferior usando fragmentacion
private  void EnviarFragmento(int instante, int numFragmento, DatagramaIPv4 datagrama, Direccion dirFisica, Interfaz interfaz)
          Envia un fragmento del datagrama al destino
private  void EnviarICMP(int tipo, int codigo, Dato dato)
          Envia un mensaje ICMP al modulo ICMP
private  void EnviarPrimerFragmento(int instante, DatagramaIPv4 datagrama, Direccion dirFisica, Interfaz interfaz)
          Envia el primero fragmento del datagrama al destino
private  void EnviarSinFragmentacion(Dato dato, Direccion dirFisica, Interfaz interfaz)
          Enviamos un datagrama al nivel inferior sin usar fragmentacion
private  boolean EnvioICMPErrorPermitido(DatagramaIPv4 datagrama, int tipo)
          Comprueba si el envio de un mensaje icmp provocado por el datagrama indicado esta o no permitido
private  boolean EsFragmento(DatagramaIPv4 datagrama)
          Comprueba si el datagrama es un fragmento de otro datagrama o no
private  boolean EsMiDireccion(DireccionIPv4 direccion)
          Comprueba si la direccion que se pasa pertenece al equipo
private  boolean EsParaMi(DireccionIPv4 direccion)
          Comprueba si la direccion que se especifica pertenece a algun interfaz
 java.lang.String ID()
          Devuelve el identificador del nivel
 void IPForwarding(boolean estado)
          Activa o Desactiva el 'ip forwarding'
private  void PasarAlNivelSuperior(DatagramaIPv4 datagrama)
          Procesa un datagrama recibido de la red y lo envia al nivel superior correspondiente
 int Pendientes()
          Devuelve el numero de datagramas pendientes de ser procesados
 void Procesar(int instante)
          Procesa los datagramas del instante especificado
private  void ProcesarDatagrama(Dato dato)
          Procesa un datagrama, previamente se ha comprobado que es correcto
private  void ProcesarEnEsperaARP()
          Procesa los datagramas de la cola de espera de respuestas ARP
private  void ProcesarEntrada()
          Procesa los datagramas que deban ser procesados en el instante indicado
private  void ProcesarReensamblados()
          Procesa los datagramas reensamblados que deban ser procesados en el instante actual
private  void ProcesarSalida()
          Procesa un datagrama de la cola de salida (hacia la red)
private  void Reensamblar(int instante, DatagramaIPv4 fragmento)
          Añade el fragmento a un reensamblado existente o crea uno nuevo
 
Methods inherited from class Redes.Nivel
getID, getNivelInferior, getNivelSuperior, getRetardo, ProgramarEntrada, ProgramarSalida, setNivelInferior, setNivelSuperior, SimularError, SimularError
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

tablaDeRutas

public TablaDeRutas tablaDeRutas
Tabla de rutas, facimente accesible desde el 'equipo'


reensamblados

java.util.Vector reensamblados
Datos con paquetes que estan siendo reensamblados


moduloARP

ModuloARP moduloARP
Modulo ARP asociado al nivel IPv4


moduloICMP

ModuloICMP moduloICMP
Modulo ICMP asociado al nivel IPv4


enEspera

java.util.Vector enEspera
Cola de datagramas que estan en espera de que se reciba una respuesta ARP


instanteActual

int instanteActual
Instante actual

Constructor Detail

NivelIPv4

public NivelIPv4(Equipo equipo,
                 ModuloARP moduloARP,
                 ModuloICMP moduloICMP)
Constructor

Parameters:
equipo - Equipo que contiene el modulo
moduloARP - Modulo ARP, que se usara para traducir las direcciones IP
moduloICMP - Modulo ICMP que se usara para el envio de mensajes informativos o de error
Method Detail

IPForwarding

public void IPForwarding(boolean estado)
Activa o Desactiva el 'ip forwarding'

Parameters:
estado - 'true' para habilitar y 'false' para deshabilitar

Procesar

public void Procesar(int instante)
Procesa los datagramas del instante especificado

Specified by:
Procesar in class Nivel
Parameters:
instante - Instante de tiempo

Pendientes

public int Pendientes()
Devuelve el numero de datagramas pendientes de ser procesados

Specified by:
Pendientes in class Nivel
Returns:
Numero de datagramas pendientes de ser procesados

ProcesarEntrada

private void ProcesarEntrada()
Procesa los datagramas que deban ser procesados en el instante indicado


ProcesarSalida

private void ProcesarSalida()
Procesa un datagrama de la cola de salida (hacia la red)


ProcesarEnEsperaARP

private void ProcesarEnEsperaARP()
Procesa los datagramas de la cola de espera de respuestas ARP


EnviarICMP

private void EnviarICMP(int tipo,
                        int codigo,
                        Dato dato)
Envia un mensaje ICMP al modulo ICMP

Parameters:
tipo - Tipo de mensaje
codigo - Codigo del mensaje
dato - Dato con los datos del del datagrama

EnvioICMPErrorPermitido

private boolean EnvioICMPErrorPermitido(DatagramaIPv4 datagrama,
                                        int tipo)
Comprueba si el envio de un mensaje icmp provocado por el datagrama indicado esta o no permitido

Parameters:
datagrama - Datagrama que provoca en envio del mensaje ICMP
tipo - Tipo de mensaje ICMP a enviar
Returns:
Cierto si se debe enviar el mensaje, falso en otro caso

Enviar

private void Enviar(Dato dato,
                    boolean enEsperaARP)
Envia al nivel inferior el dato especificado, fragmentandolo si es necesario y realizando las consultas necesarias a la tabla ARP (enviando peticiones...)

Parameters:
dato - Datos de los datos que se tienen que enviar
enEsperaARP - Flag que indica si el dato proviene de la cola de espera ARP

ProcesarDatagrama

private void ProcesarDatagrama(Dato dato)
Procesa un datagrama, previamente se ha comprobado que es correcto

Parameters:
dato - Datos del datagrama

ProcesarReensamblados

private void ProcesarReensamblados()
Procesa los datagramas reensamblados que deban ser procesados en el instante actual


EsFragmento

private boolean EsFragmento(DatagramaIPv4 datagrama)
Comprueba si el datagrama es un fragmento de otro datagrama o no

Parameters:
datagrama - Datagrama IPv4
Returns:
Cierto si el datagrama es un fragmento de otro datagrama

Reensamblar

private void Reensamblar(int instante,
                         DatagramaIPv4 fragmento)
Añade el fragmento a un reensamblado existente o crea uno nuevo

Parameters:
instante - Instante de tiempo
fragmento - Fragmento de datagrama recibido

PasarAlNivelSuperior

private void PasarAlNivelSuperior(DatagramaIPv4 datagrama)
Procesa un datagrama recibido de la red y lo envia al nivel superior correspondiente

Parameters:
datagrama - Datagrama con los datos que hay que pasar al nivel superior

EsParaMi

private boolean EsParaMi(DireccionIPv4 direccion)
Comprueba si la direccion que se especifica pertenece a algun interfaz

Parameters:
direccion - Direccion que se va a comprobar
Returns:
Cierto si el un datagrama enviado a esa direccion debe ser procesado

EsMiDireccion

private boolean EsMiDireccion(DireccionIPv4 direccion)
Comprueba si la direccion que se pasa pertenece al equipo

Parameters:
direccion - Direccion IPv4
Returns:
Cierto si la direccion pertenece al equipo

EnviarSinFragmentacion

private void EnviarSinFragmentacion(Dato dato,
                                    Direccion dirFisica,
                                    Interfaz interfaz)
Enviamos un datagrama al nivel inferior sin usar fragmentacion

Parameters:
dato - Datos del datagrama
dirFisica - Direccion fisica del destino para en nivel inferior
interfaz - Interfaz por la que se enviaran los datos

EnviarConFragmentacion

private void EnviarConFragmentacion(Dato dato,
                                    Direccion dirFisica,
                                    Interfaz interfaz)
Enviamos un datagrama al nivel inferior usando fragmentacion

Parameters:
dato - Datos del datagrama
dirFisica - Direccion fisica del destino para en nivel inferior
interfaz - Interfaz por la que se enviaran los datos

EnviarPrimerFragmento

private void EnviarPrimerFragmento(int instante,
                                   DatagramaIPv4 datagrama,
                                   Direccion dirFisica,
                                   Interfaz interfaz)
Envia el primero fragmento del datagrama al destino

Parameters:
instante - Instante de tiempo
datagrama - Datagrama original, sin fragmentar
dirFisica - Direccion fisica del destino
interfaz - Interfaz por la que se enviara el fragmento

EnviarFragmento

private void EnviarFragmento(int instante,
                             int numFragmento,
                             DatagramaIPv4 datagrama,
                             Direccion dirFisica,
                             Interfaz interfaz)
Envia un fragmento del datagrama al destino

Parameters:
instante - Instante de tiempo
numFragmento - Numero de fragmento
datagrama - Datagrama original, sin fragmentar
dirFisica - Direccion fisica del destino
interfaz - Interfaz por la que se enviara el fragmento

ID

public java.lang.String ID()
Devuelve el identificador del nivel

Specified by:
ID in class Nivel
Returns:
Identificador del nivel

ComprobarEntrada

protected boolean ComprobarEntrada(Dato dato)
Comprueba si el dato esta bien formado

Specified by:
ComprobarEntrada in class Nivel
Parameters:
dato - Dato a comprobar
Returns:
Cierto si el dato es correcto

ComprobarSalida

protected boolean ComprobarSalida(Dato dato)
Compruenba si el dato de salida es correcto

Specified by:
ComprobarSalida in class Nivel
Parameters:
dato - Dato a comprobar
Returns:
Cierto si el dato es correcto