[MCAST] IPv6: Fix algorithm to compute Querier's Query Interval
5.1.3.  Maximum Response Code
   The Maximum Response Code field specifies the maximum time allowed
   before sending a responding Report.  The actual time allowed, called
   the Maximum Response Delay, is represented in units of milliseconds,
   and is derived from the Maximum Response Code as follows:
   If Maximum Response Code < 32768,
      Maximum Response Delay = Maximum Response Code
   If Maximum Response Code >=32768, Maximum Response Code 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         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   Maximum Response Delay = (mant | 0x1000) << (exp+3)
5.1.9.  QQIC (Querier's Query Interval Code)
   The Querier's Query Interval Code field specifies the [Query
   Interval] used by the Querier.  The actual interval, called the
   Querier's Query Interval (QQI), is represented in units of seconds,
   and is derived from the Querier's Query Interval Code as follows:
   If QQIC < 128, QQI = QQIC
   If QQIC >= 128, QQIC represents a floating-point value as follows:
       0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      |1| exp | mant  |
      +-+-+-+-+-+-+-+-+
   QQI = (mant | 0x10) << (exp + 3)
                                                -- rfc3810
#define MLDV2_QQIC(value) MLDV2_EXP(0x80, 4, 3, value)
#define MLDV2_MRC(value) MLDV2_EXP(0x8000, 12, 3, value)
Above macro are defined in mcast.c. but 1 << 4 == 0x10 and 1 << 12 == 0x1000.
So the result computed by original Macro is larger.
Signed-off-by: 
Yan Zheng <yanzheng@21cn.com>
Acked-by: 
David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: 
Arnaldo Carvalho de Melo <acme@mandriva.com>
Loading
Please register or sign in to comment