Fixed bug on building RTE groups with no endpoint 01/5101/2
authorAlexandre Huff <alexandrehuff@gmail.com>
Tue, 17 Nov 2020 14:11:21 +0000 (11:11 -0300)
committerScott Daniels <daniels@research.att.com>
Tue, 17 Nov 2020 20:58:43 +0000 (20:58 +0000)
commitfe22c4bdb9c72e8fc107f6f16d074df62ccda5f6
tree836be8dd3846eb4397ee38dcdc6e03f78dc6b877
parent280477fab59b789d924830e1a50dc9d2656915af
Fixed bug on building RTE groups with no endpoint

When building a route table entry (rte) with several groups, a given
group can be added contiguously to the rte even if it has no endpoint.
Endpoints that reference to any of "our" local "address:port" are not
added to the rte. Thus, in some cases, groups that only reference to
local endpoints (nil) are added contiguously to the rte, causing the
round-robin group selection mechanism to stop sending messages to the
next groups after finding a nil-one.

This might happen, for instance, when a multicast routing rule is required
in which only one endpoint is added to each group, and one of these groups
references to one of the local "address:port" being used. In this case, only
the endpoints in the groups prior the nil-one will receive a copy of the
multicast message.

This change fixes this issue by adding contiguously only groups that have at
least one endpoint that does not refer to a local "address:port".
Some extra bytes are wasted in the rte by referencing to a group that does not
have an endpoint, but this is minor compared to spending time on recreating a
new rte and adding only the groups that do have endpoints. Those nil groups
don't cause any harm since the function that does the round-robin selection
assumes that the groups are contiguous and stops selecting endpoints when a
nil group is found.

Issue-ID: RIC-695

Signed-off-by: Alexandre Huff <alexandrehuff@gmail.com>
Change-Id: I13c7576ce0de82b7814c81c1a0da24172371a897
src/rmr/common/src/rt_generic_static.c