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
-
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.
-
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 |
Summary
MIPv6_INITIAL_BINDACK_TIMEOUT_FIRSTis defined as1second insrc/inet/networklayer/ipv6/Mipv6InterfaceData.h:34. RFC 6275 specifies a default of 1.5seconds for
InitialBindackTimeoutFirstReg.What the standard says
RFC 6275 Section 13, Protocol Configuration Variables:
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
DupAddrDetectTransmitsxRetransTimer= 1 s (Mipv6.cc,sendTime = existingBinding ? 0 : 1), which is faithful. The RFC's 1.5x factor is the margin thatcovers 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
It is filed as a protocol constant. The
#definesits inside the block headed/***************RFC 3775: Section 12 Protocol Constants*****..., butInitialBindackTimeoutFirstRegis a Section 13 Protocol Configuration Variable, not a Section12 constant. The RFC spells the two categories differently on purpose — constants are
ALL_CAPS, configuration variables areCamelCase.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.nedalready exposesmaxHaBindingLifeTimeandmaxRrBindingLifeTimeas NED parameters, so there is an establishedplace 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: