]> git.llucax.com Git - z.facultad/75.74/practicos.git/commitdiff
Se agregan comentarios sobre qué descarte es silencioso y cual no y se
authorLeandro Lucarella <llucax@gmail.com>
Thu, 8 Jun 2006 22:24:25 +0000 (22:24 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 8 Jun 2006 22:24:25 +0000 (22:24 +0000)
decrementa TTL.

practicas/pipi/src/ipin.cpp
practicas/pipi/src/ipout.cpp

index 15e102c98d58595082d3f4e55b92a61f0840abe7..c8ea64e8f783b9c3f7740c3f2d1dc1877ab4b075 100644 (file)
@@ -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;
         }
index 6829d2f39fd3be702ec6137268fecf2210513b87..9c6d705dab25a7272ae9e702e18e9a9be3bdb439 100644 (file)
@@ -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;
     }