summaryrefslogtreecommitdiff
path: root/sys/src/9/ip
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-04-12 18:59:16 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-04-12 18:59:16 +0200
commita321204a2091d20f1ae360064460fd1553938d6f (patch)
tree38285881848f856db754ffddfd150f494f3e0bbf /sys/src/9/ip
parentd2618d03f5e17c3deed916e56b5e4f282dc093f2 (diff)
icmp: use snprint, add more unreachable error messages (from erik quanstro)
Diffstat (limited to 'sys/src/9/ip')
-rw-r--r--sys/src/9/ip/icmp.c20
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){