diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-03-04 03:09:39 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-03-04 03:09:39 +0100 |
commit | 2af6b0896040ab24c2d411a36781d7588935c6cf (patch) | |
tree | 5754c97939d2d93cb557d007e4fee2bd3f089fe4 /sys/src/9/ip | |
parent | 827020f6863490c649470087008ab5ca8138afc0 (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.c | 17 |
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; |