When gated was recieved ICMP redirect route,
gated has terminated with core.
Operation summary is below:
1. gated is runnning on HostA
2. HostA --> HostB route-information is nothing
3. HostB --> HostA route-information is having
4. HostA# ping HostB
no answer from HostB
5. add default route on HostA
HostA# route add net default XXX.XXX.XXX.XXX 1
6. HostA# ping HostB
ICMP Host redirect from gateway XXX.XXX.XXX.XXX
to YYY.YYY.YYY.YYY for HostB
7. But gated is not running on HostA
The log of sdb is below:
# sdb /usr/sbin/gated ./core
no source file
no current source file
0x2bde6 (rthlist_match:426+0xc) l r7,4(r6)
*t
rthlist_match(dst=0x1c0178) [rt_radix.c:426]
redirect(dst=0x1c0178,mask=0x1b1630,gateway=0x1c00e8,src=0x1c0180) [rt_redirect.c:109]
icmp_redirect_process(jp=0x202150) [icmp.c:326]
task_job_fg_dispatch() [task.c:1701]
main(0x1,0x7fffff98,0x7fffffa0) [task.c:6526]
*q
#
Then I tried fix of rthlist_match() in rt_radix.c .
% diff -c rt_radix.c.org rt_radix.c.fix
*** rt_radix.c.org Sat May 25 14:47:10 1996
--- rt_radix.c.fix Sat May 25 15:47:38 1996
***************
*** 400,406 ****
* way down
*/
sp = stack;
! while (rn) {
if (rn->rnode_rth) {
*sp++ = rn;
}
--- 400,407 ----
* way down
*/
sp = stack;
! bitlen = mask_to_prefix_si(si, si->si_mask_max);
! while (rn && (rn->rnode_bit < bitlen)) {
if (rn->rnode_rth) {
*sp++ = rn;
}
So, I tried same operation. The gated doesn't terminated, and keep running.
This fix is OK!?
Please verify this fix.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
N o r i k o K a t a y a m a
FUJITSU LIMITED NUMAZU-SHI SHIZUOKA,410-03 JAPAN
E-mail: kata...@open.nm.fujitsu.co.jp
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-