ref: a321204a2091d20f1ae360064460fd1553938d6f
parent: d2618d03f5e17c3deed916e56b5e4f282dc093f2
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Apr 12 14:59:16 EDT 2014
icmp: use snprint, add more unreachable error messages (from erik quanstro)
--- a/sys/src/9/ip/icmp.c
+++ b/sys/src/9/ip/icmp.c
@@ -318,6 +318,16 @@
[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 @@
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 @@
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){