Pregunta 3

Escriba en pseudo-código el algoritmo que ejecuta el layer IP de un router al recibir un datagrama para ser ruteado. Incluya todo lo necesario hasta que es entregado al layer físico con las direcciones físicas correspondientes.

Recuerde que el router puede tener múltiples interfaces de red.

route(dgram, route_table)
{
    IPdest = dgram.IPdest;
    IPred = Get_net(IPdest);
    route_entry = search(IPred, route_table);
    if(route_entry != NULL ) {
	if(route_entry->type == DIR) {
	    send(dgram, route_entry->interface, IPdest);
	}
	else {
	    GWred = Get_net(route_entry->gw);
	    gw_entry = search(GWred, route_table);
	    if(gw_entry == NULL || gw_entry->type != DIR)
		error("Bad route");
	    send(dgram, gw_entry->interface, GWdest);
	}
    }
    else {
	route_entry = search(default, route_table);
	if(route_entry != NULL ) {
	    GWred = Get_net(route_entry->gw);
	    gw_entry = search(GWred, route_table);
	    if(gw_entry == NULL || gw_entry->type != DIR)
		error("Bad route");
	    send(dgram, gw_entry->interface, GWdest);
        }
	else
	    error("Network Unreachable");
    }

}

send(dgram, interface, IPaddr)
{
    phys_addr = ARP(IPaddr, interface);
    if( phys_addr == NULL )
	error("Host Unreachable");
    else
	sendphys( dgram, interface, phys_addr );
}


José M. Piquer
Tue Jun 15 09:39:24 CLT 1999