Skip to content

mipv6: MIPv6_INITIAL_BINDACK_TIMEOUT_FIRST is 1 s, RFC 6275 specifies 1.5 s #1133

Description

@adamgeorge309

Summary

MIPv6_INITIAL_BINDACK_TIMEOUT_FIRST is defined as 1 second in
src/inet/networklayer/ipv6/Mipv6InterfaceData.h:34. RFC 6275 specifies a default of 1.5
seconds
for InitialBindackTimeoutFirstReg.

/***************RFC 3775: Section 12 Protocol Constants************************/
...
#define MIPv6_INITIAL_BINDACK_TIMEOUT_FIRST    1 // seconds

What the standard says

RFC 6275 Section 13, Protocol Configuration Variables:

           MaxMobPfxAdvInterval            Default: 86,400 seconds
           MinDelayBetweenRAs              Default: 3 seconds,
                                           Min: 0.03 seconds
           MinMobPfxAdvInterval            Default: 600 seconds
           InitialBindackTimeoutFirstReg   Default: 1.5 seconds

Home agents MUST allow the first three variables to be configured by
system management, and mobile nodes MUST allow the last variable to
be configured by system management.

The default value for InitialBindackTimeoutFirstReg has been
calculated as 1.5 times the default value of RetransTimer, as
specified in Neighbor Discovery (RFC 4861 [18]) times the default
value of DupAddrDetectTransmits, as specified in Stateless Address
Autoconfiguration (RFC 4862 [19]).

RFC 3775 Section 13 is identical.

Why the 0.5 s matters

The timer has to outlast the Home Agent's (HA) Duplicate Address Detection (DAD). INET models that
delay as exactly DupAddrDetectTransmits x RetransTimer = 1 s (Mipv6.cc,
sendTime = existingBinding ? 0 : 1), which is faithful. The RFC's 1.5x factor is the margin that
covers the round trip on top of Duplicate Address Detection (DAD). At 1 s the model has no margin at
all, so the Binding Acknowledgement (BA) always loses the race against the retransmission timer by
roughly one round trip.

Two secondary defects in the same declaration

  1. It is filed as a protocol constant. The #define sits inside the block headed
    /***************RFC 3775: Section 12 Protocol Constants*****..., but
    InitialBindackTimeoutFirstReg is a Section 13 Protocol Configuration Variable, not a Section
    12 constant. The RFC spells the two categories differently on purpose — constants are
    ALL_CAPS, configuration variables are CamelCase.

  2. It is not configurable. RFC 6275 Section 13 says mobile nodes MUST allow this variable to be
    configured by system management. INET hardcodes it in a header. Mipv6.ned already exposes
    maxHaBindingLifeTime and maxRrBindingLifeTime as NED parameters, so there is an established
    place for it.

Relationship to #1132

Fixing this value alone changes nothing observable, because #1132 makes the branch that reads it
unreachable. Both have to be fixed for a first home registration to complete in a single Binding
Update (BU). Verified on examples/ipv6/mipv6 -c Handover:

Change Binding Updates (BUs) for the first registration
As shipped (value 1 s, dead branch) 2
Value raised to 7 s, branch still dead 2 (no effect whatsoever)
Branch repaired, value left at 1 s 2
Branch repaired and value set to 1.5 s 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions