On 01/05/2026 20:31, Ujjal Roy wrote:
In MLD, MRC and QQIC fields are not correctly encoded when
generating query packets. Since the receiver of the query
interprets these fields using the MLDv2 floating-point
decoding logic, any value that exceeds the linear threshold
is incorrectly parsed as an exponential value, leading to
an incorrect interval calculation.

Encode and assign the corresponding protocol fields during
query generation. Introduce the logic to dynamically
calculate the exponent and mantissa using bit-scan (fls).
This ensures MRC (16-bit) and QQIC (8-bit) fields are
properly encoded when transmitting query packets with
intervals that exceed their respective linear thresholds
(32768 for MRD; 128 for QQI).

RFC3810: If Maximum Response Code >= 32768, the Maximum
Response Code field represents a floating-point value as
follows:
      0 1 2 3 4 5 6 7 8 9 A B C D E F
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |1| exp |          mant         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RFC3810: If QQIC >= 128, the QQIC field represents a
floating-point value as follows:
      0 1 2 3 4 5 6 7
     +-+-+-+-+-+-+-+-+
     |1| exp | mant  |
     +-+-+-+-+-+-+-+-+

Reviewed-by: Ido Schimmel <[email protected]>
Signed-off-by: Ujjal Roy <[email protected]>
---
  include/net/mld.h         | 119 ++++++++++++++++++++++++++++++++++++++
  net/bridge/br_multicast.c |   4 +-
  2 files changed, 121 insertions(+), 2 deletions(-)


Reviewed-by: Nikolay Aleksandrov <[email protected]>


Reply via email to