Re: [PATCH net-next v2 0/5] net: bridge: mcast: add multicast exponential field encoding
Ujjal Roy <[email protected]>
| Newsgroups | gmane.linux.network.bridge,gmane.linux.network,gmane.linux.kernel |
|---|---|
| Message-ID | <CAE2MWkkY3anF0Am4JbCFeFax1dSH2F7AyRUjHJs6S17fKkhU6g@mail.gmail.com> |
On Tue, Mar 31, 2026 at 12:46 AM Ujjal Roy <[email protected]> wrote: > > Description: > This series addresses a mismatch in how multicast query > intervals and response codes are handled across IPv4 (IGMPv3) > and IPv6 (MLDv2). While decoding logic currently exists, > the corresponding encoding logic is missing during query > packet generation. This leads to incorrect intervals being > transmitted when values exceed their linear thresholds. > > The patches introduce a unified floating-point encoding > approach based on RFC3376 and RFC3810, ensuring that large > intervals are correctly represented in QQIC and MRC fields > using the exponent-mantissa format. > > Key Changes: > * ipv4: igmp: get rid of IGMPV3_{QQIC,MRC} and simplify calculation > Removes legacy macros in favor of a cleaner, unified > calculation for retrieving intervals from encoded fields, > improving code maintainability. > > * ipv6: mld: rename mldv2_mrc() and add mldv2_qqi() > Standardizes MLDv2 terminology by renaming mldv2_mrc() > to mldv2_mrd() (Maximum Response Delay) and introducing > a new API mldv2_qqi for QQI calculation, improving code > readability. > > * ipv4: igmp: encode multicast exponential fields > Introduces the logic to dynamically calculate the exponent > and mantissa using bit-scan (fls). This ensures QQIC and > MRC fields (8-bit) are properly encoded when transmitting > query packets with intervals that exceed their respective > linear threshold value of 128 (for QQI/MRT). > > * ipv6: mld: encode multicast exponential fields > Applies similar encoding logic for MLDv2. This ensures > QQIC (8-bit) and MRC (16-bit) fields are properly encoded > when transmitting query packets with intervals that exceed > their respective linear thresholds (128 for QQI; 32768 > for MRD). > > Impact: > These changes ensure that multicast queriers and listeners > stay synchronized on timing intervals, preventing protocol > timeouts or premature group membership expiration caused > by incorrectly formatted packet headers. > > v2: > - Retargeted the series to net-next as suggested > - Fixed a compilation warning in the MLD rename change > - Kept reverse xmas tree order in IGMP exponential encoding change > - Added bridge selftests to validate IGMPv3 Query MRC and QQIC handling > > Ujjal Roy (5): > ipv4: igmp: get rid of IGMPV3_{QQIC,MRC} and simplify calculation > ipv6: mld: rename mldv2_mrc() and add mldv2_qqi() > ipv4: igmp: encode multicast exponential fields > ipv6: mld: encode multicast exponential fields > selftests: net: bridge: add tests for igmpv3 MRC and QQIC validation > > include/linux/igmp.h | 158 +++++++++++++++- > include/net/mld.h | 179 +++++++++++++++++- > net/bridge/br_multicast.c | 22 +-- > net/ipv4/igmp.c | 6 +- > net/ipv6/mcast.c | 19 +- > .../selftests/net/forwarding/.gitignore | 2 + > .../testing/selftests/net/forwarding/Makefile | 10 + > .../selftests/net/forwarding/bridge_igmp.sh | 109 +++++++++++ > .../selftests/net/forwarding/mc_decode.c | 38 ++++ > .../selftests/net/forwarding/mc_encode.c | 40 ++++ > 10 files changed, 535 insertions(+), 48 deletions(-) > create mode 100644 tools/testing/selftests/net/forwarding/mc_decode.c > create mode 100644 tools/testing/selftests/net/forwarding/mc_encode.c > > > base-commit: cf0d9080c6f795bc6be08babbffa29b62c06e9b0 > -- > 2.43.0 > Forgot to attach test result using bridge_igmp.sh selftest. First two test cases are added newly v3query_mrc_test and v3query_qqic_test. Without these patches: tools/testing/selftests/net/forwarding# ./bridge_igmp.sh TEST: IGMPv3 query: verify MRC (configured=160, expected=132) [FAIL] Bad MRC value in IGMP packet: Max Resp Time: 51.2 sec (0xa0) TEST: IGMPv3 query: verify QQIC (configured=160, expected=132) [FAIL] Bad QQIC value in IGMP packet: QQIC: 160 TEST: IGMPv2 report 239.10.10.10 [ OK ] ... With these patches: tools/testing/selftests/net/forwarding# ./bridge_igmp.sh TEST: IGMPv3 query: verify MRC (configured=160, expected=132) [ OK ] TEST: IGMPv3 query: verify QQIC (configured=160, expected=132) [ OK ] TEST: IGMPv2 report 239.10.10.10 [ OK ] ...