devip: use common code in icmp for handling advise
This commit is contained in:
parent
827020f686
commit
2af6b08960
|
@ -394,6 +394,7 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp)
|
||||||
} else
|
} else
|
||||||
msg = unreachcode[p->code];
|
msg = unreachcode[p->code];
|
||||||
|
|
||||||
|
Advise:
|
||||||
bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE;
|
bp->rp += ICMP_IPSIZE+ICMP_HDRSIZE;
|
||||||
if(BLEN(bp) < MinAdvise){
|
if(BLEN(bp) < MinAdvise){
|
||||||
ipriv->stats[LenErrs]++;
|
ipriv->stats[LenErrs]++;
|
||||||
|
@ -410,20 +411,8 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp)
|
||||||
break;
|
break;
|
||||||
case TimeExceed:
|
case TimeExceed:
|
||||||
if(p->code == 0){
|
if(p->code == 0){
|
||||||
snprint(m2, sizeof m2, "ttl exceeded at %V", p->src);
|
snprint(msg = m2, sizeof m2, "ttl exceeded at %V", p->src);
|
||||||
|
goto Advise;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
goticmpkt(icmp, bp);
|
goticmpkt(icmp, bp);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue