MCPcopy Create free account
hub / github.com/F-Stack/f-stack / igmp_set_version

Function igmp_set_version

freebsd/netinet/igmp.c:1992–2030  ·  view source on GitHub ↗

* Switch to a different IGMP version on the given interface, * as per Section 7.2.1. */

Source from the content-addressed store, hash-verified

1990 * as per Section 7.2.1.
1991 */
1992static void
1993igmp_set_version(struct igmp_ifsoftc *igi, const int version)
1994{
1995 int old_version_timer;
1996
1997 IGMP_LOCK_ASSERT();
1998
1999 CTR4(KTR_IGMPV3, "%s: switching to v%d on ifp %p(%s)", __func__,
2000 version, igi->igi_ifp, igi->igi_ifp->if_xname);
2001
2002 if (version == IGMP_VERSION_1 || version == IGMP_VERSION_2) {
2003 /*
2004 * Compute the "Older Version Querier Present" timer as per
2005 * Section 8.12.
2006 */
2007 old_version_timer = igi->igi_rv * igi->igi_qi + igi->igi_qri;
2008 old_version_timer *= PR_SLOWHZ;
2009
2010 if (version == IGMP_VERSION_1) {
2011 igi->igi_v1_timer = old_version_timer;
2012 igi->igi_v2_timer = 0;
2013 } else if (version == IGMP_VERSION_2) {
2014 igi->igi_v1_timer = 0;
2015 igi->igi_v2_timer = old_version_timer;
2016 }
2017 }
2018
2019 if (igi->igi_v1_timer == 0 && igi->igi_v2_timer > 0) {
2020 if (igi->igi_version != IGMP_VERSION_2) {
2021 igi->igi_version = IGMP_VERSION_2;
2022 igmp_v3_cancel_link_timers(igi);
2023 }
2024 } else if (igi->igi_v1_timer > 0) {
2025 if (igi->igi_version != IGMP_VERSION_1) {
2026 igi->igi_version = IGMP_VERSION_1;
2027 igmp_v3_cancel_link_timers(igi);
2028 }
2029 }
2030}
2031
2032/*
2033 * Cancel pending IGMPv3 timers for the given link and all groups

Callers 3

igmp_input_v1_queryFunction · 0.85
igmp_input_v2_queryFunction · 0.85
igmp_input_v3_queryFunction · 0.85

Calls 1

Tested by

no test coverage detected