// No es siquiera IP
if (buf.size() < IPHeader::header_len())
{
+ // Silencioso
drop("Cabecera incompleta o no es IP", buf);
continue;
}
#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;
}
// Es para nosotros pero somos router
else if (router)
{
+ // Silencioso
drop("Es para nosotros pero somos un router", iph);
continue;
}