Commit 59b8305
BearerConfigurator: a remembered multicast flow belongs to its sender, not just its group
multicastFlows_ was keyed by multicast group id alone, with the first sender to
establish the bearer winning and the entry never removed. Both halves of that
are wrong once the node population changes during the simulation:
- Nothing dropped the entry when its sender left, so multicastGroupJoined() kept
provisioning later joiners against a bearer whose TX side no longer exists.
- With the entry pinned to the first sender, a node that takes over the group
afterwards never got remembered at all -- and a group served by two senders
at once only ever had one of them remembered.
Neither is cosmetic, because the RX side of a bearer is keyed by its sender:
FlowId::rxDrbKey() builds the DrbKey from sourceId, and
BearerManagement::createIncomingConnection() installs the MAC descriptor under
MacCid(senderId, lcid). Provisioning a joiner from a stale flow therefore
creates a descriptor under the *departed* sender's CID, while the PDUs that
actually arrive carry the current sender's -- which lands in exactly the
'connDescIn_.find(cid) != connDescIn_.end()' assert in macPduUnmake() that
multicastGroupJoined() was added to prevent.
So the map is now keyed by (group id, sender id): createConnection() remembers
one flow per sender, multicastGroupJoined() gives the joiner an RX leg for each
remembered sender of the group, and the node-unregistered listener drops the
entries of a departing sender.
Full fingerprint suite 182/182 PASS, CSVs unchanged: in the static scenarios
each group has one sender that never leaves, so the keying change is inert and
the purge never runs.1 parent 15a0b50 commit 59b8305
2 files changed
Lines changed: 30 additions & 8 deletions
Lines changed: 23 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
921 | 921 | | |
922 | 922 | | |
923 | 923 | | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
924 | 937 | | |
925 | 938 | | |
926 | 939 | | |
| |||
960 | 973 | | |
961 | 974 | | |
962 | 975 | | |
963 | | - | |
964 | | - | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
965 | 979 | | |
966 | 980 | | |
967 | 981 | | |
| |||
975 | 989 | | |
976 | 990 | | |
977 | 991 | | |
978 | | - | |
979 | | - | |
980 | | - | |
981 | | - | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
982 | 999 | | |
983 | 1000 | | |
984 | 1001 | | |
| |||
Lines changed: 7 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
79 | 84 | | |
80 | 85 | | |
81 | 86 | | |
82 | 87 | | |
83 | 88 | | |
84 | 89 | | |
85 | | - | |
| 90 | + | |
86 | 91 | | |
87 | 92 | | |
88 | 93 | | |
| |||
0 commit comments