summaryrefslogtreecommitdiffstats
path: root/vnet/vnet/ip/ip4_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'vnet/vnet/ip/ip4_test.c')
-rw-r--r--vnet/vnet/ip/ip4_test.c325
1 files changed, 165 insertions, 160 deletions
diff --git a/vnet/vnet/ip/ip4_test.c b/vnet/vnet/ip/ip4_test.c
index f97a06525b1..45d171130df 100644
--- a/vnet/vnet/ip/ip4_test.c
+++ b/vnet/vnet/ip/ip4_test.c
@@ -22,35 +22,36 @@
* Not compiled in by default. IPv4 FIB tester. Add, probe, delete a bunch of
* random routes / masks and make sure that the mtrie agrees with
* the hash-table FIB.
- *
+ *
* Manipulate the FIB by means of the debug CLI commands, to minimize
* the chances of doing something idiotic.
*/
-/*
+/*
* These routines need to be redeclared non-static elsewhere.
*
* Also: rename ip_route() -> vnet_ip_route_cmd() and add the usual
* test_route_init() call to main.c
*/
-clib_error_t *
-vnet_ip_route_cmd (vlib_main_t * vm,
- unformat_input_t * input, vlib_cli_command_t * cmd_arg);
+clib_error_t *vnet_ip_route_cmd (vlib_main_t * vm,
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd_arg);
-int ip4_lookup_validate (ip4_address_t *a, u32 fib_index0);
+int ip4_lookup_validate (ip4_address_t * a, u32 fib_index0);
-ip4_fib_t *
-find_fib_by_table_index_or_id (ip4_main_t * im, u32 table_index_or_id,
- u32 flags);
+ip4_fib_t *find_fib_by_table_index_or_id (ip4_main_t * im,
+ u32 table_index_or_id, u32 flags);
/* Routes to insert/delete/probe in FIB */
-typedef struct {
+typedef struct
+{
ip4_address_t address;
u32 mask_width;
- u32 interface_id; /* not an xx_if_index */
+ u32 interface_id; /* not an xx_if_index */
} test_route_t;
-typedef struct {
+typedef struct
+{
/* Test routes in use */
test_route_t *route_pool;
@@ -61,29 +62,32 @@ typedef struct {
test_main_t test_main;
/* fake ethernet device class, distinct from "fake-ethX" */
-static u8 * format_test_interface_name (u8 * s, va_list * args)
+static u8 *
+format_test_interface_name (u8 * s, va_list * args)
{
u32 dev_instance = va_arg (*args, u32);
return format (s, "test-eth%d", dev_instance);
}
-static uword dummy_interface_tx (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * frame)
+static uword
+dummy_interface_tx (vlib_main_t * vm,
+ vlib_node_runtime_t * node, vlib_frame_t * frame)
{
clib_warning ("you shouldn't be here, leaking buffers...");
return frame->n_vectors;
}
+/* *INDENT-OFF* */
VNET_DEVICE_CLASS (test_interface_device_class,static) = {
.name = "Test interface",
.format_device_name = format_test_interface_name,
.tx_function = dummy_interface_tx,
};
+/* *INDENT-ON* */
static clib_error_t *
-thrash (vlib_main_t * vm,
- unformat_input_t * main_input, vlib_cli_command_t * cmd_arg)
+thrash (vlib_main_t * vm,
+ unformat_input_t * main_input, vlib_cli_command_t * cmd_arg)
{
u32 seed = 0xdeaddabe;
u32 niter = 10;
@@ -91,57 +95,57 @@ thrash (vlib_main_t * vm,
u32 ninterfaces = 4;
f64 min_mask_bits = 7.0;
f64 max_mask_bits = 32.0;
- u32 table_id = 11; /* my amp goes to 11 (use fib 11) */
+ u32 table_id = 11; /* my amp goes to 11 (use fib 11) */
u32 table_index;
int iter, i;
- u8 * cmd;
+ u8 *cmd;
test_route_t *tr;
test_main_t *tm = &test_main;
- ip4_main_t * im = &ip4_main;
- vnet_main_t * vnm = vnet_get_main();
+ ip4_main_t *im = &ip4_main;
+ vnet_main_t *vnm = vnet_get_main ();
unformat_input_t cmd_input;
f64 rf;
u32 *masks = 0;
u32 tmp;
u32 hw_if_index;
- clib_error_t * error = 0;
+ clib_error_t *error = 0;
uword *p;
- unformat_input_t _line_input, * line_input = &_line_input;
+ unformat_input_t _line_input, *line_input = &_line_input;
u8 hw_address[6];
- ip4_fib_t * fib;
+ ip4_fib_t *fib;
int verbose = 0;
/* Precompute mask width -> mask vector */
- tmp = (u32)~0;
+ tmp = (u32) ~ 0;
vec_validate (masks, 32);
for (i = 32; i > 0; i--)
{
- masks [i] = tmp;
+ masks[i] = tmp;
tmp <<= 1;
}
if (unformat_user (main_input, unformat_line_input, line_input))
{
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "seed %d", &seed))
- ;
- else if (unformat (line_input, "niter %d", &niter))
- ;
- else if (unformat (line_input, "nroutes %d", &nroutes))
- ;
- else if (unformat (line_input, "ninterfaces %d", &ninterfaces))
- ;
- else if (unformat (line_input, "min-mask-bits %d", &tmp))
- min_mask_bits = (f64) tmp;
- else if (unformat (line_input, "max-mask-bits %d", &tmp))
- max_mask_bits = (f64) tmp;
- else if (unformat (line_input, "verbose"))
- verbose = 1;
- else
- return clib_error_return (0, "unknown input `%U'",
- format_unformat_error, line_input);
- }
+ {
+ if (unformat (line_input, "seed %d", &seed))
+ ;
+ else if (unformat (line_input, "niter %d", &niter))
+ ;
+ else if (unformat (line_input, "nroutes %d", &nroutes))
+ ;
+ else if (unformat (line_input, "ninterfaces %d", &ninterfaces))
+ ;
+ else if (unformat (line_input, "min-mask-bits %d", &tmp))
+ min_mask_bits = (f64) tmp;
+ else if (unformat (line_input, "max-mask-bits %d", &tmp))
+ max_mask_bits = (f64) tmp;
+ else if (unformat (line_input, "verbose"))
+ verbose = 1;
+ else
+ return clib_error_return (0, "unknown input `%U'",
+ format_unformat_error, line_input);
+ }
}
/* Find or create FIB table 11 */
@@ -149,25 +153,22 @@ thrash (vlib_main_t * vm,
for (i = tm->test_interfaces_created; i < ninterfaces; i++)
{
- vnet_hw_interface_t * hw;
+ vnet_hw_interface_t *hw;
memset (hw_address, 0, sizeof (hw_address));
hw_address[0] = 0xd0;
hw_address[1] = 0x0f;
hw_address[5] = i;
error = ethernet_register_interface
- (vnm,
- test_interface_device_class.index,
- i /* instance */,
- hw_address,
- &hw_if_index,
- /* flag change */ 0);
-
+ (vnm, test_interface_device_class.index, i /* instance */ ,
+ hw_address, &hw_if_index,
+ /* flag change */ 0);
+
/* Fake interfaces use FIB table 11 */
hw = vnet_get_hw_interface (vnm, hw_if_index);
vec_validate (im->fib_index_by_sw_if_index, hw->sw_if_index);
im->fib_index_by_sw_if_index[hw->sw_if_index] = fib->index;
- ip4_sw_interface_enable_disable(sw_if_index, 1);
+ ip4_sw_interface_enable_disable (sw_if_index, 1);
}
tm->test_interfaces_created = ninterfaces;
@@ -176,8 +177,7 @@ thrash (vlib_main_t * vm,
p = hash_get (im->fib_index_by_table_id, table_id);
if (p == 0)
{
- vlib_cli_output (vm, "Couldn't map fib id %d to fib index\n",
- table_id);
+ vlib_cli_output (vm, "Couldn't map fib id %d to fib index\n", table_id);
return 0;
}
table_index = p[0];
@@ -186,115 +186,111 @@ thrash (vlib_main_t * vm,
{
/* Pick random routes to install */
for (i = 0; i < nroutes; i++)
- {
- int j;
-
- pool_get (tm->route_pool, tr);
- memset (tr, 0, sizeof (*tr));
-
- again:
- rf = random_f64 (&seed);
- tr->mask_width = (u32) (min_mask_bits
- + rf * (max_mask_bits - min_mask_bits));
- tmp = random_u32 (&seed);
- tmp &= masks[tr->mask_width];
- tr->address.as_u32 = clib_host_to_net_u32(tmp);
-
- /* We can't add the same address/mask twice... */
- for (j = 0; j < i; j++)
- {
- test_route_t *prev;
- prev = pool_elt_at_index (tm->route_pool, j);
- if ((prev->address.as_u32 == tr->address.as_u32)
- && (prev->mask_width == tr->mask_width))
- goto again;
- }
-
- rf = random_f64 (&seed);
- tr->interface_id = (u32) (rf * ninterfaces);
- }
-
+ {
+ int j;
+
+ pool_get (tm->route_pool, tr);
+ memset (tr, 0, sizeof (*tr));
+
+ again:
+ rf = random_f64 (&seed);
+ tr->mask_width = (u32) (min_mask_bits
+ + rf * (max_mask_bits - min_mask_bits));
+ tmp = random_u32 (&seed);
+ tmp &= masks[tr->mask_width];
+ tr->address.as_u32 = clib_host_to_net_u32 (tmp);
+
+ /* We can't add the same address/mask twice... */
+ for (j = 0; j < i; j++)
+ {
+ test_route_t *prev;
+ prev = pool_elt_at_index (tm->route_pool, j);
+ if ((prev->address.as_u32 == tr->address.as_u32)
+ && (prev->mask_width == tr->mask_width))
+ goto again;
+ }
+
+ rf = random_f64 (&seed);
+ tr->interface_id = (u32) (rf * ninterfaces);
+ }
+
/* Add them */
for (i = 0; i < nroutes; i++)
- {
- tr = pool_elt_at_index (tm->route_pool, i);
- cmd = format (0, "add table %d %U/%d via test-eth%d",
- table_id,
- format_ip4_address, &tr->address,
- tr->mask_width, tr->interface_id);
- vec_add1(cmd,0);
- if (verbose)
- fformat(stderr, "ip route %s\n", cmd);
- unformat_init_string (&cmd_input, (char *) cmd, vec_len(cmd)-1);
- error = vnet_ip_route_cmd (vm, &cmd_input, cmd_arg);
- if (error)
- clib_error_report(error);
- unformat_free (&cmd_input);
- vec_free(cmd);
- }
+ {
+ tr = pool_elt_at_index (tm->route_pool, i);
+ cmd = format (0, "add table %d %U/%d via test-eth%d",
+ table_id,
+ format_ip4_address, &tr->address,
+ tr->mask_width, tr->interface_id);
+ vec_add1 (cmd, 0);
+ if (verbose)
+ fformat (stderr, "ip route %s\n", cmd);
+ unformat_init_string (&cmd_input, (char *) cmd, vec_len (cmd) - 1);
+ error = vnet_ip_route_cmd (vm, &cmd_input, cmd_arg);
+ if (error)
+ clib_error_report (error);
+ unformat_free (&cmd_input);
+ vec_free (cmd);
+ }
/* Probe them */
for (i = 0; i < nroutes; i++)
- {
- tr = pool_elt_at_index (tm->route_pool, i);
- if (!ip4_lookup_validate (&tr->address, table_index))
- {
- if (verbose)
- fformat (stderr, "test lookup table %d %U\n",
- table_index, format_ip4_address, &tr->address);
-
- fformat (stderr, "FAIL-after-insert: %U/%d\n",
- format_ip4_address, &tr->address,
- tr->mask_width);
- }
- }
+ {
+ tr = pool_elt_at_index (tm->route_pool, i);
+ if (!ip4_lookup_validate (&tr->address, table_index))
+ {
+ if (verbose)
+ fformat (stderr, "test lookup table %d %U\n",
+ table_index, format_ip4_address, &tr->address);
+
+ fformat (stderr, "FAIL-after-insert: %U/%d\n",
+ format_ip4_address, &tr->address, tr->mask_width);
+ }
+ }
/* Delete them */
for (i = 0; i < nroutes; i++)
- {
- int j;
- tr = pool_elt_at_index (tm->route_pool, i);
- if (0)
- cmd = format (0, "del table %d %U/%d via test-eth%d",
- table_id,
- format_ip4_address, &tr->address,
- tr->mask_width, tr->interface_id);
- else
- cmd = format (0, "del table %d %U/%d",
- table_id,
- format_ip4_address, &tr->address,
- tr->mask_width);
- vec_add1(cmd,0);
- if (verbose)
- fformat(stderr, "ip route %s\n", cmd);
- unformat_init_string (&cmd_input, (char *) cmd, vec_len(cmd)-1);
- error = vnet_ip_route_cmd (vm, &cmd_input, cmd_arg);
- if (error)
- clib_error_report(error);
- unformat_free (&cmd_input);
- vec_free(cmd);
-
- /* Make sure all undeleted routes still work */
- for (j = i+1; j < nroutes; j++)
- {
- test_route_t *rr; /* remaining route */
- rr = pool_elt_at_index (tm->route_pool, j);
- if (!ip4_lookup_validate (&rr->address, table_index))
- {
- if (verbose)
- fformat (stderr, "test lookup table %d %U\n",
- table_index, format_ip4_address, &rr->address);
-
- fformat (stderr, "FAIL: %U/%d AWOL\n",
- format_ip4_address, &rr->address,
- rr->mask_width);
- fformat (stderr, " iter %d after %d of %d deletes\n",
- iter, i, nroutes);
- fformat (stderr, " last route deleted %U/%d\n",
- format_ip4_address, &tr->address,
- tr->mask_width);
- }
- }
- }
+ {
+ int j;
+ tr = pool_elt_at_index (tm->route_pool, i);
+ if (0)
+ cmd = format (0, "del table %d %U/%d via test-eth%d",
+ table_id,
+ format_ip4_address, &tr->address,
+ tr->mask_width, tr->interface_id);
+ else
+ cmd = format (0, "del table %d %U/%d",
+ table_id,
+ format_ip4_address, &tr->address, tr->mask_width);
+ vec_add1 (cmd, 0);
+ if (verbose)
+ fformat (stderr, "ip route %s\n", cmd);
+ unformat_init_string (&cmd_input, (char *) cmd, vec_len (cmd) - 1);
+ error = vnet_ip_route_cmd (vm, &cmd_input, cmd_arg);
+ if (error)
+ clib_error_report (error);
+ unformat_free (&cmd_input);
+ vec_free (cmd);
+
+ /* Make sure all undeleted routes still work */
+ for (j = i + 1; j < nroutes; j++)
+ {
+ test_route_t *rr; /* remaining route */
+ rr = pool_elt_at_index (tm->route_pool, j);
+ if (!ip4_lookup_validate (&rr->address, table_index))
+ {
+ if (verbose)
+ fformat (stderr, "test lookup table %d %U\n",
+ table_index, format_ip4_address, &rr->address);
+
+ fformat (stderr, "FAIL: %U/%d AWOL\n",
+ format_ip4_address, &rr->address, rr->mask_width);
+ fformat (stderr, " iter %d after %d of %d deletes\n",
+ iter, i, nroutes);
+ fformat (stderr, " last route deleted %U/%d\n",
+ format_ip4_address, &tr->address, tr->mask_width);
+ }
+ }
+ }
pool_free (tm->route_pool);
}
@@ -327,9 +323,18 @@ VLIB_CLI_COMMAND (test_route_command, static) = {
};
/* *INDENT-ON* */
-clib_error_t *test_route_init (vlib_main_t *vm)
+clib_error_t *
+test_route_init (vlib_main_t * vm)
{
return 0;
}
VLIB_INIT_FUNCTION (test_route_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */