Date: Mon, 17 Jun 1996 17:28:29 -0700 From: "Jin Guojun[ITG]" <jin@george.lbl.gov> To: bugs@freefall.freebsd.org, dima@satty.npi.msu.su, fenner@freefall.freebsd.org, hsu@clinet.fi Subject: Re: Partial fix for panic in arpresolve() (kern/1140, kern/1325) Message-ID: <199606180028.RAA25357@george.lbl.gov>
next in thread | raw e-mail | index | archive | help
I think we are OK to use the new arpcom struct without ac_ipaddr member. Here is the new patch I tested for a while. Please confirm it work no flaw. Thanks, -Jin ------------------------- New patch --------------------------------------- *** netinet/if_ether.c Sat Jun 8 01:18:56 1996 --- netinet/if_ether.c.fixed Mon Jun 17 17:07:10 1996 *************** *** 364,371 **** if (la->la_asked == 0 || rt->rt_expire != time.tv_sec) { rt->rt_expire = time.tv_sec; if (la->la_asked++ < arp_maxtries) ! arprequest(ac, ! &(SIN(rt0->rt_ifa->ifa_addr)->sin_addr.s_addr), &(SIN(dst)->sin_addr.s_addr), ac->ac_enaddr); else { --- 364,372 ---- if (la->la_asked == 0 || rt->rt_expire != time.tv_sec) { rt->rt_expire = time.tv_sec; if (la->la_asked++ < arp_maxtries) ! arprequest(ac, rt0 ? ! &(SIN(rt0->rt_ifa->ifa_addr)->sin_addr.s_addr) ! : &(SIN(rt->rt_ifa->ifa_addr)->sin_addr.s_addr), &(SIN(dst)->sin_addr.s_addr), ac->ac_enaddr); else { ---------------------------------------------------------------------------- ****************** following is the original message ********************** Folks, Sorry that this has taken so long. Thanks very much to Jin Guojun for the idea. This is not the fix that I (or CSRG) eventaully intended, but should make things at least work for now. Could you try this patch to FreeBSD-current and see if it fixes your problems? It is basically Jin's fix with the reinstantiation of the ac_ipaddr member of struct arpcom. Thanks, Bill Index: if_ether.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/if_ether.c,v retrieving revision 1.31 diff -c -r1.31 if_ether.c *** if_ether.c 1996/06/13 02:54:19 1.31 --- if_ether.c 1996/06/17 23:59:54 *************** *** 364,371 **** if (la->la_asked == 0 || rt->rt_expire != time.tv_sec) { rt->rt_expire = time.tv_sec; if (la->la_asked++ < arp_maxtries) ! arprequest(ac, ! &(SIN(rt0->rt_ifa->ifa_addr)->sin_addr.s_addr), &(SIN(dst)->sin_addr.s_addr), ac->ac_enaddr); else { --- 364,372 ---- if (la->la_asked == 0 || rt->rt_expire != time.tv_sec) { rt->rt_expire = time.tv_sec; if (la->la_asked++ < arp_maxtries) ! arprequest(ac, rt0 ? ! &(SIN(rt0->rt_ifa->ifa_addr)->sin_addr.s_addr) : ! &ac->ac_ipaddr.s_addr, &(SIN(dst)->sin_addr.s_addr), ac->ac_enaddr); else { *************** *** 626,631 **** --- 627,633 ---- struct arpcom *ac; struct ifaddr *ifa; { + ac->ac_ipaddr = IA_SIN(ifa)->sin_addr; struct ether_multi *ac_multiaddrs; /* list of ether multicast addrs */ int ac_multicnt; /* length of ac_multiaddrs list */ };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199606180028.RAA25357>