In IGMPv2, the Max response time is an 8-bit value each unit encoding 0.1 seconds. The typical max response time is 100 resulting in a 10 second max response time.
In IGMPv3, if the Max response code is < 128, the calculated time is the same. But per https://www.rfc-editor.org/rfc/rfc3376 section 4.1.1:
If Max Resp Code < 128, Max Resp Time = Max Resp Code If Max Resp Code >= 128, Max Resp Code represents a floating-point value as follows: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+ Max Resp Time = (mant | 0x10) << (exp + 3)
https://www.rfc-editor.org/rfc/rfc6636 section 4.2 gives an example:
For example, if one wants to set the Max Response Time to 20.0 seconds, the Max Resp Code should be expressed as "0b10001001", which is divided into "mant=0b1001" and "exp=0b000".
I don't see how 0b10001001 results in 20 seconds. If the mantissa is 0b1001 (9 decimal) and we bitshift left 3 (exponent 0 + 3) that results in 0b01001000 = 72 decimal or 7.2 seconds.
How do I calculate the IGMPv3 response time for max response code values >= 128?
Neither RFC has relevant errata.