From 884eacf83ee1dd782e111952ca0ee468fafde9ad Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Thu, 8 Jun 2006 22:24:25 +0000 Subject: [PATCH] =?utf8?q?Se=20agregan=20comentarios=20sobre=20qu=C3=A9=20?= =?utf8?q?descarte=20es=20silencioso=20y=20cual=20no=20y=20se=20decrementa?= =?utf8?q?=20TTL.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- practicas/pipi/src/ipin.cpp | 12 ++++++++++++ practicas/pipi/src/ipout.cpp | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/practicas/pipi/src/ipin.cpp b/practicas/pipi/src/ipin.cpp index 15e102c..c8ea64e 100644 --- a/practicas/pipi/src/ipin.cpp +++ b/practicas/pipi/src/ipin.cpp @@ -35,6 +35,7 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt // No es siquiera IP if (buf.size() < IPHeader::header_len()) { + // Silencioso drop("Cabecera incompleta o no es IP", buf); continue; } @@ -46,17 +47,27 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt #endif if (iph.version != 4) { + // Silencioso drop("Versión IP incorrecta", iph); continue; } if (!iph.check_checksum()) { + // Silencioso drop("Mal checksum", iph); continue; } + // Si el TTL se va a 0 + if (!--iph.ttl) + { + // ICMP + drop("TTL == 0 -> ICMP", iph); + continue; + } // No es para nosotros y no forwardeamos if (iph.dst != ip && !forward) { + // Silencioso drop("No es para nosotros y no hacemos forward", iph); continue; } @@ -69,6 +80,7 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt // Es para nosotros pero somos router else if (router) { + // Silencioso drop("Es para nosotros pero somos un router", iph); continue; } diff --git a/practicas/pipi/src/ipout.cpp b/practicas/pipi/src/ipout.cpp index 6829d2f..9c6d705 100644 --- a/practicas/pipi/src/ipout.cpp +++ b/practicas/pipi/src/ipout.cpp @@ -62,12 +62,14 @@ bool IPOut::send(IPHeader iph, std::string data) throw (std::runtime_error) RouteTable::Route* r = rtable.get(iph.dst); if (!r) { - drop("No existe una ruta para el destino", iph); + // ICMP + drop("No existe una ruta para el destino -> ICMP", iph); return false; } // No quieren fragmentar if (iph.df && (IPHeader::header_len() + data.size() > r->iface->mtu)) { + // Silencioso drop("Tamaño de paquete más grande que MTU y DF=1", iph); return false; } -- 2.43.0