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]

Reply via email to