|
1 | 1 | Recent changes in the INET Framework |
2 | 2 | ==================================== |
3 | 3 |
|
| 4 | +INET-4.7 (July 2026) — feature release |
| 5 | +-------------------------------------- |
| 6 | + |
| 7 | +This is a new feature release in the INET 4.x branch. The central theme of this |
| 8 | +release is the maturation of the IPv6 protocol family, bringing it substantially |
| 9 | +closer to feature parity with IPv4. Highlights include a new declarative IPv6 |
| 10 | +network configurator, IPv6 multicast routing (MLD, and PIM-DM/PIM-SM over IPv6), |
| 11 | +node lifecycle support, Duplicate Address Detection, a modernized Mobile IPv6 |
| 12 | +(MIPv6) model with new Proxy Mobile IPv6 (PMIPv6) support, and IPv6 support in |
| 13 | +BGP (MP-BGP) and IPsec. Outside the IPv6 area, the release brings satellite and |
| 14 | +GNSS track mobility models with geographic visualization, a substantial overhaul |
| 15 | +of the STP and RSTP spanning tree models, major BGP improvements, TCP Path MTU |
| 16 | +Discovery, and a configurable RNG grouping mechanism. The release also contains |
| 17 | +numerous smaller improvements and bug fixes. Requires OMNeT++ 6.4 or later. |
| 18 | + |
| 19 | +For a complete list of all added, removed, and changed folders, NED modules, |
| 20 | +packet chunks, packet tags, statistics, C++ classes, and signals, please refer to |
| 21 | +the ChangeLog file in the src folder. |
| 22 | + |
| 23 | +Notable backward incompatible changes are the following: |
| 24 | + |
| 25 | +1. Mobile IPv6 (MIPv6) modernization |
| 26 | + |
| 27 | + The Mobile IPv6 model was substantially modernized and aligned with the rest of |
| 28 | + the IPv6 stack. The module previously named xMIPv6 was renamed to Mipv6, and the |
| 29 | + xMIPv6Support wrapper was flattened into Ipv6NetworkLayer, with Mobile IPv6 now |
| 30 | + enabled by a hasMipv6 switch. |
| 31 | + |
| 32 | + IPv6 tunneling was reworked to follow the same model as IPv4: a tunnel is now |
| 33 | + represented as a virtual network interface rather than a dedicated mechanism, |
| 34 | + and the former Ipv6Tunneling module was removed. MIPv6-specific per-interface |
| 35 | + state was moved out of Ipv6InterfaceData into a separate Mipv6InterfaceData |
| 36 | + class. |
| 37 | + |
| 38 | + Several new roaming scenarios were added, and a number of latent correctness |
| 39 | + bugs in binding management, return routability, and route optimization were |
| 40 | + fixed along the way. |
| 41 | + |
| 42 | + This change requires the modification of simulation models that reference the |
| 43 | + xMIPv6 module type, the Ipv6Tunneling module, or the xMIPv6Support submodule |
| 44 | + path, as well as C++ code that accesses MIPv6 fields through Ipv6InterfaceData. |
| 45 | + |
| 46 | +2. STP and RSTP overhaul |
| 47 | + |
| 48 | + The Spanning Tree Protocol (STP) and Rapid Spanning Tree Protocol (RSTP) models |
| 49 | + were substantially reworked for correctness and standards compliance. RSTP now |
| 50 | + implements the full Proposal/Agreement handshake for rapid, timer-free |
| 51 | + transition to the forwarding state. Several long-standing defects were fixed, |
| 52 | + including a topology-change (TCN) BPDU storm, a hold-timer violation, and |
| 53 | + incorrect timer interval assignments. The nonstandard ALTERNATE port role, which |
| 54 | + had been backported from RSTP, was removed from STP. |
| 55 | + |
| 56 | + A number of NED parameters and packet types were renamed for clarity and |
| 57 | + consistency. Notably, the RSTP helloTime parameter was renamed to helloInterval, |
| 58 | + and the STP maxAge parameter was renamed to configuredMaxAge (with the former |
| 59 | + currentMaxAge becoming maxAge). The BPDU packet type names were also reworked |
| 60 | + (e.g. stp-hello, rstp-hello). |
| 61 | + |
| 62 | + In addition, when the port path cost is not explicitly configured, |
| 63 | + L2NetworkConfigurator now derives the default from the link speed, following |
| 64 | + the recommendation of IEEE 802.1D-2004. |
| 65 | + |
| 66 | + This change requires the modification of simulation models that configure the |
| 67 | + renamed parameters, and it may significantly change the statistical results of |
| 68 | + spanning tree simulations due to the corrected protocol behavior. |
| 69 | + |
| 70 | +3. IPv6 Router Advertisement interval defaults |
| 71 | + |
| 72 | + The default Router Advertisement interval was changed to follow RFC 4861. |
| 73 | + Previously, the minIntervalBetweenRAs and maxIntervalBetweenRAs parameters |
| 74 | + defaulted to very short, Mobile-IPv6-tuned values (30 ms and 70 ms) and were |
| 75 | + additionally overridden for wireless interfaces. They now default to the |
| 76 | + standard RFC 4861 values, and the wireless special-casing was removed. |
| 77 | + |
| 78 | + This change doesn't require the modification of simulation models, but it may |
| 79 | + significantly change the statistical results of IPv6 simulations that relied on |
| 80 | + the previous fast Router Advertisement timing, particularly those involving |
| 81 | + wireless or mobile nodes. |
| 82 | + |
| 83 | +4. IPsec generalization to IPv6 |
| 84 | + |
| 85 | + The IPsec model, introduced in the previous release for IPv4, was generalized |
| 86 | + to be address family independent, and now supports IPv6 as well. Traffic |
| 87 | + selectors and the security association and policy databases operate on |
| 88 | + generic L3 addresses, each IPsec instance serves the address family of its |
| 89 | + enclosing network layer, and Ipv6NetworkLayer gained a hasIpsec switch |
| 90 | + analogous to the IPv4 one. AH and ESP headers are treated as terminal headers |
| 91 | + in the IPv6 extension header chain. Two latent bugs in AH protection (a |
| 92 | + zero-length header on egress, and a double header removal on ingress) were |
| 93 | + fixed, and a new example demonstrates ESP over IPv6. |
| 94 | + |
| 95 | + As part of this change, the model was moved from the networklayer/ipv4/ipsec |
| 96 | + folder to networklayer/ipsec, with the NED package changing accordingly. This |
| 97 | + change requires the modification of simulation models and C++ code that |
| 98 | + reference the old package or include paths. |
| 99 | + |
| 100 | +5. BGP timer configuration |
| 101 | + |
| 102 | + The BGP timers, previously configured via the <TimerParams> element of the |
| 103 | + bgpConfig XML file, are now parameters of the Bgp module (connectRetryTime, |
| 104 | + holdTime, keepAliveTime, startDelay). A <TimerParams> element in the XML |
| 105 | + configuration is now rejected with an error message that explains how to |
| 106 | + migrate. |
| 107 | + |
| 108 | + This change requires the modification of simulation models that configure |
| 109 | + BGP timers in the XML configuration file. |
| 110 | + |
| 111 | +6. ICMP error indication refactoring |
| 112 | + |
| 113 | + The handling of ICMP error indications was refactored into a properly layered |
| 114 | + architecture in which each protocol layer processes only its own header. As part |
| 115 | + of this, the IcmpErrorInd indication and the IcmpErrorTag tag were each split |
| 116 | + into IPv4-specific and IPv6-specific variants (Icmpv4ErrorInd / Icmpv6ErrorInd |
| 117 | + and Icmpv4ErrorTag / Icmpv6ErrorTag). |
| 118 | + |
| 119 | + These changes are backward incompatible for C++ code that directly references |
| 120 | + the old combined ICMP error indication or tag types. |
| 121 | + |
| 122 | +Notable backward compatible changes are the following: |
| 123 | + |
| 124 | +1. IPv6 network configurator |
| 125 | + |
| 126 | + A new Ipv6NetworkConfigurator, with a companion Ipv6NodeConfigurator, was added, |
| 127 | + bringing the declarative, IPv4-style network configuration approach to IPv6. |
| 128 | + Like its IPv4 counterpart, it assigns addresses and sets up routing tables |
| 129 | + automatically based on the network topology, while allowing fine-grained control |
| 130 | + through an XML configuration. Explicit per-interface addresses can be assigned |
| 131 | + (e.g. using a prefix::interface-id form), overriding the default EUI-64 interface |
| 132 | + identifier. Both the IPv4 and IPv6 configurators now also accept CIDR |
| 133 | + "address/prefixlen" notation in static route specifications, and gained |
| 134 | + addRemoteRoutes and addManualRoutes parameters that allow the individual |
| 135 | + route generation steps to be enabled or disabled separately. The simpler |
| 136 | + Ipv6FlatNetworkConfigurator remains available. |
| 137 | + |
| 138 | +2. IPv6 lifecycle and multicast forwarding |
| 139 | + |
| 140 | + The IPv6 protocol stack gained node lifecycle support, so that IPv6 nodes now |
| 141 | + correctly handle shutdown, restart, and crash operations the same way IPv4 nodes |
| 142 | + do. In addition, IPv6 multicast packet forwarding was implemented, including a |
| 143 | + multicast routing information base and forwarding information base with reverse |
| 144 | + path forwarding (RPF) checks. Together with the multicast routing protocols |
| 145 | + described below, this enables IPv6 multicast scenarios that were previously only |
| 146 | + possible with IPv4. |
| 147 | + |
| 148 | +3. Multicast Listener Discovery (MLD) |
| 149 | + |
| 150 | + IPv6 multicast group membership is now managed using the Multicast Listener |
| 151 | + Discovery protocol. The MLDv1 router-side behavior was completed, and a new Mldv2 |
| 152 | + module implementing MLDv2 (RFC 3810) was added, including the corresponding |
| 153 | + message set, serializer, packet dissector, and printer; the MLD version is |
| 154 | + selected by module typename. Source-specific multicast (SSM) membership state was |
| 155 | + added to Ipv6InterfaceData. The IPv4 IGMPv3 model was brought to lockstep parity |
| 156 | + with MLDv2 (query and report retransmission, interoperation with older versions), |
| 157 | + so that the IPv4 and IPv6 multicast membership implementations now mirror each |
| 158 | + other. |
| 159 | + |
| 160 | +4. PIM over IPv6 |
| 161 | + |
| 162 | + The PIM-DM and PIM-SM multicast routing protocols were generalized to be address |
| 163 | + family independent, operating on generic L3 addresses, and can now run over IPv6 |
| 164 | + in addition to IPv4, while the existing IPv4 PIM behavior is preserved unchanged. |
| 165 | + The new MulticastRouter6 node type provides a ready-to-use pure-IPv6 multicast |
| 166 | + router. PIM-SM can also derive the rendezvous point per group from embedded-RP |
| 167 | + IPv6 addresses (RFC 3956). Source-specific multicast (SSM, RFC 4607) is now |
| 168 | + fully supported on both address families: source-list memberships from |
| 169 | + IGMPv3 (IPv4) and MLDv2 (IPv6) drive PIM-SM to build RP-less, source-rooted |
| 170 | + (S,G) trees for groups in the SSM range, using INCLUDE-only semantics and |
| 171 | + requiring no rendezvous point. The PIM packet serializer was extended to support |
| 172 | + the IPv6 encoded-address forms. |
| 173 | + |
| 174 | +5. IPv6 Neighbor Discovery |
| 175 | + |
| 176 | + IPv6 Neighbor Discovery was extended in several backward compatible ways. |
| 177 | + Duplicate Address Detection (DAD) is now performed for autoconfigured global |
| 178 | + addresses in accordance with RFC 4862, and ICMPv6 Redirect message sending and |
| 179 | + processing was implemented (RFC 4861). Further Router Advertisement and Neighbor |
| 180 | + Discovery parameters were exposed as NED parameters and XML configuration |
| 181 | + attributes, and node bootstrap delays became configurable. A new sendRedirects |
| 182 | + parameter on the Ipv6 module allows suppressing Redirect messages, which is |
| 183 | + useful on wireless ad-hoc networks. |
| 184 | + |
| 185 | +6. Proxy Mobile IPv6 |
| 186 | + |
| 187 | + Support for Proxy Mobile IPv6 (PMIPv6, RFC 5213) was added. PMIPv6 provides |
| 188 | + network-based mobility management: the network tracks the movements of a |
| 189 | + mobile node and keeps its IPv6 address stable across handovers, without |
| 190 | + requiring any mobility support in the mobile node itself. The new Pmipv6 |
| 191 | + module implements both the Local Mobility Anchor (LMA) and the Mobile Access |
| 192 | + Gateway (MAG) roles, using Proxy Binding Update / Acknowledgement signaling |
| 193 | + based on the Mobile IPv6 message formats, and tunneling between the MAGs and |
| 194 | + the LMA. A new example demonstrates a handover in a PMIPv6 domain, with the |
| 195 | + mobile node keeping its address across the move. |
| 196 | + |
| 197 | +7. IPv6 netfilter hooks |
| 198 | + |
| 199 | + The Ipv6 module now provides the same set of netfilter-style hooks as its |
| 200 | + IPv4 counterpart: the LOCALIN hook is now invoked on local delivery, the |
| 201 | + FORWARD hook was added, and packets can be reinjected at all five hook points |
| 202 | + after asynchronous processing. This allows C++ modules such as reactive |
| 203 | + routing protocols to interpose on the IPv6 datapath in the same way as with |
| 204 | + IPv4. |
| 205 | + |
| 206 | +8. BGP improvements |
| 207 | + |
| 208 | + The BGP model received major improvements in several areas. BGP now supports |
| 209 | + IPv6: sessions can be established over IPv6 TCP connections, and IPv6 routes |
| 210 | + are exchanged using the multiprotocol extensions (MP-BGP, RFC 4760), |
| 211 | + including multiprotocol capability negotiation in the OPEN message (RFC 5492) |
| 212 | + and serialization of the MP_REACH_NLRI and MP_UNREACH_NLRI path attributes. |
| 213 | + Related fixes make iBGP work over a multi-hop IGP with IPv6, and new examples |
| 214 | + demonstrate EBGP over IPv6 and BGP running on top of an OSPFv3-based IGP. |
| 215 | + |
| 216 | + BGP is now lifecycle-aware: node shutdown, restart, and crash operations are |
| 217 | + handled properly, with sessions re-established and routes re-learned after a |
| 218 | + restart. A new Adj-RIB-In data structure stores all routes learned from |
| 219 | + peers, and the decision process is re-run when a route is withdrawn, so that |
| 220 | + an alternative route can take its place. New examples demonstrate route |
| 221 | + withdrawal and failover scenarios. |
| 222 | + |
| 223 | + Session management robustness was also improved: routers now use a single |
| 224 | + shared listening socket, connection collision detection was implemented |
| 225 | + according to RFC 4271, several errors in connection retry and reconnection |
| 226 | + handling were fixed, and BGP sessions are shut down gracefully on node |
| 227 | + shutdown. |
| 228 | + |
| 229 | + The BGP lifecycle support and the Adj-RIB-In extension were contributed by |
| 230 | + Giovanni Nardini. |
| 231 | + |
| 232 | +9. Satellite mobility and geographic visualization |
| 233 | + |
| 234 | + New mobility models and visualizers support simulating satellite networks |
| 235 | + and other scenarios placed on the Earth's surface. The new SatelliteMobility |
| 236 | + module computes satellite positions from standard TLE (two-line element) |
| 237 | + orbital data using the SGP4 propagation model, and GnssTrackMobility replays |
| 238 | + position tracks recorded by GNSS (GPS) receivers. The underlying geometry |
| 239 | + library was extended with WGS84 geodesy, Earth-centered (ECEF) coordinate |
| 240 | + systems, and an equirectangular map projection. |
| 241 | + |
| 242 | + On the visualization side, the new GeoMapCanvasVisualizer draws a world map |
| 243 | + with a graticule as the scene background, GeoHorizonCanvasVisualizer draws |
| 244 | + the visibility footprint of satellites on the map, and |
| 245 | + GeoSkyViewCanvasVisualizer displays an azimuth/elevation sky view plot next |
| 246 | + to observer nodes. The mobility visualizer was extended with 3D orientation |
| 247 | + display and direction projection modes, movement trails handle the |
| 248 | + antimeridian correctly, and several visualizers now clip their drawings to |
| 249 | + the map area. Mobile nodes can display their geographic position using the |
| 250 | + {geo_position} directive of displayStringTextFormat. A new example |
| 251 | + demonstrates satellites moving above a map of the Earth. |
| 252 | + |
| 253 | +10. TCP Path MTU Discovery |
| 254 | + |
| 255 | + The TCP model now implements Path MTU Discovery (RFC 1191 and RFC 1981), allowing |
| 256 | + connections to discover and adapt to the largest packet size that can traverse |
| 257 | + the path without fragmentation. In addition, TCP now forwards ICMPv4 and ICMPv6 |
| 258 | + error indications to the application as soft notifications, and aborts |
| 259 | + connections in the SYN_SENT state on hard ICMP errors. |
| 260 | + |
| 261 | +11. RNG grouping |
| 262 | + |
| 263 | + A new GroupedRngManager was added, providing a flexible way to share random |
| 264 | + number generators among simulation components. It supports grouping components by |
| 265 | + module (the default, one RNG set per module), by node (a node-wide shared RNG |
| 266 | + set), or network-wide (a single global RNG set), selectable via the rng-grouping |
| 267 | + configuration option. |
| 268 | + |
| 269 | +12. OSPFv3 packet serializer |
| 270 | + |
| 271 | + A packet serializer was added for OSPFv3, enabling OSPFv3 packets to be |
| 272 | + recorded into PCAP files, sent through emulation interfaces, and verified |
| 273 | + byte by byte in fingerprint tests. Several packet format errors (incorrect |
| 274 | + packet and LSA length fields) were fixed in the process, and the Ospfv3 |
| 275 | + module gained a checksumMode parameter for RFC-correct checksums. |
| 276 | + |
| 277 | +13. STP/RSTP tutorial |
| 278 | + |
| 279 | + A new tutorial introduces the Spanning Tree Protocol and Rapid Spanning Tree |
| 280 | + Protocol through a progression of examples, demonstrating root bridge election, |
| 281 | + port roles and states, topology change handling, and the rapid transitions |
| 282 | + provided by RSTP. |
| 283 | + |
| 284 | +14. Documentation refinements |
| 285 | + |
| 286 | + The IPv6 chapter of the User's Guide was substantially rewritten to reflect the |
| 287 | + modernized IPv6 stack, including documentation of the new Ipv6NetworkConfigurator |
| 288 | + and the XML routing configuration format. New User's Guide chapters describe |
| 289 | + satellite mobility and geographic visualization, and the BGP documentation |
| 290 | + was extended with the configuration file format and the new IPv6 (MP-BGP) |
| 291 | + support. NED documentation for many IPv6 and Mobile IPv6 modules was expanded |
| 292 | + and brought up to date, and several example simulations (e.g. the PIM |
| 293 | + examples) received README files. |
| 294 | + |
| 295 | +15. Notable bug fixes and other changes |
| 296 | + |
| 297 | + Most modules were migrated to the displayStringTextFormat mechanism for their |
| 298 | + Qtenv display strings, replacing custom refreshDisplay() overrides; the old |
| 299 | + WATCH_xxx() macros were replaced with the unified WATCH() macro, and additional |
| 300 | + watches were added for computed values. This affects only the graphical runtime |
| 301 | + and has no effect on results. |
| 302 | + |
| 303 | + The LdpMplsRouter and RsvpMplsRouter modules were refactored to share a common |
| 304 | + MplsRouterBase base, eliminating duplicated code. This changes the module |
| 305 | + initialization order and therefore the random number draw order, so MPLS |
| 306 | + simulation results may change. |
| 307 | + |
| 308 | + Fixed two IPsec ESP correctness bugs: an incorrect block size unit in payload |
| 309 | + padding, and an incorrect total length computation during decryption. |
| 310 | + |
| 311 | + Fixed a UDP payload padding removal bug that could misdetect trailing data, and a |
| 312 | + crash that occurred when combining multicast traffic with VLANs. |
| 313 | + |
| 314 | + Fixed a memory leak in MessageDispatcher that occurred when packet delivery |
| 315 | + failed. |
| 316 | + |
| 317 | + Standardized many internal integer types in the SCTP model and across the |
| 318 | + codebase, improving consistency. |
| 319 | + |
| 320 | + A new STAGE_NETWORK_INTERFACE_CONFIGURATION stage was inserted into the |
| 321 | + lifecycle start and stop operations, so that network interfaces are |
| 322 | + configured before IPv6 addresses are assigned. This fixes network interfaces |
| 323 | + not re-obtaining their global IPv6 address after a node restart. |
| 324 | + |
| 325 | + Fixed L2NetworkConfigurator to configure all ports in the network instead of |
| 326 | + just the first one, and added a dumpConfiguration parameter for debugging. |
| 327 | + |
| 328 | + Fixed visualizers to subscribe to the signals of their subject module rather |
| 329 | + than the visualization target module, so that the two can be fully decoupled. |
| 330 | + The InfoVisualizer now supports the %N directive for displaying the display |
| 331 | + name of a module. |
| 332 | + |
| 333 | + Fixed crashes that occurred when running GPSR over IPv6. |
| 334 | + |
| 335 | + IPv6 Neighbor Discovery packets are now created with descriptive names, |
| 336 | + making logs and packet traces easier to read. |
| 337 | + |
| 338 | + Removed several low-value or redundant IPv6 example simulations (demonetworketh, |
| 339 | + ipv6bulk, and ipv6nclients). |
| 340 | + |
| 341 | + Several additional issues reported on GitHub have also been fixed. |
| 342 | + |
| 343 | + |
4 | 344 | INET-4.6 (February 2026) — feature release |
5 | 345 | ------------------------------------------ |
6 | 346 |
|
|
0 commit comments