ref: 9cc56f5fa8ebde3263b5ac75a9152094e1e0d881
parent: 2770a46f929c671ac987590636b0edab6b42df67
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Mar 3 22:09:39 EST 2019
devip: use common code in icmp for handling advise
--- a/sys/src/9/ip/icmp.c
+++ b/sys/src/9/ip/icmp.c
@@ -394,6 +394,7 @@
} else
msg = unreachcode[p->code];
+ Advise:
bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE;
if(BLEN(bp) < MinAdvise){ipriv->stats[LenErrs]++;
@@ -410,20 +411,8 @@
break;
case TimeExceed:
if(p->code == 0){- snprint(m2, sizeof m2, "ttl exceeded at %V", p->src);
-
- bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE;
- if(BLEN(bp) < MinAdvise){- ipriv->stats[LenErrs]++;
- goto raise;
- }
- p = (Icmp *)bp->rp;
- pr = Fsrcvpcolx(icmp->f, p->proto);
- if(pr != nil && pr->advise != nil) {- (*pr->advise)(pr, bp, m2);
- return;
- }
- bp->rp -= ICMP_IPSIZE+ICMP_HDRSIZE;
+ snprint(msg = m2, sizeof m2, "ttl exceeded at %V", p->src);
+ goto Advise;
}
goticmpkt(icmp, bp);
break;
--
⑨