diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-04-12 18:59:16 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-04-12 18:59:16 +0200 |
commit | a321204a2091d20f1ae360064460fd1553938d6f (patch) | |
tree | 38285881848f856db754ffddfd150f494f3e0bbf /sys/src | |
parent | d2618d03f5e17c3deed916e56b5e4f282dc093f2 (diff) |
icmp: use snprint, add more unreachable error messages (from erik quanstro)
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/9/ip/icmp.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/sys/src/9/ip/icmp.c b/sys/src/9/ip/icmp.c index 3f5a80e21..d1652147a 100644 --- a/sys/src/9/ip/icmp.c +++ b/sys/src/9/ip/icmp.c @@ -318,6 +318,16 @@ static char *unreachcode[] = [3] "port unreachable", [4] "fragmentation needed and DF set", [5] "source route failed", +[6] "destination network unknown", +[7] "destination host unknown", +[8] "source host isolated", +[9] "network administratively prohibited", +[10] "host administratively prohibited", +[11] "network unreachable for tos", +[12] "host unreachable for tos", +[13] "communication administratively prohibited", +[14] "host precedence violation", +[15] "precedence cutoff in effect", }; static void @@ -371,9 +381,11 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp) ipoput4(icmp->f, r, 0, MAXTTL, DFLTTOS, nil); break; case Unreachable: - if(p->code > 5) - msg = unreachcode[1]; - else + if(p->code >= nelem(unreachcode)) { + snprint(m2, sizeof m2, "unreachable %V->%V code %d", + p->src, p->dst, p->code); + msg = m2; + } else msg = unreachcode[p->code]; bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE; @@ -393,7 +405,7 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp) break; case TimeExceed: if(p->code == 0){ - sprint(m2, "ttl exceeded at %V", p->src); + snprint(m2, sizeof m2, "ttl exceeded at %V", p->src); bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE; if(blocklen(bp) < MinAdvise){ |