FreeBSD/sys/netinet6/mld6.c
/*
 * Update host report group timer.
 * Will update the global pending timer flags.
 */
Update host report group timer.
Will update the global pending timer flags.
Update host report group timer . Will update the global pending timer flags .
static void
mld_v1_process_group_timer(struct mld_ifsoftc *mli, struct in6_multi *inm)
{
	int report_timer_expired;
	IN6_MULTI_LOCK_ASSERT();
	MLD_LOCK_ASSERT();
	if (inm->in6m_timer == 0) {
		report_timer_expired = 0;
	} else if (--inm->in6m_timer == 0) {
		report_timer_expired = 1;
	} else {
		V_current_state_timers_running6 = 1;
		return;
	}
	switch (inm->in6m_state) {
	case MLD_NOT_MEMBER:
	case MLD_SILENT_MEMBER:
	case MLD_IDLE_MEMBER:
	case MLD_LAZY_MEMBER:
	case MLD_SLEEPING_MEMBER:
	case MLD_AWAKENING_MEMBER:
		break;
	case MLD_REPORTING_MEMBER:
		if (report_timer_expired) {
			inm->in6m_state = MLD_IDLE_MEMBER;
			SLIST_INSERT_HEAD(&mli->mli_relinmhead, inm,
			    in6m_nrele);
		}
		break;
	case MLD_G_QUERY_PENDING_MEMBER:
	case MLD_SG_QUERY_PENDING_MEMBER:
	case MLD_LEAVING_MEMBER:
		break;
	}
}
static void mld_v1_process_group_timer ( struct mld_ifsoftc * mli , struct in6_multi * inm ) { int report_timer_expired ; IN6_MULTI_LOCK_ASSERT ( ) ; MLD_LOCK_ASSERT ( ) ; if ( inm -> in6m_timer == 0 ) { report_timer_expired = 0 ; } else if ( -- inm -> in6m_timer == 0 ) { report_timer_expired = 1 ; } else { V_current_state_timers_running6 = 1 ; return ; } switch ( inm -> in6m_state ) { case MLD_NOT_MEMBER : case MLD_SILENT_MEMBER : case MLD_IDLE_MEMBER : case MLD_LAZY_MEMBER : case MLD_SLEEPING_MEMBER : case MLD_AWAKENING_MEMBER : break ; case MLD_REPORTING_MEMBER : if ( report_timer_expired ) { inm -> in6m_state = MLD_IDLE_MEMBER ; SLIST_INSERT_HEAD ( & mli -> mli_relinmhead , inm , in6m_nrele ) ; } break ; case MLD_G_QUERY_PENDING_MEMBER : case MLD_SG_QUERY_PENDING_MEMBER : case MLD_LEAVING_MEMBER : break ; } }
Update host report group timer.
Update host report group timer .