ip-neighbor: fix ip6_ra_cmd 63/25463/4
authorDave Barach <dave@barachs.net>
Wed, 26 Feb 2020 13:02:58 +0000 (08:02 -0500)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 26 Feb 2020 20:05:57 +0000 (20:05 +0000)
The option parsing loop had "break" statements included in each
'if (unformat (line_input, "this-option ...") option_values=xxx;'
statement.

Result: the code would silently ignore all but the first
option. Probably broken forever, not easy to spot because the code
looks OK even though it's badly broken.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I667bee85b4ca654b53fb3af421f957957ed0f0f8

src/vnet/ip6-nd/ip6_ra.c

index c8e16d0..769f9da 100644 (file)
@@ -1947,34 +1947,28 @@ ip6_ra_cmd (vlib_main_t * vm,
                         unformat_ip6_address, &ip6_addr, &addr_len))
        {
          add_radv_info = 0;
-         break;
        }
       else if (unformat (line_input, "ra-managed-config-flag"))
        {
          managed = 1;
-         break;
        }
       else if (unformat (line_input, "ra-other-config-flag"))
        {
          other = 1;
-         break;
        }
       else if (unformat (line_input, "ra-suppress") ||
               unformat (line_input, "ra-surpress"))
        {
          suppress = 1;
-         break;
        }
       else if (unformat (line_input, "ra-suppress-link-layer") ||
               unformat (line_input, "ra-surpress-link-layer"))
        {
          suppress_ll_option = 1;
-         break;
        }
       else if (unformat (line_input, "ra-send-unicast"))
        {
          send_unicast = 1;
-         break;
        }
       else if (unformat (line_input, "ra-lifetime"))
        {
@@ -1984,7 +1978,6 @@ ip6_ra_cmd (vlib_main_t * vm,
              goto done;
            }
          use_lifetime = 1;
-         break;
        }
       else if (unformat (line_input, "ra-initial"))
        {
@@ -1994,7 +1987,6 @@ ip6_ra_cmd (vlib_main_t * vm,
              error = unformat_parse_error (line_input);
              goto done;
            }
-         break;
        }
       else if (unformat (line_input, "ra-interval"))
        {
@@ -2006,12 +1998,10 @@ ip6_ra_cmd (vlib_main_t * vm,
 
          if (!unformat (line_input, "%d", &ra_min_interval))
            ra_min_interval = 0;
-         break;
        }
       else if (unformat (line_input, "ra-cease"))
        {
          cease = 1;
-         break;
        }
       else
        {