|
Lines 557-563
Link Here
|
| 557 |
continue; |
557 |
continue; |
| 558 |
inm = (struct in6_multi *)ifma->ifma_protospec; |
558 |
inm = (struct in6_multi *)ifma->ifma_protospec; |
| 559 |
if (inm->in6m_state == MLD_LEAVING_MEMBER) { |
559 |
if (inm->in6m_state == MLD_LEAVING_MEMBER) { |
| 560 |
in6m_disconnect(inm); |
560 |
in6m_disconnect_locked(&inmh, inm); |
| 561 |
in6m_rele_locked(&inmh, inm); |
561 |
in6m_rele_locked(&inmh, inm); |
| 562 |
ifma->ifma_protospec = NULL; |
562 |
ifma->ifma_protospec = NULL; |
| 563 |
} |
563 |
} |
|
Lines 1488-1495
Link Here
|
| 1488 |
case MLD_REPORTING_MEMBER: |
1488 |
case MLD_REPORTING_MEMBER: |
| 1489 |
if (report_timer_expired) { |
1489 |
if (report_timer_expired) { |
| 1490 |
inm->in6m_state = MLD_IDLE_MEMBER; |
1490 |
inm->in6m_state = MLD_IDLE_MEMBER; |
| 1491 |
in6m_disconnect(inm); |
1491 |
in6m_disconnect_locked(inmh, inm); |
| 1492 |
in6m_rele_locked(inmh, inm); |
|
|
| 1493 |
} |
1492 |
} |
| 1494 |
break; |
1493 |
break; |
| 1495 |
case MLD_G_QUERY_PENDING_MEMBER: |
1494 |
case MLD_G_QUERY_PENDING_MEMBER: |
|
Lines 1613-1619
Link Here
|
| 1613 |
if (inm->in6m_state == MLD_LEAVING_MEMBER && |
1612 |
if (inm->in6m_state == MLD_LEAVING_MEMBER && |
| 1614 |
inm->in6m_scrv == 0) { |
1613 |
inm->in6m_scrv == 0) { |
| 1615 |
inm->in6m_state = MLD_NOT_MEMBER; |
1614 |
inm->in6m_state = MLD_NOT_MEMBER; |
| 1616 |
in6m_disconnect(inm); |
1615 |
in6m_disconnect_locked(inmh, inm); |
| 1617 |
in6m_rele_locked(inmh, inm); |
1616 |
in6m_rele_locked(inmh, inm); |
| 1618 |
} |
1617 |
} |
| 1619 |
} |
1618 |
} |
|
Lines 1704-1710
Link Here
|
| 1704 |
* version, we need to release the final |
1703 |
* version, we need to release the final |
| 1705 |
* reference held for issuing the INCLUDE {}. |
1704 |
* reference held for issuing the INCLUDE {}. |
| 1706 |
*/ |
1705 |
*/ |
| 1707 |
in6m_disconnect(inm); |
1706 |
in6m_disconnect_locked(&inmh, inm); |
| 1708 |
in6m_rele_locked(&inmh, inm); |
1707 |
in6m_rele_locked(&inmh, inm); |
| 1709 |
ifma->ifma_protospec = NULL; |
1708 |
ifma->ifma_protospec = NULL; |
| 1710 |
/* FALLTHROUGH */ |
1709 |
/* FALLTHROUGH */ |
|
Lines 1899-1904
Link Here
|
| 1899 |
error = 0; |
1898 |
error = 0; |
| 1900 |
|
1899 |
|
| 1901 |
/* |
1900 |
/* |
|
|
1901 |
* Check if the in6_multi has already been disconnected. |
| 1902 |
*/ |
| 1903 |
if (inm->in6m_ifp == NULL) { |
| 1904 |
CTR1(KTR_MLD, "%s: inm is disconnected", __func__); |
| 1905 |
return (0); |
| 1906 |
} |
| 1907 |
|
| 1908 |
/* |
| 1902 |
* Try to detect if the upper layer just asked us to change state |
1909 |
* Try to detect if the upper layer just asked us to change state |
| 1903 |
* for an interface which has now gone away. |
1910 |
* for an interface which has now gone away. |
| 1904 |
*/ |
1911 |
*/ |
|
Lines 2008-2013
Link Here
|
| 2008 |
if (mli->mli_version == MLD_VERSION_2 && |
2015 |
if (mli->mli_version == MLD_VERSION_2 && |
| 2009 |
inm->in6m_state == MLD_LEAVING_MEMBER) { |
2016 |
inm->in6m_state == MLD_LEAVING_MEMBER) { |
| 2010 |
inm->in6m_refcount--; |
2017 |
inm->in6m_refcount--; |
|
|
2018 |
MPASS(inm->in6m_refcount > 0); |
| 2011 |
} |
2019 |
} |
| 2012 |
inm->in6m_state = MLD_REPORTING_MEMBER; |
2020 |
inm->in6m_state = MLD_REPORTING_MEMBER; |
| 2013 |
|
2021 |
|