l2: coverity complains dead codes

Coverity complains dead codes in 2 places due to a recent commit as
pointed out in Fixes. The dead codes are
      if (seed < L2_BD_ID_MAX % 2)
        is_seed_low = 1;
and
      if (is_seed_low)
        seed += (2 * (i % 2) - 1) * i;

seed can never be less than (L2_BD_ID_MAX % 2).
Consequently, is_seed_low is always 0.

There is also other problem. The inner loop is iterating only once.

The fix is to greatly simplify the code to generate a random bd_id.

Type: fix
Fixes: Ieb6919f958f437fc603d5e1f48cab01de780951d

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I318773b9a59950920e051548ef14e36054ebd5e6
This commit is contained in:
Steven Luong
2022-10-12 17:08:12 -07:00
committed by Neale Ranns
parent 10e5b4a016
commit 662c59a80a

View File

@ -1608,28 +1608,25 @@ VLIB_CLI_COMMAND (bd_create_cli, static) = {
* Returns an unused bridge domain id, and ~0 if it can't find one.
*/
u32
bd_get_unused_id ()
bd_get_unused_id (void)
{
bd_main_t *bdm = &bd_main;
int i, j;
int is_seed_low = 0;
static u32 seed = 0;
/* limit to 1M tries */
for (j = 0; j < 1 << 10; j++)
{
seed = random_u32 (&seed) & L2_BD_ID_MAX;
if (seed == 0)
continue;
if (seed < L2_BD_ID_MAX % 2)
is_seed_low = 1;
for (i = 0; i < L2_BD_ID_MAX % 2; i++)
seed = random_u32 (&seed);
for (i = 0; i < 1 << 10; i++)
{
/* look around randomly generated id */
if (is_seed_low)
seed += (2 * (i % 2) - 1) * i;
else
seed -= (2 * (i % 2) - 1) * i;
if (seed == ~0 || seed == 0)
/*
* iterate seed+0, seed+1, seed-1, seed+2, seed-2, ... to generate id
*/
seed += (2 * (i % 2) - 1) * i;
/* bd_id must be (1 <= bd_id <= L2_BD_ID_MAX) */
seed &= L2_BD_ID_MAX;
if (seed == 0)
continue;
if (bd_find_index (bdm, seed) == ~0)
return seed;