On (05/23/07 14:27), Peter Memishian wrote:
> > Zone C works fine for about 15-20 hours. After which, it cannot
Does it ever recover from the wedged state (e.g., if you wait for 15-20
minutes)?
> > connect to any off-subnet addresses. The routing table looks fine and
> > still has the correct default route. Zones A and B which are on the
> > same subnet as the global zone, don't exhibit this problem at all.
> > Neither /var/adm/messages nor dmesg show any errors.
> >
> > Does anyone have an idea what would cause this? Thank you in advance
> > for your help. Any is greatly appreciated.
>
> Perhaps an instance of 6545032 (which was fixed in b64)? You could check
> if this is the case by checking (with DTrace) if the nce_t returned from
> ndp_lookup_v4() (via ire_add_v4()) has an nce_state of ND_INITIAL.
Could you run the attached nce.d script, and, while it is running,
type 'ndd -get /dev/ip ip_ndp_cache_report > /dev/null' in another shell?
e.g.,
# ./nce.d &
# ndd -get /dev/ip ip_ndp_cache_report > /dev/null
This should give you a list of the nce_t entries, and tell you if
you are running into 6545032 (there should be no entries in the ND_INITIAL
state).
--Sowmini
#!/usr/sbin/dtrace -Cs
#define ND_UNCHANGED 0
#define ND_INCOMPLETE 1
#define ND_REACHABLE 2
#define ND_STALE 3
#define ND_DELAY 4
#define ND_PROBE 5
#define ND_UNREACHABLE 6
#define ND_INITIAL 7
#define M_CTL 0x0d
#define IRE_CACHE 0x0020
#define ire_addr ire_u.ire4_u.ire4_addr
#define ire_gateway_addr ire_u.ire4_u.ire4_gateway_addr
#define IRE_TO_ILL_NAME(ire_cache) \
(((ill_t *)((ire_cache)->ire_stq->q_ptr))->ill_name)
#define IPADDR(a) printf("%d.%d.%d.%d ",\
(u_int)(a)[0], (u_int)(a)[1], (u_int)(a)[2], (u_int)(a)[3])
#define NCE_STATE(nce_state) \
(string)((nce_state == ND_INITIAL) ? "INITIAL": \
((nce_state == ND_INCOMPLETE) ? "INCOMPLETE" : \
((nce_state == ND_REACHABLE) ? "REACHABLE" : "unknown!")))
BEGIN
{
trace("ready");
}
/*
* dump all the ipv4 nce's when someone does
* ndd -get /dev/ip ip_ndp_cache_report > /dev/null
*/
nce_report1:entry
/ ((nce_t *)arg0)->nce_ipversion == 4/
{
nce = (nce_t *)arg0;
printf("nce %p %s flg 0x%x %s addr %x:%x:%x:%x res_mp %p fp_mp %p",
nce, NCE_STATE(nce->nce_state), nce->nce_flags,
(string)(nce->nce_ill->ill_name),
nce->nce_addr._S6_un._S6_u32[0],
nce->nce_addr._S6_un._S6_u32[1],
nce->nce_addr._S6_un._S6_u32[2],
nce->nce_addr._S6_un._S6_u32[3],
nce->nce_res_mp, nce->nce_fp_mp);
}
END
{
}
_______________________________________________
networking-discuss mailing list
[email protected]