summaryrefslogtreecommitdiff
path: root/sys/src/9/ip
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-03-04 03:09:39 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2019-03-04 03:09:39 +0100
commit2af6b0896040ab24c2d411a36781d7588935c6cf (patch)
tree5754c97939d2d93cb557d007e4fee2bd3f089fe4 /sys/src/9/ip
parent827020f6863490c649470087008ab5ca8138afc0 (diff)
devip: use common code in icmp for handling advise
Diffstat (limited to 'sys/src/9/ip')
-rw-r--r--sys/src/9/ip/icmp.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/sys/src/9/ip/icmp.c b/sys/src/9/ip/icmp.c
index 8f61b073b..51f041b38 100644
--- a/sys/src/9/ip/icmp.c
+++ b/sys/src/9/ip/icmp.c
@@ -394,6 +394,7 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp)
} else
msg = unreachcode[p->code];
+ Advise:
bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE;
if(BLEN(bp) < MinAdvise){
ipriv->stats[LenErrs]++;
@@ -410,20 +411,8 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp)
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;