aboutsummaryrefslogtreecommitdiffstats
path: root/vlib
diff options
context:
space:
mode:
Diffstat (limited to 'vlib')
-rw-r--r--vlib/example/main_stub.c213
-rw-r--r--vlib/example/mc_test.c230
-rw-r--r--vlib/example/plex_test.c371
-rw-r--r--vlib/vlib/buffer.c668
-rw-r--r--vlib/vlib/buffer.h154
-rw-r--r--vlib/vlib/buffer_funcs.h328
-rw-r--r--vlib/vlib/buffer_node.h43
-rw-r--r--vlib/vlib/cli.c551
-rw-r--r--vlib/vlib/cli.h97
-rw-r--r--vlib/vlib/cli_funcs.h10
-rw-r--r--vlib/vlib/counter.c72
-rw-r--r--vlib/vlib/counter.h99
-rw-r--r--vlib/vlib/defs.h20
-rw-r--r--vlib/vlib/dpdk_buffer.c707
-rw-r--r--vlib/vlib/elog_samples.c92
-rw-r--r--vlib/vlib/error.c122
-rw-r--r--vlib/vlib/error.h30
-rw-r--r--vlib/vlib/error_funcs.h20
-rw-r--r--vlib/vlib/format.c85
-rw-r--r--vlib/vlib/format_funcs.h14
-rw-r--r--vlib/vlib/global_funcs.h16
-rw-r--r--vlib/vlib/i2c.c67
-rw-r--r--vlib/vlib/i2c.h30
-rw-r--r--vlib/vlib/init.c78
-rw-r--r--vlib/vlib/init.h50
-rw-r--r--vlib/vlib/lex.c134
-rw-r--r--vlib/vlib/lex.h61
-rw-r--r--vlib/vlib/main.c867
-rw-r--r--vlib/vlib/main.h66
-rw-r--r--vlib/vlib/mc.c1716
-rw-r--r--vlib/vlib/mc.h366
-rw-r--r--vlib/vlib/node.c277
-rw-r--r--vlib/vlib/node.h218
-rw-r--r--vlib/vlib/node_cli.c414
-rw-r--r--vlib/vlib/node_format.c82
-rw-r--r--vlib/vlib/node_funcs.h424
-rw-r--r--vlib/vlib/parse.c694
-rw-r--r--vlib/vlib/parse.h252
-rw-r--r--vlib/vlib/parse_builtin.c62
-rw-r--r--vlib/vlib/pci/linux_pci.c267
-rw-r--r--vlib/vlib/pci/pci.c56
-rw-r--r--vlib/vlib/pci/pci.h127
-rw-r--r--vlib/vlib/pci/pci_config.h398
-rw-r--r--vlib/vlib/physmem.h22
-rw-r--r--vlib/vlib/threads.c1286
-rw-r--r--vlib/vlib/threads.h173
-rw-r--r--vlib/vlib/threads_cli.c398
-rw-r--r--vlib/vlib/trace.c223
-rw-r--r--vlib/vlib/trace.h21
-rw-r--r--vlib/vlib/trace_funcs.h72
-rw-r--r--vlib/vlib/unix/cj.c146
-rw-r--r--vlib/vlib/unix/cj.h33
-rw-r--r--vlib/vlib/unix/cli.c2502
-rw-r--r--vlib/vlib/unix/input.c97
-rw-r--r--vlib/vlib/unix/main.c398
-rw-r--r--vlib/vlib/unix/mc_socket.c619
-rw-r--r--vlib/vlib/unix/mc_socket.h53
-rw-r--r--vlib/vlib/unix/physmem.c330
-rw-r--r--vlib/vlib/unix/physmem.h17
-rw-r--r--vlib/vlib/unix/plugin.c177
-rw-r--r--vlib/vlib/unix/plugin.h30
-rw-r--r--vlib/vlib/unix/unix.h74
-rw-r--r--vlib/vlib/unix/util.c61
-rw-r--r--vlib/vlib/vlib.h8
64 files changed, 9475 insertions, 7913 deletions
diff --git a/vlib/example/main_stub.c b/vlib/example/main_stub.c
index 4213d912acd..4d74bd77aaa 100644
--- a/vlib/example/main_stub.c
+++ b/vlib/example/main_stub.c
@@ -16,7 +16,8 @@
#include <vlib/unix/unix.h>
#include <math.h>
-int main (int argc, char * argv[])
+int
+main (int argc, char *argv[])
{
return vlib_unix_main (argc, argv);
}
@@ -24,30 +25,33 @@ int main (int argc, char * argv[])
static clib_error_t *
main_stub_init (vlib_main_t * vm)
{
- clib_error_t * error;
+ clib_error_t *error;
- if ((error = unix_physmem_init (vm, /* fail_if_physical_memory_not_present */ 0)))
+ if ((error =
+ unix_physmem_init (vm, /* fail_if_physical_memory_not_present */ 0)))
return error;
- if ((error = vlib_call_init_function (vm, unix_cli_init)))
- return error;
+ if ((error = vlib_call_init_function (vm, unix_cli_init)))
+ return error;
- return error;
+ return error;
}
VLIB_INIT_FUNCTION (main_stub_init);
#if 0
/* Node test code. */
-typedef struct {
+typedef struct
+{
int scalar;
int vector[0];
} my_frame_t;
-static u8 * format_my_node_frame (u8 * s, va_list * va)
+static u8 *
+format_my_node_frame (u8 * s, va_list * va)
{
- vlib_frame_t * f = va_arg (*va, vlib_frame_t *);
- my_frame_t * g = vlib_frame_args (f);
+ vlib_frame_t *f = va_arg (*va, vlib_frame_t *);
+ my_frame_t *g = vlib_frame_args (f);
int i;
s = format (s, "scalar %d, vector { ", g->scalar);
@@ -59,12 +63,10 @@ static u8 * format_my_node_frame (u8 * s, va_list * va)
}
static uword
-my_func (vlib_main_t * vm,
- vlib_node_runtime_t * rt,
- vlib_frame_t * f)
+my_func (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
{
- vlib_node_t * node;
- my_frame_t * y;
+ vlib_node_t *node;
+ my_frame_t *y;
u32 i, n_left = 0;
static int serial;
int verbose;
@@ -79,7 +81,7 @@ my_func (vlib_main_t * vm,
if (rt->n_next_nodes > 0)
{
- vlib_frame_t * next = vlib_get_next_frame (vm, rt, /* next index */ 0);
+ vlib_frame_t *next = vlib_get_next_frame (vm, rt, /* next index */ 0);
n_left = VLIB_FRAME_SIZE - next->n_vectors;
y = vlib_frame_args (next);
y->scalar = serial++;
@@ -105,6 +107,7 @@ my_func (vlib_main_t * vm,
return i;
}
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (my_node1,static) = {
.function = my_func,
.type = VLIB_NODE_TYPE_INPUT,
@@ -116,40 +119,44 @@ VLIB_REGISTER_NODE (my_node1,static) = {
[0] = "my-node2",
},
};
+/* *INDENT-ON* */
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (my_node2,static) = {
.function = my_func,
.name = "my-node2",
.scalar_size = sizeof (my_frame_t),
.vector_size = STRUCT_SIZE_OF (my_frame_t, vector[0]),
};
+/* *INDENT-ON* */
#endif
#if 0
-typedef enum {
+typedef enum
+{
MY_EVENT_TYPE1,
MY_EVENT_TYPE2,
} my_process_completion_type_t;
-typedef struct {
+typedef struct
+{
int a;
f64 b;
} my_process_event_data_t;
-static u8 * format_my_process_event_data (u8 * s, va_list * va)
+static u8 *
+format_my_process_event_data (u8 * s, va_list * va)
{
- my_process_event_data_t * d = va_arg (*va, my_process_event_data_t *);
+ my_process_event_data_t *d = va_arg (*va, my_process_event_data_t *);
return format (s, "{ a %d b %.6f}", d->a, d->b);
}
static uword
-my_proc (vlib_main_t * vm,
- vlib_node_runtime_t * rt,
- vlib_frame_t * f)
+my_proc (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
{
- vlib_node_t * node;
+ vlib_node_t *node;
u32 i;
node = vlib_get_node (vm, rt->node_index);
@@ -159,14 +166,14 @@ my_proc (vlib_main_t * vm,
for (i = 0; i < 5; i++)
{
vlib_cli_output (vm, "%v: %d", node->name, i);
- vlib_process_suspend (vm, 1e0 /* secs */);
+ vlib_process_suspend (vm, 1e0 /* secs */ );
}
vlib_cli_output (vm, "%v: return frame %p", node->name, f);
if (0)
{
- uword n_events_seen, type, * data = 0;
+ uword n_events_seen, type, *data = 0;
for (n_events_seen = 0; n_events_seen < 2;)
{
@@ -174,8 +181,8 @@ my_proc (vlib_main_t * vm,
type = vlib_process_get_events (vm, &data);
n_events_seen += vec_len (data);
vlib_cli_output (vm, "%U %v: completion #%d type %d data 0x%wx",
- format_time_interval, "h:m:s:u", vlib_time_now (vm),
- node->name, i, type, data[0]);
+ format_time_interval, "h:m:s:u",
+ vlib_time_now (vm), node->name, i, type, data[0]);
_vec_len (data) = 0;
}
@@ -184,15 +191,17 @@ my_proc (vlib_main_t * vm,
else
{
uword n_events_seen, i, type;
- my_process_event_data_t * data;
+ my_process_event_data_t *data;
for (n_events_seen = 0; n_events_seen < 2;)
{
vlib_process_wait_for_event (vm);
data = vlib_process_get_event_data (vm, &type);
- vec_foreach_index (i, data) {
+ vec_foreach_index (i, data)
+ {
vlib_cli_output (vm, "%U event type %d data %U",
- format_time_interval, "h:m:s:u", vlib_time_now (vm),
- type, format_my_process_event_data, data);
+ format_time_interval, "h:m:s:u",
+ vlib_time_now (vm), type,
+ format_my_process_event_data, data);
}
n_events_seen += vec_len (data);
vlib_process_put_event_data (vm, data);
@@ -202,16 +211,16 @@ my_proc (vlib_main_t * vm,
return i;
}
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (my_proc_node,static) = {
.function = my_proc,
.type = VLIB_NODE_TYPE_PROCESS,
.name = "my-proc",
};
+/* *INDENT-ON* */
static uword
-my_proc_input (vlib_main_t * vm,
- vlib_node_runtime_t * rt,
- vlib_frame_t * f)
+my_proc_input (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
{
static int i;
@@ -223,13 +232,15 @@ my_proc_input (vlib_main_t * vm,
0x12340000 + i);
else
{
- my_process_event_data_t * d;
+ my_process_event_data_t *d;
f64 dt = 5;
d = vlib_process_signal_event_at_time (vm,
i * dt,
my_proc_node.index,
- i == 1 ? MY_EVENT_TYPE1 : MY_EVENT_TYPE2,
- 1 /* elts */,
+ i ==
+ 1 ? MY_EVENT_TYPE1 :
+ MY_EVENT_TYPE2,
+ 1 /* elts */ ,
sizeof (d[0]));
d->a = i;
d->b = vlib_time_now (vm);
@@ -238,23 +249,26 @@ my_proc_input (vlib_main_t * vm,
else
vlib_node_set_state (vm, rt->node_index, VLIB_NODE_STATE_DISABLED);
- return 0;
+ return 0;
}
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (my_proc_input_node,static) = {
.function = my_proc_input,
.type = VLIB_NODE_TYPE_INPUT,
.name = "my-proc-input",
};
+/* *INDENT-ON* */
-static uword _unformat_farith (unformat_input_t * i, va_list * args)
+static uword
+_unformat_farith (unformat_input_t * i, va_list * args)
{
u32 prec = va_arg (*args, u32);
- f64 * result = va_arg (*args, f64 *);
+ f64 *result = va_arg (*args, f64 *);
f64 tmp[2];
/* Binary operations in from lowest to highest precedence. */
- char * binops[] = {
+ char *binops[] = {
"+%U", "-%U", "/%U", "*%U", "^%U",
};
@@ -264,17 +278,27 @@ static uword _unformat_farith (unformat_input_t * i, va_list * args)
int p;
for (p = prec; p < ARRAY_LEN (binops); p++)
{
- if (unformat (i, binops[p],
- _unformat_farith, prec + 0, &tmp[1]))
+ if (unformat (i, binops[p], _unformat_farith, prec + 0, &tmp[1]))
{
switch (binops[p][0])
{
- case '+': result[0] = tmp[0] + tmp[1]; break;
- case '-': result[0] = tmp[0] - tmp[1]; break;
- case '/': result[0] = tmp[0] / tmp[1]; break;
- case '*': result[0] = tmp[0] * tmp[1]; break;
- case '^': result[0] = pow (tmp[0], tmp[1]); break;
- default: abort ();
+ case '+':
+ result[0] = tmp[0] + tmp[1];
+ break;
+ case '-':
+ result[0] = tmp[0] - tmp[1];
+ break;
+ case '/':
+ result[0] = tmp[0] / tmp[1];
+ break;
+ case '*':
+ result[0] = tmp[0] * tmp[1];
+ break;
+ case '^':
+ result[0] = pow (tmp[0], tmp[1]);
+ break;
+ default:
+ abort ();
}
return 1;
}
@@ -283,15 +307,13 @@ static uword _unformat_farith (unformat_input_t * i, va_list * args)
return 1;
}
- else if (unformat (i, "-%U",
- _unformat_farith, prec + 0, &tmp[0]))
+ else if (unformat (i, "-%U", _unformat_farith, prec + 0, &tmp[0]))
{
result[0] = -tmp[0];
return 1;
}
- else if (unformat (i, "(%U)",
- _unformat_farith, 0, &tmp[0]))
+ else if (unformat (i, "(%U)", _unformat_farith, 0, &tmp[0]))
{
result[0] = tmp[0];
return 1;
@@ -304,64 +326,67 @@ static uword _unformat_farith (unformat_input_t * i, va_list * args)
return 0;
}
-static uword unformat_farith (unformat_input_t * i, va_list * args)
+static uword
+unformat_farith (unformat_input_t * i, va_list * args)
{
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
- f64 * result = va_arg (*args, f64 *);
+ f64 *result = va_arg (*args, f64 *);
return unformat_user (i, _unformat_farith, 0, result);
}
-static uword unformat_integer (unformat_input_t * i, va_list * args)
+static uword
+unformat_integer (unformat_input_t * i, va_list * args)
{
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
- u32 * data = va_arg (*args, u32 *);
+ u32 *data = va_arg (*args, u32 *);
return unformat (i, "%d", data);
}
-static VLIB_CLI_PARSE_RULE (my_parse_rule1) = {
- .name = "decimal_integer",
- .short_help = "a decimal integer",
- .unformat_function = unformat_integer,
- .data_size = sizeof (u32),
-};
+static VLIB_CLI_PARSE_RULE (my_parse_rule1) =
+{
+.name = "decimal_integer",.short_help =
+ "a decimal integer",.unformat_function = unformat_integer,.data_size =
+ sizeof (u32),};
-static VLIB_CLI_PARSE_RULE (my_parse_rule2) = {
- .name = "float_expression",
- .short_help = "floating point expression",
- .unformat_function = unformat_farith,
- .data_size = sizeof (f64),
-};
+static VLIB_CLI_PARSE_RULE (my_parse_rule2) =
+{
+.name = "float_expression",.short_help =
+ "floating point expression",.unformat_function =
+ unformat_farith,.data_size = sizeof (f64),};
static clib_error_t *
bar_command (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
switch (cmd->function_arg)
{
- case 2: {
- u32 * d, * e;
- d = vlib_cli_get_parse_rule_result (vm, 0);
- e = vlib_cli_get_parse_rule_result (vm, 1);
- vlib_cli_output (vm, "bar2 %d %d", d[0], e[0]);
- break;
- }
-
- case 1: {
- u32 * d = vlib_cli_get_parse_rule_result (vm, 0);
- vlib_cli_output (vm, "bar1 %d", d[0]);
- break;
- }
-
- case 3: {
- f64 * d = vlib_cli_get_parse_rule_result (vm, 0);
- vlib_cli_output (vm, "expr %.6f", d[0]);
- }
+ case 2:
+ {
+ u32 *d, *e;
+ d = vlib_cli_get_parse_rule_result (vm, 0);
+ e = vlib_cli_get_parse_rule_result (vm, 1);
+ vlib_cli_output (vm, "bar2 %d %d", d[0], e[0]);
+ break;
+ }
+
+ case 1:
+ {
+ u32 *d = vlib_cli_get_parse_rule_result (vm, 0);
+ vlib_cli_output (vm, "bar1 %d", d[0]);
+ break;
+ }
+
+ case 3:
+ {
+ f64 *d = vlib_cli_get_parse_rule_result (vm, 0);
+ vlib_cli_output (vm, "expr %.6f", d[0]);
+ }
}
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (bar_command2, static) = {
.path = "bar %decimal_integer",
.short_help = "bar1 command",
@@ -380,6 +405,14 @@ VLIB_CLI_COMMAND (bar_command3, static) = {
.function = bar_command,
.function_arg = 3,
};
+/* *INDENT-ON* */
#endif
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/example/mc_test.c b/vlib/example/mc_test.c
index 2a7fe9867fe..e84a713cc59 100644
--- a/vlib/example/mc_test.c
+++ b/vlib/example/mc_test.c
@@ -19,7 +19,8 @@
#include <vlib/unix/mc_socket.h>
#include <vppinfra/random.h>
-typedef struct {
+typedef struct
+{
u32 min_n_msg_bytes;
u32 max_n_msg_bytes;
u32 tx_serial;
@@ -37,17 +38,20 @@ choose_msg_size (mc_test_main_t * tm)
{
u32 r = tm->min_n_msg_bytes;
if (tm->max_n_msg_bytes > tm->min_n_msg_bytes)
- r += random_u32 (&tm->seed) % (1 + tm->max_n_msg_bytes - tm->min_n_msg_bytes);
+ r +=
+ random_u32 (&tm->seed) % (1 + tm->max_n_msg_bytes -
+ tm->min_n_msg_bytes);
return r;
}
static mc_test_main_t mc_test_main;
-static void serialize_test_msg (serialize_main_t * m, va_list * va)
+static void
+serialize_test_msg (serialize_main_t * m, va_list * va)
{
- mc_test_main_t * tm = &mc_test_main;
+ mc_test_main_t *tm = &mc_test_main;
u32 n_bytes = choose_msg_size (tm);
- u8 * msg;
+ u8 *msg;
int i;
serialize_integer (m, n_bytes, sizeof (n_bytes));
msg = serialize_get (m, n_bytes);
@@ -56,11 +60,12 @@ static void serialize_test_msg (serialize_main_t * m, va_list * va)
tm->tx_serial += n_bytes;
}
-static void unserialize_test_msg (serialize_main_t * m, va_list * va)
+static void
+unserialize_test_msg (serialize_main_t * m, va_list * va)
{
- mc_test_main_t * tm = &mc_test_main;
+ mc_test_main_t *tm = &mc_test_main;
u32 i, n_bytes, dump_msg = tm->verbose;
- u8 * p;
+ u8 *p;
unserialize_integer (m, &n_bytes, sizeof (n_bytes));
p = unserialize_get (m, n_bytes);
if (tm->validate)
@@ -76,45 +81,43 @@ static void unserialize_test_msg (serialize_main_t * m, va_list * va)
tm->rx_serial += n_bytes;
}
-MC_SERIALIZE_MSG (test_msg, static) = {
- .name = "test_msg",
- .serialize = serialize_test_msg,
- .unserialize = unserialize_test_msg,
-};
+MC_SERIALIZE_MSG (test_msg, static) =
+{
+.name = "test_msg",.serialize = serialize_test_msg,.unserialize =
+ unserialize_test_msg,};
#define SERIALIZE 1
#define EVENT_JOIN_STREAM 10
#define EVENT_SEND_DATA 11
-static void test_rx_callback (mc_main_t * mcm,
- mc_stream_t * stream,
- mc_peer_id_t peer_id,
- u32 buffer_index)
+static void
+test_rx_callback (mc_main_t * mcm,
+ mc_stream_t * stream,
+ mc_peer_id_t peer_id, u32 buffer_index)
{
if (SERIALIZE)
{
- return mc_unserialize (mcm, stream, buffer_index);
+ return mc_unserialize (mcm, stream, buffer_index);
}
else
{
#if DEBUG > 1
- vlib_main_t * vm = mcm->vlib_main;
- vlib_buffer_t * b = vlib_get_buffer (vm, buffer_index);
- u8 * dp = vlib_buffer_get_current (b);
-
- fformat(stdout, "RX from %U %U\n",
- stream->transport->format_peer_id, peer_id,
- format_hex_bytes, dp, tm->n_msg_bytes);
-
+ vlib_main_t *vm = mcm->vlib_main;
+ vlib_buffer_t *b = vlib_get_buffer (vm, buffer_index);
+ u8 *dp = vlib_buffer_get_current (b);
+
+ fformat (stdout, "RX from %U %U\n",
+ stream->transport->format_peer_id, peer_id,
+ format_hex_bytes, dp, tm->n_msg_bytes);
+
#endif
}
}
static u8 *
test_snapshot_callback (mc_main_t * mcm,
- u8 * data_vector,
- u32 last_global_sequence_processed)
+ u8 * data_vector, u32 last_global_sequence_processed)
{
if (SERIALIZE)
{
@@ -133,9 +136,7 @@ test_snapshot_callback (mc_main_t * mcm,
}
static void
-test_handle_snapshot_callback (mc_main_t * mcm,
- u8 * data,
- u32 n_data_bytes)
+test_handle_snapshot_callback (mc_main_t * mcm, u8 * data, u32 n_data_bytes)
{
if (SERIALIZE)
{
@@ -150,19 +151,18 @@ static mc_socket_main_t mc_socket_main;
static uword
mc_test_process (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * f)
+ vlib_node_runtime_t * node, vlib_frame_t * f)
{
- mc_test_main_t * tm = &mc_test_main;
- mc_socket_main_t * msm = &mc_socket_main;
+ mc_test_main_t *tm = &mc_test_main;
+ mc_socket_main_t *msm = &mc_socket_main;
mc_main_t *mcm = &msm->mc_main;
uword event_type, *event_data = 0;
- u32 data_serial=0, stream_index;
+ u32 data_serial = 0, stream_index;
f64 delay;
mc_stream_config_t config;
- clib_error_t * error;
+ clib_error_t *error;
int i;
- char *intfcs[] = { "eth1", "eth0", "ce" };
+ char *intfcs[] = { "eth1", "eth0", "ce" };
memset (&config, 0, sizeof (config));
config.name = "test";
@@ -175,7 +175,7 @@ mc_test_process (vlib_main_t * vm,
msm->multicast_tx_ip4_address_host_byte_order = 0xefff0100;
msm->base_multicast_udp_port_host_byte_order = 0xffab;
- error = mc_socket_main_init (&mc_socket_main, intfcs, ARRAY_LEN(intfcs));
+ error = mc_socket_main_init (&mc_socket_main, intfcs, ARRAY_LEN (intfcs));
if (error)
{
clib_error_report (error);
@@ -195,61 +195,66 @@ mc_test_process (vlib_main_t * vm,
stream_index = mc_stream_join (mcm, &config);
break;
- case EVENT_SEND_DATA: {
- f64 times[2];
-
- if (stream_index == ~0)
- stream_index = mc_stream_join (mcm, &config);
-
- times[0] = vlib_time_now (vm);
- for (i = 0; i < event_data[0]; i++)
- {
- u32 bi;
- if (SERIALIZE)
- {
- mc_serialize_stream (mcm, stream_index, &test_msg, data_serial);
- }
- else
- {
- u8 * mp;
- mp = mc_get_vlib_buffer (vm, sizeof (mp[0]), &bi);
- mp[0] = data_serial;
- mc_stream_send (mcm, stream_index, bi);
- }
- if (tm->min_delay > 0)
- {
- delay = tm->min_delay + random_f64 (&tm->seed) * (tm->max_delay - tm->min_delay);
- vlib_process_suspend (vm, delay);
- }
- data_serial++;
- }
- times[1] = vlib_time_now (vm);
- clib_warning ("done sending %d; %.4e per sec",
- event_data[0],
- (f64) event_data[0] / (times[1] - times[0]));
- break;
- }
+ case EVENT_SEND_DATA:
+ {
+ f64 times[2];
+
+ if (stream_index == ~0)
+ stream_index = mc_stream_join (mcm, &config);
+
+ times[0] = vlib_time_now (vm);
+ for (i = 0; i < event_data[0]; i++)
+ {
+ u32 bi;
+ if (SERIALIZE)
+ {
+ mc_serialize_stream (mcm, stream_index, &test_msg,
+ data_serial);
+ }
+ else
+ {
+ u8 *mp;
+ mp = mc_get_vlib_buffer (vm, sizeof (mp[0]), &bi);
+ mp[0] = data_serial;
+ mc_stream_send (mcm, stream_index, bi);
+ }
+ if (tm->min_delay > 0)
+ {
+ delay =
+ tm->min_delay +
+ random_f64 (&tm->seed) * (tm->max_delay -
+ tm->min_delay);
+ vlib_process_suspend (vm, delay);
+ }
+ data_serial++;
+ }
+ times[1] = vlib_time_now (vm);
+ clib_warning ("done sending %d; %.4e per sec",
+ event_data[0],
+ (f64) event_data[0] / (times[1] - times[0]));
+ break;
+ }
default:
clib_warning ("bug");
break;
}
-
+
if (event_data)
_vec_len (event_data) = 0;
}
}
-VLIB_REGISTER_NODE (mc_test_process_node,static) = {
- .function = mc_test_process,
- .type = VLIB_NODE_TYPE_PROCESS,
- .name = "mc-test-process",
-};
+/* *INDENT-OFF* */
+VLIB_REGISTER_NODE (mc_test_process_node, static) =
+{
+.function = mc_test_process,.type = VLIB_NODE_TYPE_PROCESS,.name =
+ "mc-test-process",};
+/* *INDENT-ON* */
static clib_error_t *
mc_test_command (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
f64 npkts = 10;
@@ -260,63 +265,63 @@ mc_test_command (vlib_main_t * vm,
EVENT_JOIN_STREAM, 0);
return 0;
}
- else if (unformat (input, "send %f", &npkts)
- || unformat(input, "send"))
+ else if (unformat (input, "send %f", &npkts) || unformat (input, "send"))
{
vlib_process_signal_event (vm, mc_test_process_node.index,
EVENT_SEND_DATA, (uword) npkts);
vlib_cli_output (vm, "Send %.0f pkts...\n", npkts);
-
+
return 0;
}
else
return unformat_parse_error (input);
}
-VLIB_CLI_COMMAND (test_mc_command, static) = {
- .path = "test mc",
- .short_help = "Test mc command",
- .function = mc_test_command,
-};
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (test_mc_command, static) =
+{
+.path = "test mc",.short_help = "Test mc command",.function =
+ mc_test_command,};
+/* *INDENT-ON* */
static clib_error_t *
mc_show_command (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
mc_main_t *mcm = &mc_socket_main.mc_main;
vlib_cli_output (vm, "%U", format_mc_main, mcm);
return 0;
}
-VLIB_CLI_COMMAND (show_mc_command, static) = {
- .path = "show mc",
- .short_help = "Show mc command",
- .function = mc_show_command,
-};
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (show_mc_command, static) =
+{
+.path = "show mc",.short_help = "Show mc command",.function =
+ mc_show_command,};
+/* *INDENT-ON* */
static clib_error_t *
mc_clear_command (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- mc_main_t * mcm = &mc_socket_main.mc_main;
+ mc_main_t *mcm = &mc_socket_main.mc_main;
mc_clear_stream_stats (mcm);
return 0;
}
-VLIB_CLI_COMMAND (clear_mc_command, static) = {
- .path = "clear mc",
- .short_help = "Clear mc command",
- .function = mc_clear_command,
-};
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (clear_mc_command, static) =
+{
+.path = "clear mc",.short_help = "Clear mc command",.function =
+ mc_clear_command,};
+/* *INDENT-ON* */
static clib_error_t *
mc_config (vlib_main_t * vm, unformat_input_t * input)
{
- mc_test_main_t * tm = &mc_test_main;
- mc_socket_main_t * msm = &mc_socket_main;
- clib_error_t * error = 0;
+ mc_test_main_t *tm = &mc_test_main;
+ mc_socket_main_t *msm = &mc_socket_main;
+ clib_error_t *error = 0;
tm->min_n_msg_bytes = 4;
tm->max_n_msg_bytes = 4;
@@ -362,9 +367,18 @@ mc_config (vlib_main_t * vm, unformat_input_t * input)
if (tm->n_packets_to_send > 0)
vlib_process_signal_event (vm, mc_test_process_node.index,
- EVENT_SEND_DATA, (uword) tm->n_packets_to_send);
+ EVENT_SEND_DATA,
+ (uword) tm->n_packets_to_send);
return error;
}
VLIB_CONFIG_FUNCTION (mc_config, "mc");
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/example/plex_test.c b/vlib/example/plex_test.c
index 947f25bc50b..ce0c8ef1141 100644
--- a/vlib/example/plex_test.c
+++ b/vlib/example/plex_test.c
@@ -15,23 +15,22 @@
#include <vlib/parse.h>
#include <vlib/unix/unix.h>
-static u8 * format_value_v4_address (u8 * s, va_list * args)
+static u8 *
+format_value_v4_address (u8 * s, va_list * args)
{
vlib_parse_value_t *v = va_arg (*args, vlib_parse_value_t *);
u32 a = v->value.as_uword;
s = format (s, "%d.%d.%d.%d",
- (a>>24) & 0xFF,
- (a>>16) & 0xFF,
- (a>>8) & 0xFF,
- (a>>0) & 0xFF);
+ (a >> 24) & 0xFF,
+ (a >> 16) & 0xFF, (a >> 8) & 0xFF, (a >> 0) & 0xFF);
return s;
}
static vlib_parse_match_t
-v4_address_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t, vlib_parse_value_t *valuep)
+v4_address_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
{
u32 digit;
u32 value = 0;
@@ -42,19 +41,23 @@ v4_address_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
/* NUMBER DOT NUMBER DOT NUMBER DOT NUMBER */
- for (i = 0; i < 7; i++) {
- if ((i & 1) == 0) {
- if (t[i].token != VLIB_LEX_number)
- return VLIB_PARSE_MATCH_FAIL;
- if (t[i].value.as_uword > 0xff)
- return VLIB_PARSE_MATCH_FAIL;
- digit = t[i].value.as_uword;
- value = (value << 8) | digit;
- } else {
- if (t[i].token != VLIB_LEX_dot)
- return VLIB_PARSE_MATCH_FAIL;
+ for (i = 0; i < 7; i++)
+ {
+ if ((i & 1) == 0)
+ {
+ if (t[i].token != VLIB_LEX_number)
+ return VLIB_PARSE_MATCH_FAIL;
+ if (t[i].value.as_uword > 0xff)
+ return VLIB_PARSE_MATCH_FAIL;
+ digit = t[i].value.as_uword;
+ value = (value << 8) | digit;
+ }
+ else
+ {
+ if (t[i].token != VLIB_LEX_dot)
+ return VLIB_PARSE_MATCH_FAIL;
+ }
}
- }
/* note: caller advances by 1 */
pm->current_token_index += 6;
valuep->value.as_uword = value;
@@ -62,25 +65,22 @@ v4_address_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
}
PARSE_TYPE_INIT (v4_address, v4_address_match, 0, format_value_v4_address)
-
-static u8 * format_value_v4_address_and_mask (u8 * s, va_list * args)
+ static u8 *format_value_v4_address_and_mask (u8 * s, va_list * args)
{
vlib_parse_value_t *v = va_arg (*args, vlib_parse_value_t *);
- u32 * a = v->value.as_pointer;
+ u32 *a = v->value.as_pointer;
s = format (s, "%d.%d.%d.%d",
- (a[0]>>24) & 0xFF,
- (a[0]>>16) & 0xFF,
- (a[0]>>8) & 0xFF,
- (a[0]>>0) & 0xFF);
+ (a[0] >> 24) & 0xFF,
+ (a[0] >> 16) & 0xFF, (a[0] >> 8) & 0xFF, (a[0] >> 0) & 0xFF);
s = format (s, "/%d", a[1]);
return s;
}
static vlib_parse_match_t
-v4_address_and_mask_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t, vlib_parse_value_t *valuep)
+v4_address_and_mask_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
{
u32 digit;
u32 address = 0;
@@ -92,19 +92,23 @@ v4_address_and_mask_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
/* NUMBER DOT NUMBER DOT NUMBER DOT NUMBER */
- for (i = 0; i < 7; i++) {
- if ((i & 1) == 0) {
- if (t[i].token != VLIB_LEX_number)
- return VLIB_PARSE_MATCH_FAIL;
- if (t[i].value.as_uword > 0xff)
- return VLIB_PARSE_MATCH_FAIL;
- digit = t[i].value.as_uword;
- address = (address << 8) | digit;
- } else {
- if (t[i].token != VLIB_LEX_dot)
- return VLIB_PARSE_MATCH_FAIL;
+ for (i = 0; i < 7; i++)
+ {
+ if ((i & 1) == 0)
+ {
+ if (t[i].token != VLIB_LEX_number)
+ return VLIB_PARSE_MATCH_FAIL;
+ if (t[i].value.as_uword > 0xff)
+ return VLIB_PARSE_MATCH_FAIL;
+ digit = t[i].value.as_uword;
+ address = (address << 8) | digit;
+ }
+ else
+ {
+ if (t[i].token != VLIB_LEX_dot)
+ return VLIB_PARSE_MATCH_FAIL;
+ }
}
- }
if (t[7].token != VLIB_LEX_slash || t[8].token != VLIB_LEX_number)
return VLIB_PARSE_MATCH_FAIL;
@@ -118,135 +122,143 @@ v4_address_and_mask_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
return VLIB_PARSE_MATCH_VALUE;
}
-void v4_address_and_mask_cleanup (vlib_parse_value_t *valuep)
+void
+v4_address_and_mask_cleanup (vlib_parse_value_t * valuep)
{
- u32 * trash = valuep->value.as_pointer;
+ u32 *trash = valuep->value.as_pointer;
vec_free (trash);
}
-PARSE_TYPE_INIT (v4_address_and_mask, v4_address_and_mask_match,
- v4_address_and_mask_cleanup,
- format_value_v4_address_and_mask)
-
-vlib_lex_main_t vlib_lex_main;
+PARSE_TYPE_INIT (v4_address_and_mask, v4_address_and_mask_match,
+ v4_address_and_mask_cleanup,
+ format_value_v4_address_and_mask)
+ vlib_lex_main_t vlib_lex_main;
-vlib_parse_match_t eval_factor0 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+ vlib_parse_match_t eval_factor0 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item,
+ vlib_parse_value_t * value)
{
clib_warning ("%U", format_vlib_parse_value, pm);
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_factor1 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_factor1 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
clib_warning ("%U", format_vlib_parse_value, pm);
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_factor2 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_factor2 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
word a;
- int index = vec_len (pm->parse_value)-1;
-
- a = pm->parse_value [index].value.as_word;
-
+ int index = vec_len (pm->parse_value) - 1;
+
+ a = pm->parse_value[index].value.as_word;
+
pm->parse_value[index].value.as_word = -a;
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_term0 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_term0 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
clib_warning ("%U", format_vlib_parse_value, pm);
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_term1 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_term1 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
uword a, b;
- int index = vec_len (pm->parse_value)-2;
-
- a = pm->parse_value [index].value.as_uword;
- b = pm->parse_value [index+1].value.as_uword;
-
+ int index = vec_len (pm->parse_value) - 2;
+
+ a = pm->parse_value[index].value.as_uword;
+ b = pm->parse_value[index + 1].value.as_uword;
+
pm->parse_value[index].value.as_uword = a * b;
_vec_len (pm->parse_value) -= 1;
clib_warning ("%U", format_vlib_parse_value, pm);
-
+
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_term2 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_term2 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
uword a, b;
- int index = vec_len (pm->parse_value)-2;
-
- a = pm->parse_value [index].value.as_uword;
- b = pm->parse_value [index+1].value.as_uword;
-
+ int index = vec_len (pm->parse_value) - 2;
+
+ a = pm->parse_value[index].value.as_uword;
+ b = pm->parse_value[index + 1].value.as_uword;
+
pm->parse_value[index].value.as_uword = a / b;
_vec_len (pm->parse_value) -= 1;
clib_warning ("%U", format_vlib_parse_value, pm);
-
+
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_exp0 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_exp0 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_exp1 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_exp1 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
uword a, b;
- int index = vec_len (pm->parse_value)-2;
-
- a = pm->parse_value [index].value.as_uword;
- b = pm->parse_value [index+1].value.as_uword;
-
+ int index = vec_len (pm->parse_value) - 2;
+
+ a = pm->parse_value[index].value.as_uword;
+ b = pm->parse_value[index + 1].value.as_uword;
+
pm->parse_value[index].value.as_uword = a + b;
_vec_len (pm->parse_value) -= 1;
clib_warning ("%U", format_vlib_parse_value, pm);
-
+
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_exp2 (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+
+vlib_parse_match_t
+eval_exp2 (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
uword a, b;
- int index = vec_len (pm->parse_value)-2;
-
- a = pm->parse_value [index].value.as_uword;
- b = pm->parse_value [index+1].value.as_uword;
-
+ int index = vec_len (pm->parse_value) - 2;
+
+ a = pm->parse_value[index].value.as_uword;
+ b = pm->parse_value[index + 1].value.as_uword;
+
pm->parse_value[index].value.as_uword = a - b;
_vec_len (pm->parse_value) -= 1;
clib_warning ("%U", format_vlib_parse_value, pm);
-
+
return VLIB_PARSE_MATCH_RULE;
}
-vlib_parse_match_t eval_result (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+vlib_parse_match_t
+eval_result (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
clib_warning ("%U", format_vlib_parse_value, pm);
return VLIB_PARSE_MATCH_DONE;
}
-vlib_parse_match_t noop_match_rule (vlib_parse_main_t *pm,
- vlib_parse_item_t *item,
- vlib_parse_value_t *value)
+vlib_parse_match_t
+noop_match_rule (vlib_parse_main_t * pm,
+ vlib_parse_item_t * item, vlib_parse_value_t * value)
{
clib_warning ("%U", format_vlib_parse_value, pm);
return VLIB_PARSE_MATCH_RULE;
@@ -330,18 +342,17 @@ vlib_parse_match_t eval##n (vlib_parse_main_t *pm, \
return VLIB_PARSE_MATCH_DONE; \
}
foreach_rule_evaluator
-
#undef _
-
PARSE_INIT (r1, "eval <moo>", eval_result);
PARSE_INIT (r2, "<moo> = cow", eval0);
PARSE_INIT (r4, "<moo> = ", eval1);
PARSE_TYPE_INIT (moo, rule_match, 0, 0);
-#endif
+#endif
-clib_error_t *test_init (vlib_main_t *vm)
+clib_error_t *
+test_init (vlib_main_t * vm)
{
clib_error_t *error;
@@ -356,13 +367,13 @@ VLIB_INIT_FUNCTION (test_init);
clib_error_t *
vlib_stdlex_init (vlib_main_t * vm)
{
- vlib_lex_main_t * lm = &vlib_lex_main;
+ vlib_lex_main_t *lm = &vlib_lex_main;
u16 top_index;
u16 slash_index, slash_star_index, slash_slash_index, slash_star_star_index;
u16 slash_token;
u16 word_index;
u16 zero_index, octal_index, decimal_index, hex_index, binary_index;
-
+
top_index = vlib_lex_add_table ("top");
#define foreach_top_level_single_character_token \
@@ -395,43 +406,52 @@ vlib_stdlex_init (vlib_main_t * vm)
binary_index = vlib_lex_add_table ("binary");
/* Support 0x 0b 0t and 0123 [octal] */
- vlib_lex_set_action_range (top_index, '0', '0', VLIB_LEX_START_NUMBER, 10, zero_index);
- vlib_lex_set_action_range (top_index, '1', '9', VLIB_LEX_START_NUMBER, 10, decimal_index);
-
- vlib_lex_set_action_range (zero_index, 0, 0x7F, VLIB_LEX_RETURN_AND_RESCAN, VLIB_LEX_number, top_index);
+ vlib_lex_set_action_range (top_index, '0', '0', VLIB_LEX_START_NUMBER, 10,
+ zero_index);
+ vlib_lex_set_action_range (top_index, '1', '9', VLIB_LEX_START_NUMBER, 10,
+ decimal_index);
+
+ vlib_lex_set_action_range (zero_index, 0, 0x7F, VLIB_LEX_RETURN_AND_RESCAN,
+ VLIB_LEX_number, top_index);
+
+ vlib_lex_set_action_range (zero_index, 'x', 'x', VLIB_LEX_IGNORE, ~0,
+ hex_index);
+ vlib_lex_set_action_range (zero_index, 'b', 'b', VLIB_LEX_IGNORE, ~0,
+ binary_index);
+ vlib_lex_set_action_range (zero_index, 't', 't', VLIB_LEX_IGNORE, ~0,
+ decimal_index);
+ vlib_lex_set_action_range (zero_index, '0', '7', VLIB_LEX_START_NUMBER, 8,
+ octal_index);
- vlib_lex_set_action_range (zero_index, 'x', 'x', VLIB_LEX_IGNORE, ~0, hex_index);
- vlib_lex_set_action_range (zero_index, 'b', 'b', VLIB_LEX_IGNORE, ~0, binary_index);
- vlib_lex_set_action_range (zero_index, 't', 't', VLIB_LEX_IGNORE, ~0, decimal_index);
- vlib_lex_set_action_range (zero_index, '0', '7', VLIB_LEX_START_NUMBER, 8, octal_index);
-
/* Octal */
vlib_lex_set_action_range (octal_index, 0, 0x7f, VLIB_LEX_RETURN_AND_RESCAN,
- VLIB_LEX_number, top_index);
- vlib_lex_set_action_range (octal_index, '0', '7', VLIB_LEX_ADD_TO_NUMBER, 8,
- octal_index);
+ VLIB_LEX_number, top_index);
+ vlib_lex_set_action_range (octal_index, '0', '7', VLIB_LEX_ADD_TO_NUMBER, 8,
+ octal_index);
/* Decimal */
- vlib_lex_set_action_range (decimal_index, 0, 0x7f, VLIB_LEX_RETURN_AND_RESCAN,
- VLIB_LEX_number, top_index);
- vlib_lex_set_action_range (decimal_index, '0', '9', VLIB_LEX_ADD_TO_NUMBER, 10,
- decimal_index);
-
+ vlib_lex_set_action_range (decimal_index, 0, 0x7f,
+ VLIB_LEX_RETURN_AND_RESCAN, VLIB_LEX_number,
+ top_index);
+ vlib_lex_set_action_range (decimal_index, '0', '9', VLIB_LEX_ADD_TO_NUMBER,
+ 10, decimal_index);
+
/* Hex */
vlib_lex_set_action_range (hex_index, 0, 0x7f, VLIB_LEX_RETURN_AND_RESCAN,
- VLIB_LEX_number, top_index);
- vlib_lex_set_action_range (hex_index, '0', '9', VLIB_LEX_ADD_TO_NUMBER, 16,
- hex_index);
- vlib_lex_set_action_range (hex_index, 'a', 'f', VLIB_LEX_ADD_TO_NUMBER, 16,
- hex_index);
- vlib_lex_set_action_range (hex_index, 'A', 'F', VLIB_LEX_ADD_TO_NUMBER, 16,
- hex_index);
-
+ VLIB_LEX_number, top_index);
+ vlib_lex_set_action_range (hex_index, '0', '9', VLIB_LEX_ADD_TO_NUMBER, 16,
+ hex_index);
+ vlib_lex_set_action_range (hex_index, 'a', 'f', VLIB_LEX_ADD_TO_NUMBER, 16,
+ hex_index);
+ vlib_lex_set_action_range (hex_index, 'A', 'F', VLIB_LEX_ADD_TO_NUMBER, 16,
+ hex_index);
+
/* Binary */
- vlib_lex_set_action_range (binary_index, 0, 0x7f, VLIB_LEX_RETURN_AND_RESCAN,
- VLIB_LEX_number, top_index);
- vlib_lex_set_action_range (binary_index, '0', '1', VLIB_LEX_ADD_TO_NUMBER, 2,
- binary_index);
+ vlib_lex_set_action_range (binary_index, 0, 0x7f,
+ VLIB_LEX_RETURN_AND_RESCAN, VLIB_LEX_number,
+ top_index);
+ vlib_lex_set_action_range (binary_index, '0', '1', VLIB_LEX_ADD_TO_NUMBER,
+ 2, binary_index);
/* c/c++ comment syntax is the worst... */
@@ -442,49 +462,66 @@ vlib_stdlex_init (vlib_main_t * vm)
slash_token = vlib_lex_add_token (lm, "slash");
/* Top level: see a slash, ignore, go to slash table */
- vlib_lex_set_action_range (top_index, '/', '/', VLIB_LEX_IGNORE, ~0, slash_index);
+ vlib_lex_set_action_range (top_index, '/', '/', VLIB_LEX_IGNORE, ~0,
+ slash_index);
/* default for slash table: return SLASH, go to top table */
- vlib_lex_set_action_range (slash_index, 1, 0x7F, VLIB_LEX_RETURN_AND_RESCAN, slash_token,
- top_index);
+ vlib_lex_set_action_range (slash_index, 1, 0x7F, VLIB_LEX_RETURN_AND_RESCAN,
+ slash_token, top_index);
/* see slash-slash, go to s-s table */
- vlib_lex_set_action_range (slash_index, '/', '/', VLIB_LEX_IGNORE, ~0,
- slash_slash_index);
+ vlib_lex_set_action_range (slash_index, '/', '/', VLIB_LEX_IGNORE, ~0,
+ slash_slash_index);
/* see slash-star, go to s-* table */
- vlib_lex_set_action_range (slash_index, '*', '*', VLIB_LEX_IGNORE, ~0,
- slash_star_index);
+ vlib_lex_set_action_range (slash_index, '*', '*', VLIB_LEX_IGNORE, ~0,
+ slash_star_index);
/* EOL in s-s table, ignore, go to top table */
- vlib_lex_set_action_range (slash_slash_index, '\n', '\n', VLIB_LEX_IGNORE, ~0,
- top_index);
+ vlib_lex_set_action_range (slash_slash_index, '\n', '\n', VLIB_LEX_IGNORE,
+ ~0, top_index);
/* slash-star blah blah star */
vlib_lex_set_action_range (slash_star_index, '*', '*', VLIB_LEX_IGNORE, ~0,
- slash_star_star_index);
+ slash_star_star_index);
/* slash star blah blah star slash */
- vlib_lex_set_action_range (slash_star_star_index, '/', '/', VLIB_LEX_IGNORE, ~0,
- top_index);
+ vlib_lex_set_action_range (slash_star_star_index, '/', '/', VLIB_LEX_IGNORE,
+ ~0, top_index);
/* LT, =, GT */
- vlib_lex_set_action_range (top_index, '<', '<', VLIB_LEX_RETURN, VLIB_LEX_lt, top_index);
- vlib_lex_set_action_range (top_index, '=', '=', VLIB_LEX_RETURN, VLIB_LEX_equals,
- top_index);
- vlib_lex_set_action_range (top_index, '>', '>', VLIB_LEX_RETURN, VLIB_LEX_gt, top_index);
+ vlib_lex_set_action_range (top_index, '<', '<', VLIB_LEX_RETURN,
+ VLIB_LEX_lt, top_index);
+ vlib_lex_set_action_range (top_index, '=', '=', VLIB_LEX_RETURN,
+ VLIB_LEX_equals, top_index);
+ vlib_lex_set_action_range (top_index, '>', '>', VLIB_LEX_RETURN,
+ VLIB_LEX_gt, top_index);
/* words, key and otherwise */
word_index = vlib_lex_add_table ("word");
- vlib_lex_set_action_range (top_index, 'a', 'z', VLIB_LEX_ADD_TO_TOKEN, ~0, word_index);
- vlib_lex_set_action_range (top_index, 'A', 'Z', VLIB_LEX_ADD_TO_TOKEN, ~0, word_index);
+ vlib_lex_set_action_range (top_index, 'a', 'z', VLIB_LEX_ADD_TO_TOKEN, ~0,
+ word_index);
+ vlib_lex_set_action_range (top_index, 'A', 'Z', VLIB_LEX_ADD_TO_TOKEN, ~0,
+ word_index);
- vlib_lex_set_action_range (word_index, 0, 0x7f, VLIB_LEX_KEYWORD_CHECK, ~0, top_index);
+ vlib_lex_set_action_range (word_index, 0, 0x7f, VLIB_LEX_KEYWORD_CHECK, ~0,
+ top_index);
+
+ vlib_lex_set_action_range (word_index, 'a', 'z', VLIB_LEX_ADD_TO_TOKEN, ~0,
+ word_index);
+ vlib_lex_set_action_range (word_index, 'A', 'Z', VLIB_LEX_ADD_TO_TOKEN, ~0,
+ word_index);
+ vlib_lex_set_action_range (word_index, '_', '_', VLIB_LEX_ADD_TO_TOKEN, ~0,
+ word_index);
+ vlib_lex_set_action_range (word_index, '0', '9', VLIB_LEX_ADD_TO_TOKEN, ~0,
+ word_index);
- vlib_lex_set_action_range (word_index, 'a', 'z', VLIB_LEX_ADD_TO_TOKEN, ~0, word_index);
- vlib_lex_set_action_range (word_index, 'A', 'Z', VLIB_LEX_ADD_TO_TOKEN, ~0, word_index);
- vlib_lex_set_action_range (word_index, '_', '_', VLIB_LEX_ADD_TO_TOKEN, ~0, word_index);
- vlib_lex_set_action_range (word_index, '0', '9', VLIB_LEX_ADD_TO_TOKEN, ~0, word_index);
-
return 0;
}
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/buffer.c b/vlib/vlib/buffer.c
index f727e67a55a..84cecc27a81 100644
--- a/vlib/vlib/buffer.c
+++ b/vlib/vlib/buffer.c
@@ -39,9 +39,11 @@
#include <vlib/vlib.h>
-uword vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm, vlib_buffer_t * b_first)
+uword
+vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm,
+ vlib_buffer_t * b_first)
{
- vlib_buffer_t * b = b_first;
+ vlib_buffer_t *b = b_first;
uword l_first = b_first->current_length;
uword l = 0;
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
@@ -54,13 +56,13 @@ uword vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm, vlib_buffer_t * b
return l + l_first;
}
-u8 * format_vlib_buffer (u8 * s, va_list * args)
+u8 *
+format_vlib_buffer (u8 * s, va_list * args)
{
- vlib_buffer_t * b = va_arg (*args, vlib_buffer_t *);
-
+ vlib_buffer_t *b = va_arg (*args, vlib_buffer_t *);
+
s = format (s, "current data %d, length %d, free-list %d",
- b->current_data, b->current_length,
- b->free_list_index);
+ b->current_data, b->current_length, b->free_list_index);
if (b->flags & VLIB_BUFFER_IS_TRACED)
s = format (s, ", trace 0x%x", b->trace_index);
@@ -71,10 +73,11 @@ u8 * format_vlib_buffer (u8 * s, va_list * args)
return s;
}
-u8 * format_vlib_buffer_and_data (u8 * s, va_list * args)
+u8 *
+format_vlib_buffer_and_data (u8 * s, va_list * args)
{
- vlib_buffer_t * b = va_arg (*args, vlib_buffer_t *);
-
+ vlib_buffer_t *b = va_arg (*args, vlib_buffer_t *);
+
s = format (s, "%U, %U",
format_vlib_buffer, b,
format_hex_bytes, vlib_buffer_get_current (b), 64);
@@ -82,10 +85,11 @@ u8 * format_vlib_buffer_and_data (u8 * s, va_list * args)
return s;
}
-static u8 * format_vlib_buffer_known_state (u8 * s, va_list * args)
+static u8 *
+format_vlib_buffer_known_state (u8 * s, va_list * args)
{
vlib_buffer_known_state_t state = va_arg (*args, vlib_buffer_known_state_t);
- char * t;
+ char *t;
switch (state)
{
@@ -109,16 +113,16 @@ static u8 * format_vlib_buffer_known_state (u8 * s, va_list * args)
return format (s, "%s", t);
}
-u8 * format_vlib_buffer_contents (u8 * s, va_list * va)
+u8 *
+format_vlib_buffer_contents (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
- vlib_buffer_t * b = va_arg (*va, vlib_buffer_t *);
-
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
+ vlib_buffer_t *b = va_arg (*va, vlib_buffer_t *);
+
while (1)
{
- vec_add (s, vlib_buffer_get_current (b),
- b->current_length);
- if (! (b->flags & VLIB_BUFFER_NEXT_PRESENT))
+ vec_add (s, vlib_buffer_get_current (b), b->current_length);
+ if (!(b->flags & VLIB_BUFFER_NEXT_PRESENT))
break;
b = vlib_get_buffer (vm, b->next_buffer);
}
@@ -129,41 +133,34 @@ u8 * format_vlib_buffer_contents (u8 * s, va_list * va)
static u8 *
vlib_validate_buffer_helper (vlib_main_t * vm,
u32 bi,
- uword follow_buffer_next,
- uword ** unique_hash)
-
+ uword follow_buffer_next, uword ** unique_hash)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, bi);
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * fl;
+ vlib_buffer_t *b = vlib_get_buffer (vm, bi);
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *fl;
- if (pool_is_free_index (bm->buffer_free_list_pool,
- b->free_list_index))
+ if (pool_is_free_index (bm->buffer_free_list_pool, b->free_list_index))
return format (0, "unknown free list 0x%x", b->free_list_index);
- fl = pool_elt_at_index (bm->buffer_free_list_pool,
- b->free_list_index);
+ fl = pool_elt_at_index (bm->buffer_free_list_pool, b->free_list_index);
- if ((signed) b->current_data < (signed) - VLIB_BUFFER_PRE_DATA_SIZE)
+ if ((signed) b->current_data < (signed) -VLIB_BUFFER_PRE_DATA_SIZE)
return format (0, "current data %d before pre-data", b->current_data);
#if DPDK == 0
if (b->current_data + b->current_length > fl->n_data_bytes)
return format (0, "%d-%d beyond end of buffer %d",
- b->current_data, b->current_length,
- fl->n_data_bytes);
+ b->current_data, b->current_length, fl->n_data_bytes);
#endif
- if (follow_buffer_next
- && (b->flags & VLIB_BUFFER_NEXT_PRESENT))
+ if (follow_buffer_next && (b->flags & VLIB_BUFFER_NEXT_PRESENT))
{
vlib_buffer_known_state_t k;
- u8 * msg, * result;
+ u8 *msg, *result;
k = vlib_buffer_is_known (vm, b->next_buffer);
if (k != VLIB_BUFFER_KNOWN_ALLOCATED)
return format (0, "next 0x%x: %U",
- b->next_buffer,
- format_vlib_buffer_known_state, k);
+ b->next_buffer, format_vlib_buffer_known_state, k);
if (unique_hash)
{
@@ -187,7 +184,10 @@ vlib_validate_buffer_helper (vlib_main_t * vm,
u8 *
vlib_validate_buffer (vlib_main_t * vm, u32 bi, uword follow_buffer_next)
-{ return vlib_validate_buffer_helper (vm, bi, follow_buffer_next, /* unique_hash */ 0); }
+{
+ return vlib_validate_buffer_helper (vm, bi, follow_buffer_next,
+ /* unique_hash */ 0);
+}
u8 *
vlib_validate_buffers (vlib_main_t * vm,
@@ -197,10 +197,10 @@ vlib_validate_buffers (vlib_main_t * vm,
vlib_buffer_known_state_t known_state,
uword follow_buffer_next)
{
- uword i, * hash;
- u32 bi, * b = buffers;
+ uword i, *hash;
+ u32 bi, *b = buffers;
vlib_buffer_known_state_t k;
- u8 * msg = 0, * result = 0;
+ u8 *msg = 0, *result = 0;
hash = hash_create (0, 0);
for (i = 0; i < n_buffers; i++)
@@ -231,7 +231,7 @@ vlib_validate_buffers (vlib_main_t * vm,
hash_set1 (hash, bi);
}
- done:
+done:
if (msg)
{
result = format (0, "0x%x: %v", bi, msg);
@@ -251,24 +251,24 @@ vlib_buffer_validate_alloc_free (vlib_main_t * vm,
uword n_buffers,
vlib_buffer_known_state_t expected_state)
{
- u32 * b;
+ u32 *b;
uword i, bi, is_free;
if (CLIB_DEBUG == 0)
return;
- ASSERT(os_get_cpu_number() == 0);
+ ASSERT (os_get_cpu_number () == 0);
/* smp disaster check */
if (vlib_mains)
- ASSERT(vm == vlib_mains[0]);
+ ASSERT (vm == vlib_mains[0]);
is_free = expected_state == VLIB_BUFFER_KNOWN_ALLOCATED;
b = buffers;
for (i = 0; i < n_buffers; i++)
{
vlib_buffer_known_state_t known;
-
+
bi = b[0];
b += 1;
known = vlib_buffer_is_known (vm, bi);
@@ -278,8 +278,7 @@ vlib_buffer_validate_alloc_free (vlib_main_t * vm,
vlib_panic_with_msg
(vm, "%s %U buffer 0x%x",
is_free ? "freeing" : "allocating",
- format_vlib_buffer_known_state, known,
- bi);
+ format_vlib_buffer_known_state, known, bi);
}
vlib_buffer_set_known_state
@@ -290,10 +289,10 @@ vlib_buffer_validate_alloc_free (vlib_main_t * vm,
/* Aligned copy routine. */
void
-vlib_aligned_memcpy (void * _dst, void * _src, int n_bytes)
+vlib_aligned_memcpy (void *_dst, void *_src, int n_bytes)
{
- vlib_copy_unit_t * dst = _dst;
- vlib_copy_unit_t * src = _src;
+ vlib_copy_unit_t *dst = _dst;
+ vlib_copy_unit_t *src = _src;
/* Arguments must be naturally aligned. */
ASSERT (pointer_to_uword (dst) % sizeof (dst[0]) == 0);
@@ -341,7 +340,7 @@ vlib_aligned_memcpy (void * _dst, void * _src, int n_bytes)
}
}
else
- /* Cache line size unknown: fall back to slow version. */;
+ /* Cache line size unknown: fall back to slow version. */ ;
while (n_bytes > 0)
{
@@ -412,8 +411,8 @@ merge_free_lists (vlib_buffer_free_list_t * dst,
vlib_buffer_free_list_t * src)
{
uword l;
- u32 * d;
-
+ u32 *d;
+
trim_aligned (src);
trim_aligned (dst);
@@ -437,10 +436,10 @@ merge_free_lists (vlib_buffer_free_list_t * dst,
always_inline u32
vlib_buffer_get_free_list_with_size (vlib_main_t * vm, u32 size)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
+ vlib_buffer_main_t *bm = vm->buffer_main;
size = vlib_buffer_round_size (size);
- uword * p = hash_get (bm->free_list_by_size, size);
+ uword *p = hash_get (bm->free_list_by_size, size);
return p ? p[0] : ~0;
}
@@ -448,24 +447,27 @@ vlib_buffer_get_free_list_with_size (vlib_main_t * vm, u32 size)
static u32
vlib_buffer_create_free_list_helper (vlib_main_t * vm,
u32 n_data_bytes,
- u32 is_public,
- u32 is_default,
- u8 * name)
+ u32 is_public, u32 is_default, u8 * name)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
- if (! is_default && pool_elts (bm->buffer_free_list_pool) == 0)
+ if (!is_default && pool_elts (bm->buffer_free_list_pool) == 0)
{
u32 default_free_free_list_index;
- default_free_free_list_index =
- vlib_buffer_create_free_list_helper (vm,
- /* default buffer size */ VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
- /* is_public */ 1,
- /* is_default */ 1,
- (u8 *) "default");
- ASSERT (default_free_free_list_index == VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
+ default_free_free_list_index = vlib_buffer_create_free_list_helper (vm,
+ /* default buffer size */
+ VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
+ /* is_public */
+ 1,
+ /* is_default */
+ 1,
+ (u8
+ *)
+ "default");
+ ASSERT (default_free_free_list_index ==
+ VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
if (n_data_bytes == VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES && is_public)
return default_free_free_list_index;
@@ -484,19 +486,20 @@ vlib_buffer_create_free_list_helper (vlib_main_t * vm,
if (is_public)
{
- uword * p = hash_get (bm->free_list_by_size, f->n_data_bytes);
- if (! p)
+ uword *p = hash_get (bm->free_list_by_size, f->n_data_bytes);
+ if (!p)
hash_set (bm->free_list_by_size, f->n_data_bytes, f->index);
}
return f->index;
}
-u32 vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
- char * fmt, ...)
+u32
+vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
+ char *fmt, ...)
{
va_list va;
- u8 * name;
+ u8 *name;
va_start (va, fmt);
name = va_format (0, fmt, &va);
@@ -508,15 +511,16 @@ u32 vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
name);
}
-u32 vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
- char * fmt, ...)
+u32
+vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
+ char *fmt, ...)
{
u32 i = vlib_buffer_get_free_list_with_size (vm, n_data_bytes);
if (i == ~0)
{
va_list va;
- u8 * name;
+ u8 *name;
va_start (va, fmt);
name = va_format (0, fmt, &va);
@@ -527,7 +531,7 @@ u32 vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
/* is_default */ 0,
name);
}
-
+
return i;
}
@@ -545,15 +549,17 @@ del_free_list (vlib_main_t * vm, vlib_buffer_free_list_t * f)
}
/* Add buffer free list. */
-void vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index)
+void
+vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
u32 merge_index;
f = vlib_buffer_get_free_list (vm, free_list_index);
- ASSERT (vec_len (f->unaligned_buffers) + vec_len (f->aligned_buffers) == f->n_alloc);
+ ASSERT (vec_len (f->unaligned_buffers) + vec_len (f->aligned_buffers) ==
+ f->n_alloc);
merge_index = vlib_buffer_get_free_list_with_size (vm, f->n_data_bytes);
if (merge_index != ~0 && merge_index != free_list_index)
{
@@ -572,12 +578,11 @@ void vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index)
/* Make sure free list has at least given number of free buffers. */
static uword
fill_free_list (vlib_main_t * vm,
- vlib_buffer_free_list_t * fl,
- uword min_free_buffers)
+ vlib_buffer_free_list_t * fl, uword min_free_buffers)
{
- vlib_buffer_t * buffers, * b;
+ vlib_buffer_t *buffers, *b;
int n, n_bytes, i;
- u32 * bi;
+ u32 *bi;
u32 n_remaining, n_alloc, n_this_chunk;
trim_aligned (fl);
@@ -598,14 +603,15 @@ fill_free_list (vlib_main_t * vm,
while (n_remaining > 0)
{
n_this_chunk = clib_min (n_remaining, 16);
-
+
n_bytes = n_this_chunk * (sizeof (b[0]) + fl->n_data_bytes);
/* drb: removed power-of-2 ASSERT */
buffers = vm->os_physmem_alloc_aligned (&vm->physmem_main,
- n_bytes, sizeof (vlib_buffer_t));
- if (! buffers)
- return n_alloc;
+ n_bytes,
+ sizeof (vlib_buffer_t));
+ if (!buffers)
+ return n_alloc;
/* Record chunk as being allocated so we can free it later. */
vec_add1 (fl->buffer_memory_allocated, buffers);
@@ -615,48 +621,49 @@ fill_free_list (vlib_main_t * vm,
n_remaining -= n_this_chunk;
b = buffers;
- vec_add2_aligned (fl->aligned_buffers, bi, n_this_chunk,
- sizeof (vlib_copy_unit_t));
+ vec_add2_aligned (fl->aligned_buffers, bi, n_this_chunk,
+ sizeof (vlib_copy_unit_t));
for (i = 0; i < n_this_chunk; i++)
- {
- bi[i] = vlib_get_buffer_index (vm, b);
+ {
+ bi[i] = vlib_get_buffer_index (vm, b);
- if (CLIB_DEBUG > 0)
- vlib_buffer_set_known_state (vm, bi[i], VLIB_BUFFER_KNOWN_FREE);
- b = vlib_buffer_next_contiguous (b, fl->n_data_bytes);
- }
+ if (CLIB_DEBUG > 0)
+ vlib_buffer_set_known_state (vm, bi[i], VLIB_BUFFER_KNOWN_FREE);
+ b = vlib_buffer_next_contiguous (b, fl->n_data_bytes);
+ }
memset (buffers, 0, n_bytes);
/* Initialize all new buffers. */
b = buffers;
for (i = 0; i < n_this_chunk; i++)
- {
- vlib_buffer_init_for_free_list (b, fl);
- b = vlib_buffer_next_contiguous (b, fl->n_data_bytes);
- }
-
+ {
+ vlib_buffer_init_for_free_list (b, fl);
+ b = vlib_buffer_next_contiguous (b, fl->n_data_bytes);
+ }
+
if (fl->buffer_init_function)
- fl->buffer_init_function (vm, fl, bi, n_this_chunk);
+ fl->buffer_init_function (vm, fl, bi, n_this_chunk);
}
return n_alloc;
}
always_inline uword
copy_alignment (u32 * x)
-{ return (pointer_to_uword (x) / sizeof (x[0])) % BUFFERS_PER_COPY; }
+{
+ return (pointer_to_uword (x) / sizeof (x[0])) % BUFFERS_PER_COPY;
+}
static u32
alloc_from_free_list (vlib_main_t * vm,
vlib_buffer_free_list_t * free_list,
- u32 * alloc_buffers,
- u32 n_alloc_buffers)
+ u32 * alloc_buffers, u32 n_alloc_buffers)
{
- u32 * dst, * u_src;
+ u32 *dst, *u_src;
uword u_len, n_left;
uword n_unaligned_start, n_unaligned_end, n_filled;
- ASSERT(os_get_cpu_number() == 0);
+ ASSERT (os_get_cpu_number () == 0);
n_left = n_alloc_buffers;
dst = alloc_buffers;
@@ -666,7 +673,7 @@ alloc_from_free_list (vlib_main_t * vm,
n_filled = fill_free_list (vm, free_list, n_alloc_buffers);
if (n_filled == 0)
return 0;
-
+
n_left = n_filled < n_left ? n_filled : n_left;
n_alloc_buffers = n_left;
@@ -704,11 +711,12 @@ alloc_from_free_list (vlib_main_t * vm,
/* Aligned copy. */
{
- vlib_copy_unit_t * d, * s;
+ vlib_copy_unit_t *d, *s;
uword n_copy;
- if (vec_len(free_list->aligned_buffers) < ((n_left/BUFFERS_PER_COPY)*BUFFERS_PER_COPY))
- abort();
+ if (vec_len (free_list->aligned_buffers) <
+ ((n_left / BUFFERS_PER_COPY) * BUFFERS_PER_COPY))
+ abort ();
n_copy = n_left / BUFFERS_PER_COPY;
n_left = n_left % BUFFERS_PER_COPY;
@@ -751,15 +759,14 @@ alloc_from_free_list (vlib_main_t * vm,
u_len--;
}
- if (! free_list->unaligned_buffers)
+ if (!free_list->unaligned_buffers)
ASSERT (u_len == 0);
else
_vec_len (free_list->unaligned_buffers) = u_len;
/* Verify that buffers are known free. */
vlib_buffer_validate_alloc_free (vm, alloc_buffers,
- n_alloc_buffers,
- VLIB_BUFFER_KNOWN_FREE);
+ n_alloc_buffers, VLIB_BUFFER_KNOWN_FREE);
return n_alloc_buffers;
}
@@ -767,10 +774,11 @@ alloc_from_free_list (vlib_main_t * vm,
/* Allocate a given number of buffers into given array.
Returns number actually allocated which will be either zero or
number requested. */
-u32 vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
+u32
+vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- ASSERT(os_get_cpu_number() == 0);
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ ASSERT (os_get_cpu_number () == 0);
return alloc_from_free_list
(vm,
@@ -779,89 +787,92 @@ u32 vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
buffers, n_buffers);
}
-u32 vlib_buffer_alloc_from_free_list (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers,
- u32 free_list_index)
+u32
+vlib_buffer_alloc_from_free_list (vlib_main_t * vm,
+ u32 * buffers,
+ u32 n_buffers, u32 free_list_index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
f = pool_elt_at_index (bm->buffer_free_list_pool, free_list_index);
return alloc_from_free_list (vm, f, buffers, n_buffers);
}
always_inline void
add_buffer_to_free_list (vlib_main_t * vm,
- vlib_buffer_free_list_t * f,
+ vlib_buffer_free_list_t * f,
u32 buffer_index, u8 do_init)
{
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
b = vlib_get_buffer (vm, buffer_index);
- if (PREDICT_TRUE(do_init))
- vlib_buffer_init_for_free_list (b, f);
- vec_add1_aligned (f->aligned_buffers, buffer_index, sizeof (vlib_copy_unit_t));
+ if (PREDICT_TRUE (do_init))
+ vlib_buffer_init_for_free_list (b, f);
+ vec_add1_aligned (f->aligned_buffers, buffer_index,
+ sizeof (vlib_copy_unit_t));
}
always_inline vlib_buffer_free_list_t *
buffer_get_free_list (vlib_main_t * vm, vlib_buffer_t * b, u32 * index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
+ vlib_buffer_main_t *bm = vm->buffer_main;
u32 i;
*index = i = b->free_list_index;
return pool_elt_at_index (bm->buffer_free_list_pool, i);
}
-void *vlib_set_buffer_free_callback (vlib_main_t *vm, void *fp)
+void *
+vlib_set_buffer_free_callback (vlib_main_t * vm, void *fp)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- void * rv = bm->buffer_free_callback;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ void *rv = bm->buffer_free_callback;
bm->buffer_free_callback = fp;
return rv;
}
void vnet_buffer_free_dpdk_mb (vlib_buffer_t * b) __attribute__ ((weak));
-void vnet_buffer_free_dpdk_mb (vlib_buffer_t * b) { }
+void
+vnet_buffer_free_dpdk_mb (vlib_buffer_t * b)
+{
+}
static_always_inline void
vlib_buffer_free_inline (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers,
- u32 follow_buffer_next)
+ u32 * buffers, u32 n_buffers, u32 follow_buffer_next)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * fl;
- static u32 * next_to_free[2]; /* smp bad */
- u32 i_next_to_free, * b, * n, * f, fi;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *fl;
+ static u32 *next_to_free[2]; /* smp bad */
+ u32 i_next_to_free, *b, *n, *f, fi;
uword n_left;
int i;
- static vlib_buffer_free_list_t ** announce_list;
- vlib_buffer_free_list_t * fl0 = 0, * fl1 = 0;
- u32 bi0=(u32)~0, bi1=(u32)~0, fi0, fi1 = (u32)~0;
- u8 free0, free1=0, free_next0, free_next1;
- u32 (*cb)(vlib_main_t * vm, u32 * buffers, u32 n_buffers,
- u32 follow_buffer_next);
-
- ASSERT(os_get_cpu_number() == 0);
-
+ static vlib_buffer_free_list_t **announce_list;
+ vlib_buffer_free_list_t *fl0 = 0, *fl1 = 0;
+ u32 bi0 = (u32) ~ 0, bi1 = (u32) ~ 0, fi0, fi1 = (u32) ~ 0;
+ u8 free0, free1 = 0, free_next0, free_next1;
+ u32 (*cb) (vlib_main_t * vm, u32 * buffers, u32 n_buffers,
+ u32 follow_buffer_next);
+
+ ASSERT (os_get_cpu_number () == 0);
+
cb = bm->buffer_free_callback;
if (PREDICT_FALSE (cb != 0))
- n_buffers = (*cb)(vm, buffers, n_buffers, follow_buffer_next);
+ n_buffers = (*cb) (vm, buffers, n_buffers, follow_buffer_next);
- if (! n_buffers)
+ if (!n_buffers)
return;
/* Use first buffer to get default free list. */
{
u32 bi0 = buffers[0];
- vlib_buffer_t * b0;
+ vlib_buffer_t *b0;
b0 = vlib_get_buffer (vm, bi0);
fl = buffer_get_free_list (vm, b0, &fi);
if (fl->buffers_added_to_freelist_function)
- vec_add1 (announce_list, fl);
+ vec_add1 (announce_list, fl);
}
vec_validate (next_to_free[0], n_buffers - 1);
@@ -871,11 +882,10 @@ vlib_buffer_free_inline (vlib_main_t * vm,
n_left = n_buffers;
b = buffers;
- again:
+again:
/* Verify that buffers are known allocated. */
vlib_buffer_validate_alloc_free (vm, b,
- n_left,
- VLIB_BUFFER_KNOWN_ALLOCATED);
+ n_left, VLIB_BUFFER_KNOWN_ALLOCATED);
vec_add2_aligned (fl->aligned_buffers, f, n_left,
/* align */ sizeof (vlib_copy_unit_t));
@@ -883,7 +893,7 @@ vlib_buffer_free_inline (vlib_main_t * vm,
n = next_to_free[i_next_to_free];
while (n_left >= 4)
{
- vlib_buffer_t * b0, * b1, * binit0, * binit1, dummy_buffers[2];
+ vlib_buffer_t *b0, *b1, *binit0, *binit1, dummy_buffers[2];
bi0 = b[0];
bi1 = b[1];
@@ -942,23 +952,23 @@ vlib_buffer_free_inline (vlib_main_t * vm,
fl1 = pool_elt_at_index (bm->buffer_free_list_pool, fi1);
add_buffer_to_free_list (vm, fl0, bi0, free0);
- if (PREDICT_FALSE(fl0->buffers_added_to_freelist_function != 0))
- {
- int i;
- for (i = 0; i < vec_len (announce_list); i++)
- if (fl0 == announce_list[i])
- goto no_fl0;
- vec_add1(announce_list, fl0);
- }
+ if (PREDICT_FALSE (fl0->buffers_added_to_freelist_function != 0))
+ {
+ int i;
+ for (i = 0; i < vec_len (announce_list); i++)
+ if (fl0 == announce_list[i])
+ goto no_fl0;
+ vec_add1 (announce_list, fl0);
+ }
no_fl0:
- if (PREDICT_FALSE(fl1->buffers_added_to_freelist_function != 0))
- {
- int i;
- for (i = 0; i < vec_len (announce_list); i++)
- if (fl1 == announce_list[i])
- goto no_fl1;
- vec_add1(announce_list, fl1);
- }
+ if (PREDICT_FALSE (fl1->buffers_added_to_freelist_function != 0))
+ {
+ int i;
+ for (i = 0; i < vec_len (announce_list); i++)
+ if (fl1 == announce_list[i])
+ goto no_fl1;
+ vec_add1 (announce_list, fl1);
+ }
no_fl1:
add_buffer_to_free_list (vm, fl1, bi1, free1);
@@ -976,7 +986,7 @@ vlib_buffer_free_inline (vlib_main_t * vm,
while (n_left >= 1)
{
- vlib_buffer_t * b0, * binit0, dummy_buffers[1];
+ vlib_buffer_t *b0, *binit0, dummy_buffers[1];
bi0 = b[0];
f[0] = bi0;
@@ -1019,15 +1029,15 @@ vlib_buffer_free_inline (vlib_main_t * vm,
fl0 = pool_elt_at_index (bm->buffer_free_list_pool, fi0);
add_buffer_to_free_list (vm, fl0, bi0, free0);
- if (PREDICT_FALSE(fl0->buffers_added_to_freelist_function != 0))
- {
- int i;
- for (i = 0; i < vec_len (announce_list); i++)
- if (fl0 == announce_list[i])
- goto no_fl00;
- vec_add1(announce_list, fl0);
- }
-
+ if (PREDICT_FALSE (fl0->buffers_added_to_freelist_function != 0))
+ {
+ int i;
+ for (i = 0; i < vec_len (announce_list); i++)
+ if (fl0 == announce_list[i])
+ goto no_fl00;
+ vec_add1 (announce_list, fl0);
+ }
+
no_fl00:
fi = fi0;
fl = pool_elt_at_index (bm->buffer_free_list_pool, fi);
@@ -1045,62 +1055,63 @@ vlib_buffer_free_inline (vlib_main_t * vm,
_vec_len (fl->aligned_buffers) = f - fl->aligned_buffers;
- if (vec_len(announce_list))
+ if (vec_len (announce_list))
{
- vlib_buffer_free_list_t * fl;
+ vlib_buffer_free_list_t *fl;
for (i = 0; i < vec_len (announce_list); i++)
- {
- fl = announce_list[i];
- fl->buffers_added_to_freelist_function (vm, fl);
- }
- _vec_len(announce_list) = 0;
+ {
+ fl = announce_list[i];
+ fl->buffers_added_to_freelist_function (vm, fl);
+ }
+ _vec_len (announce_list) = 0;
}
}
-void vlib_buffer_free (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers)
+void
+vlib_buffer_free (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
{
- vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */ 1);
+ vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */
+ 1);
}
-void vlib_buffer_free_no_next (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers)
+void
+vlib_buffer_free_no_next (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
{
- vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */ 0);
+ vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */
+ 0);
}
/* Copy template packet data into buffers as they are allocated. */
static void
vlib_packet_template_buffer_init (vlib_main_t * vm,
vlib_buffer_free_list_t * fl,
- u32 * buffers,
- u32 n_buffers)
+ u32 * buffers, u32 n_buffers)
{
- vlib_packet_template_t * t = uword_to_pointer (fl->buffer_init_function_opaque,
- vlib_packet_template_t *);
+ vlib_packet_template_t *t =
+ uword_to_pointer (fl->buffer_init_function_opaque,
+ vlib_packet_template_t *);
uword i;
for (i = 0; i < n_buffers; i++)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, buffers[i]);
+ vlib_buffer_t *b = vlib_get_buffer (vm, buffers[i]);
ASSERT (b->current_length == vec_len (t->packet_data));
- clib_memcpy (vlib_buffer_get_current (b), t->packet_data, b->current_length);
+ clib_memcpy (vlib_buffer_get_current (b), t->packet_data,
+ b->current_length);
}
}
-void vlib_packet_template_init (vlib_main_t * vm,
- vlib_packet_template_t * t,
- void * packet_data,
- uword n_packet_data_bytes,
- uword min_n_buffers_each_physmem_alloc,
- char * fmt,
- ...)
+void
+vlib_packet_template_init (vlib_main_t * vm,
+ vlib_packet_template_t * t,
+ void *packet_data,
+ uword n_packet_data_bytes,
+ uword min_n_buffers_each_physmem_alloc,
+ char *fmt, ...)
{
- vlib_buffer_free_list_t * fl;
+ vlib_buffer_free_list_t *fl;
va_list va;
- u8 * name;
+ u8 *name;
va_start (va, fmt);
name = va_format (0, fmt, &va);
@@ -1130,12 +1141,11 @@ void vlib_packet_template_init (vlib_main_t * vm,
}
void *
-vlib_packet_template_get_packet (vlib_main_t * vm,
- vlib_packet_template_t * t,
- u32 * bi_result)
+vlib_packet_template_get_packet (vlib_main_t * vm,
+ vlib_packet_template_t * t, u32 * bi_result)
{
u32 bi;
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
if (vlib_buffer_alloc (vm, &bi, 1) != 1)
return 0;
@@ -1144,13 +1154,15 @@ vlib_packet_template_get_packet (vlib_main_t * vm,
b = vlib_get_buffer (vm, bi);
clib_memcpy (vlib_buffer_get_current (b),
- t->packet_data, vec_len(t->packet_data));
- b->current_length = vec_len(t->packet_data);
+ t->packet_data, vec_len (t->packet_data));
+ b->current_length = vec_len (t->packet_data);
return b->data;
}
-void vlib_packet_template_get_packet_helper (vlib_main_t * vm, vlib_packet_template_t * t)
+void
+vlib_packet_template_get_packet_helper (vlib_main_t * vm,
+ vlib_packet_template_t * t)
{
word n = t->min_n_buffers_each_physmem_alloc;
word l = vec_len (t->packet_data);
@@ -1166,14 +1178,14 @@ void vlib_packet_template_get_packet_helper (vlib_main_t * vm, vlib_packet_templ
}
/* Append given data to end of buffer, possibly allocating new buffers. */
-u32 vlib_buffer_add_data (vlib_main_t * vm,
- u32 free_list_index,
- u32 buffer_index,
- void * data, u32 n_data_bytes)
+u32
+vlib_buffer_add_data (vlib_main_t * vm,
+ u32 free_list_index,
+ u32 buffer_index, void *data, u32 n_data_bytes)
{
u32 n_buffer_bytes, n_left, n_left_this_buffer, bi;
- vlib_buffer_t * b;
- void * d;
+ vlib_buffer_t *b;
+ void *d;
bi = buffer_index;
if (bi == 0
@@ -1183,11 +1195,11 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
d = data;
n_left = n_data_bytes;
n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, free_list_index);
-
+
b = vlib_get_buffer (vm, bi);
b->flags &= ~VLIB_BUFFER_TOTAL_LENGTH_VALID;
- /* Get to the end of the chain before we try to append data...*/
+ /* Get to the end of the chain before we try to append data... */
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
b = vlib_get_buffer (vm, b->next_buffer);
@@ -1196,7 +1208,8 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
u32 n;
ASSERT (n_buffer_bytes >= b->current_length);
- n_left_this_buffer = n_buffer_bytes - (b->current_data + b->current_length);
+ n_left_this_buffer =
+ n_buffer_bytes - (b->current_data + b->current_length);
n = clib_min (n_left_this_buffer, n_left);
clib_memcpy (vlib_buffer_get_current (b) + b->current_length, d, n);
b->current_length += n;
@@ -1205,7 +1218,9 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
break;
d += n;
- if (1 != vlib_buffer_alloc_from_free_list (vm, &b->next_buffer, 1, free_list_index))
+ if (1 !=
+ vlib_buffer_alloc_from_free_list (vm, &b->next_buffer, 1,
+ free_list_index))
goto out_of_buffers;
b->flags |= VLIB_BUFFER_NEXT_PRESENT;
@@ -1215,68 +1230,81 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
return bi;
- out_of_buffers:
+out_of_buffers:
clib_error ("out of buffers");
return bi;
}
u16
-vlib_buffer_chain_append_data_with_alloc(vlib_main_t *vm,
- u32 free_list_index,
- vlib_buffer_t *first,
- vlib_buffer_t **last,
- void * data, u16 data_len) {
+vlib_buffer_chain_append_data_with_alloc (vlib_main_t * vm,
+ u32 free_list_index,
+ vlib_buffer_t * first,
+ vlib_buffer_t ** last,
+ void *data, u16 data_len)
+{
vlib_buffer_t *l = *last;
- u32 n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, free_list_index);
+ u32 n_buffer_bytes =
+ vlib_buffer_free_list_buffer_size (vm, free_list_index);
u16 copied = 0;
- ASSERT(n_buffer_bytes >= l->current_length + l->current_data);
- while (data_len) {
- u16 max = n_buffer_bytes - l->current_length - l->current_data;
- if (max == 0) {
- if (1 != vlib_buffer_alloc_from_free_list (vm, &l->next_buffer, 1, free_list_index))
- return copied;
- *last = l = vlib_buffer_chain_buffer(vm, first, l, l->next_buffer);
- max = n_buffer_bytes - l->current_length - l->current_data;
- }
+ ASSERT (n_buffer_bytes >= l->current_length + l->current_data);
+ while (data_len)
+ {
+ u16 max = n_buffer_bytes - l->current_length - l->current_data;
+ if (max == 0)
+ {
+ if (1 !=
+ vlib_buffer_alloc_from_free_list (vm, &l->next_buffer, 1,
+ free_list_index))
+ return copied;
+ *last = l = vlib_buffer_chain_buffer (vm, first, l, l->next_buffer);
+ max = n_buffer_bytes - l->current_length - l->current_data;
+ }
- u16 len = (data_len > max)?max:data_len;
- clib_memcpy(vlib_buffer_get_current (l) + l->current_length, data + copied, len);
- vlib_buffer_chain_increase_length(first, l, len);
- data_len -= len;
- copied += len;
- }
+ u16 len = (data_len > max) ? max : data_len;
+ clib_memcpy (vlib_buffer_get_current (l) + l->current_length,
+ data + copied, len);
+ vlib_buffer_chain_increase_length (first, l, len);
+ data_len -= len;
+ copied += len;
+ }
return copied;
}
/*
* Fills in the required rte_mbuf fields for chained buffers given a VLIB chain.
*/
-void vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * b_first)
+void
+vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * b_first)
{
return;
}
-static void vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t * s)
+static void
+vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t * s)
{
- vlib_main_t * vm;
- vlib_serialize_buffer_main_t * sm;
+ vlib_main_t *vm;
+ vlib_serialize_buffer_main_t *sm;
uword n, n_bytes_to_write;
- vlib_buffer_t * last;
+ vlib_buffer_t *last;
n_bytes_to_write = s->current_buffer_index;
- sm = uword_to_pointer (s->data_function_opaque, vlib_serialize_buffer_main_t *);
+ sm =
+ uword_to_pointer (s->data_function_opaque,
+ vlib_serialize_buffer_main_t *);
vm = sm->vlib_main;
ASSERT (sm->tx.max_n_data_bytes_per_chain > 0);
if (serialize_stream_is_end_of_stream (s)
- || sm->tx.n_total_data_bytes + n_bytes_to_write > sm->tx.max_n_data_bytes_per_chain)
+ || sm->tx.n_total_data_bytes + n_bytes_to_write >
+ sm->tx.max_n_data_bytes_per_chain)
{
- vlib_process_t * p = vlib_get_current_process (vm);
+ vlib_process_t *p = vlib_get_current_process (vm);
last = vlib_get_buffer (vm, sm->last_buffer);
last->current_length = n_bytes_to_write;
- vlib_set_next_frame_buffer (vm, &p->node_runtime, sm->tx.next_index, sm->first_buffer);
+ vlib_set_next_frame_buffer (vm, &p->node_runtime, sm->tx.next_index,
+ sm->first_buffer);
sm->first_buffer = sm->last_buffer = ~0;
sm->tx.n_total_data_bytes = 0;
@@ -1286,19 +1314,28 @@ static void vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t *
{
ASSERT (sm->first_buffer == ~0);
ASSERT (sm->last_buffer == ~0);
- n = vlib_buffer_alloc_from_free_list (vm, &sm->first_buffer, 1, sm->tx.free_list_index);
+ n =
+ vlib_buffer_alloc_from_free_list (vm, &sm->first_buffer, 1,
+ sm->tx.free_list_index);
if (n != 1)
- serialize_error (m, clib_error_create ("vlib_buffer_alloc_from_free_list fails"));
+ serialize_error (m,
+ clib_error_create
+ ("vlib_buffer_alloc_from_free_list fails"));
sm->last_buffer = sm->first_buffer;
- s->n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, sm->tx.free_list_index);
+ s->n_buffer_bytes =
+ vlib_buffer_free_list_buffer_size (vm, sm->tx.free_list_index);
}
if (n_bytes_to_write > 0)
{
- vlib_buffer_t * prev = vlib_get_buffer (vm, sm->last_buffer);
- n = vlib_buffer_alloc_from_free_list (vm, &sm->last_buffer, 1, sm->tx.free_list_index);
+ vlib_buffer_t *prev = vlib_get_buffer (vm, sm->last_buffer);
+ n =
+ vlib_buffer_alloc_from_free_list (vm, &sm->last_buffer, 1,
+ sm->tx.free_list_index);
if (n != 1)
- serialize_error (m, clib_error_create ("vlib_buffer_alloc_from_free_list fails"));
+ serialize_error (m,
+ clib_error_create
+ ("vlib_buffer_alloc_from_free_list fails"));
sm->tx.n_total_data_bytes += n_bytes_to_write;
prev->current_length = n_bytes_to_write;
prev->next_buffer = sm->last_buffer;
@@ -1314,13 +1351,16 @@ static void vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t *
}
}
-static void vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t * s)
+static void
+vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t * s)
{
- vlib_main_t * vm;
- vlib_serialize_buffer_main_t * sm;
- vlib_buffer_t * last;
+ vlib_main_t *vm;
+ vlib_serialize_buffer_main_t *sm;
+ vlib_buffer_t *last;
- sm = uword_to_pointer (s->data_function_opaque, vlib_serialize_buffer_main_t *);
+ sm =
+ uword_to_pointer (s->data_function_opaque,
+ vlib_serialize_buffer_main_t *);
vm = sm->vlib_main;
if (serialize_stream_is_end_of_stream (s))
@@ -1343,8 +1383,11 @@ static void vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t *
{
while (clib_fifo_elts (sm->rx.buffer_fifo) == 0)
{
- sm->rx.ready_one_time_event = vlib_process_create_one_time_event (vm, vlib_current_process (vm), ~0);
- vlib_process_wait_for_one_time_event (vm, /* no event data */ 0, sm->rx.ready_one_time_event);
+ sm->rx.ready_one_time_event =
+ vlib_process_create_one_time_event (vm, vlib_current_process (vm),
+ ~0);
+ vlib_process_wait_for_one_time_event (vm, /* no event data */ 0,
+ sm->rx.ready_one_time_event);
}
clib_fifo_sub1 (sm->rx.buffer_fifo, sm->first_buffer);
@@ -1362,12 +1405,11 @@ static void vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t *
static void
serialize_open_vlib_helper (serialize_main_t * m,
vlib_main_t * vm,
- vlib_serialize_buffer_main_t * sm,
- uword is_read)
+ vlib_serialize_buffer_main_t * sm, uword is_read)
{
/* Initialize serialize main but save overflow buffer for re-use between calls. */
{
- u8 * save = m->stream.overflow_buffer;
+ u8 *save = m->stream.overflow_buffer;
memset (m, 0, sizeof (m[0]));
m->stream.overflow_buffer = save;
if (save)
@@ -1384,18 +1426,28 @@ serialize_open_vlib_helper (serialize_main_t * m,
m->stream.data_function_opaque = pointer_to_uword (sm);
}
-void serialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm, vlib_serialize_buffer_main_t * sm)
-{ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 0); }
+void
+serialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm,
+ vlib_serialize_buffer_main_t * sm)
+{
+ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 0);
+}
-void unserialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm, vlib_serialize_buffer_main_t * sm)
-{ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 1); }
+void
+unserialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm,
+ vlib_serialize_buffer_main_t * sm)
+{
+ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 1);
+}
-u32 serialize_close_vlib_buffer (serialize_main_t * m)
+u32
+serialize_close_vlib_buffer (serialize_main_t * m)
{
- vlib_serialize_buffer_main_t * sm
- = uword_to_pointer (m->stream.data_function_opaque, vlib_serialize_buffer_main_t *);
- vlib_buffer_t * last;
- serialize_stream_t * s = &m->stream;
+ vlib_serialize_buffer_main_t *sm
+ = uword_to_pointer (m->stream.data_function_opaque,
+ vlib_serialize_buffer_main_t *);
+ vlib_buffer_t *last;
+ serialize_stream_t *s = &m->stream;
last = vlib_get_buffer (sm->vlib_main, sm->last_buffer);
last->current_length = s->current_buffer_index;
@@ -1413,10 +1465,12 @@ u32 serialize_close_vlib_buffer (serialize_main_t * m)
return sm->first_buffer;
}
-void unserialize_close_vlib_buffer (serialize_main_t * m)
+void
+unserialize_close_vlib_buffer (serialize_main_t * m)
{
- vlib_serialize_buffer_main_t * sm
- = uword_to_pointer (m->stream.data_function_opaque, vlib_serialize_buffer_main_t *);
+ vlib_serialize_buffer_main_t *sm
+ = uword_to_pointer (m->stream.data_function_opaque,
+ vlib_serialize_buffer_main_t *);
if (sm->first_buffer != ~0)
vlib_buffer_free_one (sm->vlib_main, sm->first_buffer);
clib_fifo_reset (sm->rx.buffer_fifo);
@@ -1424,14 +1478,16 @@ void unserialize_close_vlib_buffer (serialize_main_t * m)
_vec_len (m->stream.overflow_buffer) = 0;
}
-static u8 * format_vlib_buffer_free_list (u8 * s, va_list * va)
+static u8 *
+format_vlib_buffer_free_list (u8 * s, va_list * va)
{
- vlib_buffer_free_list_t * f = va_arg (*va, vlib_buffer_free_list_t *);
+ vlib_buffer_free_list_t *f = va_arg (*va, vlib_buffer_free_list_t *);
uword bytes_alloc, bytes_free, n_free, size;
- if (! f)
+ if (!f)
return format (s, "%=30s%=12s%=12s%=12s%=12s%=12s%=12s",
- "Name", "Index", "Size", "Alloc", "Free", "#Alloc", "#Free");
+ "Name", "Index", "Size", "Alloc", "Free", "#Alloc",
+ "#Free");
size = sizeof (vlib_buffer_t) + f->n_data_bytes;
n_free = vec_len (f->aligned_buffers) + vec_len (f->unaligned_buffers);
@@ -1441,30 +1497,40 @@ static u8 * format_vlib_buffer_free_list (u8 * s, va_list * va)
s = format (s, "%30s%12d%12d%=12U%=12U%=12d%=12d",
f->name, f->index, f->n_data_bytes,
format_memory_size, bytes_alloc,
- format_memory_size, bytes_free,
- f->n_alloc, n_free);
+ format_memory_size, bytes_free, f->n_alloc, n_free);
return s;
}
static clib_error_t *
show_buffers (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
vlib_cli_output (vm, "%U", format_vlib_buffer_free_list, 0);
+ /* *INDENT-OFF* */
pool_foreach (f, bm->buffer_free_list_pool, ({
vlib_cli_output (vm, "%U", format_vlib_buffer_free_list, f);
}));
+/* *INDENT-ON* */
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_buffers_command, static) = {
.path = "show buffers",
.short_help = "Show packet buffer allocation",
.function = show_buffers,
};
+/* *INDENT-ON* */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/buffer.h b/vlib/vlib/buffer.h
index bc799bc6223..e47554660ed 100644
--- a/vlib/vlib/buffer.h
+++ b/vlib/vlib/buffer.h
@@ -51,7 +51,7 @@
#define VLIB_BUFFER_DATA_SIZE (2048)
#define VLIB_BUFFER_PRE_DATA_SIZE RTE_PKTMBUF_HEADROOM
#else
-#include <vlib/config.h> /* for __PRE_DATA_SIZE */
+#include <vlib/config.h> /* for __PRE_DATA_SIZE */
#define VLIB_BUFFER_DATA_SIZE (512)
#define VLIB_BUFFER_PRE_DATA_SIZE __PRE_DATA_SIZE
#endif
@@ -65,23 +65,24 @@ typedef u64 vlib_copy_unit_t;
/** \file
vlib buffer structure definition and a few select
access methods. This structure and the buffer allocation
- mechanism should perhaps live in vnet, but it would take a lot
+ mechanism should perhaps live in vnet, but it would take a lot
of typing to make it so.
*/
-
+
/* VLIB buffer representation. */
-typedef struct {
- CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
+typedef struct
+{
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
/* Offset within data[] that we are currently processing.
- If negative current header points into predata area. */
- i16 current_data; /**< signed offset in data[], pre_data[]
+ If negative current header points into predata area. */
+ i16 current_data; /**< signed offset in data[], pre_data[]
that we are currently processing.
If negative current header points into predata area.
*/
- u16 current_length; /**< Nbytes between current data and
+ u16 current_length; /**< Nbytes between current data and
the end of this buffer.
*/
- u32 flags; /**< buffer flags:
+ u32 flags; /**< buffer flags:
<br> VLIB_BUFFER_IS_TRACED: trace this buffer.
<br> VLIB_BUFFER_NEXT_PRESENT: this is a multi-chunk buffer.
<br> VLIB_BUFFER_TOTAL_LENGTH_VALID: as it says
@@ -91,31 +92,31 @@ typedef struct {
*/
#define VLIB_BUFFER_IS_TRACED (1 << 0)
#define VLIB_BUFFER_LOG2_NEXT_PRESENT (1)
-#define VLIB_BUFFER_NEXT_PRESENT (1 << VLIB_BUFFER_LOG2_NEXT_PRESENT)
-#define VLIB_BUFFER_IS_RECYCLED (1 << 2)
+#define VLIB_BUFFER_NEXT_PRESENT (1 << VLIB_BUFFER_LOG2_NEXT_PRESENT)
+#define VLIB_BUFFER_IS_RECYCLED (1 << 2)
#define VLIB_BUFFER_TOTAL_LENGTH_VALID (1 << 3)
-#define VLIB_BUFFER_REPL_FAIL (1 << 4)
+#define VLIB_BUFFER_REPL_FAIL (1 << 4)
#define VLIB_BUFFER_RECYCLE (1 << 5)
/* User defined buffer flags. */
#define LOG2_VLIB_BUFFER_FLAG_USER(n) (32 - (n))
#define VLIB_BUFFER_FLAG_USER(n) (1 << LOG2_VLIB_BUFFER_FLAG_USER(n))
- u32 free_list_index; /**< Buffer free list that this buffer was
- allocated from and will be freed to.
+ u32 free_list_index; /**< Buffer free list that this buffer was
+ allocated from and will be freed to.
*/
- u32 total_length_not_including_first_buffer;
+ u32 total_length_not_including_first_buffer;
/**< Only valid for first buffer in chain. Current length plus
total length given here give total number of bytes in buffer chain.
*/
u32 next_buffer; /**< Next buffer for this linked-list of buffers.
- Only valid if VLIB_BUFFER_NEXT_PRESENT flag is set.
+ Only valid if VLIB_BUFFER_NEXT_PRESENT flag is set.
*/
- vlib_error_t error; /**< Error code for buffers to be enqueued
- to error handler.
+ vlib_error_t error; /**< Error code for buffers to be enqueued
+ to error handler.
*/
u32 current_config_index; /**< Used by feature subgraph arcs to
visit enabled feature nodes
@@ -126,20 +127,20 @@ typedef struct {
Before allocating any of it, discussion required!
*/
- u32 opaque[8]; /**< Opaque data used by sub-graphs for their own purposes.
+ u32 opaque[8]; /**< Opaque data used by sub-graphs for their own purposes.
See .../vnet/vnet/buffer.h
*/
- CLIB_CACHE_LINE_ALIGN_MARK(cacheline1);
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline1);
- u32 trace_index; /**< Specifies index into trace buffer
- if VLIB_PACKET_IS_TRACED flag is set.
+ u32 trace_index; /**< Specifies index into trace buffer
+ if VLIB_PACKET_IS_TRACED flag is set.
*/
u32 recycle_count; /**< Used by L2 path recycle code */
u32 opaque2[14]; /**< More opaque data, currently unused */
/***** end of second cache line */
- CLIB_CACHE_LINE_ALIGN_MARK(cacheline2);
- u8 pre_data [VLIB_BUFFER_PRE_DATA_SIZE]; /**< Space for inserting data
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline2);
+ u8 pre_data[VLIB_BUFFER_PRE_DATA_SIZE]; /**< Space for inserting data
before buffer start.
Packet rewrite string will be
rewritten backwards and may extend
@@ -148,7 +149,7 @@ typedef struct {
*/
u8 data[0]; /**< Packet data. Hardware DMA here */
-} vlib_buffer_t; /* Must be a multiple of 64B. */
+} vlib_buffer_t; /* Must be a multiple of 64B. */
#define VLIB_BUFFER_HDR_SIZE (sizeof(vlib_buffer_t) - VLIB_BUFFER_PRE_DATA_SIZE)
@@ -163,7 +164,9 @@ typedef struct {
always_inline vlib_buffer_t *
vlib_buffer_next_contiguous (vlib_buffer_t * b, u32 buffer_bytes)
-{ return (void *) (b + 1) + buffer_bytes; }
+{
+ return (void *) (b + 1) + buffer_bytes;
+}
always_inline void
vlib_buffer_struct_is_sane (vlib_buffer_t * b)
@@ -178,7 +181,7 @@ vlib_buffer_struct_is_sane (vlib_buffer_t * b)
@param b - (vlib_buffer_t *) pointer to the buffer
@return - (void *) (b->data + b->current_data)
-*/
+*/
always_inline void *
vlib_buffer_get_current (vlib_buffer_t * b)
@@ -192,7 +195,7 @@ vlib_buffer_get_current (vlib_buffer_t * b)
@param b - (vlib_buffer_t *) pointer to the buffer
@param l - (word) signed increment
-*/
+*/
always_inline void
vlib_buffer_advance (vlib_buffer_t * b, word l)
{
@@ -221,7 +224,9 @@ vlib_buffer_reset (vlib_buffer_t * b)
*/
always_inline void *
vlib_get_buffer_opaque (vlib_buffer_t * b)
-{ return (void *) b->opaque; }
+{
+ return (void *) b->opaque;
+}
/** \brief Get pointer to buffer's opaque2 data array
@@ -230,12 +235,15 @@ vlib_get_buffer_opaque (vlib_buffer_t * b)
*/
always_inline void *
vlib_get_buffer_opaque2 (vlib_buffer_t * b)
-{ return (void *) b->opaque2; }
+{
+ return (void *) b->opaque2;
+}
/* Forward declaration. */
struct vlib_main_t;
-typedef struct vlib_buffer_free_list_t {
+typedef struct vlib_buffer_free_list_t
+{
/* Template buffer used to initialize first 16 bytes of buffers
allocated on this free list. */
vlib_buffer_t buffer_init_template;
@@ -257,76 +265,78 @@ typedef struct vlib_buffer_free_list_t {
Aligned vectors always has naturally aligned vlib_copy_unit_t sized chunks
of buffer indices. Unaligned vector has any left over. This is meant to
speed up copy routines. */
- u32 * aligned_buffers, * unaligned_buffers;
+ u32 *aligned_buffers, *unaligned_buffers;
/* Memory chunks allocated for this free list
recorded here so they can be freed when free list
is deleted. */
- void ** buffer_memory_allocated;
+ void **buffer_memory_allocated;
/* Free list name. */
- u8 * name;
+ u8 *name;
/* Callback functions to initialize newly allocated buffers.
If null buffers are zeroed. */
- void (* buffer_init_function) (struct vlib_main_t * vm,
- struct vlib_buffer_free_list_t * fl,
- u32 * buffers, u32 n_buffers);
+ void (*buffer_init_function) (struct vlib_main_t * vm,
+ struct vlib_buffer_free_list_t * fl,
+ u32 * buffers, u32 n_buffers);
/* Callback function to announce that buffers have been
added to the freelist */
- void (* buffers_added_to_freelist_function)
- (struct vlib_main_t * vm,
- struct vlib_buffer_free_list_t * fl);
+ void (*buffers_added_to_freelist_function)
+ (struct vlib_main_t * vm, struct vlib_buffer_free_list_t * fl);
uword buffer_init_function_opaque;
} __attribute__ ((aligned (16))) vlib_buffer_free_list_t;
-typedef struct {
+typedef struct
+{
/* Buffer free callback, for subversive activities */
- u32 (*buffer_free_callback) (struct vlib_main_t *vm,
- u32 * buffers,
- u32 n_buffers,
- u32 follow_buffer_next);
+ u32 (*buffer_free_callback) (struct vlib_main_t * vm,
+ u32 * buffers,
+ u32 n_buffers, u32 follow_buffer_next);
/* Pool of buffer free lists.
Multiple free lists exist for packet generator which uses
separate free lists for each packet stream --- so as to avoid
initializing static data for each packet generated. */
- vlib_buffer_free_list_t * buffer_free_list_pool;
+ vlib_buffer_free_list_t *buffer_free_list_pool;
#define VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX (0)
#define VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES VLIB_BUFFER_DATA_SIZE
/* Hash table mapping buffer size (rounded to next unit of
sizeof (vlib_buffer_t)) to free list index. */
- uword * free_list_by_size;
+ uword *free_list_by_size;
/* Hash table mapping buffer index into number
0 => allocated but free, 1 => allocated and not-free.
If buffer index is not in hash table then this buffer
has never been allocated. */
- uword * buffer_known_hash;
+ uword *buffer_known_hash;
/* List of free-lists needing Blue Light Special announcements */
vlib_buffer_free_list_t **announce_list;
/* Vector of rte_mempools per socket */
#if DPDK == 1
- struct rte_mempool ** pktmbuf_pools;
+ struct rte_mempool **pktmbuf_pools;
#endif
} vlib_buffer_main_t;
-typedef struct {
- struct vlib_main_t * vlib_main;
+typedef struct
+{
+ struct vlib_main_t *vlib_main;
u32 first_buffer, last_buffer;
- union {
- struct {
+ union
+ {
+ struct
+ {
/* Total accumulated bytes in chain starting with first_buffer. */
u32 n_total_data_bytes;
/* Max number of bytes to accumulate in chain starting with first_buffer.
- As this limit is reached buffers are enqueued to next node. */
+ As this limit is reached buffers are enqueued to next node. */
u32 max_n_data_bytes_per_chain;
/* Next node to enqueue buffers to relative to current process node. */
@@ -336,9 +346,10 @@ typedef struct {
u32 free_list_index;
} tx;
- struct {
+ struct
+ {
/* CLIB fifo of buffer indices waiting to be unserialized. */
- u32 * buffer_fifo;
+ u32 *buffer_fifo;
/* Event type used to signal that RX buffers have been added to fifo. */
uword ready_one_time_event;
@@ -346,8 +357,11 @@ typedef struct {
};
} vlib_serialize_buffer_main_t;
-void serialize_open_vlib_buffer (serialize_main_t * m, struct vlib_main_t * vm, vlib_serialize_buffer_main_t * sm);
-void unserialize_open_vlib_buffer (serialize_main_t * m, struct vlib_main_t * vm, vlib_serialize_buffer_main_t * sm);
+void serialize_open_vlib_buffer (serialize_main_t * m, struct vlib_main_t *vm,
+ vlib_serialize_buffer_main_t * sm);
+void unserialize_open_vlib_buffer (serialize_main_t * m,
+ struct vlib_main_t *vm,
+ vlib_serialize_buffer_main_t * sm);
u32 serialize_close_vlib_buffer (serialize_main_t * m);
void unserialize_close_vlib_buffer (serialize_main_t * m);
@@ -356,10 +370,12 @@ void *vlib_set_buffer_free_callback (struct vlib_main_t *vm, void *fp);
always_inline u32
serialize_vlib_buffer_n_bytes (serialize_main_t * m)
{
- serialize_stream_t * s = &m->stream;
- vlib_serialize_buffer_main_t * sm
- = uword_to_pointer (m->stream.data_function_opaque, vlib_serialize_buffer_main_t *);
- return sm->tx.n_total_data_bytes + s->current_buffer_index + vec_len (s->overflow_buffer);
+ serialize_stream_t *s = &m->stream;
+ vlib_serialize_buffer_main_t *sm
+ = uword_to_pointer (m->stream.data_function_opaque,
+ vlib_serialize_buffer_main_t *);
+ return sm->tx.n_total_data_bytes + s->current_buffer_index +
+ vec_len (s->overflow_buffer);
}
#if DPDK > 0
@@ -371,16 +387,24 @@ serialize_vlib_buffer_n_bytes (serialize_main_t * m)
*/
/** \brief Compile time buffer trajectory tracing option
- Turn this on if you run into "bad monkey" contexts,
- and you want to know exactly which nodes they've visited...
+ Turn this on if you run into "bad monkey" contexts,
+ and you want to know exactly which nodes they've visited...
See vlib/main.c...
*/
#define VLIB_BUFFER_TRACE_TRAJECTORY 0
#if VLIB_BUFFER_TRACE_TRAJECTORY > 0
#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b) (b)->pre_data[0]=0
-#else
+#else
#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b)
#endif /* VLIB_BUFFER_TRACE_TRAJECTORY */
#endif /* included_vlib_buffer_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/buffer_funcs.h b/vlib/vlib/buffer_funcs.h
index d3ad89eb5e1..8b80be16053 100644
--- a/vlib/vlib/buffer_funcs.h
+++ b/vlib/vlib/buffer_funcs.h
@@ -43,7 +43,7 @@
#include <vppinfra/hash.h>
#if DPDK == 1
-#undef always_inline // dpdk and clib use conflicting always_inline macros.
+#undef always_inline // dpdk and clib use conflicting always_inline macros.
#include <rte_config.h>
#include <rte_mbuf.h>
@@ -64,12 +64,12 @@
@param vm - (vlib_main_t *) vlib main data structure pointer
@param buffer_index - (u32) buffer index
@return - (vlib_buffer_t *) buffer pointer
-*/
+*/
always_inline vlib_buffer_t *
vlib_get_buffer (vlib_main_t * vm, u32 buffer_index)
{
- return vlib_physmem_at_offset (&vm->physmem_main, ((uword)buffer_index)
- << CLIB_LOG2_CACHE_LINE_BYTES);
+ return vlib_physmem_at_offset (&vm->physmem_main, ((uword) buffer_index)
+ << CLIB_LOG2_CACHE_LINE_BYTES);
}
/** \brief Translate buffer pointer into buffer index
@@ -77,12 +77,12 @@ vlib_get_buffer (vlib_main_t * vm, u32 buffer_index)
@param vm - (vlib_main_t *) vlib main data structure pointer
@param b - (void *) buffer pointer
@return - (u32) buffer index
-*/
+*/
always_inline u32
-vlib_get_buffer_index (vlib_main_t * vm, void * p)
+vlib_get_buffer_index (vlib_main_t * vm, void *p)
{
uword offset = vlib_physmem_offset_of (&vm->physmem_main, p);
- ASSERT((offset % (1<<CLIB_LOG2_CACHE_LINE_BYTES)) == 0);
+ ASSERT ((offset % (1 << CLIB_LOG2_CACHE_LINE_BYTES)) == 0);
return offset >> CLIB_LOG2_CACHE_LINE_BYTES;
}
@@ -91,23 +91,23 @@ vlib_get_buffer_index (vlib_main_t * vm, void * p)
@param vm - (vlib_main_t *) vlib main data structure pointer
@param b - (void *) buffer pointer
@return - (vlib_buffer_t *) next buffer, or NULL
-*/
+*/
always_inline vlib_buffer_t *
vlib_get_next_buffer (vlib_main_t * vm, vlib_buffer_t * b)
{
return (b->flags & VLIB_BUFFER_NEXT_PRESENT
- ? vlib_get_buffer (vm, b->next_buffer)
- : 0);
+ ? vlib_get_buffer (vm, b->next_buffer) : 0);
}
-uword vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm, vlib_buffer_t * b_first);
+uword vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm,
+ vlib_buffer_t * b_first);
/** \brief Get length in bytes of the buffer chain
@param vm - (vlib_main_t *) vlib main data structure pointer
@param b - (void *) buffer pointer
@return - (uword) length of buffer chain
-*/
+*/
always_inline uword
vlib_buffer_length_in_chain (vlib_main_t * vm, vlib_buffer_t * b)
{
@@ -124,11 +124,11 @@ vlib_buffer_length_in_chain (vlib_main_t * vm, vlib_buffer_t * b)
@param vm - (vlib_main_t *) vlib main data structure pointer
@param bi - (u32) buffer index
@return - (uword) length of buffer chain
-*/
+*/
always_inline uword
vlib_buffer_index_length_in_chain (vlib_main_t * vm, u32 bi)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, bi);
+ vlib_buffer_t *b = vlib_get_buffer (vm, bi);
return vlib_buffer_length_in_chain (vm, b);
}
@@ -138,13 +138,13 @@ vlib_buffer_index_length_in_chain (vlib_main_t * vm, u32 bi)
@param bi - (u32) buffer index
@param contents - (u8 *) memory, <strong>must be large enough</strong>
@return - (uword) length of buffer chain
-*/
+*/
always_inline uword
vlib_buffer_contents (vlib_main_t * vm, u32 buffer_index, u8 * contents)
{
uword content_len = 0;
uword l;
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
while (1)
{
@@ -152,7 +152,7 @@ vlib_buffer_contents (vlib_main_t * vm, u32 buffer_index, u8 * contents)
l = b->current_length;
clib_memcpy (contents + content_len, b->data + b->current_data, l);
content_len += l;
- if (! (b->flags & VLIB_BUFFER_NEXT_PRESENT))
+ if (!(b->flags & VLIB_BUFFER_NEXT_PRESENT))
break;
buffer_index = b->next_buffer;
}
@@ -165,9 +165,10 @@ always_inline u64
vlib_get_buffer_data_physical_address (vlib_main_t * vm, u32 buffer_index)
{
return vlib_physmem_offset_to_physical (&vm->physmem_main,
- (((uword)buffer_index) <<
+ (((uword) buffer_index) <<
CLIB_LOG2_CACHE_LINE_BYTES) +
- STRUCT_OFFSET_OF (vlib_buffer_t, data));
+ STRUCT_OFFSET_OF (vlib_buffer_t,
+ data));
}
/** \brief Prefetch buffer metadata by buffer index
@@ -208,7 +209,8 @@ do { \
#if DPDK == 0
-typedef enum {
+typedef enum
+{
/* Index is unknown. */
VLIB_BUFFER_UNKNOWN,
@@ -220,10 +222,10 @@ typedef enum {
always_inline vlib_buffer_known_state_t
vlib_buffer_is_known (vlib_main_t * vm, u32 buffer_index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- ASSERT(os_get_cpu_number() == 0);
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ ASSERT (os_get_cpu_number () == 0);
- uword * p = hash_get (bm->buffer_known_hash, buffer_index);
+ uword *p = hash_get (bm->buffer_known_hash, buffer_index);
return p ? p[0] : VLIB_BUFFER_UNKNOWN;
}
@@ -232,55 +234,56 @@ vlib_buffer_set_known_state (vlib_main_t * vm,
u32 buffer_index,
vlib_buffer_known_state_t state)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- ASSERT(os_get_cpu_number() == 0);
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ ASSERT (os_get_cpu_number () == 0);
hash_set (bm->buffer_known_hash, buffer_index, state);
}
/* Validates sanity of a single buffer.
Returns format'ed vector with error message if any. */
-u8 * vlib_validate_buffer (vlib_main_t * vm, u32 buffer_index, uword follow_chain);
+u8 *vlib_validate_buffer (vlib_main_t * vm, u32 buffer_index,
+ uword follow_chain);
/* Validate an array of buffers. As above. */
-u8 * vlib_validate_buffers (vlib_main_t * vm,
- u32 * buffers,
- uword next_buffer_stride,
- uword n_buffers,
- vlib_buffer_known_state_t known_state,
- uword follow_chain);
+u8 *vlib_validate_buffers (vlib_main_t * vm,
+ u32 * buffers,
+ uword next_buffer_stride,
+ uword n_buffers,
+ vlib_buffer_known_state_t known_state,
+ uword follow_chain);
#endif /* DPDK == 0 */
-clib_error_t *
-vlib_buffer_pool_create(vlib_main_t * vm, unsigned num_mbufs,
- unsigned socket_id);
+clib_error_t *vlib_buffer_pool_create (vlib_main_t * vm, unsigned num_mbufs,
+ unsigned socket_id);
/** \brief Allocate buffers into supplied array
@param vm - (vlib_main_t *) vlib main data structure pointer
@param buffers - (u32 * ) buffer index array
@param n_buffers - (u32) number of buffers requested
- @return - (u32) number of buffers actually allocated, may be
+ @return - (u32) number of buffers actually allocated, may be
less than the number requested or zero
*/
u32 vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers);
always_inline u32
vlib_buffer_round_size (u32 size)
-{ return round_pow2 (size, sizeof (vlib_buffer_t)); }
+{
+ return round_pow2 (size, sizeof (vlib_buffer_t));
+}
/** \brief Allocate buffers from specific freelist into supplied array
@param vm - (vlib_main_t *) vlib main data structure pointer
@param buffers - (u32 * ) buffer index array
@param n_buffers - (u32) number of buffers requested
- @return - (u32) number of buffers actually allocated, may be
+ @return - (u32) number of buffers actually allocated, may be
less than the number requested or zero
*/
u32 vlib_buffer_alloc_from_free_list (vlib_main_t * vm,
u32 * buffers,
- u32 n_buffers,
- u32 free_list_index);
+ u32 n_buffers, u32 free_list_index);
/** \brief Free buffers
Frees the entire buffer chain for each buffer
@@ -310,7 +313,7 @@ void vlib_buffer_free_no_next (vlib_main_t * vm,
u32 n_buffers);
/** \brief Free one buffer
- Shorthand to free a single buffer chain.
+ Shorthand to free a single buffer chain.
@param vm - (vlib_main_t *) vlib main data structure pointer
@param buffer_index - (u32) buffer index to free
@@ -322,17 +325,19 @@ vlib_buffer_free_one (vlib_main_t * vm, u32 buffer_index)
}
/* Add/delete buffer free lists. */
-u32 vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes, char * fmt, ...);
+u32 vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
+ char *fmt, ...);
void vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index);
/* Find already existing public free list with given size or create one. */
-u32 vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes, char * fmt, ...);
+u32 vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
+ char *fmt, ...);
always_inline vlib_buffer_free_list_t *
vlib_buffer_get_free_list (vlib_main_t * vm, u32 free_list_index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
f = pool_elt_at_index (bm->buffer_free_list_pool, free_list_index);
@@ -345,12 +350,12 @@ vlib_buffer_get_free_list (vlib_main_t * vm, u32 free_list_index)
always_inline u32
vlib_buffer_free_list_buffer_size (vlib_main_t * vm, u32 free_list_index)
{
- vlib_buffer_free_list_t * f = vlib_buffer_get_free_list (vm, free_list_index);
+ vlib_buffer_free_list_t *f =
+ vlib_buffer_get_free_list (vm, free_list_index);
return f->n_data_bytes;
}
-void
-vlib_aligned_memcpy (void * _dst, void * _src, int n_bytes);
+void vlib_aligned_memcpy (void *_dst, void *_src, int n_bytes);
/* Reasonably fast buffer copy routine. */
always_inline void
@@ -379,9 +384,12 @@ always_inline void *
vlib_physmem_alloc_aligned (vlib_main_t * vm, clib_error_t ** error,
uword n_bytes, uword alignment)
{
- void * r = vm->os_physmem_alloc_aligned (&vm->physmem_main, n_bytes, alignment);
- if (! r)
- *error = clib_error_return (0, "failed to allocate %wd bytes of I/O memory", n_bytes);
+ void *r =
+ vm->os_physmem_alloc_aligned (&vm->physmem_main, n_bytes, alignment);
+ if (!r)
+ *error =
+ clib_error_return (0, "failed to allocate %wd bytes of I/O memory",
+ n_bytes);
else
*error = 0;
return r;
@@ -390,16 +398,21 @@ vlib_physmem_alloc_aligned (vlib_main_t * vm, clib_error_t ** error,
/* By default allocate I/O memory with cache line alignment. */
always_inline void *
vlib_physmem_alloc (vlib_main_t * vm, clib_error_t ** error, uword n_bytes)
-{ return vlib_physmem_alloc_aligned (vm, error, n_bytes, CLIB_CACHE_LINE_BYTES); }
+{
+ return vlib_physmem_alloc_aligned (vm, error, n_bytes,
+ CLIB_CACHE_LINE_BYTES);
+}
always_inline void
-vlib_physmem_free (vlib_main_t * vm, void * mem)
-{ return vm->os_physmem_free (mem); }
+vlib_physmem_free (vlib_main_t * vm, void *mem)
+{
+ return vm->os_physmem_free (mem);
+}
always_inline u64
-vlib_physmem_virtual_to_physical (vlib_main_t * vm, void * mem)
+vlib_physmem_virtual_to_physical (vlib_main_t * vm, void *mem)
{
- vlib_physmem_main_t * pm = &vm->physmem_main;
+ vlib_physmem_main_t *pm = &vm->physmem_main;
uword o = pointer_to_uword (mem) - pm->virtual.start;
return vlib_physmem_offset_to_physical (pm, o);
}
@@ -407,8 +420,7 @@ vlib_physmem_virtual_to_physical (vlib_main_t * vm, void * mem)
/* Append given data to end of buffer, possibly allocating new buffers. */
u32 vlib_buffer_add_data (vlib_main_t * vm,
u32 free_list_index,
- u32 buffer_index,
- void * data, u32 n_data_bytes);
+ u32 buffer_index, void *data, u32 n_data_bytes);
/*
* vlib_buffer_chain_* functions provide a way to create long buffers.
@@ -417,40 +429,39 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
/* Initializes the buffer as an empty packet with no chained buffers. */
always_inline void
-vlib_buffer_chain_init(vlib_buffer_t *first)
+vlib_buffer_chain_init (vlib_buffer_t * first)
{
first->total_length_not_including_first_buffer = 0;
first->current_length = 0;
first->flags &= ~VLIB_BUFFER_NEXT_PRESENT;
first->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID;
#if DPDK == 1
- struct rte_mbuf * mb = rte_mbuf_from_vlib_buffer(first);
- rte_pktmbuf_reset(mb);
+ struct rte_mbuf *mb = rte_mbuf_from_vlib_buffer (first);
+ rte_pktmbuf_reset (mb);
mb->data_off = VLIB_BUFFER_PRE_DATA_SIZE + first->current_data;
#endif
}
/* The provided next_bi buffer index is appended to the end of the packet. */
always_inline vlib_buffer_t *
-vlib_buffer_chain_buffer(vlib_main_t *vm,
- vlib_buffer_t *first,
- vlib_buffer_t *last,
- u32 next_bi)
+vlib_buffer_chain_buffer (vlib_main_t * vm,
+ vlib_buffer_t * first,
+ vlib_buffer_t * last, u32 next_bi)
{
- vlib_buffer_t *next_buffer = vlib_get_buffer(vm, next_bi);
+ vlib_buffer_t *next_buffer = vlib_get_buffer (vm, next_bi);
last->next_buffer = next_bi;
last->flags |= VLIB_BUFFER_NEXT_PRESENT;
next_buffer->current_length = 0;
next_buffer->flags &= ~VLIB_BUFFER_NEXT_PRESENT;
#if DPDK == 1
- struct rte_mbuf * mb;
- mb = rte_mbuf_from_vlib_buffer(first);
+ struct rte_mbuf *mb;
+ mb = rte_mbuf_from_vlib_buffer (first);
mb->nb_segs++;
- mb = rte_mbuf_from_vlib_buffer(last);
- mb->next = rte_mbuf_from_vlib_buffer(next_buffer);
+ mb = rte_mbuf_from_vlib_buffer (last);
+ mb->next = rte_mbuf_from_vlib_buffer (next_buffer);
- mb = rte_mbuf_from_vlib_buffer(next_buffer);
+ mb = rte_mbuf_from_vlib_buffer (next_buffer);
mb->data_len = 0;
mb->data_off = VLIB_BUFFER_PRE_DATA_SIZE + next_buffer->current_data;
mb->next = 0;
@@ -463,16 +474,15 @@ vlib_buffer_chain_buffer(vlib_main_t *vm,
* Therefore, the added length must be compatible
* with the last buffer. */
always_inline void
-vlib_buffer_chain_increase_length(vlib_buffer_t *first,
- vlib_buffer_t *last,
- i32 len)
+vlib_buffer_chain_increase_length (vlib_buffer_t * first,
+ vlib_buffer_t * last, i32 len)
{
last->current_length += len;
if (first != last)
first->total_length_not_including_first_buffer += len;
#if DPDK == 1
- struct rte_mbuf * mb_first = rte_mbuf_from_vlib_buffer(first);
- struct rte_mbuf * mb_last = rte_mbuf_from_vlib_buffer(last);
+ struct rte_mbuf *mb_first = rte_mbuf_from_vlib_buffer (first);
+ struct rte_mbuf *mb_last = rte_mbuf_from_vlib_buffer (last);
mb_first->pkt_len += len;
mb_last->data_len += len;
#endif
@@ -482,17 +492,20 @@ vlib_buffer_chain_increase_length(vlib_buffer_t *first,
* It does not allocate new buffers.
* Returns the number of copied bytes. */
always_inline u16
-vlib_buffer_chain_append_data(vlib_main_t *vm,
- u32 free_list_index,
- vlib_buffer_t *first,
- vlib_buffer_t *last,
- void *data, u16 data_len)
+vlib_buffer_chain_append_data (vlib_main_t * vm,
+ u32 free_list_index,
+ vlib_buffer_t * first,
+ vlib_buffer_t * last, void *data, u16 data_len)
{
- u32 n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, free_list_index);
- ASSERT(n_buffer_bytes >= last->current_length + last->current_data);
- u16 len = clib_min(data_len, n_buffer_bytes - last->current_length - last->current_data);
- clib_memcpy(vlib_buffer_get_current (last) + last->current_length, data, len);
- vlib_buffer_chain_increase_length(first, last, len);
+ u32 n_buffer_bytes =
+ vlib_buffer_free_list_buffer_size (vm, free_list_index);
+ ASSERT (n_buffer_bytes >= last->current_length + last->current_data);
+ u16 len = clib_min (data_len,
+ n_buffer_bytes - last->current_length -
+ last->current_data);
+ clib_memcpy (vlib_buffer_get_current (last) + last->current_length, data,
+ len);
+ vlib_buffer_chain_increase_length (first, last, len);
return len;
}
@@ -502,18 +515,20 @@ vlib_buffer_chain_append_data(vlib_main_t *vm,
* 'last' value is modified whenever new buffers are allocated and
* chained and points to the last buffer in the chain. */
u16
-vlib_buffer_chain_append_data_with_alloc(vlib_main_t *vm,
- u32 free_list_index,
- vlib_buffer_t *first,
- vlib_buffer_t **last,
- void * data, u16 data_len);
-void vlib_buffer_chain_validate(vlib_main_t *vm, vlib_buffer_t *first);
+vlib_buffer_chain_append_data_with_alloc (vlib_main_t * vm,
+ u32 free_list_index,
+ vlib_buffer_t * first,
+ vlib_buffer_t ** last,
+ void *data, u16 data_len);
+void vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * first);
-format_function_t format_vlib_buffer, format_vlib_buffer_and_data, format_vlib_buffer_contents;
+format_function_t format_vlib_buffer, format_vlib_buffer_and_data,
+ format_vlib_buffer_contents;
-typedef struct {
+typedef struct
+{
/* Vector of packet data. */
- u8 * packet_data;
+ u8 *packet_data;
/* Note: the next three fields are unused if DPDK == 1 */
@@ -524,7 +539,7 @@ typedef struct {
/* Buffer free list for this template. */
u32 free_list_index;
- u32 * free_buffers;
+ u32 *free_buffers;
} vlib_packet_template_t;
void vlib_packet_template_get_packet_helper (vlib_main_t * vm,
@@ -532,15 +547,14 @@ void vlib_packet_template_get_packet_helper (vlib_main_t * vm,
void vlib_packet_template_init (vlib_main_t * vm,
vlib_packet_template_t * t,
- void * packet_data,
+ void *packet_data,
uword n_packet_data_bytes,
uword min_n_buffers_each_physmem_alloc,
- char * fmt, ...);
+ char *fmt, ...);
-void *
-vlib_packet_template_get_packet (vlib_main_t * vm,
- vlib_packet_template_t * t,
- u32 * bi_result);
+void *vlib_packet_template_get_packet (vlib_main_t * vm,
+ vlib_packet_template_t * t,
+ u32 * bi_result);
always_inline void
vlib_packet_template_free (vlib_main_t * vm, vlib_packet_template_t * t)
@@ -551,16 +565,17 @@ vlib_packet_template_free (vlib_main_t * vm, vlib_packet_template_t * t)
always_inline u32
unserialize_vlib_buffer_n_bytes (serialize_main_t * m)
{
- serialize_stream_t * s = &m->stream;
- vlib_serialize_buffer_main_t * sm
- = uword_to_pointer (m->stream.data_function_opaque, vlib_serialize_buffer_main_t *);
- vlib_main_t * vm = sm->vlib_main;
- u32 n, * f;
+ serialize_stream_t *s = &m->stream;
+ vlib_serialize_buffer_main_t *sm
+ = uword_to_pointer (m->stream.data_function_opaque,
+ vlib_serialize_buffer_main_t *);
+ vlib_main_t *vm = sm->vlib_main;
+ u32 n, *f;
n = s->n_buffer_bytes - s->current_buffer_index;
if (sm->last_buffer != ~0)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, sm->last_buffer);
+ vlib_buffer_t *b = vlib_get_buffer (vm, sm->last_buffer);
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
{
b = vlib_get_buffer (vm, b->next_buffer);
@@ -568,17 +583,21 @@ unserialize_vlib_buffer_n_bytes (serialize_main_t * m)
}
}
+ /* *INDENT-OFF* */
clib_fifo_foreach (f, sm->rx.buffer_fifo, ({
n += vlib_buffer_index_length_in_chain (vm, f[0]);
}));
+/* *INDENT-ON* */
return n;
}
-typedef union {
+typedef union
+{
vlib_buffer_t b;
vlib_copy_unit_t i[sizeof (vlib_buffer_t) / sizeof (vlib_copy_unit_t)];
-} vlib_buffer_union_t;
+}
+vlib_buffer_union_t;
/* Set a buffer quickly into "uninitialized" state. We want this to
be extremely cheap and arrange for all fields that need to be
@@ -587,13 +606,16 @@ always_inline void
vlib_buffer_init_for_free_list (vlib_buffer_t * _dst,
vlib_buffer_free_list_t * fl)
{
- vlib_buffer_union_t * dst = (vlib_buffer_union_t *) _dst;
- vlib_buffer_union_t * src = (vlib_buffer_union_t *) &fl->buffer_init_template;
+ vlib_buffer_union_t *dst = (vlib_buffer_union_t *) _dst;
+ vlib_buffer_union_t *src =
+ (vlib_buffer_union_t *) & fl->buffer_init_template;
/* Make sure vlib_buffer_t is cacheline aligned and sized */
- ASSERT(STRUCT_OFFSET_OF(vlib_buffer_t, cacheline0) == 0);
- ASSERT(STRUCT_OFFSET_OF(vlib_buffer_t, cacheline1) == CLIB_CACHE_LINE_BYTES);
- ASSERT(STRUCT_OFFSET_OF(vlib_buffer_t, cacheline2) == CLIB_CACHE_LINE_BYTES * 2);
+ ASSERT (STRUCT_OFFSET_OF (vlib_buffer_t, cacheline0) == 0);
+ ASSERT (STRUCT_OFFSET_OF (vlib_buffer_t, cacheline1) ==
+ CLIB_CACHE_LINE_BYTES);
+ ASSERT (STRUCT_OFFSET_OF (vlib_buffer_t, cacheline2) ==
+ CLIB_CACHE_LINE_BYTES * 2);
/* Make sure buffer template is sane. */
ASSERT (fl->index == fl->buffer_init_template.free_list_index);
@@ -607,10 +629,10 @@ vlib_buffer_init_for_free_list (vlib_buffer_t * _dst,
/* Make sure it really worked. */
#define _(f) ASSERT (dst->b.f == src->b.f)
- _ (current_data);
- _ (current_length);
- _ (flags);
- _ (free_list_index);
+ _(current_data);
+ _(current_length);
+ _(flags);
+ _(free_list_index);
#undef _
ASSERT (dst->b.total_length_not_including_first_buffer == 0);
}
@@ -620,9 +642,10 @@ vlib_buffer_init_two_for_free_list (vlib_buffer_t * _dst0,
vlib_buffer_t * _dst1,
vlib_buffer_free_list_t * fl)
{
- vlib_buffer_union_t * dst0 = (vlib_buffer_union_t *) _dst0;
- vlib_buffer_union_t * dst1 = (vlib_buffer_union_t *) _dst1;
- vlib_buffer_union_t * src = (vlib_buffer_union_t *) &fl->buffer_init_template;
+ vlib_buffer_union_t *dst0 = (vlib_buffer_union_t *) _dst0;
+ vlib_buffer_union_t *dst1 = (vlib_buffer_union_t *) _dst1;
+ vlib_buffer_union_t *src =
+ (vlib_buffer_union_t *) & fl->buffer_init_template;
/* Make sure buffer template is sane. */
ASSERT (fl->index == fl->buffer_init_template.free_list_index);
@@ -636,27 +659,27 @@ vlib_buffer_init_two_for_free_list (vlib_buffer_t * _dst0,
/* Make sure it really worked. */
#define _(f) ASSERT (dst0->b.f == src->b.f && dst1->b.f == src->b.f)
- _ (current_data);
- _ (current_length);
- _ (flags);
- _ (free_list_index);
+ _(current_data);
+ _(current_length);
+ _(flags);
+ _(free_list_index);
#undef _
ASSERT (dst0->b.total_length_not_including_first_buffer == 0);
ASSERT (dst1->b.total_length_not_including_first_buffer == 0);
}
#if CLIB_DEBUG > 0
-u32 * vlib_buffer_state_validation_lock;
-uword * vlib_buffer_state_validation_hash;
-void * vlib_buffer_state_heap;
+u32 *vlib_buffer_state_validation_lock;
+uword *vlib_buffer_state_validation_hash;
+void *vlib_buffer_state_heap;
#endif
-static inline void
+static inline void
vlib_validate_buffer_in_use (vlib_buffer_t * b, u32 expected)
{
#if CLIB_DEBUG > 0
- uword * p;
- void * oldheap;
+ uword *p;
+ void *oldheap;
oldheap = clib_mem_set_heap (vlib_buffer_state_heap);
@@ -671,36 +694,35 @@ vlib_validate_buffer_in_use (vlib_buffer_t * b, u32 expected)
hash_set (vlib_buffer_state_validation_hash, b, expected);
goto out;
}
-
+
if (p[0] != expected)
{
- void cj_stop(void);
+ void cj_stop (void);
u32 bi;
- vlib_main_t * vm = &vlib_global_main;
-
- cj_stop();
-
+ vlib_main_t *vm = &vlib_global_main;
+
+ cj_stop ();
+
bi = vlib_get_buffer_index (vm, b);
clib_mem_set_heap (oldheap);
- clib_warning ("%.6f buffer %llx (%d): %s, not %s",
- vlib_time_now(vm), bi,
- p[0] ? "busy" : "free",
- expected ? "busy" : "free");
- os_panic();
+ clib_warning ("%.6f buffer %llx (%d): %s, not %s",
+ vlib_time_now (vm), bi,
+ p[0] ? "busy" : "free", expected ? "busy" : "free");
+ os_panic ();
}
- out:
- CLIB_MEMORY_BARRIER();
+out:
+ CLIB_MEMORY_BARRIER ();
*vlib_buffer_state_validation_lock = 0;
clib_mem_set_heap (oldheap);
#endif
}
-static inline void
+static inline void
vlib_validate_buffer_set_in_use (vlib_buffer_t * b, u32 expected)
{
#if CLIB_DEBUG > 0
- void * oldheap;
+ void *oldheap;
oldheap = clib_mem_set_heap (vlib_buffer_state_heap);
@@ -709,10 +731,18 @@ vlib_validate_buffer_set_in_use (vlib_buffer_t * b, u32 expected)
hash_set (vlib_buffer_state_validation_hash, b, expected);
- CLIB_MEMORY_BARRIER();
+ CLIB_MEMORY_BARRIER ();
*vlib_buffer_state_validation_lock = 0;
clib_mem_set_heap (oldheap);
-#endif
+#endif
}
#endif /* included_vlib_buffer_funcs_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/buffer_node.h b/vlib/vlib/buffer_node.h
index 5985ccf500d..f98a5408b03 100644
--- a/vlib/vlib/buffer_node.h
+++ b/vlib/vlib/buffer_node.h
@@ -40,13 +40,13 @@
#ifndef included_vlib_buffer_node_h
#define included_vlib_buffer_node_h
-/** \file
+/** \file
vlib buffer/node functions
*/
/** \brief Finish enqueueing two buffers forward in the graph.
Standard dual loop boilerplate element. This is a MACRO,
- with MULTIPLE SIDE EFFECTS. In the ideal case,
+ with MULTIPLE SIDE EFFECTS. In the ideal case,
<code>next_index == next0 == next1</code>,
which means that the speculative enqueue at the top of the dual loop
has correctly dealt with both packets. In that case, the macro does
@@ -146,20 +146,20 @@ generic_buffer_node_inline (vlib_main_t * vm,
vlib_node_runtime_t * node,
vlib_frame_t * frame,
uword sizeof_trace,
- void * opaque1,
+ void *opaque1,
uword opaque2,
- void (* two_buffers) (vlib_main_t * vm,
- void * opaque1,
- uword opaque2,
- vlib_buffer_t * b0, vlib_buffer_t * b1,
- u32 * next0, u32 * next1),
- void (* one_buffer) (vlib_main_t * vm,
- void * opaque1,
+ void (*two_buffers) (vlib_main_t * vm,
+ void *opaque1,
uword opaque2,
vlib_buffer_t * b0,
- u32 * next0))
+ vlib_buffer_t * b1,
+ u32 * next0, u32 * next1),
+ void (*one_buffer) (vlib_main_t * vm,
+ void *opaque1, uword opaque2,
+ vlib_buffer_t * b0,
+ u32 * next0))
{
- u32 n_left_from, * from, * to_next;
+ u32 n_left_from, *from, *to_next;
u32 next_index;
from = vlib_frame_vector_args (frame);
@@ -174,18 +174,17 @@ generic_buffer_node_inline (vlib_main_t * vm,
{
u32 n_left_to_next;
- vlib_get_next_frame (vm, node, next_index,
- to_next, n_left_to_next);
+ vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
while (n_left_from >= 4 && n_left_to_next >= 2)
{
- vlib_buffer_t * p0, * p1;
+ vlib_buffer_t *p0, *p1;
u32 pi0, next0;
u32 pi1, next1;
/* Prefetch next iteration. */
{
- vlib_buffer_t * p2, * p3;
+ vlib_buffer_t *p2, *p3;
p2 = vlib_get_buffer (vm, from[2]);
p3 = vlib_get_buffer (vm, from[3]);
@@ -213,10 +212,10 @@ generic_buffer_node_inline (vlib_main_t * vm,
to_next, n_left_to_next,
pi0, pi1, next0, next1);
}
-
+
while (n_left_from > 0 && n_left_to_next > 0)
{
- vlib_buffer_t * p0;
+ vlib_buffer_t *p0;
u32 pi0, next0;
pi0 = from[0];
@@ -242,3 +241,11 @@ generic_buffer_node_inline (vlib_main_t * vm,
}
#endif /* included_vlib_buffer_node_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/cli.c b/vlib/vlib/cli.c
index 60f41db1794..79db99f9632 100644
--- a/vlib/vlib/cli.c
+++ b/vlib/vlib/cli.c
@@ -40,40 +40,48 @@
#include <vlib/vlib.h>
/* Root of all show commands. */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (vlib_cli_show_command, static) = {
.path = "show",
.short_help = "Show commands",
};
+/* *INDENT-ON* */
/* Root of all clear commands. */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (vlib_cli_clear_command, static) = {
.path = "clear",
.short_help = "Clear commands",
};
+/* *INDENT-ON* */
/* Root of all set commands. */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (vlib_cli_set_command, static) = {
.path = "set",
.short_help = "Set commands",
};
+/* *INDENT-ON* */
/* Root of all test commands. */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (vlib_cli_test_command, static) = {
.path = "test",
.short_help = "Test commands",
};
+/* *INDENT-ON* */
/* Returns bitmap of commands which match key. */
static uword *
vlib_cli_sub_command_match (vlib_cli_command_t * c, unformat_input_t * input)
{
int i, n;
- uword * match = 0;
- vlib_cli_parse_position_t * p;
+ uword *match = 0;
+ vlib_cli_parse_position_t *p;
unformat_skip_white_space (input);
- for (i = 0; ; i++)
+ for (i = 0;; i++)
{
uword k;
@@ -83,10 +91,14 @@ vlib_cli_sub_command_match (vlib_cli_command_t * c, unformat_input_t * input)
case 'a' ... 'z':
case 'A' ... 'Z':
case '0' ... '9':
- case '-': case '_':
+ case '-':
+ case '_':
break;
- case ' ': case '\t': case '\r': case '\n':
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
case UNFORMAT_END_OF_INPUT:
/* White space or end of input removes any non-white
matches that were before possible. */
@@ -128,15 +140,16 @@ vlib_cli_sub_command_match (vlib_cli_command_t * c, unformat_input_t * input)
goto no_match;
}
- done:
+done:
return match;
}
/* Looks for string based sub-input formatted { SUB-INPUT }. */
-uword unformat_vlib_cli_sub_input (unformat_input_t * i, va_list * args)
+uword
+unformat_vlib_cli_sub_input (unformat_input_t * i, va_list * args)
{
- unformat_input_t * sub_input = va_arg (*args, unformat_input_t *);
- u8 * s;
+ unformat_input_t *sub_input = va_arg (*args, unformat_input_t *);
+ u8 *s;
uword c;
while (1)
@@ -144,8 +157,10 @@ uword unformat_vlib_cli_sub_input (unformat_input_t * i, va_list * args)
c = unformat_get_input (i);
switch (c)
{
- case ' ': case '\t':
- case '\n': case '\r':
+ case ' ':
+ case '\t':
+ case '\n':
+ case '\r':
case '\f':
break;
@@ -169,39 +184,40 @@ uword unformat_vlib_cli_sub_input (unformat_input_t * i, va_list * args)
static vlib_cli_command_t *
get_sub_command (vlib_cli_main_t * cm, vlib_cli_command_t * parent, u32 si)
{
- vlib_cli_sub_command_t * s = vec_elt_at_index (parent->sub_commands, si);
+ vlib_cli_sub_command_t *s = vec_elt_at_index (parent->sub_commands, si);
return vec_elt_at_index (cm->commands, s->index);
}
-static uword unformat_vlib_cli_sub_command (unformat_input_t * i, va_list * args)
+static uword
+unformat_vlib_cli_sub_command (unformat_input_t * i, va_list * args)
{
- vlib_main_t * vm = va_arg (*args, vlib_main_t *);
- vlib_cli_command_t * c = va_arg (*args, vlib_cli_command_t *);
- vlib_cli_command_t ** result = va_arg (*args, vlib_cli_command_t **);
- vlib_cli_main_t * cm = &vm->cli_main;
- uword * match_bitmap, is_unique, index;
+ vlib_main_t *vm = va_arg (*args, vlib_main_t *);
+ vlib_cli_command_t *c = va_arg (*args, vlib_cli_command_t *);
+ vlib_cli_command_t **result = va_arg (*args, vlib_cli_command_t **);
+ vlib_cli_main_t *cm = &vm->cli_main;
+ uword *match_bitmap, is_unique, index;
{
- vlib_cli_sub_rule_t * sr;
- vlib_cli_parse_rule_t * r;
+ vlib_cli_sub_rule_t *sr;
+ vlib_cli_parse_rule_t *r;
vec_foreach (sr, c->sub_rules)
- {
- void ** d;
- r = vec_elt_at_index (cm->parse_rules, sr->rule_index);
- vec_add2 (cm->parse_rule_data, d, 1);
- vec_reset_length (d[0]);
- if (r->data_size)
- d[0] = _vec_resize (d[0],
- /* length increment */ 1,
- r->data_size,
- /* header_bytes */ 0,
- /* data align */ sizeof (uword));
- if (unformat_user (i, r->unformat_function, vm, d[0]))
- {
- *result = vec_elt_at_index (cm->commands, sr->command_index);
- return 1;
- }
- }
+ {
+ void **d;
+ r = vec_elt_at_index (cm->parse_rules, sr->rule_index);
+ vec_add2 (cm->parse_rule_data, d, 1);
+ vec_reset_length (d[0]);
+ if (r->data_size)
+ d[0] = _vec_resize (d[0],
+ /* length increment */ 1,
+ r->data_size,
+ /* header_bytes */ 0,
+ /* data align */ sizeof (uword));
+ if (unformat_user (i, r->unformat_function, vm, d[0]))
+ {
+ *result = vec_elt_at_index (cm->commands, sr->command_index);
+ return 1;
+ }
+ }
}
match_bitmap = vlib_cli_sub_command_match (c, i);
@@ -217,9 +233,10 @@ static uword unformat_vlib_cli_sub_command (unformat_input_t * i, va_list * args
return is_unique;
}
-static u8 * format_vlib_cli_command_help (u8 * s, va_list * args)
+static u8 *
+format_vlib_cli_command_help (u8 * s, va_list * args)
{
- vlib_cli_command_t * c = va_arg (*args, vlib_cli_command_t *);
+ vlib_cli_command_t *c = va_arg (*args, vlib_cli_command_t *);
int is_long = va_arg (*args, int);
if (is_long && c->long_help)
s = format (s, "%s", c->long_help);
@@ -230,15 +247,17 @@ static u8 * format_vlib_cli_command_help (u8 * s, va_list * args)
return s;
}
-static u8 * format_vlib_cli_parse_rule_name (u8 * s, va_list * args)
+static u8 *
+format_vlib_cli_parse_rule_name (u8 * s, va_list * args)
{
- vlib_cli_parse_rule_t * r = va_arg (*args, vlib_cli_parse_rule_t *);
+ vlib_cli_parse_rule_t *r = va_arg (*args, vlib_cli_parse_rule_t *);
return format (s, "<%U>", format_c_identifier, r->name);
}
-static u8 * format_vlib_cli_path (u8 * s, va_list * args)
+static u8 *
+format_vlib_cli_path (u8 * s, va_list * args)
{
- u8 * path = va_arg (*args, u8 *);
+ u8 *path = va_arg (*args, u8 *);
int i, in_rule;
in_rule = 0;
for (i = 0; i < vec_len (path); i++)
@@ -258,7 +277,7 @@ static u8 * format_vlib_cli_path (u8 * s, va_list * args)
case ' ':
if (in_rule)
{
- vec_add1 (s, '>'); /* end of <RULE> */
+ vec_add1 (s, '>'); /* end of <RULE> */
in_rule = 0;
}
vec_add1 (s, ' ');
@@ -277,39 +296,36 @@ static u8 * format_vlib_cli_path (u8 * s, va_list * args)
}
static vlib_cli_command_t *
-all_subs (vlib_cli_main_t * cm,
- vlib_cli_command_t * subs,
- u32 command_index)
+all_subs (vlib_cli_main_t * cm, vlib_cli_command_t * subs, u32 command_index)
{
- vlib_cli_command_t * c = vec_elt_at_index (cm->commands, command_index);
- vlib_cli_sub_command_t * sc;
- vlib_cli_sub_rule_t * sr;
+ vlib_cli_command_t *c = vec_elt_at_index (cm->commands, command_index);
+ vlib_cli_sub_command_t *sc;
+ vlib_cli_sub_rule_t *sr;
if (c->function)
vec_add1 (subs, c[0]);
vec_foreach (sr, c->sub_rules)
subs = all_subs (cm, subs, sr->command_index);
- vec_foreach (sc, c->sub_commands)
- subs = all_subs (cm, subs, sc->index);
+ vec_foreach (sc, c->sub_commands) subs = all_subs (cm, subs, sc->index);
return subs;
}
static int
-vlib_cli_cmp_rule (void * a1, void * a2)
+vlib_cli_cmp_rule (void *a1, void *a2)
{
- vlib_cli_sub_rule_t * r1 = a1;
- vlib_cli_sub_rule_t * r2 = a2;
+ vlib_cli_sub_rule_t *r1 = a1;
+ vlib_cli_sub_rule_t *r2 = a2;
return vec_cmp (r1->name, r2->name);
}
static int
-vlib_cli_cmp_command (void * a1, void * a2)
+vlib_cli_cmp_command (void *a1, void *a2)
{
- vlib_cli_command_t * c1 = a1;
- vlib_cli_command_t * c2 = a2;
+ vlib_cli_command_t *c1 = a1;
+ vlib_cli_command_t *c2 = a2;
return vec_cmp (c1->path, c2->path);
}
@@ -320,10 +336,10 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
unformat_input_t * input,
uword parent_command_index)
{
- vlib_cli_command_t * parent, * c;
- clib_error_t * error = 0;
+ vlib_cli_command_t *parent, *c;
+ clib_error_t *error = 0;
unformat_input_t sub_input;
- u8 * string;
+ u8 *string;
uword is_main_dispatch = cm == &vm->cli_main;
parent = vec_elt_at_index (cm->commands, parent_command_index);
@@ -331,53 +347,60 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
{
uword help_at_end_of_line, i;
- help_at_end_of_line = unformat_check_input (input) == UNFORMAT_END_OF_INPUT;
+ help_at_end_of_line =
+ unformat_check_input (input) == UNFORMAT_END_OF_INPUT;
while (1)
- {
+ {
c = parent;
- if (unformat_user (input, unformat_vlib_cli_sub_command, vm, c, &parent))
+ if (unformat_user
+ (input, unformat_vlib_cli_sub_command, vm, c, &parent))
;
- else if (! (unformat_check_input (input) == UNFORMAT_END_OF_INPUT))
+ else if (!(unformat_check_input (input) == UNFORMAT_END_OF_INPUT))
goto unknown;
else
break;
- }
-
+ }
+
/* help SUB-COMMAND => long format help.
- "help" at end of line: show all commands. */
- if (! help_at_end_of_line)
- vlib_cli_output (vm, "%U", format_vlib_cli_command_help, c, /* is_long */ 1);
+ "help" at end of line: show all commands. */
+ if (!help_at_end_of_line)
+ vlib_cli_output (vm, "%U", format_vlib_cli_command_help, c,
+ /* is_long */ 1);
else if (vec_len (c->sub_commands) + vec_len (c->sub_rules) == 0)
vlib_cli_output (vm, "%v: no sub-commands", c->path);
else
{
- vlib_cli_sub_command_t * sc;
- vlib_cli_sub_rule_t * sr, * subs;
+ vlib_cli_sub_command_t *sc;
+ vlib_cli_sub_rule_t *sr, *subs;
subs = vec_dup (c->sub_rules);
/* Add in rules if any. */
vec_foreach (sc, c->sub_commands)
- {
- vec_add2 (subs, sr, 1);
- sr->name = sc->name;
- sr->command_index = sc->index;
- sr->rule_index = ~0;
- }
+ {
+ vec_add2 (subs, sr, 1);
+ sr->name = sc->name;
+ sr->command_index = sc->index;
+ sr->rule_index = ~0;
+ }
vec_sort_with_function (subs, vlib_cli_cmp_rule);
- for (i = 0; i < vec_len (subs); i++)
+ for (i = 0; i < vec_len (subs); i++)
{
- vlib_cli_command_t * d;
- vlib_cli_parse_rule_t * r;
+ vlib_cli_command_t *d;
+ vlib_cli_parse_rule_t *r;
d = vec_elt_at_index (cm->commands, subs[i].command_index);
- r = subs[i].rule_index != ~0 ? vec_elt_at_index (cm->parse_rules, subs[i].rule_index) : 0;
+ r =
+ subs[i].rule_index != ~0 ? vec_elt_at_index (cm->parse_rules,
+ subs
+ [i].rule_index) :
+ 0;
if (r)
vlib_cli_output
@@ -394,10 +417,11 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
vec_free (subs);
}
}
-
- else if (is_main_dispatch && (unformat (input, "choices") || unformat (input, "?")))
+
+ else if (is_main_dispatch
+ && (unformat (input, "choices") || unformat (input, "?")))
{
- vlib_cli_command_t * sub, * subs;
+ vlib_cli_command_t *sub, *subs;
subs = all_subs (cm, 0, parent_command_index);
vec_sort_with_function (subs, vlib_cli_cmp_command);
@@ -412,55 +436,59 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
{
vec_free (string);
}
-
+
else if (unformat (input, "uncomment %U",
unformat_vlib_cli_sub_input, &sub_input))
{
- error = vlib_cli_dispatch_sub_commands (vm, cm, &sub_input, parent_command_index);
+ error =
+ vlib_cli_dispatch_sub_commands (vm, cm, &sub_input,
+ parent_command_index);
unformat_free (&sub_input);
}
-
- else if (unformat_user (input, unformat_vlib_cli_sub_command, vm, parent, &c))
+
+ else
+ if (unformat_user (input, unformat_vlib_cli_sub_command, vm, parent, &c))
{
- unformat_input_t * si;
- uword has_sub_commands = vec_len (c->sub_commands) + vec_len (c->sub_rules) > 0;
-
+ unformat_input_t *si;
+ uword has_sub_commands =
+ vec_len (c->sub_commands) + vec_len (c->sub_rules) > 0;
+
si = input;
if (unformat_user (input, unformat_vlib_cli_sub_input, &sub_input))
si = &sub_input;
-
+
if (has_sub_commands)
error = vlib_cli_dispatch_sub_commands (vm, cm, si, c - cm->commands);
- if (has_sub_commands && ! error)
- /* Found valid sub-command. */;
+ if (has_sub_commands && !error)
+ /* Found valid sub-command. */ ;
else if (c->function)
{
- clib_error_t * c_error;
+ clib_error_t *c_error;
/* Skip white space for benefit of called function. */
unformat_skip_white_space (si);
if (unformat (si, "?"))
{
- vlib_cli_output (vm, " %-40U %U",
- format_vlib_cli_path, c->path,
- format_vlib_cli_command_help, c, /* is_long */ 0);
+ vlib_cli_output (vm, " %-40U %U", format_vlib_cli_path, c->path, format_vlib_cli_command_help, c, /* is_long */
+ 0);
}
else
{
- if (!c->is_mp_safe)
- vlib_worker_thread_barrier_sync(vm);
+ if (!c->is_mp_safe)
+ vlib_worker_thread_barrier_sync (vm);
c_error = c->function (vm, si, c);
- if (!c->is_mp_safe)
- vlib_worker_thread_barrier_release(vm);
+ if (!c->is_mp_safe)
+ vlib_worker_thread_barrier_release (vm);
if (c_error)
{
- error = clib_error_return (0, "%v: %v", c->path, c_error->what);
+ error =
+ clib_error_return (0, "%v: %v", c->path, c_error->what);
clib_error_free (c_error);
/* Free sub input. */
if (si != input)
@@ -474,7 +502,7 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
clib_error_free (error);
}
- else if (! error)
+ else if (!error)
error = clib_error_return (0, "%v: no sub-commands", c->path);
/* Free sub input. */
@@ -487,29 +515,34 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
return error;
- unknown:
+unknown:
if (parent->path)
- return clib_error_return (0, "%v: unknown input `%U'", parent->path, format_unformat_error, input);
+ return clib_error_return (0, "%v: unknown input `%U'", parent->path,
+ format_unformat_error, input);
else
- return clib_error_return (0, "unknown input `%U'", format_unformat_error, input);
+ return clib_error_return (0, "unknown input `%U'", format_unformat_error,
+ input);
}
-void vlib_unix_error_report (vlib_main_t *, clib_error_t *)
- __attribute__ ((weak));
+void vlib_unix_error_report (vlib_main_t *, clib_error_t *)
+ __attribute__ ((weak));
-void vlib_unix_error_report (vlib_main_t * vm, clib_error_t * error) { }
+void
+vlib_unix_error_report (vlib_main_t * vm, clib_error_t * error)
+{
+}
/* Process CLI input. */
-void vlib_cli_input (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_output_function_t * function,
- uword function_arg)
+void
+vlib_cli_input (vlib_main_t * vm,
+ unformat_input_t * input,
+ vlib_cli_output_function_t * function, uword function_arg)
{
- vlib_process_t * cp = vlib_get_current_process(vm);
- vlib_cli_main_t * cm = &vm->cli_main;
- clib_error_t * error;
- vlib_cli_output_function_t * save_function;
+ vlib_process_t *cp = vlib_get_current_process (vm);
+ vlib_cli_main_t *cm = &vm->cli_main;
+ clib_error_t *error;
+ vlib_cli_output_function_t *save_function;
uword save_function_arg;
save_function = cp->output_function;
@@ -518,10 +551,13 @@ void vlib_cli_input (vlib_main_t * vm,
cp->output_function = function;
cp->output_function_arg = function_arg;
- do {
- vec_reset_length (cm->parse_rule_data);
- error = vlib_cli_dispatch_sub_commands (vm, &vm->cli_main, input, /* parent */ 0);
- } while (! error && ! unformat (input, "%U", unformat_eof));
+ do
+ {
+ vec_reset_length (cm->parse_rule_data);
+ error = vlib_cli_dispatch_sub_commands (vm, &vm->cli_main, input, /* parent */
+ 0);
+ }
+ while (!error && !unformat (input, "%U", unformat_eof));
if (error)
{
@@ -535,21 +571,22 @@ void vlib_cli_input (vlib_main_t * vm,
}
/* Output to current CLI connection. */
-void vlib_cli_output (vlib_main_t * vm, char * fmt, ...)
+void
+vlib_cli_output (vlib_main_t * vm, char *fmt, ...)
{
- vlib_process_t * cp = vlib_get_current_process(vm);
+ vlib_process_t *cp = vlib_get_current_process (vm);
va_list va;
- u8 * s;
+ u8 *s;
va_start (va, fmt);
s = va_format (0, fmt, &va);
va_end (va);
/* Terminate with \n if not present. */
- if (vec_len (s) > 0 && s[vec_len (s)-1] != '\n')
+ if (vec_len (s) > 0 && s[vec_len (s) - 1] != '\n')
vec_add1 (s, '\n');
- if ((! cp) || (! cp->output_function))
+ if ((!cp) || (!cp->output_function))
fformat (stdout, "%v", s);
else
cp->output_function (cp->output_function_arg, s, vec_len (s));
@@ -559,48 +596,52 @@ void vlib_cli_output (vlib_main_t * vm, char * fmt, ...)
static clib_error_t *
show_memory_usage (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
int verbose = 0;
- clib_error_t * error;
+ clib_error_t *error;
u32 index = 0;
- while (unformat_check_input(input) != UNFORMAT_END_OF_INPUT)
+ while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
- if (unformat (input, "verbose"))
- verbose = 1;
- else {
- error = clib_error_return (0, "unknown input `%U'",
- format_unformat_error, input);
- return error;
- }
- }
+ if (unformat (input, "verbose"))
+ verbose = 1;
+ else
+ {
+ error = clib_error_return (0, "unknown input `%U'",
+ format_unformat_error, input);
+ return error;
+ }
+ }
+ /* *INDENT-OFF* */
foreach_vlib_main (
({
vlib_cli_output (vm, "Thread %d %v\n", index, vlib_worker_threads[index].name);
vlib_cli_output (vm, "%U\n", format_mheap, clib_per_cpu_mheaps[index], verbose);
index++;
}));
+ /* *INDENT-ON* */
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_memory_usage_command, static) = {
.path = "show memory",
.short_help = "Show current memory usage",
.function = show_memory_usage,
};
+/* *INDENT-ON* */
static clib_error_t *
enable_disable_memory_trace (vlib_main_t * vm,
unformat_input_t * input,
vlib_cli_command_t * cmd)
{
- clib_error_t * error = 0;
+ clib_error_t *error = 0;
int enable;
- if (! unformat_user (input, unformat_vlib_enable_disable, &enable))
+ if (!unformat_user (input, unformat_vlib_enable_disable, &enable))
{
error = clib_error_return (0, "expecting enable/on or disable/off");
goto done;
@@ -608,26 +649,30 @@ enable_disable_memory_trace (vlib_main_t * vm,
clib_mem_trace (enable);
- done:
+done:
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (enable_disable_memory_trace_command, static) = {
.path = "memory-trace",
.short_help = "Enable/disable memory allocation trace",
.function = enable_disable_memory_trace,
};
+/* *INDENT-ON* */
static clib_error_t *
test_heap_validate (vlib_main_t * vm, unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ vlib_cli_command_t * cmd)
{
- clib_error_t * error = 0;
- void * heap;
- mheap_t *mheap;
+ clib_error_t *error = 0;
+ void *heap;
+ mheap_t *mheap;
- if (unformat(input, "on")) {
+ if (unformat (input, "on"))
+ {
+ /* *INDENT-OFF* */
foreach_vlib_main({
heap = clib_per_cpu_mheaps[this_vlib_main->cpu_index];
mheap = mheap_header(heap);
@@ -635,36 +680,48 @@ test_heap_validate (vlib_main_t * vm, unformat_input_t * input,
// Turn off small object cache because it delays detection of errors
mheap->flags &= ~MHEAP_FLAG_SMALL_OBJECT_CACHE;
});
+ /* *INDENT-ON* */
- } else if (unformat(input, "off")) {
+ }
+ else if (unformat (input, "off"))
+ {
+ /* *INDENT-OFF* */
foreach_vlib_main({
heap = clib_per_cpu_mheaps[this_vlib_main->cpu_index];
mheap = mheap_header(heap);
mheap->flags &= ~MHEAP_FLAG_VALIDATE;
mheap->flags |= MHEAP_FLAG_SMALL_OBJECT_CACHE;
});
-
- } else if (unformat(input, "now")) {
+ /* *INDENT-ON* */
+ }
+ else if (unformat (input, "now"))
+ {
+ /* *INDENT-OFF* */
foreach_vlib_main({
heap = clib_per_cpu_mheaps[this_vlib_main->cpu_index];
mheap = mheap_header(heap);
mheap_validate(heap);
});
- vlib_cli_output(vm, "heap validation complete");
+ /* *INDENT-ON* */
+ vlib_cli_output (vm, "heap validation complete");
- } else {
- return clib_error_return(0, "unknown input `%U'",
- format_unformat_error, input);
+ }
+ else
+ {
+ return clib_error_return (0, "unknown input `%U'",
+ format_unformat_error, input);
}
- return error;
+ return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cmd_test_heap_validate,static) = {
.path = "test heap-validate",
.short_help = "<on/off/now> validate heap on future allocs/frees or right now",
.function = test_heap_validate,
};
+/* *INDENT-ON* */
#ifdef TEST_CODE
/*
@@ -674,34 +731,36 @@ VLIB_CLI_COMMAND (cmd_test_heap_validate,static) = {
static clib_error_t *
sleep_ten_seconds (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
u16 i;
- u16 my_id = rand();
+ u16 my_id = rand ();
- vlib_cli_output(vm, "Starting 10 seconds sleep with id %u\n", my_id);
+ vlib_cli_output (vm, "Starting 10 seconds sleep with id %u\n", my_id);
- for(i=0; i<10; i++)
+ for (i = 0; i < 10; i++)
{
- vlib_process_wait_for_event_or_clock(vm, 1.0);
- vlib_cli_output(vm, "Iteration number %u, my id: %u\n", i, my_id);
+ vlib_process_wait_for_event_or_clock (vm, 1.0);
+ vlib_cli_output (vm, "Iteration number %u, my id: %u\n", i, my_id);
}
- vlib_cli_output(vm, "Done with sleep with id %u\n", my_id);
+ vlib_cli_output (vm, "Done with sleep with id %u\n", my_id);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (ping_command, static) = {
.path = "test sleep",
.function = sleep_ten_seconds,
.short_help = "Sleep for 10 seconds",
};
+/* *INDENT-ON* */
#endif /* ifdef TEST_CODE */
-static uword vlib_cli_normalize_path (char * input, char ** result)
+static uword
+vlib_cli_normalize_path (char *input, char **result)
{
- char * i = input;
- char * s = 0;
+ char *i = input;
+ char *s = 0;
uword l = 0;
uword index_of_last_space = ~0;
@@ -715,7 +774,7 @@ static uword vlib_cli_normalize_path (char * input, char ** result)
case '\t':
case '\n':
case '\r':
- if (l > 0 && s[l-1] != ' ')
+ if (l > 0 && s[l - 1] != ' ')
{
vec_add1 (s, ' ');
l++;
@@ -723,7 +782,7 @@ static uword vlib_cli_normalize_path (char * input, char ** result)
break;
default:
- if (l > 0 && s[l-1] == ' ')
+ if (l > 0 && s[l - 1] == ' ')
index_of_last_space = vec_len (s);
vec_add1 (s, c);
l++;
@@ -732,7 +791,7 @@ static uword vlib_cli_normalize_path (char * input, char ** result)
}
/* Remove any extra space at end. */
- if (l > 0 && s[l-1] == ' ')
+ if (l > 0 && s[l - 1] == ' ')
_vec_len (s) -= 1;
*result = s;
@@ -740,7 +799,7 @@ static uword vlib_cli_normalize_path (char * input, char ** result)
}
always_inline uword
-parent_path_len (char * path)
+parent_path_len (char *path)
{
word i;
for (i = vec_len (path) - 1; i >= 0; i--)
@@ -751,13 +810,12 @@ parent_path_len (char * path)
return ~0;
}
-static void add_sub_command (vlib_cli_main_t * cm,
- uword parent_index,
- uword child_index)
+static void
+add_sub_command (vlib_cli_main_t * cm, uword parent_index, uword child_index)
{
- vlib_cli_command_t * p, * c;
- vlib_cli_sub_command_t * sub_c;
- u8 * sub_name;
+ vlib_cli_command_t *p, *c;
+ vlib_cli_sub_command_t *sub_c;
+ u8 *sub_name;
word i, l;
p = vec_elt_at_index (cm->commands, parent_index);
@@ -775,17 +833,16 @@ static void add_sub_command (vlib_cli_main_t * cm,
if (sub_name[0] == '%')
{
- uword * q;
- vlib_cli_sub_rule_t * sr;
+ uword *q;
+ vlib_cli_sub_rule_t *sr;
/* Remove %. */
vec_delete (sub_name, 1, 0);
- if (! p->sub_rule_index_by_name)
- p->sub_rule_index_by_name
- = hash_create_vec (/* initial length */ 32,
- sizeof (sub_name[0]),
- sizeof (uword));
+ if (!p->sub_rule_index_by_name)
+ p->sub_rule_index_by_name = hash_create_vec ( /* initial length */ 32,
+ sizeof (sub_name[0]),
+ sizeof (uword));
q = hash_get_mem (p->sub_rule_index_by_name, sub_name);
if (q)
{
@@ -795,11 +852,12 @@ static void add_sub_command (vlib_cli_main_t * cm,
}
q = hash_get_mem (cm->parse_rule_index_by_name, sub_name);
- if (! q)
+ if (!q)
clib_error ("reference to unknown rule `%%%v' in path `%v'",
sub_name, c->path);
- hash_set_mem (p->sub_rule_index_by_name, sub_name, vec_len (p->sub_rules));
+ hash_set_mem (p->sub_rule_index_by_name, sub_name,
+ vec_len (p->sub_rules));
vec_add2 (p->sub_rules, sr, 1);
sr->name = sub_name;
sr->rule_index = q[0];
@@ -807,11 +865,10 @@ static void add_sub_command (vlib_cli_main_t * cm,
return;
}
- if (! p->sub_command_index_by_name)
- p->sub_command_index_by_name
- = hash_create_vec (/* initial length */ 32,
- sizeof (c->path[0]),
- sizeof (uword));
+ if (!p->sub_command_index_by_name)
+ p->sub_command_index_by_name = hash_create_vec ( /* initial length */ 32,
+ sizeof (c->path[0]),
+ sizeof (uword));
/* Check if sub-command has already been created. */
if (hash_get_mem (p->sub_command_index_by_name, sub_name))
@@ -823,17 +880,18 @@ static void add_sub_command (vlib_cli_main_t * cm,
vec_add2 (p->sub_commands, sub_c, 1);
sub_c->index = child_index;
sub_c->name = sub_name;
- hash_set_mem (p->sub_command_index_by_name, sub_c->name, sub_c - p->sub_commands);
+ hash_set_mem (p->sub_command_index_by_name, sub_c->name,
+ sub_c - p->sub_commands);
vec_validate (p->sub_command_positions, vec_len (sub_c->name) - 1);
for (i = 0; i < vec_len (sub_c->name); i++)
{
int n;
- vlib_cli_parse_position_t * pos;
+ vlib_cli_parse_position_t *pos;
pos = vec_elt_at_index (p->sub_command_positions, i);
- if (! pos->bitmaps)
+ if (!pos->bitmaps)
pos->min_char = sub_c->name[i];
n = sub_c->name[i] - pos->min_char;
@@ -845,16 +903,17 @@ static void add_sub_command (vlib_cli_main_t * cm,
}
vec_validate (pos->bitmaps, n);
- pos->bitmaps[n] = clib_bitmap_ori (pos->bitmaps[n], sub_c - p->sub_commands);
+ pos->bitmaps[n] =
+ clib_bitmap_ori (pos->bitmaps[n], sub_c - p->sub_commands);
}
}
static void
vlib_cli_make_parent (vlib_cli_main_t * cm, uword ci)
{
- uword p_len, pi, * p;
- char * p_path;
- vlib_cli_command_t * c, * parent;
+ uword p_len, pi, *p;
+ char *p_path;
+ vlib_cli_command_t *c, *parent;
/* Root command (index 0) should have already been added. */
ASSERT (vec_len (cm->commands) > 0);
@@ -862,7 +921,7 @@ vlib_cli_make_parent (vlib_cli_main_t * cm, uword ci)
c = vec_elt_at_index (cm->commands, ci);
p_len = parent_path_len (c->path);
- /* No space? Parent is root command. */
+ /* No space? Parent is root command. */
if (p_len == ~0)
{
add_sub_command (cm, 0, ci);
@@ -875,12 +934,13 @@ vlib_cli_make_parent (vlib_cli_main_t * cm, uword ci)
p = hash_get_mem (cm->command_index_by_path, p_path);
/* Parent exists? */
- if (! p)
+ if (!p)
{
/* Parent does not exist; create it. */
vec_add2 (cm->commands, parent, 1);
parent->path = p_path;
- hash_set_mem (cm->command_index_by_path, parent->path, parent - cm->commands);
+ hash_set_mem (cm->command_index_by_path, parent->path,
+ parent - cm->commands);
pi = parent - cm->commands;
}
else
@@ -892,32 +952,31 @@ vlib_cli_make_parent (vlib_cli_main_t * cm, uword ci)
add_sub_command (cm, pi, ci);
/* Create parent's parent. */
- if (! p)
+ if (!p)
vlib_cli_make_parent (cm, pi);
}
always_inline uword
vlib_cli_command_is_empty (vlib_cli_command_t * c)
{
- return (c->long_help == 0
- && c->short_help == 0
- && c->function == 0);
+ return (c->long_help == 0 && c->short_help == 0 && c->function == 0);
}
-clib_error_t * vlib_cli_register (vlib_main_t * vm, vlib_cli_command_t * c)
+clib_error_t *
+vlib_cli_register (vlib_main_t * vm, vlib_cli_command_t * c)
{
- vlib_cli_main_t * cm = &vm->cli_main;
- clib_error_t * error = 0;
- uword ci, * p;
- char * normalized_path;
+ vlib_cli_main_t *cm = &vm->cli_main;
+ clib_error_t *error = 0;
+ uword ci, *p;
+ char *normalized_path;
if ((error = vlib_call_init_function (vm, vlib_cli_init)))
return error;
(void) vlib_cli_normalize_path (c->path, &normalized_path);
- if (! cm->command_index_by_path)
- cm->command_index_by_path = hash_create_vec (/* initial length */ 32,
+ if (!cm->command_index_by_path)
+ cm->command_index_by_path = hash_create_vec ( /* initial length */ 32,
sizeof (c->path[0]),
sizeof (uword));
@@ -925,18 +984,18 @@ clib_error_t * vlib_cli_register (vlib_main_t * vm, vlib_cli_command_t * c)
p = hash_get_mem (cm->command_index_by_path, normalized_path);
if (p)
{
- vlib_cli_command_t * d;
+ vlib_cli_command_t *d;
ci = p[0];
d = vec_elt_at_index (cm->commands, ci);
/* If existing command was created via vlib_cli_make_parent
- replaced it with callers data. */
+ replaced it with callers data. */
if (vlib_cli_command_is_empty (d))
{
vlib_cli_command_t save = d[0];
- ASSERT (! vlib_cli_command_is_empty (c));
+ ASSERT (!vlib_cli_command_is_empty (c));
/* Copy callers fields. */
d[0] = c[0];
@@ -949,7 +1008,9 @@ clib_error_t * vlib_cli_register (vlib_main_t * vm, vlib_cli_command_t * c)
d->sub_rules = save.sub_rules;
}
else
- error = clib_error_return (0, "duplicate command name with path %v", normalized_path);
+ error =
+ clib_error_return (0, "duplicate command name with path %v",
+ normalized_path);
vec_free (normalized_path);
if (error)
@@ -986,14 +1047,14 @@ clib_error_t * vlib_cli_register (vlib_main_t * vm, vlib_cli_command_t * c)
clib_error_t *
vlib_cli_register_parse_rule (vlib_main_t * vm, vlib_cli_parse_rule_t * r_reg)
{
- vlib_cli_main_t * cm = &vm->cli_main;
- vlib_cli_parse_rule_t * r;
- clib_error_t * error = 0;
- u8 * r_name;
- uword * p;
-
- if (! cm->parse_rule_index_by_name)
- cm->parse_rule_index_by_name = hash_create_vec (/* initial length */ 32,
+ vlib_cli_main_t *cm = &vm->cli_main;
+ vlib_cli_parse_rule_t *r;
+ clib_error_t *error = 0;
+ u8 *r_name;
+ uword *p;
+
+ if (!cm->parse_rule_index_by_name)
+ cm->parse_rule_index_by_name = hash_create_vec ( /* initial length */ 32,
sizeof (r->name[0]),
sizeof (uword));
@@ -1003,7 +1064,8 @@ vlib_cli_register_parse_rule (vlib_main_t * vm, vlib_cli_parse_rule_t * r_reg)
if ((p = hash_get_mem (cm->parse_rule_index_by_name, r_name)))
{
vec_free (r_name);
- return clib_error_return (0, "duplicate parse rule name `%s'", r_reg->name);
+ return clib_error_return (0, "duplicate parse rule name `%s'",
+ r_reg->name);
}
vec_add2 (cm->parse_rules, r, 1);
@@ -1016,19 +1078,19 @@ vlib_cli_register_parse_rule (vlib_main_t * vm, vlib_cli_parse_rule_t * r_reg)
#if 0
/* $$$ turn back on again someday, maybe */
-static clib_error_t *
-vlib_cli_register_parse_rules (vlib_main_t * vm,
- vlib_cli_parse_rule_t * lo,
- vlib_cli_parse_rule_t * hi)
-
- __attribute__((unused))
+static clib_error_t *vlib_cli_register_parse_rules (vlib_main_t * vm,
+ vlib_cli_parse_rule_t *
+ lo,
+ vlib_cli_parse_rule_t *
+ hi)
+ __attribute__ ((unused))
{
- clib_error_t * error = 0;
- vlib_cli_parse_rule_t * r;
+ clib_error_t *error = 0;
+ vlib_cli_parse_rule_t *r;
for (r = lo; r < hi; r = clib_elf_section_data_next (r, 0))
{
- if (! r->name || strlen (r->name) == 0)
+ if (!r->name || strlen (r->name) == 0)
{
error = clib_error_return (0, "parse rule with no name");
goto done;
@@ -1039,16 +1101,17 @@ vlib_cli_register_parse_rules (vlib_main_t * vm,
goto done;
}
- done:
+done:
return error;
}
#endif
-static clib_error_t * vlib_cli_init (vlib_main_t * vm)
+static clib_error_t *
+vlib_cli_init (vlib_main_t * vm)
{
- vlib_cli_main_t * cm = &vm->cli_main;
- clib_error_t * error = 0;
- vlib_cli_command_t * cmd;
+ vlib_cli_main_t *cm = &vm->cli_main;
+ clib_error_t *error = 0;
+ vlib_cli_command_t *cmd;
cmd = cm->cli_command_registrations;
@@ -1056,10 +1119,18 @@ static clib_error_t * vlib_cli_init (vlib_main_t * vm)
{
error = vlib_cli_register (vm, cmd);
if (error)
- return error;
+ return error;
cmd = cmd->next_cli_command;
}
return error;
}
VLIB_INIT_FUNCTION (vlib_cli_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/cli.h b/vlib/vlib/cli.h
index a9e08ba1f6e..009c7e82cf7 100644
--- a/vlib/vlib/cli.h
+++ b/vlib/vlib/cli.h
@@ -44,58 +44,62 @@
struct vlib_cli_command_t;
-typedef struct {
+typedef struct
+{
u32 min_char;
/* Indexed by name[position] - min_char. */
- uword ** bitmaps;
+ uword **bitmaps;
} vlib_cli_parse_position_t;
-typedef struct {
- u8 * name;
+typedef struct
+{
+ u8 *name;
u32 index;
} vlib_cli_sub_command_t;
-typedef struct {
- u8 * name;
+typedef struct
+{
+ u8 *name;
u32 rule_index;
u32 command_index;
} vlib_cli_sub_rule_t;
-typedef struct {
- char * name;
- char * short_help;
- char * long_help;
+typedef struct
+{
+ char *name;
+ char *short_help;
+ char *long_help;
/* Number of bytes in parsed data. Zero for vector. */
uword data_size;
- unformat_function_t * unformat_function;
+ unformat_function_t *unformat_function;
/* Opaque for unformat function. */
uword unformat_function_arg[2];
} vlib_cli_parse_rule_t;
/* CLI command callback function. */
-typedef clib_error_t * (vlib_cli_command_function_t)
+typedef clib_error_t *(vlib_cli_command_function_t)
(struct vlib_main_t * vm,
- unformat_input_t * input,
- struct vlib_cli_command_t * cmd);
+ unformat_input_t * input, struct vlib_cli_command_t * cmd);
-typedef struct vlib_cli_command_t {
+typedef struct vlib_cli_command_t
+{
/* Command path (e.g. "show something").
Spaces delimit elements of path. */
- char * path;
+ char *path;
/* Short/long help strings. */
- char * short_help;
- char * long_help;
+ char *short_help;
+ char *long_help;
/* Callback function. */
- vlib_cli_command_function_t * function;
+ vlib_cli_command_function_t *function;
/* Opaque. */
uword function_arg;
@@ -104,44 +108,44 @@ typedef struct vlib_cli_command_t {
uword is_mp_safe;
/* Sub commands for this command. */
- vlib_cli_sub_command_t * sub_commands;
+ vlib_cli_sub_command_t *sub_commands;
/* Hash table mapping name (e.g. last path element) to sub command index. */
- uword * sub_command_index_by_name;
+ uword *sub_command_index_by_name;
/* bitmap[p][c][i] says whether sub-command i has character
c in position p. */
- vlib_cli_parse_position_t * sub_command_positions;
+ vlib_cli_parse_position_t *sub_command_positions;
/* Hash table mapping name (e.g. last path element) to sub rule index. */
- uword * sub_rule_index_by_name;
+ uword *sub_rule_index_by_name;
/* Vector of possible parse rules for this path. */
- vlib_cli_sub_rule_t * sub_rules;
+ vlib_cli_sub_rule_t *sub_rules;
/* List of CLI commands, built by constructors */
- struct vlib_cli_command_t * next_cli_command;
+ struct vlib_cli_command_t *next_cli_command;
} vlib_cli_command_t;
typedef void (vlib_cli_output_function_t) (uword arg,
- u8 * buffer,
- uword buffer_bytes);
-typedef struct {
+ u8 * buffer, uword buffer_bytes);
+typedef struct
+{
/* Vector of all known commands. */
- vlib_cli_command_t * commands;
+ vlib_cli_command_t *commands;
/* Hash table mapping normalized path to index into all_commands. */
- uword * command_index_by_path;
+ uword *command_index_by_path;
/* Vector of all known parse rules. */
- vlib_cli_parse_rule_t * parse_rules;
+ vlib_cli_parse_rule_t *parse_rules;
/* Hash table mapping parse rule name to index into parse_rule vector. */
- uword * parse_rule_index_by_name;
+ uword *parse_rule_index_by_name;
/* Data parsed for rules. */
- void ** parse_rule_data;
+ void **parse_rule_data;
/* registration list added by constructors */
vlib_cli_command_t *cli_command_registrations;
@@ -158,26 +162,31 @@ static void __vlib_cli_command_registration_##x (void) \
x.next_cli_command = cm->cli_command_registrations; \
cm->cli_command_registrations = &x; \
} \
-__VA_ARGS__ vlib_cli_command_t x
-
-
+__VA_ARGS__ vlib_cli_command_t x
#define VLIB_CLI_PARSE_RULE(x) \
- vlib_cli_parse_rule_t x
-
+ vlib_cli_parse_rule_t x
/* Output to current CLI connection. */
-void vlib_cli_output (struct vlib_main_t * vm, char * fmt, ...);
+void vlib_cli_output (struct vlib_main_t *vm, char *fmt, ...);
/* Process CLI input. */
-void vlib_cli_input (struct vlib_main_t * vm,
+void vlib_cli_input (struct vlib_main_t *vm,
unformat_input_t * input,
vlib_cli_output_function_t * function,
uword function_arg);
-clib_error_t * vlib_cli_register (struct vlib_main_t * vm,
- vlib_cli_command_t * c);
-clib_error_t * vlib_cli_register_parse_rule (struct vlib_main_t * vm,
- vlib_cli_parse_rule_t * c);
+clib_error_t *vlib_cli_register (struct vlib_main_t *vm,
+ vlib_cli_command_t * c);
+clib_error_t *vlib_cli_register_parse_rule (struct vlib_main_t *vm,
+ vlib_cli_parse_rule_t * c);
uword unformat_vlib_cli_sub_input (unformat_input_t * i, va_list * args);
#endif /* included_vlib_cli_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/cli_funcs.h b/vlib/vlib/cli_funcs.h
index a43ed20a2c2..78aef73ba2d 100644
--- a/vlib/vlib/cli_funcs.h
+++ b/vlib/vlib/cli_funcs.h
@@ -43,8 +43,16 @@
always_inline void *
vlib_cli_get_parse_rule_result (vlib_main_t * vm, uword index)
{
- vlib_cli_main_t * cm = &vm->cli_main;
+ vlib_cli_main_t *cm = &vm->cli_main;
return vec_elt (cm->parse_rule_data, index);
}
#endif /* included_vlib_cli_funcs_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/counter.c b/vlib/vlib/counter.c
index 9c5e0db8427..9f66e04d88e 100644
--- a/vlib/vlib/counter.c
+++ b/vlib/vlib/counter.c
@@ -39,20 +39,21 @@
#include <vlib/vlib.h>
-void vlib_clear_simple_counters (vlib_simple_counter_main_t * cm)
+void
+vlib_clear_simple_counters (vlib_simple_counter_main_t * cm)
{
uword i, j;
- u16 * my_minis;
+ u16 *my_minis;
- for (i = 0; i < vec_len(cm->minis); i++)
+ for (i = 0; i < vec_len (cm->minis); i++)
{
my_minis = cm->minis[i];
-
+
for (j = 0; j < vec_len (my_minis); j++)
- {
- cm->maxi[j] += my_minis[j];
- my_minis[j] = 0;
- }
+ {
+ cm->maxi[j] += my_minis[j];
+ my_minis[j] = 0;
+ }
}
j = vec_len (cm->maxi);
@@ -62,22 +63,23 @@ void vlib_clear_simple_counters (vlib_simple_counter_main_t * cm)
cm->value_at_last_clear[i] = cm->maxi[i];
}
-void vlib_clear_combined_counters (vlib_combined_counter_main_t * cm)
+void
+vlib_clear_combined_counters (vlib_combined_counter_main_t * cm)
{
uword i, j;
- vlib_mini_counter_t * my_minis;
+ vlib_mini_counter_t *my_minis;
- for (i = 0; i < vec_len(cm->minis); i++)
+ for (i = 0; i < vec_len (cm->minis); i++)
{
my_minis = cm->minis[i];
-
+
for (j = 0; j < vec_len (my_minis); j++)
- {
- cm->maxi[j].packets += my_minis[j].packets;
- cm->maxi[j].bytes += my_minis[j].bytes;
- my_minis[j].packets = 0;
- my_minis[j].bytes = 0;
- }
+ {
+ cm->maxi[j].packets += my_minis[j].packets;
+ cm->maxi[j].bytes += my_minis[j].bytes;
+ my_minis[j].packets = 0;
+ my_minis[j].bytes = 0;
+ }
}
j = vec_len (cm->maxi);
@@ -86,15 +88,16 @@ void vlib_clear_combined_counters (vlib_combined_counter_main_t * cm)
for (i = 0; i < j; i++)
{
- vlib_counter_t * c = vec_elt_at_index (cm->value_at_last_clear, i);
+ vlib_counter_t *c = vec_elt_at_index (cm->value_at_last_clear, i);
c[0] = cm->maxi[i];
}
}
-void vlib_validate_simple_counter (vlib_simple_counter_main_t *cm, u32 index)
+void
+vlib_validate_simple_counter (vlib_simple_counter_main_t * cm, u32 index)
{
- vlib_thread_main_t * tm = vlib_get_thread_main();
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
int i;
vec_validate (cm->minis, tm->n_vlib_mains - 1);
@@ -103,33 +106,46 @@ void vlib_validate_simple_counter (vlib_simple_counter_main_t *cm, u32 index)
vec_validate_aligned (cm->maxi, index, CLIB_CACHE_LINE_BYTES);
}
-void vlib_validate_combined_counter (vlib_combined_counter_main_t *cm, u32 index)
+void
+vlib_validate_combined_counter (vlib_combined_counter_main_t * cm, u32 index)
{
- vlib_thread_main_t * tm = vlib_get_thread_main();
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
int i;
vec_validate (cm->minis, tm->n_vlib_mains - 1);
- for (i = 0; i < tm->n_vlib_mains ; i++)
+ for (i = 0; i < tm->n_vlib_mains; i++)
vec_validate_aligned (cm->minis[i], index, CLIB_CACHE_LINE_BYTES);
vec_validate_aligned (cm->maxi, index, CLIB_CACHE_LINE_BYTES);
}
-void serialize_vlib_simple_counter_main (serialize_main_t * m, va_list * va)
+void
+serialize_vlib_simple_counter_main (serialize_main_t * m, va_list * va)
{
clib_warning ("unimplemented");
}
-void unserialize_vlib_simple_counter_main (serialize_main_t * m, va_list * va)
+void
+unserialize_vlib_simple_counter_main (serialize_main_t * m, va_list * va)
{
clib_warning ("unimplemented");
}
-void serialize_vlib_combined_counter_main (serialize_main_t * m, va_list * va)
+void
+serialize_vlib_combined_counter_main (serialize_main_t * m, va_list * va)
{
clib_warning ("unimplemented");
}
-void unserialize_vlib_combined_counter_main (serialize_main_t * m, va_list * va)
+void
+unserialize_vlib_combined_counter_main (serialize_main_t * m, va_list * va)
{
clib_warning ("unimplemented");
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/counter.h b/vlib/vlib/counter.h
index 8db999c3a94..845bd4ebffc 100644
--- a/vlib/vlib/counter.h
+++ b/vlib/vlib/counter.h
@@ -40,40 +40,39 @@
#ifndef included_vlib_counter_h
#define included_vlib_counter_h
-/*
+/*
* Annoyingly enough, counters are created long before
* the CPU configuration is available, so we have to
* preallocate the mini-counter per-cpu vectors
*/
-typedef struct {
+typedef struct
+{
/* Compact counters that (rarely) can overflow. */
- u16 ** minis;
+ u16 **minis;
/* Counters to hold overflow. */
- u64 * maxi;
+ u64 *maxi;
/* Counter values as of last clear. */
- u64 * value_at_last_clear;
+ u64 *value_at_last_clear;
/* Values as of last serialize. */
- u64 * value_at_last_serialize;
+ u64 *value_at_last_serialize;
/* Last counter index serialized incrementally. */
u32 last_incremental_serialize_index;
/* Counter name. */
- char * name;
+ char *name;
} vlib_simple_counter_main_t;
always_inline void
vlib_increment_simple_counter (vlib_simple_counter_main_t * cm,
- u32 cpu_index,
- u32 index,
- u32 increment)
+ u32 cpu_index, u32 index, u32 increment)
{
- u16 * my_minis;
- u16 * mini;
+ u16 *my_minis;
+ u16 *mini;
u32 old, new;
my_minis = cm->minis[cpu_index];
@@ -100,7 +99,7 @@ vlib_get_simple_counter (vlib_simple_counter_main_t * cm, u32 index)
v = 0;
- for (i = 0; i < vec_len(cm->minis); i++)
+ for (i = 0; i < vec_len (cm->minis); i++)
{
my_minis = cm->minis[i];
mini = vec_elt_at_index (my_minis, index);
@@ -121,12 +120,12 @@ vlib_get_simple_counter (vlib_simple_counter_main_t * cm, u32 index)
always_inline void
vlib_zero_simple_counter (vlib_simple_counter_main_t * cm, u32 index)
{
- u16 * my_minis;
+ u16 *my_minis;
int i;
ASSERT (index < vec_len (cm->maxi));
- for (i = 0; i < vec_len(cm->minis); i++)
+ for (i = 0; i < vec_len (cm->minis); i++)
{
my_minis = cm->minis[i];
my_minis[index] = 0;
@@ -140,7 +139,8 @@ vlib_zero_simple_counter (vlib_simple_counter_main_t * cm, u32 index)
/* Combined counters hold both packets and byte differences. */
/* Maxi-packet/byte counter. */
-typedef struct {
+typedef struct
+{
u64 packets, bytes;
} vlib_counter_t;
@@ -162,10 +162,13 @@ vlib_counter_sub (vlib_counter_t * a, vlib_counter_t * b)
always_inline void
vlib_counter_zero (vlib_counter_t * a)
-{ a->packets = a->bytes = 0; }
+{
+ a->packets = a->bytes = 0;
+}
/* Micro-counter: 16 bits of packets and 16 bits of byte difference. */
-typedef struct {
+typedef struct
+{
/* Packet count. */
u16 packets;
@@ -173,21 +176,22 @@ typedef struct {
i16 bytes;
} vlib_mini_counter_t;
-typedef struct {
+typedef struct
+{
/* Compact counters that (rarely) can overflow. */
- vlib_mini_counter_t ** minis;
+ vlib_mini_counter_t **minis;
/* Counters to hold overflow. */
- vlib_counter_t * maxi;
+ vlib_counter_t *maxi;
/* Debug counters for testing. */
- vlib_counter_t * debug;
+ vlib_counter_t *debug;
/* Counter values as of last clear. */
- vlib_counter_t * value_at_last_clear;
+ vlib_counter_t *value_at_last_clear;
/* Counter values as of last serialize. */
- vlib_counter_t * value_at_last_serialize;
+ vlib_counter_t *value_at_last_serialize;
/* Last counter index serialized incrementally. */
u32 last_incremental_serialize_index;
@@ -199,7 +203,7 @@ typedef struct {
u32 ave_packets, ave_bytes;
/* Counter name. */
- char * name;
+ char *name;
} vlib_combined_counter_main_t;
@@ -208,12 +212,11 @@ void vlib_clear_combined_counters (vlib_combined_counter_main_t * cm);
always_inline void
vlib_increment_combined_counter (vlib_combined_counter_main_t * cm,
- u32 cpu_index,
+ u32 cpu_index,
u32 index,
- u32 packet_increment,
- u32 byte_increment)
+ u32 packet_increment, u32 byte_increment)
{
- vlib_mini_counter_t * my_minis, * mini;
+ vlib_mini_counter_t *my_minis, *mini;
u32 old_packets, new_packets;
i32 old_bytes, new_bytes;
@@ -233,7 +236,7 @@ vlib_increment_combined_counter (vlib_combined_counter_main_t * cm,
/* Bytes always overflow before packets.. */
if (PREDICT_FALSE (mini->bytes != new_bytes))
{
- vlib_counter_t * maxi = vec_elt_at_index (cm->maxi, index);
+ vlib_counter_t *maxi = vec_elt_at_index (cm->maxi, index);
__sync_fetch_and_add (&maxi->packets, new_packets);
__sync_fetch_and_add (&maxi->bytes, new_bytes);
@@ -246,17 +249,16 @@ vlib_increment_combined_counter (vlib_combined_counter_main_t * cm,
/* This is never done in the speed path */
static inline void
vlib_get_combined_counter (vlib_combined_counter_main_t * cm,
- u32 index,
- vlib_counter_t * result)
+ u32 index, vlib_counter_t * result)
{
- vlib_mini_counter_t * my_minis, * mini;
- vlib_counter_t * maxi;
+ vlib_mini_counter_t *my_minis, *mini;
+ vlib_counter_t *maxi;
int i;
result->packets = 0;
result->bytes = 0;
- for (i = 0; i < vec_len(cm->minis); i++)
+ for (i = 0; i < vec_len (cm->minis); i++)
{
my_minis = cm->minis[i];
@@ -274,13 +276,12 @@ vlib_get_combined_counter (vlib_combined_counter_main_t * cm,
}
always_inline void
-vlib_zero_combined_counter (vlib_combined_counter_main_t * cm,
- u32 index)
+vlib_zero_combined_counter (vlib_combined_counter_main_t * cm, u32 index)
{
- vlib_mini_counter_t * mini, * my_minis;
+ vlib_mini_counter_t *mini, *my_minis;
int i;
- for (i = 0; i < vec_len(cm->minis); i++)
+ for (i = 0; i < vec_len (cm->minis); i++)
{
my_minis = cm->minis[i];
@@ -294,13 +295,25 @@ vlib_zero_combined_counter (vlib_combined_counter_main_t * cm,
vlib_counter_zero (&cm->value_at_last_clear[index]);
}
-void vlib_validate_simple_counter (vlib_simple_counter_main_t *cm, u32 index);
-void vlib_validate_combined_counter (vlib_combined_counter_main_t *cm, u32 index);
+void vlib_validate_simple_counter (vlib_simple_counter_main_t * cm,
+ u32 index);
+void vlib_validate_combined_counter (vlib_combined_counter_main_t * cm,
+ u32 index);
/* Number of simple/combined counters allocated. */
#define vlib_counter_len(cm) vec_len((cm)->maxi)
-serialize_function_t serialize_vlib_simple_counter_main, unserialize_vlib_simple_counter_main;
-serialize_function_t serialize_vlib_combined_counter_main, unserialize_vlib_combined_counter_main;
+serialize_function_t serialize_vlib_simple_counter_main,
+ unserialize_vlib_simple_counter_main;
+serialize_function_t serialize_vlib_combined_counter_main,
+ unserialize_vlib_combined_counter_main;
#endif /* included_vlib_counter_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/defs.h b/vlib/vlib/defs.h
index ff9046861f3..ad58bc04681 100644
--- a/vlib/vlib/defs.h
+++ b/vlib/vlib/defs.h
@@ -41,7 +41,8 @@
#define included_vlib_defs_h
/* Receive or transmit. */
-typedef enum {
+typedef enum
+{
VLIB_RX,
VLIB_TX,
VLIB_N_RX_TX = 2, /* Used to size arrays. */
@@ -50,21 +51,32 @@ typedef enum {
#define vlib_foreach_rx_tx(v) for (v = 0; v < VLIB_N_RX_TX; v++)
/* Read/write. */
-typedef enum {
+typedef enum
+{
VLIB_READ,
VLIB_WRITE,
} vlib_read_or_write_t;
/* Up/down. */
-typedef enum {
+typedef enum
+{
VLIB_DOWN = 0,
VLIB_UP = 1,
} vlib_up_or_down_t;
/* Enable/disable. */
-typedef enum {
+typedef enum
+{
VLIB_DISABLE = 0,
VLIB_ENABLE = 1,
} vlib_enable_or_disable_t;
#endif /* included_vlib_defs_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/dpdk_buffer.c b/vlib/vlib/dpdk_buffer.c
index c0094938479..7e6e84247d5 100644
--- a/vlib/vlib/dpdk_buffer.c
+++ b/vlib/vlib/dpdk_buffer.c
@@ -70,9 +70,11 @@
#pragma weak rte_socket_id
#pragma weak rte_pktmbuf_pool_create
-uword vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm, vlib_buffer_t * b_first)
+uword
+vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm,
+ vlib_buffer_t * b_first)
{
- vlib_buffer_t * b = b_first;
+ vlib_buffer_t *b = b_first;
uword l_first = b_first->current_length;
uword l = 0;
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
@@ -85,14 +87,14 @@ uword vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm, vlib_buffer_t * b
return l + l_first;
}
-u8 * format_vlib_buffer (u8 * s, va_list * args)
+u8 *
+format_vlib_buffer (u8 * s, va_list * args)
{
- vlib_buffer_t * b = va_arg (*args, vlib_buffer_t *);
+ vlib_buffer_t *b = va_arg (*args, vlib_buffer_t *);
uword indent = format_get_indent (s);
s = format (s, "current data %d, length %d, free-list %d",
- b->current_data, b->current_length,
- b->free_list_index);
+ b->current_data, b->current_length, b->free_list_index);
if (b->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID)
s = format (s, ", totlen-nifb %d",
@@ -103,9 +105,9 @@ u8 * format_vlib_buffer (u8 * s, va_list * args)
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
{
- vlib_main_t * vm = vlib_get_main();
+ vlib_main_t *vm = vlib_get_main ();
u32 next_buffer = b->next_buffer;
- b = vlib_get_buffer(vm, next_buffer);
+ b = vlib_get_buffer (vm, next_buffer);
s = format (s, "\n%Unext-buffer 0x%x, segment length %d",
format_white_space, indent, next_buffer, b->current_length);
@@ -115,10 +117,11 @@ u8 * format_vlib_buffer (u8 * s, va_list * args)
return s;
}
-u8 * format_vlib_buffer_and_data (u8 * s, va_list * args)
+u8 *
+format_vlib_buffer_and_data (u8 * s, va_list * args)
{
- vlib_buffer_t * b = va_arg (*args, vlib_buffer_t *);
-
+ vlib_buffer_t *b = va_arg (*args, vlib_buffer_t *);
+
s = format (s, "%U, %U",
format_vlib_buffer, b,
format_hex_bytes, vlib_buffer_get_current (b), 64);
@@ -126,16 +129,16 @@ u8 * format_vlib_buffer_and_data (u8 * s, va_list * args)
return s;
}
-u8 * format_vlib_buffer_contents (u8 * s, va_list * va)
+u8 *
+format_vlib_buffer_contents (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
- vlib_buffer_t * b = va_arg (*va, vlib_buffer_t *);
-
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
+ vlib_buffer_t *b = va_arg (*va, vlib_buffer_t *);
+
while (1)
{
- vec_add (s, vlib_buffer_get_current (b),
- b->current_length);
- if (! (b->flags & VLIB_BUFFER_NEXT_PRESENT))
+ vec_add (s, vlib_buffer_get_current (b), b->current_length);
+ if (!(b->flags & VLIB_BUFFER_NEXT_PRESENT))
break;
b = vlib_get_buffer (vm, b->next_buffer);
}
@@ -147,10 +150,10 @@ vlib_main_t **vlib_mains;
/* Aligned copy routine. */
void
-vlib_aligned_memcpy (void * _dst, void * _src, int n_bytes)
+vlib_aligned_memcpy (void *_dst, void *_src, int n_bytes)
{
- vlib_copy_unit_t * dst = _dst;
- vlib_copy_unit_t * src = _src;
+ vlib_copy_unit_t *dst = _dst;
+ vlib_copy_unit_t *src = _src;
/* Arguments must be naturally aligned. */
ASSERT (pointer_to_uword (dst) % sizeof (dst[0]) == 0);
@@ -198,7 +201,7 @@ vlib_aligned_memcpy (void * _dst, void * _src, int n_bytes)
}
}
else
- /* Cache line size unknown: fall back to slow version. */;
+ /* Cache line size unknown: fall back to slow version. */ ;
while (n_bytes > 0)
{
@@ -269,8 +272,8 @@ merge_free_lists (vlib_buffer_free_list_t * dst,
vlib_buffer_free_list_t * src)
{
uword l;
- u32 * d;
-
+ u32 *d;
+
trim_aligned (src);
trim_aligned (dst);
@@ -294,10 +297,10 @@ merge_free_lists (vlib_buffer_free_list_t * dst,
always_inline u32
vlib_buffer_get_free_list_with_size (vlib_main_t * vm, u32 size)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
+ vlib_buffer_main_t *bm = vm->buffer_main;
size = vlib_buffer_round_size (size);
- uword * p = hash_get (bm->free_list_by_size, size);
+ uword *p = hash_get (bm->free_list_by_size, size);
return p ? p[0] : ~0;
}
@@ -305,24 +308,26 @@ vlib_buffer_get_free_list_with_size (vlib_main_t * vm, u32 size)
static u32
vlib_buffer_create_free_list_helper (vlib_main_t * vm,
u32 n_data_bytes,
- u32 is_public,
- u32 is_default,
- u8 * name)
+ u32 is_public, u32 is_default, u8 * name)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
- if (! is_default && pool_elts (bm->buffer_free_list_pool) == 0)
+ if (!is_default && pool_elts (bm->buffer_free_list_pool) == 0)
{
u32 default_free_free_list_index;
+ /* *INDENT-OFF* */
default_free_free_list_index =
- vlib_buffer_create_free_list_helper (vm,
- /* default buffer size */ VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
- /* is_public */ 1,
- /* is_default */ 1,
- (u8 *) "default");
- ASSERT (default_free_free_list_index == VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
+ vlib_buffer_create_free_list_helper
+ (vm,
+ /* default buffer size */ VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
+ /* is_public */ 1,
+ /* is_default */ 1,
+ (u8 *) "default");
+ /* *INDENT-ON* */
+ ASSERT (default_free_free_list_index ==
+ VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
if (n_data_bytes == VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES && is_public)
return default_free_free_list_index;
@@ -341,19 +346,20 @@ vlib_buffer_create_free_list_helper (vlib_main_t * vm,
if (is_public)
{
- uword * p = hash_get (bm->free_list_by_size, f->n_data_bytes);
- if (! p)
+ uword *p = hash_get (bm->free_list_by_size, f->n_data_bytes);
+ if (!p)
hash_set (bm->free_list_by_size, f->n_data_bytes, f->index);
}
return f->index;
}
-u32 vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
- char * fmt, ...)
+u32
+vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
+ char *fmt, ...)
{
va_list va;
- u8 * name;
+ u8 *name;
va_start (va, fmt);
name = va_format (0, fmt, &va);
@@ -365,15 +371,16 @@ u32 vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
name);
}
-u32 vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
- char * fmt, ...)
+u32
+vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
+ char *fmt, ...)
{
u32 i = vlib_buffer_get_free_list_with_size (vm, n_data_bytes);
if (i == ~0)
{
va_list va;
- u8 * name;
+ u8 *name;
va_start (va, fmt);
name = va_format (0, fmt, &va);
@@ -384,7 +391,7 @@ u32 vlib_buffer_get_or_create_free_list (vlib_main_t * vm, u32 n_data_bytes,
/* is_default */ 0,
name);
}
-
+
return i;
}
@@ -395,28 +402,31 @@ del_free_list (vlib_main_t * vm, vlib_buffer_free_list_t * f)
struct rte_mbuf *mb;
vlib_buffer_t *b;
- for (i = 0; i < vec_len (f->unaligned_buffers); i++) {
+ for (i = 0; i < vec_len (f->unaligned_buffers); i++)
+ {
b = vlib_get_buffer (vm, f->unaligned_buffers[i]);
- mb = rte_mbuf_from_vlib_buffer(b);
- ASSERT(rte_mbuf_refcnt_read(mb) == 1);
+ mb = rte_mbuf_from_vlib_buffer (b);
+ ASSERT (rte_mbuf_refcnt_read (mb) == 1);
rte_pktmbuf_free (mb);
- }
- for (i = 0; i < vec_len (f->aligned_buffers); i++) {
+ }
+ for (i = 0; i < vec_len (f->aligned_buffers); i++)
+ {
b = vlib_get_buffer (vm, f->aligned_buffers[i]);
- mb = rte_mbuf_from_vlib_buffer(b);
- ASSERT(rte_mbuf_refcnt_read(mb) == 1);
+ mb = rte_mbuf_from_vlib_buffer (b);
+ ASSERT (rte_mbuf_refcnt_read (mb) == 1);
rte_pktmbuf_free (mb);
- }
+ }
vec_free (f->name);
vec_free (f->unaligned_buffers);
vec_free (f->aligned_buffers);
}
/* Add buffer free list. */
-void vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index)
+void
+vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
u32 merge_index;
f = vlib_buffer_get_free_list (vm, free_list_index);
@@ -439,19 +449,18 @@ void vlib_buffer_delete_free_list (vlib_main_t * vm, u32 free_list_index)
/* Make sure free list has at least given number of free buffers. */
static uword
fill_free_list (vlib_main_t * vm,
- vlib_buffer_free_list_t * fl,
- uword min_free_buffers)
+ vlib_buffer_free_list_t * fl, uword min_free_buffers)
{
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
int n, i;
u32 bi;
u32 n_remaining = 0, n_alloc = 0;
- unsigned socket_id = rte_socket_id ? rte_socket_id() : 0;
+ unsigned socket_id = rte_socket_id ? rte_socket_id () : 0;
struct rte_mempool *rmp = vm->buffer_main->pktmbuf_pools[socket_id];
struct rte_mbuf *mb;
-
+
/* Too early? */
- if (PREDICT_FALSE(rmp == 0))
+ if (PREDICT_FALSE (rmp == 0))
return 0;
trim_aligned (fl);
@@ -467,8 +476,8 @@ fill_free_list (vlib_main_t * vm,
/* Always allocate new buffers in reasonably large sized chunks. */
n = clib_max (n, fl->min_n_buffers_each_physmem_alloc);
- vec_validate (vm->mbuf_alloc_list, n-1);
-
+ vec_validate (vm->mbuf_alloc_list, n - 1);
+
if (rte_mempool_get_bulk (rmp, vm->mbuf_alloc_list, n) < 0)
return 0;
@@ -478,23 +487,23 @@ fill_free_list (vlib_main_t * vm,
{
mb = vm->mbuf_alloc_list[i];
- ASSERT(rte_mbuf_refcnt_read(mb) == 0);
- rte_mbuf_refcnt_set(mb, 1);
+ ASSERT (rte_mbuf_refcnt_read (mb) == 0);
+ rte_mbuf_refcnt_set (mb, 1);
mb->next = NULL;
mb->data_off = RTE_PKTMBUF_HEADROOM;
mb->nb_segs = 1;
- b = vlib_buffer_from_rte_mbuf(mb);
+ b = vlib_buffer_from_rte_mbuf (mb);
bi = vlib_get_buffer_index (vm, b);
-
+
vec_add1_aligned (fl->aligned_buffers, bi, sizeof (vlib_copy_unit_t));
n_alloc++;
n_remaining--;
vlib_buffer_init_for_free_list (b, fl);
-
+
if (fl->buffer_init_function)
- fl->buffer_init_function (vm, fl, &bi, 1);
+ fl->buffer_init_function (vm, fl, &bi, 1);
}
fl->n_alloc += n;
@@ -504,15 +513,16 @@ fill_free_list (vlib_main_t * vm,
always_inline uword
copy_alignment (u32 * x)
-{ return (pointer_to_uword (x) / sizeof (x[0])) % BUFFERS_PER_COPY; }
+{
+ return (pointer_to_uword (x) / sizeof (x[0])) % BUFFERS_PER_COPY;
+}
static u32
alloc_from_free_list (vlib_main_t * vm,
vlib_buffer_free_list_t * free_list,
- u32 * alloc_buffers,
- u32 n_alloc_buffers)
+ u32 * alloc_buffers, u32 n_alloc_buffers)
{
- u32 * dst, * u_src;
+ u32 *dst, *u_src;
uword u_len, n_left;
uword n_unaligned_start, n_unaligned_end, n_filled;
@@ -524,7 +534,7 @@ alloc_from_free_list (vlib_main_t * vm,
n_filled = fill_free_list (vm, free_list, n_alloc_buffers);
if (n_filled == 0)
return 0;
-
+
n_left = n_filled < n_left ? n_filled : n_left;
n_alloc_buffers = n_left;
@@ -562,11 +572,12 @@ alloc_from_free_list (vlib_main_t * vm,
/* Aligned copy. */
{
- vlib_copy_unit_t * d, * s;
+ vlib_copy_unit_t *d, *s;
uword n_copy;
- if (vec_len(free_list->aligned_buffers) < ((n_left/BUFFERS_PER_COPY)*BUFFERS_PER_COPY))
- abort();
+ if (vec_len (free_list->aligned_buffers) <
+ ((n_left / BUFFERS_PER_COPY) * BUFFERS_PER_COPY))
+ abort ();
n_copy = n_left / BUFFERS_PER_COPY;
n_left = n_left % BUFFERS_PER_COPY;
@@ -609,7 +620,7 @@ alloc_from_free_list (vlib_main_t * vm,
u_len--;
}
- if (! free_list->unaligned_buffers)
+ if (!free_list->unaligned_buffers)
ASSERT (u_len == 0);
else
_vec_len (free_list->unaligned_buffers) = u_len;
@@ -620,9 +631,10 @@ alloc_from_free_list (vlib_main_t * vm,
/* Allocate a given number of buffers into given array.
Returns number actually allocated which will be either zero or
number requested. */
-u32 vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
+u32
+vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
+ vlib_buffer_main_t *bm = vm->buffer_main;
return alloc_from_free_list
(vm,
@@ -631,43 +643,45 @@ u32 vlib_buffer_alloc (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
buffers, n_buffers);
}
-u32 vlib_buffer_alloc_from_free_list (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers,
- u32 free_list_index)
+u32
+vlib_buffer_alloc_from_free_list (vlib_main_t * vm,
+ u32 * buffers,
+ u32 n_buffers, u32 free_list_index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *f;
f = pool_elt_at_index (bm->buffer_free_list_pool, free_list_index);
return alloc_from_free_list (vm, f, buffers, n_buffers);
}
always_inline void
add_buffer_to_free_list (vlib_main_t * vm,
- vlib_buffer_free_list_t * f,
+ vlib_buffer_free_list_t * f,
u32 buffer_index, u8 do_init)
{
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
b = vlib_get_buffer (vm, buffer_index);
- if (PREDICT_TRUE(do_init))
- vlib_buffer_init_for_free_list (b, f);
- vec_add1_aligned (f->aligned_buffers, buffer_index, sizeof (vlib_copy_unit_t));
+ if (PREDICT_TRUE (do_init))
+ vlib_buffer_init_for_free_list (b, f);
+ vec_add1_aligned (f->aligned_buffers, buffer_index,
+ sizeof (vlib_copy_unit_t));
}
always_inline vlib_buffer_free_list_t *
buffer_get_free_list (vlib_main_t * vm, vlib_buffer_t * b, u32 * index)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
+ vlib_buffer_main_t *bm = vm->buffer_main;
u32 i;
*index = i = b->free_list_index;
return pool_elt_at_index (bm->buffer_free_list_pool, i);
}
-void *vlib_set_buffer_free_callback (vlib_main_t *vm, void *fp)
+void *
+vlib_set_buffer_free_callback (vlib_main_t * vm, void *fp)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- void * rv = bm->buffer_free_callback;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ void *rv = bm->buffer_free_callback;
bm->buffer_free_callback = fp;
return rv;
@@ -675,137 +689,135 @@ void *vlib_set_buffer_free_callback (vlib_main_t *vm, void *fp)
static_always_inline void
vlib_buffer_free_inline (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers,
- u32 follow_buffer_next)
+ u32 * buffers, u32 n_buffers, u32 follow_buffer_next)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_buffer_free_list_t * fl;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_buffer_free_list_t *fl;
u32 fi;
int i;
- u32 (*cb)(vlib_main_t * vm, u32 * buffers, u32 n_buffers,
- u32 follow_buffer_next);
+ u32 (*cb) (vlib_main_t * vm, u32 * buffers, u32 n_buffers,
+ u32 follow_buffer_next);
cb = bm->buffer_free_callback;
if (PREDICT_FALSE (cb != 0))
- n_buffers = (*cb)(vm, buffers, n_buffers, follow_buffer_next);
+ n_buffers = (*cb) (vm, buffers, n_buffers, follow_buffer_next);
- if (! n_buffers)
+ if (!n_buffers)
return;
- for (i = 0; i < n_buffers; i++)
+ for (i = 0; i < n_buffers; i++)
{
- vlib_buffer_t * b;
- struct rte_mbuf * mb;
-
+ vlib_buffer_t *b;
+ struct rte_mbuf *mb;
+
b = vlib_get_buffer (vm, buffers[i]);
fl = buffer_get_free_list (vm, b, &fi);
-
+
/* The only current use of this callback: multicast recycle */
- if (PREDICT_FALSE (fl->buffers_added_to_freelist_function != 0))
- {
- int j;
-
- add_buffer_to_free_list
- (vm, fl, buffers[i],
- (b->flags & VLIB_BUFFER_RECYCLE) == 0);
-
- for (j = 0; j < vec_len (bm->announce_list); j++)
- {
- if (fl == bm->announce_list[j])
- goto already_announced;
- }
- vec_add1 (bm->announce_list, fl);
- already_announced:
- ;
- }
+ if (PREDICT_FALSE (fl->buffers_added_to_freelist_function != 0))
+ {
+ int j;
+
+ add_buffer_to_free_list
+ (vm, fl, buffers[i], (b->flags & VLIB_BUFFER_RECYCLE) == 0);
+
+ for (j = 0; j < vec_len (bm->announce_list); j++)
+ {
+ if (fl == bm->announce_list[j])
+ goto already_announced;
+ }
+ vec_add1 (bm->announce_list, fl);
+ already_announced:
+ ;
+ }
else
- {
- if (PREDICT_TRUE ((b->flags & VLIB_BUFFER_RECYCLE) == 0))
+ {
+ if (PREDICT_TRUE ((b->flags & VLIB_BUFFER_RECYCLE) == 0))
{
- mb = rte_mbuf_from_vlib_buffer(b);
- ASSERT(rte_mbuf_refcnt_read(mb) == 1);
+ mb = rte_mbuf_from_vlib_buffer (b);
+ ASSERT (rte_mbuf_refcnt_read (mb) == 1);
rte_pktmbuf_free (mb);
}
}
}
- if (vec_len(bm->announce_list))
+ if (vec_len (bm->announce_list))
{
- vlib_buffer_free_list_t * fl;
+ vlib_buffer_free_list_t *fl;
for (i = 0; i < vec_len (bm->announce_list); i++)
- {
- fl = bm->announce_list[i];
- fl->buffers_added_to_freelist_function (vm, fl);
- }
- _vec_len(bm->announce_list) = 0;
+ {
+ fl = bm->announce_list[i];
+ fl->buffers_added_to_freelist_function (vm, fl);
+ }
+ _vec_len (bm->announce_list) = 0;
}
}
-void vlib_buffer_free (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers)
+void
+vlib_buffer_free (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
{
- vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */ 1);
+ vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */
+ 1);
}
-void vlib_buffer_free_no_next (vlib_main_t * vm,
- u32 * buffers,
- u32 n_buffers)
+void
+vlib_buffer_free_no_next (vlib_main_t * vm, u32 * buffers, u32 n_buffers)
{
- vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */ 0);
+ vlib_buffer_free_inline (vm, buffers, n_buffers, /* follow_buffer_next */
+ 0);
}
/* Copy template packet data into buffers as they are allocated. */
-__attribute__((unused)) static void
-vlib_packet_template_buffer_init (vlib_main_t * vm,
- vlib_buffer_free_list_t * fl,
- u32 * buffers,
- u32 n_buffers)
+__attribute__ ((unused))
+ static void
+ vlib_packet_template_buffer_init (vlib_main_t * vm,
+ vlib_buffer_free_list_t * fl,
+ u32 * buffers, u32 n_buffers)
{
- vlib_packet_template_t * t = uword_to_pointer (fl->buffer_init_function_opaque,
- vlib_packet_template_t *);
+ vlib_packet_template_t *t =
+ uword_to_pointer (fl->buffer_init_function_opaque,
+ vlib_packet_template_t *);
uword i;
for (i = 0; i < n_buffers; i++)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, buffers[i]);
+ vlib_buffer_t *b = vlib_get_buffer (vm, buffers[i]);
ASSERT (b->current_length == vec_len (t->packet_data));
- clib_memcpy (vlib_buffer_get_current (b), t->packet_data, b->current_length);
+ clib_memcpy (vlib_buffer_get_current (b), t->packet_data,
+ b->current_length);
}
}
-void vlib_packet_template_init (vlib_main_t * vm,
- vlib_packet_template_t * t,
- void * packet_data,
- uword n_packet_data_bytes,
- uword min_n_buffers_each_physmem_alloc,
- char * fmt,
- ...)
+void
+vlib_packet_template_init (vlib_main_t * vm,
+ vlib_packet_template_t * t,
+ void *packet_data,
+ uword n_packet_data_bytes,
+ uword min_n_buffers_each_physmem_alloc,
+ char *fmt, ...)
{
va_list va;
- __attribute__((unused)) u8 * name;
+ __attribute__ ((unused)) u8 *name;
va_start (va, fmt);
name = va_format (0, fmt, &va);
va_end (va);
- vlib_worker_thread_barrier_sync(vm);
+ vlib_worker_thread_barrier_sync (vm);
memset (t, 0, sizeof (t[0]));
vec_add (t->packet_data, packet_data, n_packet_data_bytes);
- vlib_worker_thread_barrier_release(vm);
+ vlib_worker_thread_barrier_release (vm);
}
void *
-vlib_packet_template_get_packet (vlib_main_t * vm,
- vlib_packet_template_t * t,
- u32 * bi_result)
+vlib_packet_template_get_packet (vlib_main_t * vm,
+ vlib_packet_template_t * t, u32 * bi_result)
{
u32 bi;
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
if (vlib_buffer_alloc (vm, &bi, 1) != 1)
return 0;
@@ -814,12 +826,12 @@ vlib_packet_template_get_packet (vlib_main_t * vm,
b = vlib_get_buffer (vm, bi);
clib_memcpy (vlib_buffer_get_current (b),
- t->packet_data, vec_len(t->packet_data));
- b->current_length = vec_len(t->packet_data);
+ t->packet_data, vec_len (t->packet_data));
+ b->current_length = vec_len (t->packet_data);
/* Fix up mbuf header length fields */
- struct rte_mbuf * mb;
- mb = rte_mbuf_from_vlib_buffer(b);
+ struct rte_mbuf *mb;
+ mb = rte_mbuf_from_vlib_buffer (b);
mb->data_len = b->current_length;
mb->pkt_len = b->current_length;
@@ -827,14 +839,14 @@ vlib_packet_template_get_packet (vlib_main_t * vm,
}
/* Append given data to end of buffer, possibly allocating new buffers. */
-u32 vlib_buffer_add_data (vlib_main_t * vm,
- u32 free_list_index,
- u32 buffer_index,
- void * data, u32 n_data_bytes)
+u32
+vlib_buffer_add_data (vlib_main_t * vm,
+ u32 free_list_index,
+ u32 buffer_index, void *data, u32 n_data_bytes)
{
u32 n_buffer_bytes, n_left, n_left_this_buffer, bi;
- vlib_buffer_t * b;
- void * d;
+ vlib_buffer_t *b;
+ void *d;
bi = buffer_index;
if (bi == 0
@@ -844,11 +856,11 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
d = data;
n_left = n_data_bytes;
n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, free_list_index);
-
+
b = vlib_get_buffer (vm, bi);
b->flags &= ~VLIB_BUFFER_TOTAL_LENGTH_VALID;
- /* Get to the end of the chain before we try to append data...*/
+ /* Get to the end of the chain before we try to append data... */
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
b = vlib_get_buffer (vm, b->next_buffer);
@@ -857,7 +869,8 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
u32 n;
ASSERT (n_buffer_bytes >= b->current_length);
- n_left_this_buffer = n_buffer_bytes - (b->current_data + b->current_length);
+ n_left_this_buffer =
+ n_buffer_bytes - (b->current_data + b->current_length);
n = clib_min (n_left_this_buffer, n_left);
clib_memcpy (vlib_buffer_get_current (b) + b->current_length, d, n);
b->current_length += n;
@@ -866,7 +879,9 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
break;
d += n;
- if (1 != vlib_buffer_alloc_from_free_list (vm, &b->next_buffer, 1, free_list_index))
+ if (1 !=
+ vlib_buffer_alloc_from_free_list (vm, &b->next_buffer, 1,
+ free_list_index))
goto out_of_buffers;
b->flags |= VLIB_BUFFER_NEXT_PRESENT;
@@ -876,115 +891,123 @@ u32 vlib_buffer_add_data (vlib_main_t * vm,
return bi;
- out_of_buffers:
+out_of_buffers:
clib_error ("out of buffers");
return bi;
}
u16
-vlib_buffer_chain_append_data_with_alloc(vlib_main_t *vm,
- u32 free_list_index,
- vlib_buffer_t *first,
- vlib_buffer_t **last,
- void * data, u16 data_len) {
+vlib_buffer_chain_append_data_with_alloc (vlib_main_t * vm,
+ u32 free_list_index,
+ vlib_buffer_t * first,
+ vlib_buffer_t ** last,
+ void *data, u16 data_len)
+{
vlib_buffer_t *l = *last;
- u32 n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, free_list_index);
+ u32 n_buffer_bytes =
+ vlib_buffer_free_list_buffer_size (vm, free_list_index);
u16 copied = 0;
- ASSERT(n_buffer_bytes >= l->current_length + l->current_data);
- while (data_len) {
- u16 max = n_buffer_bytes - l->current_length - l->current_data;
- if (max == 0) {
- if (1 != vlib_buffer_alloc_from_free_list (vm, &l->next_buffer, 1, free_list_index))
- return copied;
- *last = l = vlib_buffer_chain_buffer(vm, first, l, l->next_buffer);
- max = n_buffer_bytes - l->current_length - l->current_data;
- }
+ ASSERT (n_buffer_bytes >= l->current_length + l->current_data);
+ while (data_len)
+ {
+ u16 max = n_buffer_bytes - l->current_length - l->current_data;
+ if (max == 0)
+ {
+ if (1 !=
+ vlib_buffer_alloc_from_free_list (vm, &l->next_buffer, 1,
+ free_list_index))
+ return copied;
+ *last = l = vlib_buffer_chain_buffer (vm, first, l, l->next_buffer);
+ max = n_buffer_bytes - l->current_length - l->current_data;
+ }
- u16 len = (data_len > max)?max:data_len;
- clib_memcpy(vlib_buffer_get_current (l) + l->current_length, data + copied, len);
- vlib_buffer_chain_increase_length(first, l, len);
- data_len -= len;
- copied += len;
- }
+ u16 len = (data_len > max) ? max : data_len;
+ clib_memcpy (vlib_buffer_get_current (l) + l->current_length,
+ data + copied, len);
+ vlib_buffer_chain_increase_length (first, l, len);
+ data_len -= len;
+ copied += len;
+ }
return copied;
}
/*
* Fills in the required rte_mbuf fields for chained buffers given a VLIB chain.
*/
-void vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * b_first)
+void
+vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * b_first)
{
vlib_buffer_t *b = b_first, *prev = b_first;
struct rte_mbuf *mb_prev, *mb, *mb_first;
- mb_first = rte_mbuf_from_vlib_buffer(b_first);
+ mb_first = rte_mbuf_from_vlib_buffer (b_first);
mb_first->pkt_len = mb_first->data_len = b_first->current_length;
- while (b->flags & VLIB_BUFFER_NEXT_PRESENT) {
- b = vlib_get_buffer(vm, b->next_buffer);
- mb = rte_mbuf_from_vlib_buffer(b);
- mb_prev = rte_mbuf_from_vlib_buffer(prev);
+ while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
+ {
+ b = vlib_get_buffer (vm, b->next_buffer);
+ mb = rte_mbuf_from_vlib_buffer (b);
+ mb_prev = rte_mbuf_from_vlib_buffer (prev);
mb_first->nb_segs++;
mb_first->pkt_len += b->current_length;
mb_prev->next = mb;
mb->data_len = b->current_length;
prev = b;
- }
+ }
}
clib_error_t *
-vlib_buffer_pool_create(vlib_main_t * vm, unsigned num_mbufs,
- unsigned socket_id)
+vlib_buffer_pool_create (vlib_main_t * vm, unsigned num_mbufs,
+ unsigned socket_id)
{
- vlib_buffer_main_t * bm = vm->buffer_main;
- vlib_physmem_main_t * vpm = &vm->physmem_main;
- struct rte_mempool * rmp;
+ vlib_buffer_main_t *bm = vm->buffer_main;
+ vlib_physmem_main_t *vpm = &vm->physmem_main;
+ struct rte_mempool *rmp;
uword new_start, new_size;
int i;
if (!rte_pktmbuf_pool_create)
return clib_error_return (0, "not linked with DPDK");
- vec_validate_aligned(bm->pktmbuf_pools, socket_id, CLIB_CACHE_LINE_BYTES);
+ vec_validate_aligned (bm->pktmbuf_pools, socket_id, CLIB_CACHE_LINE_BYTES);
/* pool already exists, nothing to do */
if (bm->pktmbuf_pools[socket_id])
return 0;
- u8 * pool_name = format(0, "mbuf_pool_socket%u%c",socket_id, 0);
+ u8 *pool_name = format (0, "mbuf_pool_socket%u%c", socket_id, 0);
- rmp = rte_pktmbuf_pool_create((char *) pool_name, /* pool name */
- num_mbufs, /* number of mbufs */
- 512, /* cache size */
- VLIB_BUFFER_HDR_SIZE, /* priv size */
- VLIB_BUFFER_PRE_DATA_SIZE
- + VLIB_BUFFER_DATA_SIZE, /* dataroom size */
- socket_id); /* cpu socket */
+ rmp = rte_pktmbuf_pool_create ((char *) pool_name, /* pool name */
+ num_mbufs, /* number of mbufs */
+ 512, /* cache size */
+ VLIB_BUFFER_HDR_SIZE, /* priv size */
+ VLIB_BUFFER_PRE_DATA_SIZE + VLIB_BUFFER_DATA_SIZE, /* dataroom size */
+ socket_id); /* cpu socket */
- vec_free(pool_name);
+ vec_free (pool_name);
if (rmp)
{
- new_start = pointer_to_uword(rmp);
+ new_start = pointer_to_uword (rmp);
new_size = rmp->elt_va_end - new_start;
if (vpm->virtual.size > 0)
- {
- ASSERT(new_start != vpm->virtual.start);
- if (new_start < vpm->virtual.start)
- {
- new_size = vpm->virtual.size + vpm->virtual.start - new_start;
- }
- else
- {
- new_size += new_start - vpm->virtual.start;
- new_start = vpm->virtual.start;
- }
-
- /* check if fits into buffer index range */
- if ( (u64)new_size > ( (u64) 1 << (32 + CLIB_LOG2_CACHE_LINE_BYTES)))
- rmp = 0;
- }
+ {
+ ASSERT (new_start != vpm->virtual.start);
+ if (new_start < vpm->virtual.start)
+ {
+ new_size = vpm->virtual.size + vpm->virtual.start - new_start;
+ }
+ else
+ {
+ new_size += new_start - vpm->virtual.start;
+ new_start = vpm->virtual.start;
+ }
+
+ /* check if fits into buffer index range */
+ if ((u64) new_size > ((u64) 1 << (32 + CLIB_LOG2_CACHE_LINE_BYTES)))
+ rmp = 0;
+ }
}
if (rmp)
@@ -997,44 +1020,50 @@ vlib_buffer_pool_create(vlib_main_t * vm, unsigned num_mbufs,
}
/* no usable pool for this socket, try to use pool from another one */
- for (i = 0; i < vec_len(bm->pktmbuf_pools); i++)
+ for (i = 0; i < vec_len (bm->pktmbuf_pools); i++)
{
- if(bm->pktmbuf_pools[i])
- {
- clib_warning("WARNING: Failed to allocate mempool for CPU socket %u. "
- "Threads running on socket %u will use socket %u mempool.",
- socket_id, socket_id, i);
- bm->pktmbuf_pools[socket_id] = bm->pktmbuf_pools[i];
- return 0;
- }
+ if (bm->pktmbuf_pools[i])
+ {
+ clib_warning
+ ("WARNING: Failed to allocate mempool for CPU socket %u. "
+ "Threads running on socket %u will use socket %u mempool.",
+ socket_id, socket_id, i);
+ bm->pktmbuf_pools[socket_id] = bm->pktmbuf_pools[i];
+ return 0;
+ }
}
return clib_error_return (0, "failed to allocate mempool on socket %u",
- socket_id);
+ socket_id);
}
-static void vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t * s)
+static void
+vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t * s)
{
- vlib_main_t * vm;
- vlib_serialize_buffer_main_t * sm;
+ vlib_main_t *vm;
+ vlib_serialize_buffer_main_t *sm;
uword n, n_bytes_to_write;
- vlib_buffer_t * last;
+ vlib_buffer_t *last;
n_bytes_to_write = s->current_buffer_index;
- sm = uword_to_pointer (s->data_function_opaque, vlib_serialize_buffer_main_t *);
+ sm =
+ uword_to_pointer (s->data_function_opaque,
+ vlib_serialize_buffer_main_t *);
vm = sm->vlib_main;
ASSERT (sm->tx.max_n_data_bytes_per_chain > 0);
if (serialize_stream_is_end_of_stream (s)
- || sm->tx.n_total_data_bytes + n_bytes_to_write > sm->tx.max_n_data_bytes_per_chain)
+ || sm->tx.n_total_data_bytes + n_bytes_to_write >
+ sm->tx.max_n_data_bytes_per_chain)
{
- vlib_process_t * p = vlib_get_current_process (vm);
+ vlib_process_t *p = vlib_get_current_process (vm);
last = vlib_get_buffer (vm, sm->last_buffer);
last->current_length = n_bytes_to_write;
- vlib_set_next_frame_buffer (vm, &p->node_runtime, sm->tx.next_index, sm->first_buffer);
+ vlib_set_next_frame_buffer (vm, &p->node_runtime, sm->tx.next_index,
+ sm->first_buffer);
sm->first_buffer = sm->last_buffer = ~0;
sm->tx.n_total_data_bytes = 0;
@@ -1044,19 +1073,28 @@ static void vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t *
{
ASSERT (sm->first_buffer == ~0);
ASSERT (sm->last_buffer == ~0);
- n = vlib_buffer_alloc_from_free_list (vm, &sm->first_buffer, 1, sm->tx.free_list_index);
+ n =
+ vlib_buffer_alloc_from_free_list (vm, &sm->first_buffer, 1,
+ sm->tx.free_list_index);
if (n != 1)
- serialize_error (m, clib_error_create ("vlib_buffer_alloc_from_free_list fails"));
+ serialize_error (m,
+ clib_error_create
+ ("vlib_buffer_alloc_from_free_list fails"));
sm->last_buffer = sm->first_buffer;
- s->n_buffer_bytes = vlib_buffer_free_list_buffer_size (vm, sm->tx.free_list_index);
+ s->n_buffer_bytes =
+ vlib_buffer_free_list_buffer_size (vm, sm->tx.free_list_index);
}
if (n_bytes_to_write > 0)
{
- vlib_buffer_t * prev = vlib_get_buffer (vm, sm->last_buffer);
- n = vlib_buffer_alloc_from_free_list (vm, &sm->last_buffer, 1, sm->tx.free_list_index);
+ vlib_buffer_t *prev = vlib_get_buffer (vm, sm->last_buffer);
+ n =
+ vlib_buffer_alloc_from_free_list (vm, &sm->last_buffer, 1,
+ sm->tx.free_list_index);
if (n != 1)
- serialize_error (m, clib_error_create ("vlib_buffer_alloc_from_free_list fails"));
+ serialize_error (m,
+ clib_error_create
+ ("vlib_buffer_alloc_from_free_list fails"));
sm->tx.n_total_data_bytes += n_bytes_to_write;
prev->current_length = n_bytes_to_write;
prev->next_buffer = sm->last_buffer;
@@ -1072,13 +1110,16 @@ static void vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t *
}
}
-static void vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t * s)
+static void
+vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t * s)
{
- vlib_main_t * vm;
- vlib_serialize_buffer_main_t * sm;
- vlib_buffer_t * last;
+ vlib_main_t *vm;
+ vlib_serialize_buffer_main_t *sm;
+ vlib_buffer_t *last;
- sm = uword_to_pointer (s->data_function_opaque, vlib_serialize_buffer_main_t *);
+ sm =
+ uword_to_pointer (s->data_function_opaque,
+ vlib_serialize_buffer_main_t *);
vm = sm->vlib_main;
if (serialize_stream_is_end_of_stream (s))
@@ -1101,8 +1142,11 @@ static void vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t *
{
while (clib_fifo_elts (sm->rx.buffer_fifo) == 0)
{
- sm->rx.ready_one_time_event = vlib_process_create_one_time_event (vm, vlib_current_process (vm), ~0);
- vlib_process_wait_for_one_time_event (vm, /* no event data */ 0, sm->rx.ready_one_time_event);
+ sm->rx.ready_one_time_event =
+ vlib_process_create_one_time_event (vm, vlib_current_process (vm),
+ ~0);
+ vlib_process_wait_for_one_time_event (vm, /* no event data */ 0,
+ sm->rx.ready_one_time_event);
}
clib_fifo_sub1 (sm->rx.buffer_fifo, sm->first_buffer);
@@ -1120,12 +1164,11 @@ static void vlib_serialize_rx (serialize_main_header_t * m, serialize_stream_t *
static void
serialize_open_vlib_helper (serialize_main_t * m,
vlib_main_t * vm,
- vlib_serialize_buffer_main_t * sm,
- uword is_read)
+ vlib_serialize_buffer_main_t * sm, uword is_read)
{
/* Initialize serialize main but save overflow buffer for re-use between calls. */
{
- u8 * save = m->stream.overflow_buffer;
+ u8 *save = m->stream.overflow_buffer;
memset (m, 0, sizeof (m[0]));
m->stream.overflow_buffer = save;
if (save)
@@ -1142,18 +1185,28 @@ serialize_open_vlib_helper (serialize_main_t * m,
m->stream.data_function_opaque = pointer_to_uword (sm);
}
-void serialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm, vlib_serialize_buffer_main_t * sm)
-{ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 0); }
+void
+serialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm,
+ vlib_serialize_buffer_main_t * sm)
+{
+ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 0);
+}
-void unserialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm, vlib_serialize_buffer_main_t * sm)
-{ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 1); }
+void
+unserialize_open_vlib_buffer (serialize_main_t * m, vlib_main_t * vm,
+ vlib_serialize_buffer_main_t * sm)
+{
+ serialize_open_vlib_helper (m, vm, sm, /* is_read */ 1);
+}
-u32 serialize_close_vlib_buffer (serialize_main_t * m)
+u32
+serialize_close_vlib_buffer (serialize_main_t * m)
{
- vlib_serialize_buffer_main_t * sm
- = uword_to_pointer (m->stream.data_function_opaque, vlib_serialize_buffer_main_t *);
- vlib_buffer_t * last;
- serialize_stream_t * s = &m->stream;
+ vlib_serialize_buffer_main_t *sm
+ = uword_to_pointer (m->stream.data_function_opaque,
+ vlib_serialize_buffer_main_t *);
+ vlib_buffer_t *last;
+ serialize_stream_t *s = &m->stream;
last = vlib_get_buffer (sm->vlib_main, sm->last_buffer);
last->current_length = s->current_buffer_index;
@@ -1171,10 +1224,12 @@ u32 serialize_close_vlib_buffer (serialize_main_t * m)
return sm->first_buffer;
}
-void unserialize_close_vlib_buffer (serialize_main_t * m)
+void
+unserialize_close_vlib_buffer (serialize_main_t * m)
{
- vlib_serialize_buffer_main_t * sm
- = uword_to_pointer (m->stream.data_function_opaque, vlib_serialize_buffer_main_t *);
+ vlib_serialize_buffer_main_t *sm
+ = uword_to_pointer (m->stream.data_function_opaque,
+ vlib_serialize_buffer_main_t *);
if (sm->first_buffer != ~0)
vlib_buffer_free_one (sm->vlib_main, sm->first_buffer);
clib_fifo_reset (sm->rx.buffer_fifo);
@@ -1182,15 +1237,17 @@ void unserialize_close_vlib_buffer (serialize_main_t * m)
_vec_len (m->stream.overflow_buffer) = 0;
}
-static u8 * format_vlib_buffer_free_list (u8 * s, va_list * va)
+static u8 *
+format_vlib_buffer_free_list (u8 * s, va_list * va)
{
- vlib_buffer_free_list_t * f = va_arg (*va, vlib_buffer_free_list_t *);
- u32 threadnum= va_arg (*va, u32);
+ vlib_buffer_free_list_t *f = va_arg (*va, vlib_buffer_free_list_t *);
+ u32 threadnum = va_arg (*va, u32);
uword bytes_alloc, bytes_free, n_free, size;
- if (! f)
+ if (!f)
return format (s, "%=7s%=30s%=12s%=12s%=12s%=12s%=12s%=12s",
- "Thread", "Name", "Index", "Size", "Alloc", "Free", "#Alloc", "#Free");
+ "Thread", "Name", "Index", "Size", "Alloc", "Free",
+ "#Alloc", "#Free");
size = sizeof (vlib_buffer_t) + f->n_data_bytes;
n_free = vec_len (f->aligned_buffers) + vec_len (f->unaligned_buffers);
@@ -1198,68 +1255,80 @@ static u8 * format_vlib_buffer_free_list (u8 * s, va_list * va)
bytes_free = size * n_free;
s = format (s, "%7d%30s%12d%12d%=12U%=12U%=12d%=12d",
- threadnum,
+ threadnum,
f->name, f->index, f->n_data_bytes,
format_memory_size, bytes_alloc,
- format_memory_size, bytes_free,
- f->n_alloc, n_free);
+ format_memory_size, bytes_free, f->n_alloc, n_free);
return s;
}
static clib_error_t *
show_buffers (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_buffer_main_t * bm;
- vlib_buffer_free_list_t * f;
+ vlib_buffer_main_t *bm;
+ vlib_buffer_free_list_t *f;
vlib_main_t *curr_vm;
u32 vm_index = 0;
vlib_cli_output (vm, "%U", format_vlib_buffer_free_list, 0, 0);
- do {
- curr_vm = vec_len(vlib_mains) ? vlib_mains[vm_index] : vm;
- bm = curr_vm->buffer_main;
-
+ do
+ {
+ curr_vm = vec_len (vlib_mains) ? vlib_mains[vm_index] : vm;
+ bm = curr_vm->buffer_main;
+
+ /* *INDENT-OFF* */
pool_foreach (f, bm->buffer_free_list_pool, ({
vlib_cli_output (vm, "%U", format_vlib_buffer_free_list, f, vm_index);
}));
+ /* *INDENT-ON* */
- vm_index++;
- } while (vm_index < vec_len(vlib_mains));
+ vm_index++;
+ }
+ while (vm_index < vec_len (vlib_mains));
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_buffers_command, static) = {
.path = "show buffers",
.short_help = "Show packet buffer allocation",
.function = show_buffers,
};
+/* *INDENT-ON* */
#if CLIB_DEBUG > 0
-u32 * vlib_buffer_state_validation_lock;
-uword * vlib_buffer_state_validation_hash;
-void * vlib_buffer_state_heap;
+u32 *vlib_buffer_state_validation_lock;
+uword *vlib_buffer_state_validation_hash;
+void *vlib_buffer_state_heap;
-static clib_error_t *
+static clib_error_t *
buffer_state_validation_init (vlib_main_t * vm)
{
- void * oldheap;
+ void *oldheap;
- vlib_buffer_state_heap = mheap_alloc (0, 10<<20);
+ vlib_buffer_state_heap = mheap_alloc (0, 10 << 20);
oldheap = clib_mem_set_heap (vlib_buffer_state_heap);
- vlib_buffer_state_validation_hash = hash_create (0, sizeof(uword));
- vec_validate_aligned (vlib_buffer_state_validation_lock, 0,
- CLIB_CACHE_LINE_BYTES);
+ vlib_buffer_state_validation_hash = hash_create (0, sizeof (uword));
+ vec_validate_aligned (vlib_buffer_state_validation_lock, 0,
+ CLIB_CACHE_LINE_BYTES);
clib_mem_set_heap (oldheap);
return 0;
}
VLIB_INIT_FUNCTION (buffer_state_validation_init);
#endif
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/elog_samples.c b/vlib/vlib/elog_samples.c
index 0a5cd202252..a8c800df959 100644
--- a/vlib/vlib/elog_samples.c
+++ b/vlib/vlib/elog_samples.c
@@ -16,14 +16,17 @@
#include <vlib/vlib.h>
#include <vppinfra/elog.h>
-static inline void elog_four_int_sample (u32 *data)
+static inline void
+elog_four_int_sample (u32 * data)
{
- ELOG_TYPE_DECLARE(e) =
- {
- .format = "four int: first %d second %d third %d fourth %d",
- .format_args = "i4i4i4i4",
- };
- struct { u32 data[4];} * ed;
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "four int: first %d second %d third %d fourth %d",.format_args =
+ "i4i4i4i4",};
+ struct
+ {
+ u32 data[4];
+ } *ed;
ed = ELOG_DATA (&vlib_global_main.elog_main, e);
ed->data[0] = data[0];
ed->data[1] = data[1];
@@ -31,15 +34,19 @@ static inline void elog_four_int_sample (u32 *data)
ed->data[3] = data[3];
}
-static inline void elog_four_int_track_sample (u32 *data)
+static inline void
+elog_four_int_track_sample (u32 * data)
{
- ELOG_TYPE_DECLARE(e) =
- {
- .format = "four_int_track: first %d second %d third %d fourth %d",
- .format_args = "i4i4i4i4",
- };
- struct { u32 data[4];} * ed;
- ELOG_TRACK(sample_track);
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format =
+ "four_int_track: first %d second %d third %d fourth %d",.format_args =
+ "i4i4i4i4",};
+ struct
+ {
+ u32 data[4];
+ } *ed;
+ ELOG_TRACK (sample_track);
ed = ELOG_TRACK_DATA (&vlib_global_main.elog_main, e, sample_track);
ed->data[0] = data[0];
ed->data[1] = data[1];
@@ -47,39 +54,36 @@ static inline void elog_four_int_track_sample (u32 *data)
ed->data[3] = data[3];
}
-static inline void elog_enum_sample (u8 which)
+static inline void
+elog_enum_sample (u8 which)
{
- ELOG_TYPE_DECLARE (e) =
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "my enum: %s",.format_args = "t1",.n_enum_strings =
+ 2,.enum_strings =
{
- .format = "my enum: %s",
- .format_args = "t1",
- .n_enum_strings = 2,
- .enum_strings =
- {
- "string 1",
- "string 2",
- },
- };
- struct { u8 which;} * ed;
+ "string 1", "string 2",},};
+ struct
+ {
+ u8 which;
+ } *ed;
ed = ELOG_DATA (&vlib_global_main.elog_main, e);
ed->which = which;
}
-static inline void elog_one_datum_sample (u32 data)
+static inline void
+elog_one_datum_sample (u32 data)
{
- ELOG_TYPE_DECLARE (e) =
- {
- .format = "one datum: %d",
- .format_args = "i4",
- };
-
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "one datum: %d",.format_args = "i4",};
+
elog (&vlib_global_main.elog_main, &e, data);
}
static clib_error_t *
test_elog_command_fn (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
int i;
u32 samples[4];
@@ -87,9 +91,9 @@ test_elog_command_fn (vlib_main_t * vm,
for (i = 0; i < 10; i++)
{
samples[0] = i;
- samples[1] = i+1;
- samples[2] = i+2;
- samples[3] = i+3;
+ samples[1] = i + 1;
+ samples[2] = i + 2;
+ samples[3] = i + 3;
elog_four_int_sample (samples);
elog_four_int_track_sample (samples);
@@ -101,8 +105,18 @@ test_elog_command_fn (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (test_elog_command, static) = {
.path = "test elog sample",
.short_help = "test elog sample",
.function = test_elog_command_fn,
};
+/* *INDENT-ON* */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/error.c b/vlib/vlib/error.c
index e7380364f48..a2c2317686b 100644
--- a/vlib/vlib/error.c
+++ b/vlib/vlib/error.c
@@ -47,10 +47,9 @@ vlib_error_drop_buffers (vlib_main_t * vm,
u32 next_buffer_stride,
u32 n_buffers,
u32 next_index,
- u32 drop_error_node,
- u32 drop_error_code)
+ u32 drop_error_node, u32 drop_error_code)
{
- u32 n_left_this_frame, n_buffers_left, * args, n_args_left;
+ u32 n_left_this_frame, n_buffers_left, *args, n_args_left;
vlib_error_t drop_error;
drop_error = vlib_error_set (drop_error_node, drop_error_code);
@@ -67,7 +66,7 @@ vlib_error_drop_buffers (vlib_main_t * vm,
while (n_left_this_frame >= 4)
{
u32 bi0, bi1, bi2, bi3;
- vlib_buffer_t * b0, * b1, * b2, * b3;
+ vlib_buffer_t *b0, *b1, *b2, *b3;
args[0] = bi0 = buffers[0];
args[1] = bi1 = buffers[1];
@@ -92,7 +91,7 @@ vlib_error_drop_buffers (vlib_main_t * vm,
while (n_left_this_frame >= 1)
{
u32 bi0;
- vlib_buffer_t * b0;
+ vlib_buffer_t *b0;
args[0] = bi0 = buffers[0];
@@ -113,22 +112,21 @@ vlib_error_drop_buffers (vlib_main_t * vm,
/* Convenience node to drop a vector of buffers with a "misc error". */
static uword
misc_drop_buffers (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * frame)
+ vlib_node_runtime_t * node, vlib_frame_t * frame)
{
- return vlib_error_drop_buffers (vm, node,
- vlib_frame_args (frame),
- /* buffer stride */ 1,
- frame->n_vectors,
- /* next */ 0,
- node->node_index,
- /* error */ 0);
+ return vlib_error_drop_buffers (vm, node, vlib_frame_args (frame),
+ /* buffer stride */ 1,
+ frame->n_vectors,
+ /* next */ 0,
+ node->node_index,
+ /* error */ 0);
}
-static char * misc_drop_buffers_error_strings[] = {
- [0] = "misc. errors",
+static char *misc_drop_buffers_error_strings[] = {
+ [0] = "misc. errors",
};
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (misc_drop_buffers_node,static) = {
.function = misc_drop_buffers,
.name = "misc-drop-buffers",
@@ -140,18 +138,18 @@ VLIB_REGISTER_NODE (misc_drop_buffers_node,static) = {
},
.error_strings = misc_drop_buffers_error_strings,
};
+/* *INDENT-ON* */
/* Reserves given number of error codes for given node. */
-void vlib_register_errors (vlib_main_t * vm,
- u32 node_index,
- u32 n_errors,
- char * error_strings[])
+void
+vlib_register_errors (vlib_main_t * vm,
+ u32 node_index, u32 n_errors, char *error_strings[])
{
- vlib_error_main_t * em = &vm->error_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
+ vlib_error_main_t *em = &vm->error_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
uword l;
- ASSERT(os_get_cpu_number() == 0);
+ ASSERT (os_get_cpu_number () == 0);
/* Free up any previous error strings. */
if (n->n_errors > 0)
@@ -164,14 +162,12 @@ void vlib_register_errors (vlib_main_t * vm,
return;
n->error_heap_index =
- heap_alloc (em->error_strings_heap, n_errors,
- n->error_heap_handle);
+ heap_alloc (em->error_strings_heap, n_errors, n->error_heap_handle);
l = vec_len (em->error_strings_heap);
clib_memcpy (vec_elt_at_index (em->error_strings_heap, n->error_heap_index),
- error_strings,
- n_errors * sizeof (error_strings[0]));
+ error_strings, n_errors * sizeof (error_strings[0]));
/* Allocate a counter/elog type for each error. */
vec_validate (em->counters, l - 1);
@@ -180,12 +176,11 @@ void vlib_register_errors (vlib_main_t * vm,
/* Zero counters for re-registrations of errors. */
if (n->error_heap_index + n_errors <= vec_len (em->counters_last_clear))
clib_memcpy (em->counters + n->error_heap_index,
- em->counters_last_clear + n->error_heap_index,
- n_errors * sizeof (em->counters[0]));
+ em->counters_last_clear + n->error_heap_index,
+ n_errors * sizeof (em->counters[0]));
else
memset (em->counters + n->error_heap_index,
- 0,
- n_errors * sizeof (em->counters[0]));
+ 0, n_errors * sizeof (em->counters[0]));
{
elog_event_type_t t;
@@ -195,8 +190,7 @@ void vlib_register_errors (vlib_main_t * vm,
for (i = 0; i < n_errors; i++)
{
t.format = (char *) format (0, "%v %s: %%d",
- n->name,
- error_strings[i]);
+ n->name, error_strings[i]);
vm->error_elog_event_types[n->error_heap_index + i] = t;
}
}
@@ -204,35 +198,37 @@ void vlib_register_errors (vlib_main_t * vm,
static clib_error_t *
show_errors (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_error_main_t * em = &vm->error_main;
- vlib_node_t * n;
+ vlib_error_main_t *em = &vm->error_main;
+ vlib_node_t *n;
u32 code, i, ni;
u64 c;
int index = 0;
int verbose = 0;
- u64 * sums = 0;
+ u64 *sums = 0;
if (unformat (input, "verbose %d", &verbose))
;
else if (unformat (input, "verbose"))
verbose = 1;
- vec_validate(sums, vec_len(em->counters));
+ vec_validate (sums, vec_len (em->counters));
if (verbose)
- vlib_cli_output (vm, "%=10s%=40s%=20s%=6s", "Count", "Node", "Reason",
- "Index");
+ vlib_cli_output (vm, "%=10s%=40s%=20s%=6s", "Count", "Node", "Reason",
+ "Index");
else
vlib_cli_output (vm, "%=10s%=40s%=6s", "Count", "Node", "Reason");
+
+ /* *INDENT-OFF* */
foreach_vlib_main(({
em = &this_vlib_main->error_main;
if (verbose)
- vlib_cli_output(vm, "Thread %u (%v):", index, vlib_worker_threads[index].name);
+ vlib_cli_output(vm, "Thread %u (%v):", index,
+ vlib_worker_threads[index].name);
for (ni = 0; ni < vec_len (this_vlib_main->node_main.nodes); ni++)
{
@@ -249,18 +245,19 @@ show_errors (vlib_main_t * vm,
continue;
if (verbose)
- vlib_cli_output (vm, "%10Ld%=40v%=20s%=6d", c, n->name,
+ vlib_cli_output (vm, "%10Ld%=40v%=20s%=6d", c, n->name,
em->error_strings_heap[i], i);
else
- vlib_cli_output (vm, "%10d%=40v%s", c, n->name,
+ vlib_cli_output (vm, "%10d%=40v%s", c, n->name,
em->error_strings_heap[i]);
}
}
index++;
}));
+ /* *INDENT-ON* */
if (verbose)
- vlib_cli_output(vm, "Total:");
+ vlib_cli_output (vm, "Total:");
for (ni = 0; ni < vec_len (vm->node_main.nodes); ni++)
{
@@ -269,56 +266,73 @@ show_errors (vlib_main_t * vm,
{
i = n->error_heap_index + code;
if (sums[i])
- {
- if (verbose)
- vlib_cli_output (vm, "%10Ld%=40v%=20s%=10d", sums[i], n->name,
- em->error_strings_heap[i], i);
- }
+ {
+ if (verbose)
+ vlib_cli_output (vm, "%10Ld%=40v%=20s%=10d", sums[i], n->name,
+ em->error_strings_heap[i], i);
+ }
}
}
- vec_free(sums);
+ vec_free (sums);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_show_errors, static) = {
.path = "show errors",
.short_help = "Show error counts",
.function = show_errors,
};
+/* *INDENT-ON* */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_show_node_counters, static) = {
.path = "show node counters",
.short_help = "Show node counters",
.function = show_errors,
};
+/* *INDENT-ON* */
static clib_error_t *
clear_error_counters (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_error_main_t * em;
+ vlib_error_main_t *em;
u32 i;
+ /* *INDENT-OFF* */
foreach_vlib_main(({
em = &this_vlib_main->error_main;
vec_validate (em->counters_last_clear, vec_len (em->counters) - 1);
for (i = 0; i < vec_len (em->counters); i++)
em->counters_last_clear[i] = em->counters[i];
}));
+ /* *INDENT-ON* */
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_clear_error_counters, static) = {
.path = "clear errors",
.short_help = "Clear error counters",
.function = clear_error_counters,
};
+/* *INDENT-ON* */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_clear_node_counters, static) = {
.path = "clear node counters",
.short_help = "Clear node counters",
.function = clear_error_counters,
};
+/* *INDENT-ON* */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/error.h b/vlib/vlib/error.h
index 4bf0b926718..df2075c306d 100644
--- a/vlib/vlib/error.h
+++ b/vlib/vlib/error.h
@@ -45,11 +45,15 @@ typedef u32 vlib_error_t;
always_inline u32
vlib_error_get_node (vlib_error_t e)
-{ return e >> 12; }
+{
+ return e >> 12;
+}
always_inline u32
vlib_error_get_code (vlib_error_t e)
-{ return e & 0xfff; }
+{
+ return e & 0xfff;
+}
always_inline vlib_error_t
vlib_error_set (u32 node_index, u32 code)
@@ -68,22 +72,30 @@ vlib_error_set_code (vlib_error_t e, u32 code)
return e;
}
-typedef struct {
+typedef struct
+{
/* Error counters. */
- u64 * counters;
+ u64 *counters;
/* Counter values as of last counter clear. */
- u64 * counters_last_clear;
+ u64 *counters_last_clear;
/* Error name strings in heap. Heap index
indexes counter vector. */
- char ** error_strings_heap;
+ char **error_strings_heap;
} vlib_error_main_t;
/* Per node error registration. */
-void vlib_register_errors (struct vlib_main_t * vm,
+void vlib_register_errors (struct vlib_main_t *vm,
u32 node_index,
- u32 n_errors,
- char * error_strings[]);
+ u32 n_errors, char *error_strings[]);
#endif /* included_vlib_error_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/error_funcs.h b/vlib/vlib/error_funcs.h
index acdd5d2d898..1a3602e92c6 100644
--- a/vlib/vlib/error_funcs.h
+++ b/vlib/vlib/error_funcs.h
@@ -45,17 +45,18 @@
always_inline void
vlib_error_elog_count (vlib_main_t * vm, uword counter, uword increment)
{
- elog_main_t * em = &vm->elog_main;
+ elog_main_t *em = &vm->elog_main;
if (VLIB_ELOG_MAIN_LOOP > 0 && increment > 0)
- elog (em, vec_elt_at_index (vm->error_elog_event_types, counter), increment);
+ elog (em, vec_elt_at_index (vm->error_elog_event_types, counter),
+ increment);
}
always_inline void
vlib_error_count (vlib_main_t * vm, uword node_index,
uword counter, uword increment)
{
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_error_main_t * em = &vm->error_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_error_main_t *em = &vm->error_main;
ASSERT (counter < n->n_errors);
counter += n->error_heap_index;
@@ -74,7 +75,14 @@ vlib_error_drop_buffers (vlib_main_t * vm,
u32 next_buffer_stride,
u32 n_buffers,
u32 error_next_index,
- u32 error_node,
- u32 error_code);
+ u32 error_node, u32 error_code);
#endif /* included_vlib_error_funcs_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/format.c b/vlib/vlib/format.c
index 3c77d8dbd18..79a4d6866db 100644
--- a/vlib/vlib/format.c
+++ b/vlib/vlib/format.c
@@ -39,32 +39,46 @@
#include <vlib/vlib.h>
-u8 * format_vlib_rx_tx (u8 * s, va_list * args)
+u8 *
+format_vlib_rx_tx (u8 * s, va_list * args)
{
vlib_rx_or_tx_t r = va_arg (*args, vlib_rx_or_tx_t);
- char * t;
+ char *t;
switch (r)
{
- case VLIB_RX: t = "rx"; break;
- case VLIB_TX: t = "tx"; break;
- default: t = "INVALID"; break;
+ case VLIB_RX:
+ t = "rx";
+ break;
+ case VLIB_TX:
+ t = "tx";
+ break;
+ default:
+ t = "INVALID";
+ break;
}
vec_add (s, t, strlen (t));
return s;
}
-u8 * format_vlib_read_write (u8 * s, va_list * args)
+u8 *
+format_vlib_read_write (u8 * s, va_list * args)
{
vlib_rx_or_tx_t r = va_arg (*args, vlib_rx_or_tx_t);
- char * t;
+ char *t;
switch (r)
{
- case VLIB_READ: t = "read"; break;
- case VLIB_WRITE: t = "write"; break;
- default: t = "INVALID"; break;
+ case VLIB_READ:
+ t = "read";
+ break;
+ case VLIB_WRITE:
+ t = "write";
+ break;
+ default:
+ t = "INVALID";
+ break;
}
vec_add (s, t, strlen (t));
@@ -72,9 +86,10 @@ u8 * format_vlib_read_write (u8 * s, va_list * args)
}
/* Formats buffer data as printable ascii or as hex. */
-u8 * format_vlib_buffer_data (u8 * s, va_list * args)
+u8 *
+format_vlib_buffer_data (u8 * s, va_list * args)
{
- u8 * data = va_arg (*args, u8 *);
+ u8 *data = va_arg (*args, u8 *);
u32 n_data_bytes = va_arg (*args, u32);
u32 i, is_printable;
@@ -87,7 +102,7 @@ u8 * format_vlib_buffer_data (u8 * s, va_list * args)
else if (c >= 0x7f)
is_printable = 0;
}
-
+
if (is_printable)
vec_add (s, data, n_data_bytes);
else
@@ -97,9 +112,10 @@ u8 * format_vlib_buffer_data (u8 * s, va_list * args)
}
/* Enable/on => 1; disable/off => 0. */
-uword unformat_vlib_enable_disable (unformat_input_t * input, va_list * args)
+uword
+unformat_vlib_enable_disable (unformat_input_t * input, va_list * args)
{
- int * result = va_arg (*args, int *);
+ int *result = va_arg (*args, int *);
int enable;
if (unformat (input, "enable") || unformat (input, "on"))
@@ -114,9 +130,10 @@ uword unformat_vlib_enable_disable (unformat_input_t * input, va_list * args)
}
/* rx/tx => VLIB_RX/VLIB_TX. */
-uword unformat_vlib_rx_tx (unformat_input_t * input, va_list * args)
+uword
+unformat_vlib_rx_tx (unformat_input_t * input, va_list * args)
{
- int * result = va_arg (*args, int *);
+ int *result = va_arg (*args, int *);
if (unformat (input, "rx"))
*result = VLIB_RX;
else if (unformat (input, "tx"))
@@ -127,29 +144,29 @@ uword unformat_vlib_rx_tx (unformat_input_t * input, va_list * args)
}
/* Parse an int either %d or 0x%x. */
-uword unformat_vlib_number (unformat_input_t * input, va_list * args)
+uword
+unformat_vlib_number (unformat_input_t * input, va_list * args)
{
- int * result = va_arg (*args, int *);
+ int *result = va_arg (*args, int *);
- return (unformat (input, "0x%x", result)
- || unformat (input, "%d", result));
+ return (unformat (input, "0x%x", result) || unformat (input, "%d", result));
}
/* Parse a-zA-Z0-9_ token and hash to value. */
-uword unformat_vlib_number_by_name (unformat_input_t * input, va_list * args)
+uword
+unformat_vlib_number_by_name (unformat_input_t * input, va_list * args)
{
- uword * hash = va_arg (*args, uword *);
- int * result = va_arg (*args, int *);
- uword * p;
- u8 * token;
+ uword *hash = va_arg (*args, uword *);
+ int *result = va_arg (*args, int *);
+ uword *p;
+ u8 *token;
int i;
- if (! unformat_user (input, unformat_token, "a-zA-Z0-9_", &token))
+ if (!unformat_user (input, unformat_token, "a-zA-Z0-9_", &token))
return 0;
/* Null terminate. */
- if (vec_len (token) > 0 &&
- token[vec_len (token) - 1] != 0)
+ if (vec_len (token) > 0 && token[vec_len (token) - 1] != 0)
vec_add1 (token, 0);
/* Check for exact match. */
@@ -163,9 +180,17 @@ uword unformat_vlib_number_by_name (unformat_input_t * input, va_list * args)
token[i] = 'A' + token[i] - 'a';
p = hash_get_mem (hash, token);
- done:
+done:
vec_free (token);
if (p)
*result = p[0];
return p != 0;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/format_funcs.h b/vlib/vlib/format_funcs.h
index 02d8a555d78..f60b8940d14 100644
--- a/vlib/vlib/format_funcs.h
+++ b/vlib/vlib/format_funcs.h
@@ -41,11 +41,11 @@
#define included_vlib_format_h
/* Format vlib_rx_or_tx_t/vlib_read_or_write_t enum as string. */
-u8 * format_vlib_rx_tx (u8 * s, va_list * args);
-u8 * format_vlib_read_write (u8 * s, va_list * args);
+u8 *format_vlib_rx_tx (u8 * s, va_list * args);
+u8 *format_vlib_read_write (u8 * s, va_list * args);
/* Formats buffer data as printable ascii or as hex. */
-u8 * format_vlib_buffer_data (u8 * s, va_list * args);
+u8 *format_vlib_buffer_data (u8 * s, va_list * args);
/* Enable/on => 1; disable/off => 0. */
uword unformat_vlib_enable_disable (unformat_input_t * input, va_list * args);
@@ -65,3 +65,11 @@ uword unformat_vlib_number (unformat_input_t * input, va_list * args);
#define FORMAT_VLIB_HEADER_NO_RECURSION (~0)
#endif /* included_vlib_format_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/global_funcs.h b/vlib/vlib/global_funcs.h
index 406ce7d71b6..bbdbdef50b2 100644
--- a/vlib/vlib/global_funcs.h
+++ b/vlib/vlib/global_funcs.h
@@ -22,16 +22,24 @@
always_inline vlib_main_t *
vlib_get_main (void)
{
- vlib_main_t * vm;
- vm = vlib_mains ? vlib_mains[os_get_cpu_number()] : &vlib_global_main;
- ASSERT(vm);
+ vlib_main_t *vm;
+ vm = vlib_mains ? vlib_mains[os_get_cpu_number ()] : &vlib_global_main;
+ ASSERT (vm);
return vm;
}
always_inline vlib_thread_main_t *
-vlib_get_thread_main()
+vlib_get_thread_main ()
{
return &vlib_thread_main;
}
#endif /* included_vlib_global_funcs_h_ */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/i2c.c b/vlib/vlib/i2c.c
index 83a702edbd6..97f5bb21cc7 100644
--- a/vlib/vlib/i2c.c
+++ b/vlib/vlib/i2c.c
@@ -19,7 +19,7 @@
static inline void
i2c_delay (i2c_bus_t * b, f64 timeout)
{
- vlib_main_t * vm = vlib_get_main();
+ vlib_main_t *vm = vlib_get_main ();
vlib_time_wait (vm, timeout);
}
@@ -31,7 +31,7 @@ i2c_wait_for_scl (i2c_bus_t * b)
while (t < b->hold_time)
{
int sda, scl;
- i2c_delay(b, b->rise_fall_time);
+ i2c_delay (b, b->rise_fall_time);
b->get_bits (b, &scl, &sda);
if (scl)
@@ -87,7 +87,7 @@ i2c_write_bit (i2c_bus_t * b, int sda)
}
static void
-i2c_read_bit (i2c_bus_t * b, int * sda)
+i2c_read_bit (i2c_bus_t * b, int *sda)
{
int scl;
@@ -116,7 +116,7 @@ i2c_write_byte (i2c_bus_t * b, u8 data)
b->put_bits (b, 0, 1);
i2c_delay (b, b->rise_fall_time);
- i2c_read_bit(b, &sda);
+ i2c_read_bit (b, &sda);
if (sda)
b->timeout = 1;
@@ -171,35 +171,37 @@ vlib_i2c_xfer (i2c_bus_t * bus, i2c_msg_t * msgs)
int i;
vec_foreach (msg, msgs)
- {
- i2c_start (bus);
- i2c_write_byte (bus, (msg->addr << 1) + (msg->flags == I2C_MSG_FLAG_READ));
-
- if (msg->flags & I2C_MSG_FLAG_READ)
- for (i=0; i< msg->len; i++)
- {
- i2c_read_byte (bus, &msg->buffer[i], /* ack */ i + 1 != msg->len);
- if (bus->timeout)
- goto done;
- }
-
- else
- for (i=0; i< msg->len; i++)
- {
- i2c_write_byte (bus, msg->buffer[i]);
- if (bus->timeout)
- goto done;
- }
- }
+ {
+ i2c_start (bus);
+ i2c_write_byte (bus,
+ (msg->addr << 1) + (msg->flags == I2C_MSG_FLAG_READ));
+
+ if (msg->flags & I2C_MSG_FLAG_READ)
+ for (i = 0; i < msg->len; i++)
+ {
+ i2c_read_byte (bus, &msg->buffer[i], /* ack */ i + 1 != msg->len);
+ if (bus->timeout)
+ goto done;
+ }
+
+ else
+ for (i = 0; i < msg->len; i++)
+ {
+ i2c_write_byte (bus, msg->buffer[i]);
+ if (bus->timeout)
+ goto done;
+ }
+ }
done:
- i2c_stop(bus);
+ i2c_stop (bus);
}
void
-vlib_i2c_read_eeprom (i2c_bus_t * bus, u8 i2c_addr, u16 start_addr, u16 length, u8 * data)
+vlib_i2c_read_eeprom (i2c_bus_t * bus, u8 i2c_addr, u16 start_addr,
+ u16 length, u8 * data)
{
- i2c_msg_t * msg = 0;
+ i2c_msg_t *msg = 0;
u8 start_address[1];
vec_validate (msg, 1);
@@ -207,7 +209,7 @@ vlib_i2c_read_eeprom (i2c_bus_t * bus, u8 i2c_addr, u16 start_addr, u16 length,
start_address[0] = start_addr;
msg[0].addr = i2c_addr;
msg[0].flags = I2C_MSG_FLAG_WRITE;
- msg[0].buffer = (u8 *) &start_address;
+ msg[0].buffer = (u8 *) & start_address;
msg[0].len = 1;
msg[1].addr = i2c_addr;
@@ -215,8 +217,15 @@ vlib_i2c_read_eeprom (i2c_bus_t * bus, u8 i2c_addr, u16 start_addr, u16 length,
msg[1].buffer = data;
msg[1].len = length;
- vlib_i2c_xfer(bus, msg);
+ vlib_i2c_xfer (bus, msg);
vec_free (msg);
}
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/i2c.h b/vlib/vlib/i2c.h
index 451957d8513..b79bdc75b81 100644
--- a/vlib/vlib/i2c.h
+++ b/vlib/vlib/i2c.h
@@ -22,16 +22,18 @@
#define I2C_MSG_FLAG_WRITE 0
#define I2C_MSG_FLAG_READ 1
-typedef struct {
- u8 addr;
- u8 flags;
- u16 len;
- u8 * buffer;
+typedef struct
+{
+ u8 addr;
+ u8 flags;
+ u16 len;
+ u8 *buffer;
} i2c_msg_t;
-typedef struct i2c_bus_t {
- void (* put_bits) (struct i2c_bus_t * b, int scl, int sda);
- void (* get_bits) (struct i2c_bus_t * b, int *scl, int *sda);
+typedef struct i2c_bus_t
+{
+ void (*put_bits) (struct i2c_bus_t * b, int scl, int sda);
+ void (*get_bits) (struct i2c_bus_t * b, int *scl, int *sda);
int timeout;
u32 clock;
@@ -45,13 +47,21 @@ typedef struct i2c_bus_t {
void vlib_i2c_init (i2c_bus_t * bus);
void vlib_i2c_xfer (i2c_bus_t * bus, i2c_msg_t * msgs);
-void vlib_i2c_read_eeprom (i2c_bus_t * bus, u8 i2c_addr, u16 start_addr, u16 length, u8 * data);
+void vlib_i2c_read_eeprom (i2c_bus_t * bus, u8 i2c_addr, u16 start_addr,
+ u16 length, u8 * data);
static inline int
-vlib_i2c_bus_timed_out(i2c_bus_t * bus)
+vlib_i2c_bus_timed_out (i2c_bus_t * bus)
{
return bus->timeout;
}
#endif /* included_vlib_i2c_h */
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/init.c b/vlib/vlib/init.c
index 3991c800147..8d4784513ab 100644
--- a/vlib/vlib/init.c
+++ b/vlib/vlib/init.c
@@ -40,30 +40,31 @@
#include <vlib/vlib.h>
clib_error_t *
-vlib_call_init_exit_functions (vlib_main_t * vm,
- _vlib_init_function_list_elt_t *head,
- int call_once)
+vlib_call_init_exit_functions (vlib_main_t * vm,
+ _vlib_init_function_list_elt_t * head,
+ int call_once)
{
- clib_error_t * error = 0;
- _vlib_init_function_list_elt_t * i;
+ clib_error_t *error = 0;
+ _vlib_init_function_list_elt_t *i;
i = head;
while (i)
{
if (call_once && !hash_get (vm->init_functions_called, i->f))
- {
- if (call_once)
- hash_set1 (vm->init_functions_called, i->f);
- error = i->f (vm);
- if (error)
- return error;
- }
+ {
+ if (call_once)
+ hash_set1 (vm->init_functions_called, i->f);
+ error = i->f (vm);
+ if (error)
+ return error;
+ }
i = i->next_init_function;
}
return error;
}
-clib_error_t * vlib_call_all_init_functions (vlib_main_t * vm)
+clib_error_t *
+vlib_call_all_init_functions (vlib_main_t * vm)
{
/* Call dummy functions to make sure purely static modules are
linked in. */
@@ -71,29 +72,31 @@ clib_error_t * vlib_call_all_init_functions (vlib_main_t * vm)
foreach_vlib_module_reference;
#undef _
- return vlib_call_init_exit_functions
- (vm, vm->init_function_registrations, 1 /* call_once */);
+ return vlib_call_init_exit_functions
+ (vm, vm->init_function_registrations, 1 /* call_once */ );
}
-clib_error_t * vlib_call_all_main_loop_enter_functions (vlib_main_t * vm)
-{
- return vlib_call_init_exit_functions
- (vm, vm->main_loop_enter_function_registrations, 1 /* call_once */);
+clib_error_t *
+vlib_call_all_main_loop_enter_functions (vlib_main_t * vm)
+{
+ return vlib_call_init_exit_functions
+ (vm, vm->main_loop_enter_function_registrations, 1 /* call_once */ );
}
-clib_error_t * vlib_call_all_main_loop_exit_functions (vlib_main_t * vm)
-{
- return vlib_call_init_exit_functions
- (vm, vm->main_loop_exit_function_registrations, 1 /* call_once */);
+clib_error_t *
+vlib_call_all_main_loop_exit_functions (vlib_main_t * vm)
+{
+ return vlib_call_init_exit_functions
+ (vm, vm->main_loop_exit_function_registrations, 1 /* call_once */ );
}
-clib_error_t * vlib_call_all_config_functions (vlib_main_t * vm,
- unformat_input_t * input,
- int is_early)
+clib_error_t *
+vlib_call_all_config_functions (vlib_main_t * vm,
+ unformat_input_t * input, int is_early)
{
- clib_error_t * error = 0;
- vlib_config_function_runtime_t * c, ** all;
- uword * hash = 0, * p;
+ clib_error_t *error = 0;
+ vlib_config_function_runtime_t *c, **all;
+ uword *hash = 0, *p;
uword i;
hash = hash_create_string (0, sizeof (uword));
@@ -111,10 +114,9 @@ clib_error_t * vlib_call_all_config_functions (vlib_main_t * vm,
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
- u8 * s, * v;
+ u8 *s, *v;
- if (! unformat (input, "%s %v", &s, &v)
- || ! (p = hash_get_mem (hash, s)))
+ if (!unformat (input, "%s %v", &s, &v) || !(p = hash_get_mem (hash, s)))
{
error = clib_error_create ("unknown input `%s %v'", s, v);
goto done;
@@ -134,7 +136,7 @@ clib_error_t * vlib_call_all_config_functions (vlib_main_t * vm,
/* Is this an early config? Are we doing early configs? */
if (is_early ^ c->is_early)
- continue;
+ continue;
/* Already called? */
if (hash_get (vm->init_functions_called, c->function))
@@ -146,7 +148,7 @@ clib_error_t * vlib_call_all_config_functions (vlib_main_t * vm,
goto done;
}
- done:
+done:
for (i = 0; i < vec_len (all); i++)
{
c = all[i];
@@ -156,3 +158,11 @@ clib_error_t * vlib_call_all_config_functions (vlib_main_t * vm,
hash_free (hash);
return error;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/init.h b/vlib/vlib/init.h
index c2a4014fd5b..4fa5b304590 100644
--- a/vlib/vlib/init.h
+++ b/vlib/vlib/init.h
@@ -48,27 +48,29 @@
functions are typically used to register and setup packet
processing nodes. */
-typedef clib_error_t * (vlib_init_function_t) (struct vlib_main_t * vm);
+typedef clib_error_t *(vlib_init_function_t) (struct vlib_main_t * vm);
-typedef struct _vlib_init_function_list_elt {
- struct _vlib_init_function_list_elt * next_init_function;
- vlib_init_function_t * f;
+typedef struct _vlib_init_function_list_elt
+{
+ struct _vlib_init_function_list_elt *next_init_function;
+ vlib_init_function_t *f;
} _vlib_init_function_list_elt_t;
/* Configuration functions: called with configuration input just before
main polling loop starts. */
-typedef clib_error_t * (vlib_config_function_t) (struct vlib_main_t * vm,
- unformat_input_t * input);
+typedef clib_error_t *(vlib_config_function_t) (struct vlib_main_t * vm,
+ unformat_input_t * input);
-typedef struct vlib_config_function_runtime_t {
+typedef struct vlib_config_function_runtime_t
+{
/* Function to call. Set to null once function has already been called. */
- vlib_config_function_t * function;
+ vlib_config_function_t *function;
/* Input for function. */
unformat_input_t input;
/* next config function registration */
- struct vlib_config_function_runtime_t * next_registration;
+ struct vlib_config_function_runtime_t *next_registration;
/* To be invoked as soon as the clib heap is available */
u8 is_early;
@@ -104,7 +106,7 @@ static void __vlib_add_##tag##_function_##x (void) \
= vm->tag##_function_registrations; \
vm->tag##_function_registrations = &_vlib_init_function; \
_vlib_init_function.f = &x; \
-}
+}
#define VLIB_INIT_FUNCTION(x) VLIB_DECLARE_INIT_FUNCTION(x,init)
@@ -207,16 +209,16 @@ static void __vlib_add_config_function_##x (void) \
})
/* External functions. */
-clib_error_t * vlib_call_all_init_functions (struct vlib_main_t * vm);
-clib_error_t * vlib_call_all_config_functions (struct vlib_main_t * vm,
- unformat_input_t * input,
- int is_early);
-clib_error_t * vlib_call_all_main_loop_enter_functions (struct vlib_main_t * vm);
-clib_error_t * vlib_call_all_main_loop_exit_functions (struct vlib_main_t * vm);
-clib_error_t *
-vlib_call_init_exit_functions (struct vlib_main_t * vm,
- _vlib_init_function_list_elt_t *head,
- int call_once);
+clib_error_t *vlib_call_all_init_functions (struct vlib_main_t *vm);
+clib_error_t *vlib_call_all_config_functions (struct vlib_main_t *vm,
+ unformat_input_t * input,
+ int is_early);
+clib_error_t *vlib_call_all_main_loop_enter_functions (struct vlib_main_t
+ *vm);
+clib_error_t *vlib_call_all_main_loop_exit_functions (struct vlib_main_t *vm);
+clib_error_t *vlib_call_init_exit_functions (struct vlib_main_t *vm,
+ _vlib_init_function_list_elt_t *
+ head, int call_once);
#define foreach_vlib_module_reference \
_ (node_cli) \
@@ -226,5 +228,11 @@ vlib_call_init_exit_functions (struct vlib_main_t * vm,
#define _(x) void vlib_##x##_reference (void);
foreach_vlib_module_reference
#undef _
-
#endif /* included_vlib_init_h */
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/lex.c b/vlib/vlib/lex.c
index de650900c11..1cc8f1678d2 100644
--- a/vlib/vlib/lex.c
+++ b/vlib/vlib/lex.c
@@ -19,10 +19,11 @@ vlib_lex_main_t vlib_lex_main;
#define LEX_DEBUG 0
-u8 * format_vlib_lex_token (u8 * s, va_list * args)
+u8 *
+format_vlib_lex_token (u8 * s, va_list * args)
{
vlib_lex_main_t *lm = va_arg (*args, vlib_lex_main_t *);
- vlib_lex_token_t *t = va_arg (*args, vlib_lex_token_t *);
+ vlib_lex_token_t *t = va_arg (*args, vlib_lex_token_t *);
if (t->token == VLIB_LEX_word)
s = format (s, "%s", t->value.as_pointer);
@@ -31,7 +32,8 @@ u8 * format_vlib_lex_token (u8 * s, va_list * args)
return s;
}
-void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
+void
+vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
{
u8 c;
vlib_lex_table_t *t;
@@ -40,7 +42,7 @@ void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
if (PREDICT_FALSE (lm->pushback_sp >= 0))
{
- rv[0] = lm->pushback_vector [lm->pushback_sp--];
+ rv[0] = lm->pushback_vector[lm->pushback_sp--];
return;
}
@@ -48,15 +50,15 @@ void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
while (1)
{
- if (PREDICT_FALSE(lm->current_index >= vec_len (lm->input_vector)))
+ if (PREDICT_FALSE (lm->current_index >= vec_len (lm->input_vector)))
{
rv->token = VLIB_LEX_eof;
return;
}
t = vec_elt_at_index (lm->lex_tables, lm->current_table_index);
- c = (lm->input_vector [lm->current_index++]) & 0x7f;
- e = &t->entries [c];
+ c = (lm->input_vector[lm->current_index++]) & 0x7f;
+ e = &t->entries[c];
lm->current_table_index = e->next_table_index;
switch (e->action)
@@ -82,43 +84,44 @@ void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
continue;
case VLIB_LEX_ADD_TO_TOKEN:
- vec_add1(lm->token_buffer, c);
+ vec_add1 (lm->token_buffer, c);
continue;
- case VLIB_LEX_KEYWORD_CHECK: {
- uword * p;
-
- vec_add1 (lm->token_buffer, 0);
-
- /* It's either a keyword or just a word. */
- p = hash_get_mem (lm->lex_keywords, lm->token_buffer);
- if (p)
- {
- rv->token = p[0];
- if (LEX_DEBUG > 0)
- clib_warning ("keyword '%s' token %s",
- lm->token_buffer,
- lm->lex_token_names[rv->token]);
- }
- else
- {
- /* it's a WORD */
- rv->token = VLIB_LEX_word;
- rv->value.as_pointer = vec_dup (lm->token_buffer);
- if (LEX_DEBUG > 0)
- clib_warning ("%s, value '%s'",
- lm->lex_token_names[VLIB_LEX_word],
- rv->value.as_pointer);
- }
- _vec_len (lm->token_buffer) = 0;
-
- /* Rescan the character which terminated the keyword/word. */
- lm->current_index--;
- return;
- }
+ case VLIB_LEX_KEYWORD_CHECK:
+ {
+ uword *p;
+
+ vec_add1 (lm->token_buffer, 0);
+
+ /* It's either a keyword or just a word. */
+ p = hash_get_mem (lm->lex_keywords, lm->token_buffer);
+ if (p)
+ {
+ rv->token = p[0];
+ if (LEX_DEBUG > 0)
+ clib_warning ("keyword '%s' token %s",
+ lm->token_buffer,
+ lm->lex_token_names[rv->token]);
+ }
+ else
+ {
+ /* it's a WORD */
+ rv->token = VLIB_LEX_word;
+ rv->value.as_pointer = vec_dup (lm->token_buffer);
+ if (LEX_DEBUG > 0)
+ clib_warning ("%s, value '%s'",
+ lm->lex_token_names[VLIB_LEX_word],
+ rv->value.as_pointer);
+ }
+ _vec_len (lm->token_buffer) = 0;
+
+ /* Rescan the character which terminated the keyword/word. */
+ lm->current_index--;
+ return;
+ }
case VLIB_LEX_RETURN_AND_RESCAN:
- ASSERT(lm->current_index);
+ ASSERT (lm->current_index);
lm->current_index--;
/* note flow-through */
@@ -128,11 +131,12 @@ void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
lm->current_token_value = ~0;
if (LEX_DEBUG > 0)
{
- clib_warning ("table %s char '%c'(0x%02x) next table %s return %s",
- t->name, c, c, lm->lex_tables[e->next_table_index].name,
- lm->lex_token_names[e->token]);
- if (rv->token == VLIB_LEX_number)
- clib_warning (" numeric value 0x%x (%d)", rv->value,
+ clib_warning
+ ("table %s char '%c'(0x%02x) next table %s return %s",
+ t->name, c, c, lm->lex_tables[e->next_table_index].name,
+ lm->lex_token_names[e->token]);
+ if (rv->token == VLIB_LEX_number)
+ clib_warning (" numeric value 0x%x (%d)", rv->value,
rv->value);
}
return;
@@ -140,7 +144,8 @@ void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * rv)
}
}
-u16 vlib_lex_add_token (vlib_lex_main_t *lm, char *token_name)
+u16
+vlib_lex_add_token (vlib_lex_main_t * lm, char *token_name)
{
uword *p;
u16 rv;
@@ -157,7 +162,8 @@ u16 vlib_lex_add_token (vlib_lex_main_t *lm, char *token_name)
return rv;
}
-static u16 add_keyword (vlib_lex_main_t *lm, char *keyword, char *token_name)
+static u16
+add_keyword (vlib_lex_main_t * lm, char *keyword, char *token_name)
{
uword *p;
u16 token;
@@ -172,14 +178,17 @@ static u16 add_keyword (vlib_lex_main_t *lm, char *keyword, char *token_name)
return token;
}
-u16 vlib_lex_find_or_add_keyword (vlib_lex_main_t *lm, char *keyword, char *token_name)
+u16
+vlib_lex_find_or_add_keyword (vlib_lex_main_t * lm, char *keyword,
+ char *token_name)
{
- uword * p = hash_get_mem (lm->lex_keywords, keyword);
+ uword *p = hash_get_mem (lm->lex_keywords, keyword);
return p ? p[0] : add_keyword (lm, keyword, token_name);
}
-void vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
- u16 token, u32 next_table_index)
+void
+vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
+ u16 token, u32 next_table_index)
{
int i;
vlib_lex_main_t *lm = &vlib_lex_main;
@@ -194,7 +203,8 @@ void vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
}
}
-u16 vlib_lex_add_table (char *name)
+u16
+vlib_lex_add_table (char *name)
{
vlib_lex_main_t *lm = &vlib_lex_main;
vlib_lex_table_t *t;
@@ -202,7 +212,7 @@ u16 vlib_lex_add_table (char *name)
p = hash_get_mem (lm->lex_tables_by_name, name);
- ASSERT(p == 0);
+ ASSERT (p == 0);
pool_get_aligned (lm->lex_tables, t, CLIB_CACHE_LINE_BYTES);
@@ -213,13 +223,14 @@ u16 vlib_lex_add_table (char *name)
vlib_lex_set_action_range (t - lm->lex_tables, 1, 0x7F, VLIB_LEX_IGNORE, ~0,
t - lm->lex_tables);
- vlib_lex_set_action_range (t - lm->lex_tables, 0, 0, VLIB_LEX_RETURN, VLIB_LEX_eof,
- t - lm->lex_tables);
+ vlib_lex_set_action_range (t - lm->lex_tables, 0, 0, VLIB_LEX_RETURN,
+ VLIB_LEX_eof, t - lm->lex_tables);
return t - lm->lex_tables;
}
-void vlib_lex_reset (vlib_lex_main_t *lm, u8 *input_vector)
+void
+vlib_lex_reset (vlib_lex_main_t * lm, u8 * input_vector)
{
if (lm->pushback_vector)
_vec_len (lm->pushback_vector) = 0;
@@ -229,7 +240,8 @@ void vlib_lex_reset (vlib_lex_main_t *lm, u8 *input_vector)
lm->current_index = 0;
}
-static clib_error_t * lex_onetime_init (vlib_main_t * vm)
+static clib_error_t *
+lex_onetime_init (vlib_main_t * vm)
{
vlib_lex_main_t *lm = &vlib_lex_main;
@@ -249,3 +261,11 @@ static clib_error_t * lex_onetime_init (vlib_main_t * vm)
}
VLIB_INIT_FUNCTION (lex_onetime_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/lex.h b/vlib/vlib/lex.h
index d5ea509915c..4ae58f468c1 100644
--- a/vlib/vlib/lex.h
+++ b/vlib/vlib/lex.h
@@ -37,57 +37,64 @@
_ (lpar) \
_ (rpar)
-typedef enum {
+typedef enum
+{
#define _(f) VLIB_LEX_##f,
foreach_vlib_lex_global_token
#undef _
} vlib_lex_global_token_t;
-typedef enum {
+typedef enum
+{
VLIB_LEX_IGNORE,
VLIB_LEX_ADD_TO_TOKEN,
VLIB_LEX_RETURN,
VLIB_LEX_RETURN_AND_RESCAN,
VLIB_LEX_KEYWORD_CHECK,
- VLIB_LEX_START_NUMBER,
+ VLIB_LEX_START_NUMBER,
VLIB_LEX_ADD_TO_NUMBER,
} vlib_lex_action_t;
-typedef struct {
+typedef struct
+{
u16 action;
u16 next_table_index;
u16 token;
} vlib_lex_table_entry_t;
-typedef struct {
+typedef struct
+{
char *name;
- vlib_lex_table_entry_t entries [128];
+ vlib_lex_table_entry_t entries[128];
} vlib_lex_table_t;
-typedef struct {
+typedef struct
+{
u32 token;
- union {
+ union
+ {
uword as_uword;
- void * as_pointer;
- char * as_string;
+ void *as_pointer;
+ char *as_string;
} value;
} vlib_lex_token_t;
-typedef struct {
- vlib_lex_table_t * lex_tables;
- uword * lex_tables_by_name;
+typedef struct
+{
+ vlib_lex_table_t *lex_tables;
+ uword *lex_tables_by_name;
/* Vector of token strings. */
- char ** lex_token_names;
+ char **lex_token_names;
/* Hash mapping c string name to token index. */
- uword * lex_tokens_by_name;
+ uword *lex_tokens_by_name;
/* Hash mapping c string keyword name to token index. */
- uword * lex_keywords;
+ uword *lex_keywords;
- vlib_lex_token_t * pushback_vector;
+ vlib_lex_token_t *pushback_vector;
i32 pushback_sp;
@@ -104,7 +111,7 @@ typedef struct {
u32 current_index;
/* Re-used vector for forming token strings and hashing them. */
- u8 * token_buffer;
+ u8 *token_buffer;
} vlib_lex_main_t;
vlib_lex_main_t vlib_lex_main;
@@ -114,17 +121,25 @@ vlib_lex_cleanup_token (vlib_lex_token_t * t)
{
if (t->token == VLIB_LEX_word)
{
- u8 * tv = t->value.as_pointer;
+ u8 *tv = t->value.as_pointer;
vec_free (tv);
}
}
u16 vlib_lex_add_table (char *name);
-void vlib_lex_get_token (vlib_lex_main_t *lm, vlib_lex_token_t * result);
-u16 vlib_lex_add_token (vlib_lex_main_t *lm, char *token_name);
-void vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
+void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * result);
+u16 vlib_lex_add_token (vlib_lex_main_t * lm, char *token_name);
+void vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
u16 token, u32 next_table_index);
-void vlib_lex_reset (vlib_lex_main_t *lm, u8 *input_vector);
+void vlib_lex_reset (vlib_lex_main_t * lm, u8 * input_vector);
format_function_t format_vlib_lex_token;
#endif /* included_vlib_lex_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/main.c b/vlib/vlib/main.c
index f7a27cfd6bb..c4062a7f333 100644
--- a/vlib/vlib/main.c
+++ b/vlib/vlib/main.c
@@ -78,7 +78,7 @@ vlib_frame_bytes (u32 n_scalar_bytes, u32 n_vector_bytes)
always_inline u32 *
vlib_frame_find_magic (vlib_frame_t * f, vlib_node_t * node)
{
- void * p = f;
+ void *p = f;
p += vlib_frame_vector_byte_offset (node->scalar_size);
@@ -92,7 +92,7 @@ get_frame_size_info (vlib_node_main_t * nm,
u32 n_scalar_bytes, u32 n_vector_bytes)
{
uword key = (n_scalar_bytes << 16) | n_vector_bytes;
- uword * p, i;
+ uword *p, i;
p = hash_get (nm->frame_size_hash, key);
if (p)
@@ -108,12 +108,13 @@ get_frame_size_info (vlib_node_main_t * nm,
}
static u32
-vlib_frame_alloc_to_node (vlib_main_t * vm, u32 to_node_index, u32 frame_flags)
+vlib_frame_alloc_to_node (vlib_main_t * vm, u32 to_node_index,
+ u32 frame_flags)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_frame_size_t * fs;
- vlib_node_t * to_node;
- vlib_frame_t * f;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_frame_size_t *fs;
+ vlib_node_t *to_node;
+ vlib_frame_t *f;
u32 fi, l, n, scalar_size, vector_size;
to_node = vlib_get_node (vm, to_node_index);
@@ -149,7 +150,7 @@ vlib_frame_alloc_to_node (vlib_main_t * vm, u32 to_node_index, u32 frame_flags)
/* Insert magic number. */
{
- u32 * magic;
+ u32 *magic;
magic = vlib_frame_find_magic (f, to_node);
*magic = VLIB_FRAME_MAGIC;
@@ -168,15 +169,15 @@ vlib_frame_alloc_to_node (vlib_main_t * vm, u32 to_node_index, u32 frame_flags)
/* Allocate a frame for from FROM_NODE to TO_NODE via TO_NEXT_INDEX.
Returns frame index. */
static u32
-vlib_frame_alloc (vlib_main_t * vm, vlib_node_runtime_t * from_node_runtime, u32 to_next_index)
+vlib_frame_alloc (vlib_main_t * vm, vlib_node_runtime_t * from_node_runtime,
+ u32 to_next_index)
{
- vlib_node_t * from_node;
+ vlib_node_t *from_node;
from_node = vlib_get_node (vm, from_node_runtime->node_index);
ASSERT (to_next_index < vec_len (from_node->next_nodes));
- return vlib_frame_alloc_to_node (vm,
- from_node->next_nodes[to_next_index],
+ return vlib_frame_alloc_to_node (vm, from_node->next_nodes[to_next_index],
/* frame_flags */ 0);
}
@@ -184,14 +185,16 @@ vlib_frame_t *
vlib_get_frame_to_node (vlib_main_t * vm, u32 to_node_index)
{
u32 fi = vlib_frame_alloc_to_node (vm, to_node_index,
- /* frame_flags */ VLIB_FRAME_FREE_AFTER_DISPATCH);
+ /* frame_flags */
+ VLIB_FRAME_FREE_AFTER_DISPATCH);
return vlib_get_frame (vm, fi);
}
-void vlib_put_frame_to_node (vlib_main_t * vm, u32 to_node_index, vlib_frame_t * f)
+void
+vlib_put_frame_to_node (vlib_main_t * vm, u32 to_node_index, vlib_frame_t * f)
{
- vlib_pending_frame_t * p;
- vlib_node_t * to_node;
+ vlib_pending_frame_t *p;
+ vlib_node_t *to_node;
if (f->n_vectors == 0)
return;
@@ -208,15 +211,13 @@ void vlib_put_frame_to_node (vlib_main_t * vm, u32 to_node_index, vlib_frame_t *
/* Free given frame. */
void
-vlib_frame_free (vlib_main_t * vm,
- vlib_node_runtime_t * r,
- vlib_frame_t * f)
+vlib_frame_free (vlib_main_t * vm, vlib_node_runtime_t * r, vlib_frame_t * f)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * node;
- vlib_frame_size_t * fs;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *node;
+ vlib_frame_size_t *fs;
u32 frame_index;
-
+
ASSERT (f->flags & VLIB_FRAME_IS_ALLOCATED);
node = vlib_get_node (vm, r->node_index);
@@ -229,7 +230,7 @@ vlib_frame_free (vlib_main_t * vm,
/* No next frames may point to freed frame. */
if (CLIB_DEBUG > 0)
{
- vlib_next_frame_t * nf;
+ vlib_next_frame_t *nf;
vec_foreach (nf, vm->node_main.next_frames)
ASSERT (nf->frame_index != frame_index);
}
@@ -243,31 +244,32 @@ vlib_frame_free (vlib_main_t * vm,
static clib_error_t *
show_frame_stats (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_frame_size_t * fs;
-
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_frame_size_t *fs;
+
vlib_cli_output (vm, "%=6s%=12s%=12s", "Size", "# Alloc", "# Free");
vec_foreach (fs, nm->frame_sizes)
- {
- u32 n_alloc = fs->n_alloc_frames;
- u32 n_free = vec_len (fs->free_frame_indices);
+ {
+ u32 n_alloc = fs->n_alloc_frames;
+ u32 n_free = vec_len (fs->free_frame_indices);
- if (n_alloc + n_free > 0)
- vlib_cli_output (vm, "%=6d%=12d%=12d",
- fs - nm->frame_sizes, n_alloc, n_free);
- }
+ if (n_alloc + n_free > 0)
+ vlib_cli_output (vm, "%=6d%=12d%=12d",
+ fs - nm->frame_sizes, n_alloc, n_free);
+ }
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_frame_stats_cli, static) = {
.path = "show vlib frame-allocation",
.short_help = "Show node dispatch frame statistics",
.function = show_frame_stats,
};
+/* *INDENT-ON* */
/* Change ownership of enqueue rights to given next node. */
static void
@@ -275,9 +277,9 @@ vlib_next_frame_change_ownership (vlib_main_t * vm,
vlib_node_runtime_t * node_runtime,
u32 next_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_next_frame_t * next_frame;
- vlib_node_t * node, * next_node;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_next_frame_t *next_frame;
+ vlib_node_t *node, *next_node;
node = vec_elt (nm->nodes, node_runtime->node_index);
@@ -288,13 +290,14 @@ vlib_next_frame_change_ownership (vlib_main_t * vm,
ASSERT (vec_len (node->next_nodes) == node_runtime->n_next_nodes);
- next_frame = vlib_node_runtime_get_next_frame (vm, node_runtime, next_index);
+ next_frame =
+ vlib_node_runtime_get_next_frame (vm, node_runtime, next_index);
next_node = vec_elt (nm->nodes, node->next_nodes[next_index]);
if (next_node->owner_node_index != VLIB_INVALID_NODE_INDEX)
{
/* Get frame from previous owner. */
- vlib_next_frame_t * owner_next_frame;
+ vlib_next_frame_t *owner_next_frame;
vlib_next_frame_t tmp;
owner_next_frame =
@@ -312,66 +315,63 @@ vlib_next_frame_change_ownership (vlib_main_t * vm,
* all pending frames and fix their next_frame_index fields.
*/
if (next_frame->flags & VLIB_FRAME_PENDING)
- {
- vlib_pending_frame_t * p;
- if (next_frame->frame_index != ~0)
- {
- vec_foreach (p, nm->pending_frames)
- {
- if (p->frame_index == next_frame->frame_index)
- {
- p->next_frame_index =
- next_frame - vm->node_main.next_frames;
- }
- }
- }
- }
+ {
+ vlib_pending_frame_t *p;
+ if (next_frame->frame_index != ~0)
+ {
+ vec_foreach (p, nm->pending_frames)
+ {
+ if (p->frame_index == next_frame->frame_index)
+ {
+ p->next_frame_index =
+ next_frame - vm->node_main.next_frames;
+ }
+ }
+ }
+ }
}
else
{
/* No previous owner. Take ownership. */
next_frame->flags |= VLIB_FRAME_OWNER;
}
-
+
/* Record new owner. */
next_node->owner_node_index = node->index;
next_node->owner_next_index = next_index;
/* Now we should be owner. */
ASSERT (next_frame->flags & VLIB_FRAME_OWNER);
-}
+}
/* Make sure that magic number is still there.
Otherwise, it is likely that caller has overrun frame arguments. */
always_inline void
validate_frame_magic (vlib_main_t * vm,
- vlib_frame_t * f,
- vlib_node_t * n,
- uword next_index)
+ vlib_frame_t * f, vlib_node_t * n, uword next_index)
{
- vlib_node_t * next_node = vlib_get_node (vm, n->next_nodes[next_index]);
- u32 * magic = vlib_frame_find_magic (f, next_node);
+ vlib_node_t *next_node = vlib_get_node (vm, n->next_nodes[next_index]);
+ u32 *magic = vlib_frame_find_magic (f, next_node);
ASSERT (VLIB_FRAME_MAGIC == magic[0]);
}
vlib_frame_t *
vlib_get_next_frame_internal (vlib_main_t * vm,
vlib_node_runtime_t * node,
- u32 next_index,
- u32 allocate_new_next_frame)
+ u32 next_index, u32 allocate_new_next_frame)
{
- vlib_frame_t * f;
- vlib_next_frame_t * nf;
+ vlib_frame_t *f;
+ vlib_next_frame_t *nf;
u32 n_used;
nf = vlib_node_runtime_get_next_frame (vm, node, next_index);
/* Make sure this next frame owns right to enqueue to destination frame. */
- if (PREDICT_FALSE (! (nf->flags & VLIB_FRAME_OWNER)))
+ if (PREDICT_FALSE (!(nf->flags & VLIB_FRAME_OWNER)))
vlib_next_frame_change_ownership (vm, node, next_index);
/* ??? Don't need valid flag: can use frame_index == ~0 */
- if (PREDICT_FALSE (! (nf->flags & VLIB_FRAME_IS_ALLOCATED)))
+ if (PREDICT_FALSE (!(nf->flags & VLIB_FRAME_IS_ALLOCATED)))
{
nf->frame_index = vlib_frame_alloc (vm, node, next_index);
nf->flags |= VLIB_FRAME_IS_ALLOCATED;
@@ -381,7 +381,7 @@ vlib_get_next_frame_internal (vlib_main_t * vm,
/* Has frame been removed from pending vector (e.g. finished dispatching)?
If so we can reuse frame. */
- if ((nf->flags & VLIB_FRAME_PENDING) && ! (f->flags & VLIB_FRAME_PENDING))
+ if ((nf->flags & VLIB_FRAME_PENDING) && !(f->flags & VLIB_FRAME_PENDING))
{
nf->flags &= ~VLIB_FRAME_PENDING;
f->n_vectors = 0;
@@ -392,10 +392,10 @@ vlib_get_next_frame_internal (vlib_main_t * vm,
if (n_used >= VLIB_FRAME_SIZE || (allocate_new_next_frame && n_used > 0))
{
/* Old frame may need to be freed after dispatch, since we'll have
- two redundant frames from node -> next node. */
- if (! (nf->flags & VLIB_FRAME_NO_FREE_AFTER_DISPATCH))
+ two redundant frames from node -> next node. */
+ if (!(nf->flags & VLIB_FRAME_NO_FREE_AFTER_DISPATCH))
{
- vlib_frame_t * f_old = vlib_get_frame (vm, nf->frame_index);
+ vlib_frame_t *f_old = vlib_get_frame (vm, nf->frame_index);
f_old->flags |= VLIB_FRAME_FREE_AFTER_DISPATCH;
}
@@ -411,8 +411,7 @@ vlib_get_next_frame_internal (vlib_main_t * vm,
if (CLIB_DEBUG > 0)
{
validate_frame_magic (vm, f,
- vlib_get_node (vm, node->node_index),
- next_index);
+ vlib_get_node (vm, node->node_index), next_index);
}
return f;
@@ -421,14 +420,13 @@ vlib_get_next_frame_internal (vlib_main_t * vm,
static void
vlib_put_next_frame_validate (vlib_main_t * vm,
vlib_node_runtime_t * rt,
- u32 next_index,
- u32 n_vectors_left)
+ u32 next_index, u32 n_vectors_left)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_next_frame_t * nf;
- vlib_frame_t * f;
- vlib_node_runtime_t * next_rt;
- vlib_node_t * next_node;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_next_frame_t *nf;
+ vlib_frame_t *f;
+ vlib_node_runtime_t *next_rt;
+ vlib_node_t *next_node;
u32 n_before, n_after;
nf = vlib_node_runtime_get_next_frame (vm, rt, next_index);
@@ -445,7 +443,7 @@ vlib_put_next_frame_validate (vlib_main_t * vm,
next_node = vlib_get_node (vm, next_rt->node_index);
if (n_after > 0 && next_node->validate_frame)
{
- u8 * msg = next_node->validate_frame (vm, rt, f);
+ u8 *msg = next_node->validate_frame (vm, rt, f);
if (msg)
{
clib_warning ("%v", msg);
@@ -458,12 +456,11 @@ vlib_put_next_frame_validate (vlib_main_t * vm,
void
vlib_put_next_frame (vlib_main_t * vm,
vlib_node_runtime_t * r,
- u32 next_index,
- u32 n_vectors_left)
+ u32 next_index, u32 n_vectors_left)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_next_frame_t * nf;
- vlib_frame_t * f;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_next_frame_t *nf;
+ vlib_frame_t *f;
u32 n_vectors_in_frame;
if (DPDK == 0 && CLIB_DEBUG > 0)
@@ -476,7 +473,7 @@ vlib_put_next_frame (vlib_main_t * vm,
has overrun frame meta data. */
if (CLIB_DEBUG > 0)
{
- vlib_node_t * node = vlib_get_node (vm, r->node_index);
+ vlib_node_t *node = vlib_get_node (vm, r->node_index);
validate_frame_magic (vm, f, node, next_index);
}
@@ -489,51 +486,53 @@ vlib_put_next_frame (vlib_main_t * vm,
/* If vectors were added to frame, add to pending vector. */
if (PREDICT_TRUE (n_vectors_in_frame > 0))
{
- vlib_pending_frame_t * p;
+ vlib_pending_frame_t *p;
u32 v0, v1;
-
+
r->cached_next_index = next_index;
if (!(f->flags & VLIB_FRAME_PENDING))
- {
- __attribute__((unused)) vlib_node_t *node;
- vlib_node_t *next_node;
- vlib_node_runtime_t *next_runtime;
-
- node = vlib_get_node (vm, r->node_index);
- next_node = vlib_get_next_node (vm, r->node_index, next_index);
- next_runtime = vlib_node_get_runtime (vm, next_node->index);
-
- vec_add2 (nm->pending_frames, p, 1);
-
- p->frame_index = nf->frame_index;
- p->node_runtime_index = nf->node_runtime_index;
- p->next_frame_index = nf - nm->next_frames;
- nf->flags |= VLIB_FRAME_PENDING;
- f->flags |= VLIB_FRAME_PENDING;
-
- /*
- * If we're going to dispatch this frame on another thread,
- * force allocation of a new frame. Otherwise, we create
- * a dangling frame reference. Each thread has its own copy of
- * the next_frames vector.
- */
- if (0 && r->cpu_index != next_runtime->cpu_index)
- {
- nf->frame_index = ~0;
- nf->flags &= ~(VLIB_FRAME_PENDING | VLIB_FRAME_IS_ALLOCATED);
- }
- }
+ {
+ __attribute__ ((unused)) vlib_node_t *node;
+ vlib_node_t *next_node;
+ vlib_node_runtime_t *next_runtime;
+
+ node = vlib_get_node (vm, r->node_index);
+ next_node = vlib_get_next_node (vm, r->node_index, next_index);
+ next_runtime = vlib_node_get_runtime (vm, next_node->index);
+
+ vec_add2 (nm->pending_frames, p, 1);
+
+ p->frame_index = nf->frame_index;
+ p->node_runtime_index = nf->node_runtime_index;
+ p->next_frame_index = nf - nm->next_frames;
+ nf->flags |= VLIB_FRAME_PENDING;
+ f->flags |= VLIB_FRAME_PENDING;
+
+ /*
+ * If we're going to dispatch this frame on another thread,
+ * force allocation of a new frame. Otherwise, we create
+ * a dangling frame reference. Each thread has its own copy of
+ * the next_frames vector.
+ */
+ if (0 && r->cpu_index != next_runtime->cpu_index)
+ {
+ nf->frame_index = ~0;
+ nf->flags &= ~(VLIB_FRAME_PENDING | VLIB_FRAME_IS_ALLOCATED);
+ }
+ }
/* Copy trace flag from next_frame and from runtime. */
- nf->flags |= (nf->flags & VLIB_NODE_FLAG_TRACE) | (r->flags & VLIB_NODE_FLAG_TRACE);
+ nf->flags |=
+ (nf->flags & VLIB_NODE_FLAG_TRACE) | (r->
+ flags & VLIB_NODE_FLAG_TRACE);
v0 = nf->vectors_since_last_overflow;
v1 = v0 + n_vectors_in_frame;
nf->vectors_since_last_overflow = v1;
if (PREDICT_FALSE (v1 < v0))
{
- vlib_node_t * node = vlib_get_node (vm, r->node_index);
+ vlib_node_t *node = vlib_get_node (vm, r->node_index);
vec_elt (node->n_vectors_by_next_node, next_index) += v0;
}
}
@@ -543,11 +542,9 @@ vlib_put_next_frame (vlib_main_t * vm,
never_inline void
vlib_node_runtime_sync_stats (vlib_main_t * vm,
vlib_node_runtime_t * r,
- uword n_calls,
- uword n_vectors,
- uword n_clocks)
+ uword n_calls, uword n_vectors, uword n_clocks)
{
- vlib_node_t * n = vlib_get_node (vm, r->node_index);
+ vlib_node_t *n = vlib_get_node (vm, r->node_index);
n->stats_total.calls += n_calls + r->calls_since_last_overflow;
n->stats_total.vectors += n_vectors + r->vectors_since_last_overflow;
@@ -560,47 +557,50 @@ vlib_node_runtime_sync_stats (vlib_main_t * vm,
r->clocks_since_last_overflow = 0;
}
-always_inline void __attribute__((unused))
+always_inline void __attribute__ ((unused))
vlib_process_sync_stats (vlib_main_t * vm,
vlib_process_t * p,
- uword n_calls,
- uword n_vectors,
- uword n_clocks)
+ uword n_calls, uword n_vectors, uword n_clocks)
{
- vlib_node_runtime_t * rt = &p->node_runtime;
- vlib_node_t * n = vlib_get_node (vm, rt->node_index);
+ vlib_node_runtime_t *rt = &p->node_runtime;
+ vlib_node_t *n = vlib_get_node (vm, rt->node_index);
vlib_node_runtime_sync_stats (vm, rt, n_calls, n_vectors, n_clocks);
n->stats_total.suspends += p->n_suspends;
p->n_suspends = 0;
}
-void vlib_node_sync_stats (vlib_main_t * vm, vlib_node_t * n)
+void
+vlib_node_sync_stats (vlib_main_t * vm, vlib_node_t * n)
{
- vlib_node_runtime_t * rt;
+ vlib_node_runtime_t *rt;
if (n->type == VLIB_NODE_TYPE_PROCESS)
{
/* Nothing to do for PROCESS nodes except in main thread */
- if (vm != &vlib_global_main) return;
+ if (vm != &vlib_global_main)
+ return;
- vlib_process_t * p = vlib_get_process_from_node (vm, n);
+ vlib_process_t *p = vlib_get_process_from_node (vm, n);
n->stats_total.suspends += p->n_suspends;
p->n_suspends = 0;
rt = &p->node_runtime;
}
else
- rt = vec_elt_at_index (vm->node_main.nodes_by_type[n->type], n->runtime_index);
+ rt =
+ vec_elt_at_index (vm->node_main.nodes_by_type[n->type],
+ n->runtime_index);
vlib_node_runtime_sync_stats (vm, rt, 0, 0, 0);
/* Sync up runtime next frame vector counters with main node structure. */
{
- vlib_next_frame_t * nf;
+ vlib_next_frame_t *nf;
uword i;
for (i = 0; i < rt->n_next_nodes; i++)
{
nf = vlib_node_runtime_get_next_frame (vm, rt, i);
- vec_elt (n->n_vectors_by_next_node, i) += nf->vectors_since_last_overflow;
+ vec_elt (n->n_vectors_by_next_node, i) +=
+ nf->vectors_since_last_overflow;
nf->vectors_since_last_overflow = 0;
}
}
@@ -610,8 +610,7 @@ always_inline u32
vlib_node_runtime_update_stats (vlib_main_t * vm,
vlib_node_runtime_t * node,
uword n_calls,
- uword n_vectors,
- uword n_clocks)
+ uword n_vectors, uword n_clocks)
{
u32 ca0, ca1, v0, v1, cl0, cl1, r;
@@ -627,9 +626,8 @@ vlib_node_runtime_update_stats (vlib_main_t * vm,
node->clocks_since_last_overflow = cl1;
node->vectors_since_last_overflow = v1;
node->max_clock_n = node->max_clock > n_clocks ?
- node->max_clock_n : n_vectors;
- node->max_clock = node->max_clock > n_clocks ?
- node->max_clock : n_clocks;
+ node->max_clock_n : n_vectors;
+ node->max_clock = node->max_clock > n_clocks ? node->max_clock : n_clocks;
r = vlib_node_runtime_update_main_loop_vector_stats (vm, node, n_vectors);
@@ -647,9 +645,7 @@ vlib_node_runtime_update_stats (vlib_main_t * vm,
always_inline void
vlib_process_update_stats (vlib_main_t * vm,
vlib_process_t * p,
- uword n_calls,
- uword n_vectors,
- uword n_clocks)
+ uword n_calls, uword n_vectors, uword n_clocks)
{
vlib_node_runtime_update_stats (vm, &p->node_runtime,
n_calls, n_vectors, n_clocks);
@@ -657,30 +653,30 @@ vlib_process_update_stats (vlib_main_t * vm,
static clib_error_t *
vlib_cli_elog_clear (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
elog_reset_buffer (&vm->elog_main);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (elog_clear_cli, static) = {
.path = "event-logger clear",
.short_help = "Clear the event log",
.function = vlib_cli_elog_clear,
};
+/* *INDENT-ON* */
#ifdef CLIB_UNIX
static clib_error_t *
elog_save_buffer (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- elog_main_t * em = &vm->elog_main;
- char * file, * chroot_file;
- clib_error_t * error = 0;
+ elog_main_t *em = &vm->elog_main;
+ char *file, *chroot_file;
+ clib_error_t *error = 0;
- if (! unformat (input, "%s", &file))
+ if (!unformat (input, "%s", &file))
{
vlib_cli_output (vm, "expected file name, got `%U'",
format_unformat_error, input);
@@ -688,7 +684,7 @@ elog_save_buffer (vlib_main_t * vm,
}
/* It's fairly hard to get "../oopsie" through unformat; just in case */
- if (strstr(file, "..") || index(file, '/'))
+ if (strstr (file, "..") || index (file, '/'))
{
vlib_cli_output (vm, "illegal characters in filename '%s'", file);
return 0;
@@ -696,32 +692,32 @@ elog_save_buffer (vlib_main_t * vm,
chroot_file = (char *) format (0, "/tmp/%s%c", file, 0);
- vec_free(file);
+ vec_free (file);
vlib_cli_output (vm, "Saving %wd of %wd events to %s",
- elog_n_events_in_buffer (em),
- elog_buffer_capacity (em),
- chroot_file);
-
+ elog_n_events_in_buffer (em),
+ elog_buffer_capacity (em), chroot_file);
+
vlib_worker_thread_barrier_sync (vm);
- error = elog_write_file (em, chroot_file);
- vlib_worker_thread_barrier_release(vm);
+ error = elog_write_file (em, chroot_file);
+ vlib_worker_thread_barrier_release (vm);
vec_free (chroot_file);
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (elog_save_cli, static) = {
.path = "event-logger save",
.short_help = "event-logger save <filename> (saves log in /tmp/<filename>)",
.function = elog_save_buffer,
};
+/* *INDENT-ON* */
static clib_error_t *
elog_stop (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- elog_main_t * em = &vm->elog_main;
+ elog_main_t *em = &vm->elog_main;
em->n_total_events_disable_limit = em->n_total_events;
@@ -729,18 +725,19 @@ elog_stop (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (elog_stop_cli, static) = {
.path = "event-logger stop",
.short_help = "Stop the event-logger",
.function = elog_stop,
};
+/* *INDENT-ON* */
static clib_error_t *
elog_restart (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- elog_main_t * em = &vm->elog_main;
+ elog_main_t *em = &vm->elog_main;
em->n_total_events_disable_limit = ~0;
@@ -748,18 +745,19 @@ elog_restart (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (elog_restart_cli, static) = {
.path = "event-logger restart",
.short_help = "Restart the event-logger",
.function = elog_restart,
};
+/* *INDENT-ON* */
static clib_error_t *
elog_resize (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- elog_main_t * em = &vm->elog_main;
+ elog_main_t *em = &vm->elog_main;
u32 tmp;
/* Stop the parade */
@@ -770,56 +768,57 @@ elog_resize (vlib_main_t * vm,
elog_alloc (em, tmp);
em->n_total_events_disable_limit = ~0;
}
- else
+ else
return clib_error_return (0, "Must specify how many events in the ring");
vlib_cli_output (vm, "Resized ring and restarted the event logger...");
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (elog_resize_cli, static) = {
.path = "event-logger resize",
.short_help = "event-logger resize <nnn>",
.function = elog_resize,
};
+/* *INDENT-ON* */
#endif /* CLIB_UNIX */
-static void elog_show_buffer_internal (vlib_main_t * vm, u32 n_events_to_show)
+static void
+elog_show_buffer_internal (vlib_main_t * vm, u32 n_events_to_show)
{
- elog_main_t * em = &vm->elog_main;
- elog_event_t * e, * es;
+ elog_main_t *em = &vm->elog_main;
+ elog_event_t *e, *es;
f64 dt;
/* Show events in VLIB time since log clock starts after VLIB clock. */
- dt = (em->init_time.cpu - vm->clib_time.init_cpu_time)
+ dt = (em->init_time.cpu - vm->clib_time.init_cpu_time)
* vm->clib_time.seconds_per_clock;
es = elog_peek_events (em);
- vlib_cli_output (vm, "%d of %d events in buffer, logger %s", vec_len (es),
- em->event_ring_size,
- em->n_total_events < em->n_total_events_disable_limit ?
- "running" : "stopped");
+ vlib_cli_output (vm, "%d of %d events in buffer, logger %s", vec_len (es),
+ em->event_ring_size,
+ em->n_total_events < em->n_total_events_disable_limit ?
+ "running" : "stopped");
vec_foreach (e, es)
- {
- vlib_cli_output (vm, "%18.9f: %U",
- e->time + dt,
- format_elog_event, em, e);
- n_events_to_show--;
- if (n_events_to_show == 0)
- break;
- }
+ {
+ vlib_cli_output (vm, "%18.9f: %U",
+ e->time + dt, format_elog_event, em, e);
+ n_events_to_show--;
+ if (n_events_to_show == 0)
+ break;
+ }
vec_free (es);
-
+
}
static clib_error_t *
elog_show_buffer (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
u32 n_events_to_show;
- clib_error_t * error = 0;
+ clib_error_t *error = 0;
n_events_to_show = 250;
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -835,44 +834,46 @@ elog_show_buffer (vlib_main_t * vm,
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (elog_show_cli, static) = {
.path = "show event-logger",
.short_help = "Show event logger info",
.function = elog_show_buffer,
};
+/* *INDENT-ON* */
-void vlib_gdb_show_event_log (void)
+void
+vlib_gdb_show_event_log (void)
{
- elog_show_buffer_internal (vlib_get_main(), (u32)~0);
+ elog_show_buffer_internal (vlib_get_main (), (u32) ~ 0);
}
static inline void
vlib_elog_main_loop_event (vlib_main_t * vm,
u32 node_index,
- u64 time,
- u32 n_vectors,
- u32 is_return)
+ u64 time, u32 n_vectors, u32 is_return)
{
- vlib_main_t * evm = &vlib_global_main;
- elog_main_t * em = &evm->elog_main;
+ vlib_main_t *evm = &vlib_global_main;
+ elog_main_t *em = &evm->elog_main;
if (VLIB_ELOG_MAIN_LOOP && n_vectors)
elog_track (em,
- /* event type */
- vec_elt_at_index (is_return
- ? evm->node_return_elog_event_types
- : evm->node_call_elog_event_types,
- node_index),
- /* track */
- (vm->cpu_index ? &vlib_worker_threads[vm->cpu_index].elog_track :
- &em->default_track),
- /* data to log */ n_vectors);
+ /* event type */
+ vec_elt_at_index (is_return
+ ? evm->node_return_elog_event_types
+ : evm->node_call_elog_event_types,
+ node_index),
+ /* track */
+ (vm->cpu_index ? &vlib_worker_threads[vm->cpu_index].
+ elog_track : &em->default_track),
+ /* data to log */ n_vectors);
}
-void vlib_dump_context_trace (vlib_main_t *vm, u32 bi)
+void
+vlib_dump_context_trace (vlib_main_t * vm, u32 bi)
{
- vlib_node_main_t * vnm = &vm->node_main;
- vlib_buffer_t * b;
+ vlib_node_main_t *vnm = &vm->node_main;
+ vlib_buffer_t *b;
u8 i, n;
if (VLIB_BUFFER_TRACE_TRAJECTORY)
@@ -880,36 +881,36 @@ void vlib_dump_context_trace (vlib_main_t *vm, u32 bi)
b = vlib_get_buffer (vm, bi);
n = b->pre_data[0];
- fformat(stderr, "Context trace for bi %d b 0x%llx, visited %d\n",
- bi, b, n);
+ fformat (stderr, "Context trace for bi %d b 0x%llx, visited %d\n",
+ bi, b, n);
if (n == 0 || n > 20)
- {
- fformat(stderr, "n is unreasonable\n");
- return;
- }
+ {
+ fformat (stderr, "n is unreasonable\n");
+ return;
+ }
for (i = 0; i < n; i++)
- {
- u32 node_index;
-
- node_index = b->pre_data[i+1];
-
- if (node_index > vec_len (vnm->nodes))
- {
- fformat(stderr, "Skip bogus node index %d\n", node_index);
- continue;
- }
-
- fformat(stderr, "%v (%d)\n", vnm->nodes[node_index]->name,
- node_index);
- }
+ {
+ u32 node_index;
+
+ node_index = b->pre_data[i + 1];
+
+ if (node_index > vec_len (vnm->nodes))
+ {
+ fformat (stderr, "Skip bogus node index %d\n", node_index);
+ continue;
+ }
+
+ fformat (stderr, "%v (%d)\n", vnm->nodes[node_index]->name,
+ node_index);
+ }
}
else
{
- fformat(stderr,
- "in vlib/buffers.h, #define VLIB_BUFFER_TRACE_TRAJECTORY 1\n");
+ fformat (stderr,
+ "in vlib/buffers.h, #define VLIB_BUFFER_TRACE_TRAJECTORY 1\n");
}
}
@@ -919,17 +920,16 @@ dispatch_node (vlib_main_t * vm,
vlib_node_runtime_t * node,
vlib_node_type_t type,
vlib_node_state_t dispatch_state,
- vlib_frame_t * frame,
- u64 last_time_stamp)
+ vlib_frame_t * frame, u64 last_time_stamp)
{
uword n, v;
u64 t;
- vlib_node_main_t * nm = &vm->node_main;
- vlib_next_frame_t * nf;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_next_frame_t *nf;
if (CLIB_DEBUG > 0)
{
- vlib_node_t * n = vlib_get_node (vm, node->node_index);
+ vlib_node_t *n = vlib_get_node (vm, node->node_index);
ASSERT (n->type == type);
}
@@ -961,112 +961,123 @@ dispatch_node (vlib_main_t * vm,
vm->cpu_time_last_node_dispatch = last_time_stamp;
- if (1 /* || vm->cpu_index == node->cpu_index */)
+ if (1 /* || vm->cpu_index == node->cpu_index */ )
{
vlib_main_t *stat_vm;
stat_vm = /* vlib_mains ? vlib_mains[0] : */ vm;
vlib_elog_main_loop_event (vm, node->node_index,
- last_time_stamp,
- frame ? frame->n_vectors : 0,
- /* is_after */ 0);
-
+ last_time_stamp,
+ frame ? frame->n_vectors : 0,
+ /* is_after */ 0);
+
/*
* Turn this on if you run into
* "bad monkey" contexts, and you want to know exactly
* which nodes they've visited... See ixge.c...
*/
if (VLIB_BUFFER_TRACE_TRAJECTORY && frame)
- {
- int i;
- int log_index;
- u32 * from;
- from = vlib_frame_vector_args (frame);
- for (i = 0; i < frame->n_vectors; i++)
- {
- vlib_buffer_t *b = vlib_get_buffer (vm, from[i]);
- ASSERT (b->pre_data[0] < 32);
- log_index = b->pre_data[0]++ + 1;
- b->pre_data[log_index] = node->node_index;
- }
- n = node->function (vm, node, frame);
- }
+ {
+ int i;
+ int log_index;
+ u32 *from;
+ from = vlib_frame_vector_args (frame);
+ for (i = 0; i < frame->n_vectors; i++)
+ {
+ vlib_buffer_t *b = vlib_get_buffer (vm, from[i]);
+ ASSERT (b->pre_data[0] < 32);
+ log_index = b->pre_data[0]++ + 1;
+ b->pre_data[log_index] = node->node_index;
+ }
+ n = node->function (vm, node, frame);
+ }
else
- n = node->function (vm, node, frame);
+ n = node->function (vm, node, frame);
t = clib_cpu_time_now ();
- vlib_elog_main_loop_event (vm, node->node_index, t, n, /* is_after */ 1);
+ vlib_elog_main_loop_event (vm, node->node_index, t, n, /* is_after */
+ 1);
vm->main_loop_vectors_processed += n;
vm->main_loop_nodes_processed += n > 0;
v = vlib_node_runtime_update_stats (stat_vm, node,
- /* n_calls */ 1,
- /* n_vectors */ n,
- /* n_clocks */ t - last_time_stamp);
+ /* n_calls */ 1,
+ /* n_vectors */ n,
+ /* n_clocks */ t - last_time_stamp);
/* When in interrupt mode and vector rate crosses threshold switch to
polling mode. */
if ((DPDK == 0 && dispatch_state == VLIB_NODE_STATE_INTERRUPT)
- || (DPDK == 0 && dispatch_state == VLIB_NODE_STATE_POLLING
- && (node->flags
- & VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE)))
- {
- ELOG_TYPE_DECLARE (e) = {
- .function = (char *) __FUNCTION__,
- .format = "%s vector length %d, switching to %s",
- .format_args = "T4i4t4",
- .n_enum_strings = 2,
- .enum_strings = {
- "interrupt", "polling",
- },
- };
- struct { u32 node_name, vector_length, is_polling; } * ed;
-
- if (dispatch_state == VLIB_NODE_STATE_INTERRUPT
- && v >= nm->polling_threshold_vector_length)
- {
- vlib_node_t * n = vlib_get_node (vm, node->node_index);
- n->state = VLIB_NODE_STATE_POLLING;
- node->state = VLIB_NODE_STATE_POLLING;
- ASSERT (! (node->flags & VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE));
- node->flags &= ~VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE;
- node->flags |= VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE;
- nm->input_node_counts_by_state[VLIB_NODE_STATE_INTERRUPT] -= 1;
- nm->input_node_counts_by_state[VLIB_NODE_STATE_POLLING] += 1;
-
- ed = ELOG_DATA (&vm->elog_main, e);
- ed->node_name = n->name_elog_string;
- ed->vector_length = v;
- ed->is_polling = 1;
- }
- else if (dispatch_state == VLIB_NODE_STATE_POLLING
- && v <= nm->interrupt_threshold_vector_length)
- {
- vlib_node_t * n = vlib_get_node (vm, node->node_index);
- if (node->flags & VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE)
- {
- /* Switch to interrupt mode after dispatch in polling one more time.
- This allows driver to re-enable interrupts. */
- n->state = VLIB_NODE_STATE_INTERRUPT;
- node->state = VLIB_NODE_STATE_INTERRUPT;
- node->flags &= ~VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE;
- nm->input_node_counts_by_state[VLIB_NODE_STATE_POLLING] -= 1;
- nm->input_node_counts_by_state[VLIB_NODE_STATE_INTERRUPT] += 1;
-
- }
- else
- {
- node->flags |= VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE;
- ed = ELOG_DATA (&vm->elog_main, e);
- ed->node_name = n->name_elog_string;
- ed->vector_length = v;
- ed->is_polling = 0;
- }
- }
- }
+ || (DPDK == 0 && dispatch_state == VLIB_NODE_STATE_POLLING
+ && (node->flags
+ & VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE)))
+ {
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .function = (char *) __FUNCTION__,.format =
+ "%s vector length %d, switching to %s",.format_args =
+ "T4i4t4",.n_enum_strings = 2,.enum_strings =
+ {
+ "interrupt", "polling",},};
+ struct
+ {
+ u32 node_name, vector_length, is_polling;
+ } *ed;
+
+ if (dispatch_state == VLIB_NODE_STATE_INTERRUPT
+ && v >= nm->polling_threshold_vector_length)
+ {
+ vlib_node_t *n = vlib_get_node (vm, node->node_index);
+ n->state = VLIB_NODE_STATE_POLLING;
+ node->state = VLIB_NODE_STATE_POLLING;
+ ASSERT (!
+ (node->flags &
+ VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE));
+ node->flags &=
+ ~VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE;
+ node->flags |=
+ VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE;
+ nm->input_node_counts_by_state[VLIB_NODE_STATE_INTERRUPT] -= 1;
+ nm->input_node_counts_by_state[VLIB_NODE_STATE_POLLING] += 1;
+
+ ed = ELOG_DATA (&vm->elog_main, e);
+ ed->node_name = n->name_elog_string;
+ ed->vector_length = v;
+ ed->is_polling = 1;
+ }
+ else if (dispatch_state == VLIB_NODE_STATE_POLLING
+ && v <= nm->interrupt_threshold_vector_length)
+ {
+ vlib_node_t *n = vlib_get_node (vm, node->node_index);
+ if (node->flags &
+ VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE)
+ {
+ /* Switch to interrupt mode after dispatch in polling one more time.
+ This allows driver to re-enable interrupts. */
+ n->state = VLIB_NODE_STATE_INTERRUPT;
+ node->state = VLIB_NODE_STATE_INTERRUPT;
+ node->flags &=
+ ~VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE;
+ nm->input_node_counts_by_state[VLIB_NODE_STATE_POLLING] -=
+ 1;
+ nm->input_node_counts_by_state[VLIB_NODE_STATE_INTERRUPT] +=
+ 1;
+
+ }
+ else
+ {
+ node->flags |=
+ VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE;
+ ed = ELOG_DATA (&vm->elog_main, e);
+ ed->node_name = n->name_elog_string;
+ ed->vector_length = v;
+ ed->is_polling = 0;
+ }
+ }
+ }
}
return t;
@@ -1074,13 +1085,12 @@ dispatch_node (vlib_main_t * vm,
/* static */ u64
dispatch_pending_node (vlib_main_t * vm,
- vlib_pending_frame_t * p,
- u64 last_time_stamp)
+ vlib_pending_frame_t * p, u64 last_time_stamp)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_frame_t * f;
- vlib_next_frame_t * nf, nf_dummy;
- vlib_node_runtime_t * n;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_frame_t *f;
+ vlib_next_frame_t *nf, nf_dummy;
+ vlib_node_runtime_t *n;
u32 restore_frame_index;
n = vec_elt_at_index (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL],
@@ -1106,7 +1116,7 @@ dispatch_pending_node (vlib_main_t * vm,
{
nf->frame_index = ~0;
nf->flags &= ~VLIB_FRAME_IS_ALLOCATED;
- if (! (n->flags & VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH))
+ if (!(n->flags & VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH))
restore_frame_index = p->frame_index;
}
@@ -1132,7 +1142,7 @@ dispatch_pending_node (vlib_main_t * vm,
if (restore_frame_index != ~0)
{
/* p->next_frame_index can change during node dispatch if node
- function decides to change graph hook up. */
+ function decides to change graph hook up. */
nf = vec_elt_at_index (nm->next_frames, p->next_frame_index);
nf->frame_index = restore_frame_index;
nf->flags |= VLIB_FRAME_IS_ALLOCATED;
@@ -1140,7 +1150,7 @@ dispatch_pending_node (vlib_main_t * vm,
if (f->flags & VLIB_FRAME_FREE_AFTER_DISPATCH)
{
- ASSERT (! (n->flags & VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH));
+ ASSERT (!(n->flags & VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH));
vlib_frame_free (vm, n, f);
}
@@ -1149,22 +1159,26 @@ dispatch_pending_node (vlib_main_t * vm,
always_inline uword
vlib_process_stack_is_valid (vlib_process_t * p)
-{ return p->stack[0] == VLIB_PROCESS_STACK_MAGIC; }
+{
+ return p->stack[0] == VLIB_PROCESS_STACK_MAGIC;
+}
-typedef struct {
- vlib_main_t * vm;
- vlib_process_t * process;
- vlib_frame_t * frame;
+typedef struct
+{
+ vlib_main_t *vm;
+ vlib_process_t *process;
+ vlib_frame_t *frame;
} vlib_process_bootstrap_args_t;
/* Called in process stack. */
-static uword vlib_process_bootstrap (uword _a)
+static uword
+vlib_process_bootstrap (uword _a)
{
- vlib_process_bootstrap_args_t * a;
- vlib_main_t * vm;
- vlib_node_runtime_t * node;
- vlib_frame_t * f;
- vlib_process_t * p;
+ vlib_process_bootstrap_args_t *a;
+ vlib_main_t *vm;
+ vlib_node_runtime_t *node;
+ vlib_frame_t *f;
+ vlib_process_t *p;
uword n;
a = uword_to_pointer (_a, vlib_process_bootstrap_args_t *);
@@ -1185,9 +1199,7 @@ static uword vlib_process_bootstrap (uword _a)
/* Called in main stack. */
static_always_inline uword
-vlib_process_startup (vlib_main_t * vm,
- vlib_process_t * p,
- vlib_frame_t * f)
+vlib_process_startup (vlib_main_t * vm, vlib_process_t * p, vlib_frame_t * f)
{
vlib_process_bootstrap_args_t a;
uword r;
@@ -1219,13 +1231,11 @@ vlib_process_resume (vlib_process_t * p)
static u64
dispatch_process (vlib_main_t * vm,
- vlib_process_t * p,
- vlib_frame_t * f,
- u64 last_time_stamp)
+ vlib_process_t * p, vlib_frame_t * f, u64 last_time_stamp)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_runtime_t * node_runtime = &p->node_runtime;
- vlib_node_t * node = vlib_get_node (vm, node_runtime->node_index);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_runtime_t *node_runtime = &p->node_runtime;
+ vlib_node_t *node = vlib_get_node (vm, node_runtime->node_index);
u64 t;
uword n_vectors, is_suspend;
@@ -1251,7 +1261,7 @@ dispatch_process (vlib_main_t * vm,
is_suspend = n_vectors == VLIB_PROCESS_RETURN_LONGJMP_SUSPEND;
if (is_suspend)
{
- vlib_pending_frame_t * pf;
+ vlib_pending_frame_t *pf;
n_vectors = 0;
pool_get (nm->suspended_process_frames, pf);
@@ -1264,59 +1274,64 @@ dispatch_process (vlib_main_t * vm,
if (p->flags & VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK)
timing_wheel_insert (&nm->timing_wheel, p->resume_cpu_time,
- vlib_timing_wheel_data_set_suspended_process (node->runtime_index));
+ vlib_timing_wheel_data_set_suspended_process
+ (node->runtime_index));
}
else
p->flags &= ~VLIB_PROCESS_IS_RUNNING;
t = clib_cpu_time_now ();
- vlib_elog_main_loop_event (vm, node_runtime->node_index, t, is_suspend, /* is_after */ 1);
+ vlib_elog_main_loop_event (vm, node_runtime->node_index, t, is_suspend,
+ /* is_after */ 1);
vlib_process_update_stats (vm, p,
- /* n_calls */ ! is_suspend,
+ /* n_calls */ !is_suspend,
/* n_vectors */ n_vectors,
/* n_clocks */ t - last_time_stamp);
return t;
}
-void vlib_start_process (vlib_main_t * vm, uword process_index)
+void
+vlib_start_process (vlib_main_t * vm, uword process_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p = vec_elt (nm->processes, process_index);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p = vec_elt (nm->processes, process_index);
dispatch_process (vm, p, /* frame */ 0, /* cpu_time_now */ 0);
}
static u64
dispatch_suspended_process (vlib_main_t * vm,
- uword process_index,
- u64 last_time_stamp)
+ uword process_index, u64 last_time_stamp)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_runtime_t * node_runtime;
- vlib_node_t * node;
- vlib_frame_t * f;
- vlib_process_t * p;
- vlib_pending_frame_t * pf;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_runtime_t *node_runtime;
+ vlib_node_t *node;
+ vlib_frame_t *f;
+ vlib_process_t *p;
+ vlib_pending_frame_t *pf;
u64 t, n_vectors, is_suspend;
-
+
t = last_time_stamp;
p = vec_elt (nm->processes, process_index);
- if (PREDICT_FALSE (! (p->flags & VLIB_PROCESS_IS_RUNNING)))
+ if (PREDICT_FALSE (!(p->flags & VLIB_PROCESS_IS_RUNNING)))
return last_time_stamp;
ASSERT (p->flags & (VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK
| VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT));
- pf = pool_elt_at_index (nm->suspended_process_frames, p->suspended_process_frame_index);
+ pf =
+ pool_elt_at_index (nm->suspended_process_frames,
+ p->suspended_process_frame_index);
node_runtime = &p->node_runtime;
node = vlib_get_node (vm, node_runtime->node_index);
f = pf->frame_index != ~0 ? vlib_get_frame (vm, pf->frame_index) : 0;
- vlib_elog_main_loop_event (vm, node_runtime->node_index, t, f ? f->n_vectors : 0, /* is_after */ 0);
+ vlib_elog_main_loop_event (vm, node_runtime->node_index, t,
+ f ? f->n_vectors : 0, /* is_after */ 0);
/* Save away current process for suspend. */
nm->current_process_index = node->runtime_index;
@@ -1334,7 +1349,8 @@ dispatch_suspended_process (vlib_main_t * vm,
p->n_suspends += 1;
if (p->flags & VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK)
timing_wheel_insert (&nm->timing_wheel, p->resume_cpu_time,
- vlib_timing_wheel_data_set_suspended_process (node->runtime_index));
+ vlib_timing_wheel_data_set_suspended_process
+ (node->runtime_index));
}
else
{
@@ -1344,19 +1360,21 @@ dispatch_suspended_process (vlib_main_t * vm,
}
t = clib_cpu_time_now ();
- vlib_elog_main_loop_event (vm, node_runtime->node_index, t, ! is_suspend, /* is_after */ 1);
+ vlib_elog_main_loop_event (vm, node_runtime->node_index, t, !is_suspend,
+ /* is_after */ 1);
vlib_process_update_stats (vm, p,
- /* n_calls */ ! is_suspend,
+ /* n_calls */ !is_suspend,
/* n_vectors */ n_vectors,
/* n_clocks */ t - last_time_stamp);
return t;
}
-static void vlib_main_loop (vlib_main_t * vm)
+static void
+vlib_main_loop (vlib_main_t * vm)
{
- vlib_node_main_t * nm = &vm->node_main;
+ vlib_node_main_t *nm = &vm->node_main;
uword i;
u64 cpu_time_now;
@@ -1373,16 +1391,15 @@ static void vlib_main_loop (vlib_main_t * vm)
nm->timing_wheel.min_sched_time = 10e-6;
nm->timing_wheel.max_sched_time = 10e-3;
timing_wheel_init (&nm->timing_wheel,
- cpu_time_now,
- vm->clib_time.clocks_per_second);
+ cpu_time_now, vm->clib_time.clocks_per_second);
/* Pre-allocate expired nodes. */
vec_alloc (nm->data_from_advancing_timing_wheel, 32);
vec_alloc (nm->pending_interrupt_node_runtime_indices, 32);
- if (! nm->polling_threshold_vector_length)
+ if (!nm->polling_threshold_vector_length)
nm->polling_threshold_vector_length = 10;
- if (! nm->interrupt_threshold_vector_length)
+ if (!nm->interrupt_threshold_vector_length)
nm->interrupt_threshold_vector_length = 5;
nm->current_process_index = ~0;
@@ -1391,12 +1408,13 @@ static void vlib_main_loop (vlib_main_t * vm)
{
uword i;
for (i = 0; i < vec_len (nm->processes); i++)
- cpu_time_now = dispatch_process (vm, nm->processes[i], /* frame */ 0, cpu_time_now);
+ cpu_time_now =
+ dispatch_process (vm, nm->processes[i], /* frame */ 0, cpu_time_now);
}
while (1)
{
- vlib_node_runtime_t * n;
+ vlib_node_runtime_t *n;
/* Process pre-input nodes. */
vec_foreach (n, nm->nodes_by_type[VLIB_NODE_TYPE_PRE_INPUT])
@@ -1415,7 +1433,7 @@ static void vlib_main_loop (vlib_main_t * vm)
cpu_time_now);
if (PREDICT_TRUE (vm->queue_signal_pending == 0))
- vm->queue_signal_callback (vm);
+ vm->queue_signal_callback (vm);
/* Next handle interrupts. */
{
@@ -1427,12 +1445,14 @@ static void vlib_main_loop (vlib_main_t * vm)
for (i = 0; i < l; i++)
{
n = vec_elt_at_index (nm->nodes_by_type[VLIB_NODE_TYPE_INPUT],
- nm->pending_interrupt_node_runtime_indices[i]);
- cpu_time_now = dispatch_node (vm, n,
- VLIB_NODE_TYPE_INPUT,
- VLIB_NODE_STATE_INTERRUPT,
- /* frame */ 0,
- cpu_time_now);
+ nm->
+ pending_interrupt_node_runtime_indices
+ [i]);
+ cpu_time_now =
+ dispatch_node (vm, n, VLIB_NODE_TYPE_INPUT,
+ VLIB_NODE_STATE_INTERRUPT,
+ /* frame */ 0,
+ cpu_time_now);
}
}
}
@@ -1449,31 +1469,41 @@ static void vlib_main_loop (vlib_main_t * vm)
uword i;
processes_timing_wheel_data:
- for (i = 0; i < _vec_len (nm->data_from_advancing_timing_wheel); i++)
+ for (i = 0; i < _vec_len (nm->data_from_advancing_timing_wheel);
+ i++)
{
u32 d = nm->data_from_advancing_timing_wheel[i];
u32 di = vlib_timing_wheel_data_get_index (d);
if (vlib_timing_wheel_data_is_timed_event (d))
{
- vlib_signal_timed_event_data_t * te = pool_elt_at_index (nm->signal_timed_event_data_pool, di);
- vlib_node_t * n = vlib_get_node (vm, te->process_node_index);
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
- void * data;
- data = vlib_process_signal_event_helper (nm, n, p, te->event_type_index, te->n_data_elts, te->n_data_elt_bytes);
+ vlib_signal_timed_event_data_t *te =
+ pool_elt_at_index (nm->signal_timed_event_data_pool, di);
+ vlib_node_t *n = vlib_get_node (vm, te->process_node_index);
+ vlib_process_t *p =
+ vec_elt (nm->processes, n->runtime_index);
+ void *data;
+ data =
+ vlib_process_signal_event_helper (nm, n, p,
+ te->event_type_index,
+ te->n_data_elts,
+ te->n_data_elt_bytes);
if (te->n_data_bytes < sizeof (te->inline_event_data))
- clib_memcpy (data, te->inline_event_data, te->n_data_bytes);
+ clib_memcpy (data, te->inline_event_data,
+ te->n_data_bytes);
else
{
- clib_memcpy (data, te->event_data_as_vector, te->n_data_bytes);
+ clib_memcpy (data, te->event_data_as_vector,
+ te->n_data_bytes);
vec_free (te->event_data_as_vector);
}
pool_put (nm->signal_timed_event_data_pool, te);
}
else
{
- cpu_time_now = clib_cpu_time_now();
- cpu_time_now = dispatch_suspended_process (vm, di, cpu_time_now);
+ cpu_time_now = clib_cpu_time_now ();
+ cpu_time_now =
+ dispatch_suspended_process (vm, di, cpu_time_now);
}
}
@@ -1485,11 +1515,11 @@ static void vlib_main_loop (vlib_main_t * vm)
Process pending vector until there is nothing left.
All pending vectors will be processed from input -> output. */
for (i = 0; i < _vec_len (nm->pending_frames); i++)
- cpu_time_now = dispatch_pending_node (vm, nm->pending_frames + i,
- cpu_time_now);
+ cpu_time_now = dispatch_pending_node (vm, nm->pending_frames + i,
+ cpu_time_now);
/* Reset pending vector for next iteration. */
_vec_len (nm->pending_frames) = 0;
-
+
/* Pending internal nodes may resume processes. */
if (_vec_len (nm->data_from_advancing_timing_wheel) > 0)
goto processes_timing_wheel_data;
@@ -1497,11 +1527,11 @@ static void vlib_main_loop (vlib_main_t * vm)
vlib_increment_main_loop_counter (vm);
/* Record time stamp in case there are no enabled nodes and above
- calls do not update time stamp. */
+ calls do not update time stamp. */
cpu_time_now = clib_cpu_time_now ();
}
}
-
+
vlib_main_t vlib_global_main;
static clib_error_t *
@@ -1532,25 +1562,29 @@ vlib_main_configure (vlib_main_t * vm, unformat_input_t * input)
VLIB_EARLY_CONFIG_FUNCTION (vlib_main_configure, "vlib");
-static void dummy_queue_signal_callback (vlib_main_t * vm) { }
+static void
+dummy_queue_signal_callback (vlib_main_t * vm)
+{
+}
/* Main function. */
-int vlib_main (vlib_main_t * vm, unformat_input_t * input)
+int
+vlib_main (vlib_main_t * vm, unformat_input_t * input)
{
- clib_error_t * error;
+ clib_error_t *error;
vm->queue_signal_callback = dummy_queue_signal_callback;
clib_time_init (&vm->clib_time);
/* Turn on event log. */
- if (! vm->elog_main.event_ring_size)
+ if (!vm->elog_main.event_ring_size)
vm->elog_main.event_ring_size = 128 << 10;
elog_init (&vm->elog_main, vm->elog_main.event_ring_size);
elog_enable_disable (&vm->elog_main, 1);
/* Default name. */
- if (! vm->name)
+ if (!vm->name)
vm->name = "VLIB";
vec_validate (vm->buffer_main, 0);
@@ -1566,7 +1600,7 @@ int vlib_main (vlib_main_t * vm, unformat_input_t * input)
/* Set seed for random number generator.
Allow user to specify seed to make random sequence deterministic. */
- if (! unformat (input, "seed %wd", &vm->random_seed))
+ if (!unformat (input, "seed %wd", &vm->random_seed))
vm->random_seed = clib_cpu_time_now ();
clib_random_buffer_init (&vm->random_buffer, vm->random_seed);
@@ -1582,12 +1616,13 @@ int vlib_main (vlib_main_t * vm, unformat_input_t * input)
/* See unix/main.c; most likely already set up */
if (vm->init_functions_called == 0)
- vm->init_functions_called = hash_create (0, /* value bytes */ 0);
+ vm->init_functions_called = hash_create (0, /* value bytes */ 0);
if ((error = vlib_call_all_init_functions (vm)))
goto done;
/* Create default buffer free list. */
- vlib_buffer_get_or_create_free_list (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
+ vlib_buffer_get_or_create_free_list (vm,
+ VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
"default");
switch (clib_setjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_NONE))
@@ -1604,12 +1639,12 @@ int vlib_main (vlib_main_t * vm, unformat_input_t * input)
goto done;
}
- if ((error = vlib_call_all_config_functions (vm, input, 0 /* is_early */)))
+ if ((error = vlib_call_all_config_functions (vm, input, 0 /* is_early */ )))
goto done;
/* Call all main loop enter functions. */
{
- clib_error_t * sub_error;
+ clib_error_t *sub_error;
sub_error = vlib_call_all_main_loop_enter_functions (vm);
if (sub_error)
clib_error_report (sub_error);
@@ -1617,10 +1652,10 @@ int vlib_main (vlib_main_t * vm, unformat_input_t * input)
vlib_main_loop (vm);
- done:
+done:
/* Call all exit functions. */
{
- clib_error_t * sub_error;
+ clib_error_t *sub_error;
sub_error = vlib_call_all_main_loop_exit_functions (vm);
if (sub_error)
clib_error_report (sub_error);
@@ -1631,3 +1666,11 @@ int vlib_main (vlib_main_t * vm, unformat_input_t * input)
return 0;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/main.h b/vlib/vlib/main.h
index ea279c36bdd..579ef09b255 100644
--- a/vlib/vlib/main.h
+++ b/vlib/vlib/main.h
@@ -56,7 +56,8 @@
#define VLIB_ELOG_MAIN_LOOP 0
#endif
-typedef struct vlib_main_t {
+typedef struct vlib_main_t
+{
/* Instruction level timing state. */
clib_time_t clib_time;
@@ -91,25 +92,24 @@ typedef struct vlib_main_t {
#define VLIB_MAIN_LOOP_EXIT_CLI 2
/* Error marker to use when exiting main loop. */
- clib_error_t * main_loop_error;
+ clib_error_t *main_loop_error;
/* Name for e.g. syslog. */
- char * name;
+ char *name;
/* Start and size of CLIB heap. */
- void * heap_base;
+ void *heap_base;
uword heap_size;
- vlib_buffer_main_t * buffer_main;
+ vlib_buffer_main_t *buffer_main;
vlib_physmem_main_t physmem_main;
/* Allocate/free buffer memory for DMA transfers, descriptor rings, etc.
buffer memory is guaranteed to be cache-aligned. */
- void * (* os_physmem_alloc_aligned) (vlib_physmem_main_t * pm,
- uword n_bytes,
- uword alignment);
- void (* os_physmem_free) (void * x);
+ void *(*os_physmem_alloc_aligned) (vlib_physmem_main_t * pm,
+ uword n_bytes, uword alignment);
+ void (*os_physmem_free) (void *x);
/* Node graph main structure. */
vlib_node_main_t node_main;
@@ -125,26 +125,26 @@ typedef struct vlib_main_t {
/* Punt packets to underlying operating system for when fast switching
code does not know what to do. */
- void (* os_punt_frame) (struct vlib_main_t * vm,
- struct vlib_node_runtime_t * node,
- vlib_frame_t * frame);
+ void (*os_punt_frame) (struct vlib_main_t * vm,
+ struct vlib_node_runtime_t * node,
+ vlib_frame_t * frame);
/* Multicast distribution. Set to zero for MC disabled. */
- mc_main_t * mc_main;
+ mc_main_t *mc_main;
/* Stream index to use for distribution when MC is enabled. */
u32 mc_stream_index;
- vlib_one_time_waiting_process_t * procs_waiting_for_mc_stream_join;
+ vlib_one_time_waiting_process_t *procs_waiting_for_mc_stream_join;
/* Event logger. */
elog_main_t elog_main;
/* Node call and return event types. */
- elog_event_type_t * node_call_elog_event_types;
- elog_event_type_t * node_return_elog_event_types;
+ elog_event_type_t *node_call_elog_event_types;
+ elog_event_type_t *node_return_elog_event_types;
- elog_event_type_t * error_elog_event_types;
+ elog_event_type_t *error_elog_event_types;
/* Seed for random number generator. */
uword random_seed;
@@ -153,7 +153,7 @@ typedef struct vlib_main_t {
clib_random_buffer_t random_buffer;
/* Hash table to record which init functions have been called. */
- uword * init_functions_called;
+ uword *init_functions_called;
/* to compare with node runtime */
u32 cpu_index;
@@ -166,12 +166,12 @@ typedef struct vlib_main_t {
_vlib_init_function_list_elt_t *main_loop_exit_function_registrations;
_vlib_init_function_list_elt_t *api_init_function_registrations;
vlib_config_function_runtime_t *config_function_registrations;
- mc_serialize_msg_t *mc_msg_registrations; /* mc_main is a pointer... */
+ mc_serialize_msg_t *mc_msg_registrations; /* mc_main is a pointer... */
/* control-plane API queue signal pending, length indication */
volatile u32 queue_signal_pending;
volatile u32 api_queue_nonempty;
- void (*queue_signal_callback)(struct vlib_main_t *);
+ void (*queue_signal_callback) (struct vlib_main_t *);
u8 **argv;
} vlib_main_t;
@@ -180,11 +180,15 @@ vlib_main_t vlib_global_main;
always_inline f64
vlib_time_now (vlib_main_t * vm)
-{ return clib_time_now (&vm->clib_time); }
+{
+ return clib_time_now (&vm->clib_time);
+}
always_inline f64
vlib_time_now_ticks (vlib_main_t * vm, u64 n)
-{ return clib_time_now_internal (&vm->clib_time, n); }
+{
+ return clib_time_now_internal (&vm->clib_time, n);
+}
/* Busy wait for specified time. */
always_inline void
@@ -231,7 +235,9 @@ vlib_panic_with_error (vlib_main_t * vm, clib_error_t * error)
always_inline void
vlib_panic (vlib_main_t * vm)
-{ vlib_panic_with_error (vm, 0); }
+{
+ vlib_panic_with_error (vm, 0);
+}
always_inline u32
vlib_vector_input_stats_index (vlib_main_t * vm, word delta)
@@ -284,7 +290,7 @@ vlib_increment_main_loop_counter (vlib_main_t * vm)
is_wrap = (c & pow2_mask (VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE)) == 0;
if (is_wrap)
- wraps++;
+ wraps++;
i = vlib_vector_input_stats_index (vm, /* delta */ is_wrap);
@@ -299,8 +305,8 @@ vlib_increment_main_loop_counter (vlib_main_t * vm)
vm->node_counts_per_main_loop[i] = n;
}
-always_inline void vlib_set_queue_signal_callback
-(vlib_main_t *vm, void (*fp)(vlib_main_t *))
+always_inline void vlib_set_queue_signal_callback
+ (vlib_main_t * vm, void (*fp) (vlib_main_t *))
{
vm->queue_signal_callback = fp;
}
@@ -317,3 +323,11 @@ u32 vlib_app_num_thread_stacks_needed (void) __attribute__ ((weak));
extern void vlib_node_sync_stats (vlib_main_t * vm, vlib_node_t * n);
#endif /* included_vlib_main_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/mc.c b/vlib/vlib/mc.c
index 0942666713e..8fde091389e 100644
--- a/vlib/vlib/mc.c
+++ b/vlib/vlib/mc.c
@@ -17,7 +17,7 @@
#include <vlib/vlib.h>
-/*
+/*
* 1 to enable msg id training wheels, which are useful for tracking
* down catchup and/or partitioned network problems
*/
@@ -25,32 +25,32 @@
static format_function_t format_mc_stream_state;
-static u32 elog_id_for_peer_id (mc_main_t * m, u64 peer_id)
+static u32
+elog_id_for_peer_id (mc_main_t * m, u64 peer_id)
{
- uword * p, r;
- mhash_t * h = &m->elog_id_by_peer_id;
+ uword *p, r;
+ mhash_t *h = &m->elog_id_by_peer_id;
- if (! m->elog_id_by_peer_id.hash)
+ if (!m->elog_id_by_peer_id.hash)
mhash_init (h, sizeof (uword), sizeof (mc_peer_id_t));
-
+
p = mhash_get (h, &peer_id);
if (p)
return p[0];
- r = elog_string (m->elog_main, "%U",
- m->transport.format_peer_id, peer_id);
+ r = elog_string (m->elog_main, "%U", m->transport.format_peer_id, peer_id);
mhash_set (h, &peer_id, r, /* old_value */ 0);
return r;
}
-static u32 elog_id_for_msg_name (mc_main_t * m, char *msg_name)
+static u32
+elog_id_for_msg_name (mc_main_t * m, char *msg_name)
{
- uword * p, r;
- uword * h = m->elog_id_by_msg_name;
+ uword *p, r;
+ uword *h = m->elog_id_by_msg_name;
u8 *name_copy;
- if (! h)
- h = m->elog_id_by_msg_name
- = hash_create_string (0, sizeof (uword));
+ if (!h)
+ h = m->elog_id_by_msg_name = hash_create_string (0, sizeof (uword));
p = hash_get_mem (h, msg_name);
if (p)
@@ -65,15 +65,23 @@ static u32 elog_id_for_msg_name (mc_main_t * m, char *msg_name)
return r;
}
-static void elog_tx_msg (mc_main_t * m, u32 stream_id, u32 local_sequence, u32 retry_count)
+static void
+elog_tx_msg (mc_main_t * m, u32 stream_id, u32 local_sequence,
+ u32 retry_count)
{
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "tx-msg: stream %d local seq %d attempt %d",
- .format_args = "i4i4i4",
- };
- struct { u32 stream_id, local_sequence, retry_count; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "tx-msg: stream %d local seq %d attempt %d",
+ .format_args = "i4i4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 stream_id, local_sequence, retry_count;
+ } *ed;
ed = ELOG_DATA (m->elog_main, e);
ed->stream_id = stream_id;
ed->local_sequence = local_sequence;
@@ -83,7 +91,7 @@ static void elog_tx_msg (mc_main_t * m, u32 stream_id, u32 local_sequence, u32 r
/*
* seq_cmp
- * correctly compare two unsigned sequence numbers.
+ * correctly compare two unsigned sequence numbers.
* This function works so long as x and y are within 2**(n-1) of each
* other, where n = bits(x, y).
*
@@ -92,13 +100,17 @@ static void elog_tx_msg (mc_main_t * m, u32 stream_id, u32 local_sequence, u32 r
* seq_cmp < 0 => x is "in the past" with respect to y
* seq_cmp > 0 => x is "in the future" with respect to y
*/
-always_inline i32 mc_seq_cmp (u32 x, u32 y)
-{ return (i32) x - (i32) y;}
+always_inline i32
+mc_seq_cmp (u32 x, u32 y)
+{
+ return (i32) x - (i32) y;
+}
-void * mc_get_vlib_buffer (vlib_main_t * vm, u32 n_bytes, u32 * bi_return)
+void *
+mc_get_vlib_buffer (vlib_main_t * vm, u32 n_bytes, u32 * bi_return)
{
u32 n_alloc, bi;
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
n_alloc = vlib_buffer_alloc (vm, &bi, 1);
ASSERT (n_alloc == 1);
@@ -111,10 +123,9 @@ void * mc_get_vlib_buffer (vlib_main_t * vm, u32 n_bytes, u32 * bi_return)
static void
delete_peer_with_index (mc_main_t * mcm, mc_stream_t * s,
- uword index,
- int notify_application)
+ uword index, int notify_application)
{
- mc_stream_peer_t * p = pool_elt_at_index (s->peers, index);
+ mc_stream_peer_t *p = pool_elt_at_index (s->peers, index);
ASSERT (p != 0);
if (s->config.peer_died && notify_application)
s->config.peer_died (mcm, s, p->id);
@@ -123,11 +134,17 @@ delete_peer_with_index (mc_main_t * mcm, mc_stream_t * s,
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "delete peer %s from all_peer_bitmap",
- .format_args = "T4",
- };
- struct { u32 peer; } * ed = 0;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "delete peer %s from all_peer_bitmap",
+ .format_args = "T4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 peer;
+ } *ed = 0;
ed = ELOG_DATA (mcm->elog_main, e);
ed->peer = elog_id_for_peer_id (mcm, p->id.as_u64);
@@ -137,11 +154,10 @@ delete_peer_with_index (mc_main_t * mcm, mc_stream_t * s,
static mc_stream_peer_t *
get_or_create_peer_with_id (mc_main_t * mcm,
- mc_stream_t * s, mc_peer_id_t id,
- int * created)
+ mc_stream_t * s, mc_peer_id_t id, int *created)
{
- uword * q = mhash_get (&s->peer_index_by_id, &id);
- mc_stream_peer_t * p;
+ uword *q = mhash_get (&s->peer_index_by_id, &id);
+ mc_stream_peer_t *p;
if (q)
{
@@ -157,16 +173,24 @@ get_or_create_peer_with_id (mc_main_t * mcm,
if (created)
*created = 1;
- done:
+done:
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "get_or_create %s peer %s stream %d seq %d",
- .format_args = "t4T4i4i4",
- .n_enum_strings = 2,
- .enum_strings = { "old", "new", },
- };
- struct { u32 is_new, peer, stream_index, rx_sequence; } * ed = 0;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "get_or_create %s peer %s stream %d seq %d",
+ .format_args = "t4T4i4i4",
+ .n_enum_strings = 2,
+ .enum_strings = {
+ "old", "new",
+ },
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 is_new, peer, stream_index, rx_sequence;
+ } *ed = 0;
ed = ELOG_DATA (mcm->elog_main, e);
ed->is_new = q ? 0 : 1;
@@ -179,9 +203,10 @@ get_or_create_peer_with_id (mc_main_t * mcm,
return p;
}
-static void maybe_send_window_open_event (vlib_main_t * vm, mc_stream_t * stream)
+static void
+maybe_send_window_open_event (vlib_main_t * vm, mc_stream_t * stream)
{
- vlib_one_time_waiting_process_t * p;
+ vlib_one_time_waiting_process_t *p;
if (pool_elts (stream->retry_pool) >= stream->config.window_size)
return;
@@ -193,64 +218,77 @@ static void maybe_send_window_open_event (vlib_main_t * vm, mc_stream_t * stream
_vec_len (stream->procs_waiting_for_open_window) = 0;
}
-static void mc_retry_free (mc_main_t * mcm, mc_stream_t *s, mc_retry_t * r)
+static void
+mc_retry_free (mc_main_t * mcm, mc_stream_t * s, mc_retry_t * r)
{
mc_retry_t record, *retp;
-
+
if (r->unacked_by_peer_bitmap)
_vec_len (r->unacked_by_peer_bitmap) = 0;
- if (clib_fifo_elts (s->retired_fifo) >= 2 * s->config.window_size)
+ if (clib_fifo_elts (s->retired_fifo) >= 2 * s->config.window_size)
{
clib_fifo_sub1 (s->retired_fifo, record);
vlib_buffer_free_one (mcm->vlib_main, record.buffer_index);
}
-
+
clib_fifo_add2 (s->retired_fifo, retp);
-
+
retp->buffer_index = r->buffer_index;
retp->local_sequence = r->local_sequence;
r->buffer_index = ~0; /* poison buffer index in this retry */
}
-static void mc_resend_retired (mc_main_t *mcm, mc_stream_t *s, u32 local_sequence)
+static void
+mc_resend_retired (mc_main_t * mcm, mc_stream_t * s, u32 local_sequence)
{
mc_retry_t *retry;
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "resend-retired: search for local seq %d",
- .format_args = "i4",
- };
- struct { u32 local_sequence; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "resend-retired: search for local seq %d",
+ .format_args = "i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 local_sequence;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->local_sequence = local_sequence;
}
- clib_fifo_foreach
- (retry, s->retired_fifo,
- ({
- if (retry->local_sequence == local_sequence)
- {
- elog_tx_msg (mcm, s->index, retry->local_sequence, -13);
-
- mcm->transport.tx_buffer
- (mcm->transport.opaque,
- MC_TRANSPORT_USER_REQUEST_TO_RELAY,
- retry->buffer_index);
- return;
- }
- }));
+ /* *INDENT-OFF* */
+ clib_fifo_foreach (retry, s->retired_fifo,
+ ({
+ if (retry->local_sequence == local_sequence)
+ {
+ elog_tx_msg (mcm, s->index, retry-> local_sequence, -13);
+ mcm->transport.tx_buffer (mcm->transport.opaque,
+ MC_TRANSPORT_USER_REQUEST_TO_RELAY,
+ retry->buffer_index);
+ return;
+ }
+ }));
+ /* *INDENT-ON* */
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "resend-retired: FAILED search for local seq %d",
- .format_args = "i4",
- };
- struct { u32 local_sequence; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "resend-retired: FAILED search for local seq %d",
+ .format_args = "i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 local_sequence;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->local_sequence = local_sequence;
}
@@ -259,11 +297,11 @@ static void mc_resend_retired (mc_main_t *mcm, mc_stream_t *s, u32 local_sequenc
static uword *
delete_retry_fifo_elt (mc_main_t * mcm,
mc_stream_t * stream,
- mc_retry_t * r,
- uword * dead_peer_bitmap)
+ mc_retry_t * r, uword * dead_peer_bitmap)
{
- mc_stream_peer_t * p;
+ mc_stream_peer_t *p;
+ /* *INDENT-OFF* */
pool_foreach (p, stream->peers, ({
uword pi = p - stream->peers;
uword is_alive = 0 == clib_bitmap_get (r->unacked_by_peer_bitmap, pi);
@@ -285,7 +323,8 @@ delete_retry_fifo_elt (mc_main_t * mcm,
ed->is_alive = is_alive;
}
}));
-
+ /* *INDENT-ON* */
+
hash_unset (stream->retry_index_by_local_sequence, r->local_sequence);
mc_retry_free (mcm, stream, r);
@@ -296,23 +335,21 @@ always_inline mc_retry_t *
prev_retry (mc_stream_t * s, mc_retry_t * r)
{
return (r->prev_index != ~0
- ? pool_elt_at_index (s->retry_pool, r->prev_index)
- : 0);
+ ? pool_elt_at_index (s->retry_pool, r->prev_index) : 0);
}
always_inline mc_retry_t *
next_retry (mc_stream_t * s, mc_retry_t * r)
{
return (r->next_index != ~0
- ? pool_elt_at_index (s->retry_pool, r->next_index)
- : 0);
+ ? pool_elt_at_index (s->retry_pool, r->next_index) : 0);
}
always_inline void
remove_retry_from_pool (mc_stream_t * s, mc_retry_t * r)
{
- mc_retry_t * p = prev_retry (s, r);
- mc_retry_t * n = next_retry (s, r);
+ mc_retry_t *p = prev_retry (s, r);
+ mc_retry_t *n = next_retry (s, r);
if (p)
p->next_index = r->next_index;
@@ -326,12 +363,13 @@ remove_retry_from_pool (mc_stream_t * s, mc_retry_t * r)
pool_put_index (s->retry_pool, r - s->retry_pool);
}
-static void check_retry (mc_main_t * mcm, mc_stream_t * s)
+static void
+check_retry (mc_main_t * mcm, mc_stream_t * s)
{
- mc_retry_t * r;
- vlib_main_t * vm = mcm->vlib_main;
- f64 now = vlib_time_now(vm);
- uword * dead_peer_bitmap = 0;
+ mc_retry_t *r;
+ vlib_main_t *vm = mcm->vlib_main;
+ f64 now = vlib_time_now (vm);
+ uword *dead_peer_bitmap = 0;
u32 ri, ri_next;
for (ri = s->retry_head_index; ri != ~0; ri = ri_next)
@@ -353,12 +391,17 @@ static void check_retry (mc_main_t * mcm, mc_stream_t * s)
{
if (MC_EVENT_LOGGING > 0)
{
- mc_stream_peer_t * p;
- ELOG_TYPE_DECLARE (t) = {
- .format = "resend local seq %d attempt %d",
- .format_args = "i4i4",
- };
+ mc_stream_peer_t *p;
+
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
+ {
+ .format = "resend local seq %d attempt %d",
+ .format_args = "i4i4",
+ };
+ /* *INDENT-ON* */
+ /* *INDENT-OFF* */
pool_foreach (p, s->peers, ({
if (clib_bitmap_get (r->unacked_by_peer_bitmap, p - s->peers))
{
@@ -372,8 +415,13 @@ static void check_retry (mc_main_t * mcm, mc_stream_t * s)
ed->rx_sequence = r->local_sequence;
}
}));
+ /* *INDENT-ON* */
- struct { u32 sequence; u32 trail; } * ed;
+ struct
+ {
+ u32 sequence;
+ u32 trail;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->sequence = r->local_sequence;
ed->trail = r->n_retries;
@@ -385,19 +433,19 @@ static void check_retry (mc_main_t * mcm, mc_stream_t * s)
elog_tx_msg (mcm, s->index, r->local_sequence, r->n_retries);
mcm->transport.tx_buffer
- (mcm->transport.opaque,
- MC_TRANSPORT_USER_REQUEST_TO_RELAY,
- r->buffer_index);
+ (mcm->transport.opaque,
+ MC_TRANSPORT_USER_REQUEST_TO_RELAY, r->buffer_index);
}
}
maybe_send_window_open_event (mcm->vlib_main, s);
/* Delete any dead peers we've found. */
- if (! clib_bitmap_is_zero (dead_peer_bitmap))
+ if (!clib_bitmap_is_zero (dead_peer_bitmap))
{
uword i;
+ /* *INDENT-OFF* */
clib_bitmap_foreach (i, dead_peer_bitmap, ({
delete_peer_with_index (mcm, s, i, /* notify_application */ 1);
@@ -407,6 +455,7 @@ static void check_retry (mc_main_t * mcm, mc_stream_t * s)
clib_bitmap_andnoti (r->unacked_by_peer_bitmap, i);
}));
}));
+/* *INDENT-ON* */
clib_bitmap_free (dead_peer_bitmap);
}
}
@@ -414,38 +463,38 @@ static void check_retry (mc_main_t * mcm, mc_stream_t * s)
always_inline mc_main_t *
mc_node_get_main (vlib_node_runtime_t * node)
{
- mc_main_t ** p = (void *) node->runtime_data;
+ mc_main_t **p = (void *) node->runtime_data;
return p[0];
}
static uword
mc_retry_process (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * f)
+ vlib_node_runtime_t * node, vlib_frame_t * f)
{
- mc_main_t * mcm = mc_node_get_main (node);
- mc_stream_t * s;
-
+ mc_main_t *mcm = mc_node_get_main (node);
+ mc_stream_t *s;
+
while (1)
{
vlib_process_suspend (vm, 1.0);
vec_foreach (s, mcm->stream_vector)
- {
- if (s->state != MC_STREAM_STATE_invalid)
- check_retry (mcm, s);
- }
+ {
+ if (s->state != MC_STREAM_STATE_invalid)
+ check_retry (mcm, s);
+ }
}
- return 0; /* not likely */
+ return 0; /* not likely */
}
-static void send_join_or_leave_request (mc_main_t * mcm, u32 stream_index, u32 is_join)
+static void
+send_join_or_leave_request (mc_main_t * mcm, u32 stream_index, u32 is_join)
{
- vlib_main_t * vm = mcm->vlib_main;
- mc_msg_join_or_leave_request_t * mp;
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_msg_join_or_leave_request_t *mp;
u32 bi;
mp = mc_get_vlib_buffer (vm, sizeof (mp[0]), &bi);
- memset(mp, 0, sizeof (*mp));
+ memset (mp, 0, sizeof (*mp));
mp->type = MC_MSG_TYPE_join_or_leave_request;
mp->peer_id = mcm->transport.our_ack_peer_id;
mp->stream_index = stream_index;
@@ -453,104 +502,111 @@ static void send_join_or_leave_request (mc_main_t * mcm, u32 stream_index, u32 i
mc_byte_swap_msg_join_or_leave_request (mp);
- /*
+ /*
* These msgs are unnumbered, unordered so send on the from-relay
- * channel.
+ * channel.
*/
mcm->transport.tx_buffer (mcm->transport.opaque, MC_TRANSPORT_JOIN, bi);
-}
+}
static uword
mc_join_ager_process (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * f)
+ vlib_node_runtime_t * node, vlib_frame_t * f)
{
- mc_main_t * mcm = mc_node_get_main (node);
-
+ mc_main_t *mcm = mc_node_get_main (node);
+
while (1)
{
if (mcm->joins_in_progress)
{
- mc_stream_t * s;
- vlib_one_time_waiting_process_t * p;
+ mc_stream_t *s;
+ vlib_one_time_waiting_process_t *p;
f64 now = vlib_time_now (vm);
vec_foreach (s, mcm->stream_vector)
- {
- if (s->state != MC_STREAM_STATE_join_in_progress)
- continue;
+ {
+ if (s->state != MC_STREAM_STATE_join_in_progress)
+ continue;
- if (now > s->join_timeout)
- {
- s->state = MC_STREAM_STATE_ready;
-
- if (MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (e) = {
- .format = "stream %d join timeout",
- };
- ELOG (mcm->elog_main, e, s->index);
- }
- /* Make sure that this app instance exists as a stream peer,
- or we may answer a catchup request with a NULL
- all_peer_bitmap... */
- (void) get_or_create_peer_with_id
- (mcm, s, mcm->transport.our_ack_peer_id, /* created */ 0);
-
- vec_foreach (p, s->procs_waiting_for_join_done)
- vlib_signal_one_time_waiting_process (vm, p);
- if (s->procs_waiting_for_join_done)
- _vec_len (s->procs_waiting_for_join_done) = 0;
-
- mcm->joins_in_progress--;
- ASSERT (mcm->joins_in_progress >= 0);
- }
- else
- {
- /* Resent join request which may have been lost. */
- send_join_or_leave_request (mcm, s->index,
- 1 /* is_join */);
-
- /* We're *not* alone, retry for as long as it takes */
- if (mcm->relay_state == MC_RELAY_STATE_SLAVE)
- s->join_timeout = vlib_time_now (vm) + 2.0;
-
-
- if (MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (e) = {
- .format = "stream %d resend join request",
- };
- ELOG (mcm->elog_main, e, s->index);
- }
- }
- }
+ if (now > s->join_timeout)
+ {
+ s->state = MC_STREAM_STATE_ready;
+
+ if (MC_EVENT_LOGGING > 0)
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "stream %d join timeout",
+ };
+ /* *INDENT-ON* */
+ ELOG (mcm->elog_main, e, s->index);
+ }
+ /* Make sure that this app instance exists as a stream peer,
+ or we may answer a catchup request with a NULL
+ all_peer_bitmap... */
+ (void) get_or_create_peer_with_id
+ (mcm, s, mcm->transport.our_ack_peer_id, /* created */ 0);
+
+ vec_foreach (p, s->procs_waiting_for_join_done)
+ vlib_signal_one_time_waiting_process (vm, p);
+ if (s->procs_waiting_for_join_done)
+ _vec_len (s->procs_waiting_for_join_done) = 0;
+
+ mcm->joins_in_progress--;
+ ASSERT (mcm->joins_in_progress >= 0);
+ }
+ else
+ {
+ /* Resent join request which may have been lost. */
+ send_join_or_leave_request (mcm, s->index, 1 /* is_join */ );
+
+ /* We're *not* alone, retry for as long as it takes */
+ if (mcm->relay_state == MC_RELAY_STATE_SLAVE)
+ s->join_timeout = vlib_time_now (vm) + 2.0;
+
+
+ if (MC_EVENT_LOGGING > 0)
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "stream %d resend join request",
+ };
+ /* *INDENT-ON* */
+ ELOG (mcm->elog_main, e, s->index);
+ }
+ }
+ }
}
vlib_process_suspend (vm, .5);
}
- return 0; /* not likely */
+ return 0; /* not likely */
}
-static void serialize_mc_register_stream_name (serialize_main_t * m, va_list * va)
+static void
+serialize_mc_register_stream_name (serialize_main_t * m, va_list * va)
{
- char * name = va_arg (*va, char *);
+ char *name = va_arg (*va, char *);
serialize_cstring (m, name);
}
-static void elog_stream_name (char * buf, int n_buf_bytes, char * v)
+static void
+elog_stream_name (char *buf, int n_buf_bytes, char *v)
{
clib_memcpy (buf, v, clib_min (n_buf_bytes - 1, vec_len (v)));
buf[n_buf_bytes - 1] = 0;
}
-static void unserialize_mc_register_stream_name (serialize_main_t * m, va_list * va)
+static void
+unserialize_mc_register_stream_name (serialize_main_t * m, va_list * va)
{
- mc_main_t * mcm = va_arg (*va, mc_main_t *);
- char * name;
- mc_stream_t * s;
- uword * p;
+ mc_main_t *mcm = va_arg (*va, mc_main_t *);
+ char *name;
+ mc_stream_t *s;
+ uword *p;
unserialize_cstring (m, &name);
@@ -558,11 +614,18 @@ static void unserialize_mc_register_stream_name (serialize_main_t * m, va_list *
{
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "stream index %d already named %s",
- .format_args = "i4s16",
- };
- struct { u32 stream_index; char name[16]; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "stream index %d already named %s",
+ .format_args = "i4s16",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 stream_index;
+ char name[16];
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->stream_index = p[0];
elog_stream_name (ed->name, sizeof (ed->name), name);
@@ -580,11 +643,18 @@ static void unserialize_mc_register_stream_name (serialize_main_t * m, va_list *
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "stream index %d named %s",
- .format_args = "i4s16",
- };
- struct { u32 stream_index; char name[16]; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "stream index %d named %s",
+ .format_args = "i4s16",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 stream_index;
+ char name[16];
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->stream_index = s->index;
elog_stream_name (ed->name, sizeof (ed->name), name);
@@ -595,7 +665,7 @@ static void unserialize_mc_register_stream_name (serialize_main_t * m, va_list *
p = hash_get (mcm->procs_waiting_for_stream_name_by_name, name);
if (p)
{
- vlib_one_time_waiting_process_t * wp, ** w;
+ vlib_one_time_waiting_process_t *wp, **w;
w = pool_elt_at_index (mcm->procs_waiting_for_stream_name_pool, p[0]);
vec_foreach (wp, w[0])
vlib_signal_one_time_waiting_process (mcm->vlib_main, wp);
@@ -604,18 +674,22 @@ static void unserialize_mc_register_stream_name (serialize_main_t * m, va_list *
}
}
-MC_SERIALIZE_MSG (mc_register_stream_name_msg, static) = {
+/* *INDENT-OFF* */
+MC_SERIALIZE_MSG (mc_register_stream_name_msg, static) =
+{
.name = "mc_register_stream_name",
.serialize = serialize_mc_register_stream_name,
.unserialize = unserialize_mc_register_stream_name,
};
+/* *INDENT-ON* */
void
mc_rx_buffer_unserialize (mc_main_t * mcm,
mc_stream_t * stream,
- mc_peer_id_t peer_id,
- u32 buffer_index)
-{ return mc_unserialize (mcm, stream, buffer_index); }
+ mc_peer_id_t peer_id, u32 buffer_index)
+{
+ return mc_unserialize (mcm, stream, buffer_index);
+}
static u8 *
mc_internal_catchup_snapshot (mc_main_t * mcm,
@@ -633,9 +707,7 @@ mc_internal_catchup_snapshot (mc_main_t * mcm,
}
static void
-mc_internal_catchup (mc_main_t * mcm,
- u8 * data,
- u32 n_data_bytes)
+mc_internal_catchup (mc_main_t * mcm, u8 * data, u32 n_data_bytes)
{
serialize_main_t s;
@@ -646,20 +718,22 @@ mc_internal_catchup (mc_main_t * mcm,
/* Overridden from the application layer, not actually used here */
void mc_stream_join_process_hold (void) __attribute__ ((weak));
-void mc_stream_join_process_hold (void) { }
+void
+mc_stream_join_process_hold (void)
+{
+}
static u32
mc_stream_join_helper (mc_main_t * mcm,
- mc_stream_config_t * config,
- u32 is_internal)
+ mc_stream_config_t * config, u32 is_internal)
{
- mc_stream_t * s;
- vlib_main_t * vm = mcm->vlib_main;
-
+ mc_stream_t *s;
+ vlib_main_t *vm = mcm->vlib_main;
+
s = 0;
- if (! is_internal)
+ if (!is_internal)
{
- uword * p;
+ uword *p;
/* Already have a stream with given name? */
if ((s = mc_stream_by_name (mcm, config->name)))
@@ -670,10 +744,10 @@ mc_stream_join_helper (mc_main_t * mcm,
}
/* First join MC internal stream. */
- if (! mcm->stream_vector
- || (mcm->stream_vector[MC_STREAM_INDEX_INTERNAL].state
- == MC_STREAM_STATE_invalid))
- {
+ if (!mcm->stream_vector
+ || (mcm->stream_vector[MC_STREAM_INDEX_INTERNAL].state
+ == MC_STREAM_STATE_invalid))
+ {
static mc_stream_config_t c = {
.name = "mc-internal",
.rx_buffer = mc_rx_buffer_unserialize,
@@ -681,35 +755,39 @@ mc_stream_join_helper (mc_main_t * mcm,
.catchup_snapshot = mc_internal_catchup_snapshot,
};
- c.save_snapshot = config->save_snapshot;
+ c.save_snapshot = config->save_snapshot;
mc_stream_join_helper (mcm, &c, /* is_internal */ 1);
}
/* If stream is still unknown register this name and wait for
- sequenced message to name stream. This way all peers agree
- on stream name to index mappings. */
+ sequenced message to name stream. This way all peers agree
+ on stream name to index mappings. */
s = mc_stream_by_name (mcm, config->name);
- if (! s)
+ if (!s)
{
- vlib_one_time_waiting_process_t * wp, ** w;
- u8 * name_copy = format (0, "%s", config->name);
+ vlib_one_time_waiting_process_t *wp, **w;
+ u8 *name_copy = format (0, "%s", config->name);
mc_serialize_stream (mcm,
MC_STREAM_INDEX_INTERNAL,
- &mc_register_stream_name_msg,
- config->name);
+ &mc_register_stream_name_msg, config->name);
/* Wait for this stream to be named. */
- p = hash_get_mem (mcm->procs_waiting_for_stream_name_by_name, name_copy);
+ p =
+ hash_get_mem (mcm->procs_waiting_for_stream_name_by_name,
+ name_copy);
if (p)
- w = pool_elt_at_index (mcm->procs_waiting_for_stream_name_pool, p[0]);
+ w =
+ pool_elt_at_index (mcm->procs_waiting_for_stream_name_pool,
+ p[0]);
else
{
pool_get (mcm->procs_waiting_for_stream_name_pool, w);
- if (! mcm->procs_waiting_for_stream_name_by_name)
- mcm->procs_waiting_for_stream_name_by_name
- = hash_create_string (/* elts */ 0, /* value size */ sizeof (uword));
+ if (!mcm->procs_waiting_for_stream_name_by_name)
+ mcm->procs_waiting_for_stream_name_by_name = hash_create_string ( /* elts */ 0, /* value size */
+ sizeof
+ (uword));
hash_set_mem (mcm->procs_waiting_for_stream_name_by_name,
name_copy,
w - mcm->procs_waiting_for_stream_name_pool);
@@ -727,7 +805,7 @@ mc_stream_join_helper (mc_main_t * mcm,
ASSERT (s->state == MC_STREAM_STATE_name_known);
}
- if (! s)
+ if (!s)
{
vec_add2 (mcm->stream_vector, s, 1);
mc_stream_init (s);
@@ -736,7 +814,7 @@ mc_stream_join_helper (mc_main_t * mcm,
{
/* Save name since we could have already used it as hash key. */
- char * name_save = s->config.name;
+ char *name_save = s->config.name;
s->config = config[0];
@@ -748,16 +826,16 @@ mc_stream_join_helper (mc_main_t * mcm,
s->config.window_size = 8;
if (s->config.retry_interval == 0.0)
- s->config.retry_interval = 1.0;
+ s->config.retry_interval = 1.0;
/* Sanity. */
ASSERT (s->config.retry_interval < 30);
if (s->config.retry_limit == 0)
- s->config.retry_limit = 7;
+ s->config.retry_limit = 7;
s->state = MC_STREAM_STATE_join_in_progress;
- if (! s->peer_index_by_id.hash)
+ if (!s->peer_index_by_id.hash)
mhash_init (&s->peer_index_by_id, sizeof (uword), sizeof (mc_peer_id_t));
/* If we don't hear from someone in 5 seconds, we're alone */
@@ -766,21 +844,28 @@ mc_stream_join_helper (mc_main_t * mcm,
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "stream index %d join request %s",
- .format_args = "i4s16",
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "stream index %d join request %s",
+ .format_args = "i4s16",
};
- struct { u32 stream_index; char name[16]; } * ed;
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 stream_index;
+ char name[16];
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->stream_index = s->index;
elog_stream_name (ed->name, sizeof (ed->name), s->config.name);
}
- send_join_or_leave_request (mcm, s->index, 1 /* join */);
-
+ send_join_or_leave_request (mcm, s->index, 1 /* join */ );
+
vlib_current_process_wait_for_one_time_event_vector
(vm, &s->procs_waiting_for_join_done);
-
+
if (MC_EVENT_LOGGING)
{
ELOG_TYPE (e, "join complete stream %d");
@@ -790,77 +875,84 @@ mc_stream_join_helper (mc_main_t * mcm,
return s->index;
}
-u32 mc_stream_join (mc_main_t * mcm, mc_stream_config_t * config)
-{ return mc_stream_join_helper (mcm, config, /* is_internal */ 0); }
+u32
+mc_stream_join (mc_main_t * mcm, mc_stream_config_t * config)
+{
+ return mc_stream_join_helper (mcm, config, /* is_internal */ 0);
+}
-void mc_stream_leave (mc_main_t * mcm, u32 stream_index)
+void
+mc_stream_leave (mc_main_t * mcm, u32 stream_index)
{
- mc_stream_t * s = mc_stream_by_index (mcm, stream_index);
-
- if (! s)
+ mc_stream_t *s = mc_stream_by_index (mcm, stream_index);
+
+ if (!s)
return;
if (MC_EVENT_LOGGING)
{
- ELOG_TYPE_DECLARE (t) = {
- .format = "leave-stream: %d",
- .format_args = "i4",
- };
- struct { u32 index; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
+ {
+ .format = "leave-stream: %d",.format_args = "i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 index;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->index = stream_index;
}
- send_join_or_leave_request (mcm, stream_index, 0 /* is_join */);
+ send_join_or_leave_request (mcm, stream_index, 0 /* is_join */ );
mc_stream_free (s);
s->state = MC_STREAM_STATE_name_known;
}
-void mc_msg_join_or_leave_request_handler (mc_main_t * mcm,
- mc_msg_join_or_leave_request_t * req,
- u32 buffer_index)
+void
+mc_msg_join_or_leave_request_handler (mc_main_t * mcm,
+ mc_msg_join_or_leave_request_t * req,
+ u32 buffer_index)
{
- mc_stream_t * s;
- mc_msg_join_reply_t * rep;
+ mc_stream_t *s;
+ mc_msg_join_reply_t *rep;
u32 bi;
mc_byte_swap_msg_join_or_leave_request (req);
s = mc_stream_by_index (mcm, req->stream_index);
- if (! s || s->state != MC_STREAM_STATE_ready)
+ if (!s || s->state != MC_STREAM_STATE_ready)
return;
/* If the peer is joining, create it */
- if (req->is_join)
+ if (req->is_join)
{
- mc_stream_t * this_s;
+ mc_stream_t *this_s;
/* We're not in a position to catch up a peer until all
stream joins are complete. */
if (0)
- {
- /* XXX This is hard to test so we've. */
- vec_foreach (this_s, mcm->stream_vector)
- {
- if (this_s->state != MC_STREAM_STATE_ready
- && this_s->state != MC_STREAM_STATE_name_known)
- return;
- }
- }
- else
- if (mcm->joins_in_progress > 0)
- return;
-
- (void) get_or_create_peer_with_id (mcm,
- s,
- req->peer_id,
- /* created */ 0);
+ {
+ /* XXX This is hard to test so we've. */
+ vec_foreach (this_s, mcm->stream_vector)
+ {
+ if (this_s->state != MC_STREAM_STATE_ready
+ && this_s->state != MC_STREAM_STATE_name_known)
+ return;
+ }
+ }
+ else if (mcm->joins_in_progress > 0)
+ return;
+
+ (void) get_or_create_peer_with_id (mcm, s, req->peer_id,
+ /* created */ 0);
rep = mc_get_vlib_buffer (mcm->vlib_main, sizeof (rep[0]), &bi);
memset (rep, 0, sizeof (rep[0]));
rep->type = MC_MSG_TYPE_join_reply;
rep->stream_index = req->stream_index;
-
+
mc_byte_swap_msg_join_reply (rep);
/* These two are already in network byte order... */
rep->peer_id = mcm->transport.our_ack_peer_id;
@@ -875,32 +967,32 @@ void mc_msg_join_or_leave_request_handler (mc_main_t * mcm,
}
}
-void mc_msg_join_reply_handler (mc_main_t * mcm,
- mc_msg_join_reply_t * mp,
- u32 buffer_index)
+void
+mc_msg_join_reply_handler (mc_main_t * mcm,
+ mc_msg_join_reply_t * mp, u32 buffer_index)
{
- mc_stream_t * s;
+ mc_stream_t *s;
mc_byte_swap_msg_join_reply (mp);
s = mc_stream_by_index (mcm, mp->stream_index);
- if (! s || s->state != MC_STREAM_STATE_join_in_progress)
+ if (!s || s->state != MC_STREAM_STATE_join_in_progress)
return;
- /* Switch to catchup state; next join reply
+ /* Switch to catchup state; next join reply
for this stream will be ignored. */
s->state = MC_STREAM_STATE_catchup;
mcm->joins_in_progress--;
mcm->transport.catchup_request_fun (mcm->transport.opaque,
- mp->stream_index,
- mp->catchup_peer_id);
+ mp->stream_index, mp->catchup_peer_id);
}
-void mc_wait_for_stream_ready (mc_main_t * m, char * stream_name)
+void
+mc_wait_for_stream_ready (mc_main_t * m, char *stream_name)
{
- mc_stream_t * s;
+ mc_stream_t *s;
while (1)
{
@@ -920,16 +1012,17 @@ void mc_wait_for_stream_ready (mc_main_t * m, char * stream_name)
(m->vlib_main, &s->procs_waiting_for_join_done);
}
-u32 mc_stream_send (mc_main_t * mcm, u32 stream_index, u32 buffer_index)
+u32
+mc_stream_send (mc_main_t * mcm, u32 stream_index, u32 buffer_index)
{
- mc_stream_t * s = mc_stream_by_index (mcm, stream_index);
- vlib_main_t * vm = mcm->vlib_main;
- mc_retry_t * r;
- mc_msg_user_request_t * mp;
- vlib_buffer_t * b = vlib_get_buffer (vm, buffer_index);
+ mc_stream_t *s = mc_stream_by_index (mcm, stream_index);
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_retry_t *r;
+ mc_msg_user_request_t *mp;
+ vlib_buffer_t *b = vlib_get_buffer (vm, buffer_index);
u32 ri;
- if (! s)
+ if (!s)
return 0;
if (s->state != MC_STREAM_STATE_ready)
@@ -953,7 +1046,7 @@ u32 mc_stream_send (mc_main_t * mcm, u32 stream_index, u32 buffer_index)
s->retry_head_index = ri;
else
{
- mc_retry_t * p = pool_elt_at_index (s->retry_pool, r->prev_index);
+ mc_retry_t *p = pool_elt_at_index (s->retry_pool, r->prev_index);
p->next_index = ri;
}
@@ -965,24 +1058,27 @@ u32 mc_stream_send (mc_main_t * mcm, u32 stream_index, u32 buffer_index)
mp->global_sequence = 0xdeadbeef;
mp->stream_index = s->index;
mp->local_sequence = s->our_local_sequence++;
- mp->n_data_bytes = vlib_buffer_index_length_in_chain (vm, buffer_index) - sizeof (mp[0]);
+ mp->n_data_bytes =
+ vlib_buffer_index_length_in_chain (vm, buffer_index) - sizeof (mp[0]);
r->buffer_index = buffer_index;
r->local_sequence = mp->local_sequence;
- r->sent_at = vlib_time_now(vm);
+ r->sent_at = vlib_time_now (vm);
r->n_retries = 0;
/* Retry will be freed when all currently known peers have acked. */
vec_validate (r->unacked_by_peer_bitmap, vec_len (s->all_peer_bitmap) - 1);
vec_copy (r->unacked_by_peer_bitmap, s->all_peer_bitmap);
- hash_set (s->retry_index_by_local_sequence, r->local_sequence, r - s->retry_pool);
+ hash_set (s->retry_index_by_local_sequence, r->local_sequence,
+ r - s->retry_pool);
elog_tx_msg (mcm, s->index, mp->local_sequence, r->n_retries);
mc_byte_swap_msg_user_request (mp);
- mcm->transport.tx_buffer (mcm->transport.opaque, MC_TRANSPORT_USER_REQUEST_TO_RELAY, buffer_index);
+ mcm->transport.tx_buffer (mcm->transport.opaque,
+ MC_TRANSPORT_USER_REQUEST_TO_RELAY, buffer_index);
s->user_requests_sent++;
@@ -990,40 +1086,48 @@ u32 mc_stream_send (mc_main_t * mcm, u32 stream_index, u32 buffer_index)
return s->config.window_size - pool_elts (s->retry_pool);
}
-void mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp, u32 buffer_index)
+void
+mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp,
+ u32 buffer_index)
{
- vlib_main_t * vm = mcm->vlib_main;
- mc_stream_t * s;
- mc_stream_peer_t * peer;
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_stream_t *s;
+ mc_stream_peer_t *peer;
i32 seq_cmp_result;
- static int once=0;
+ static int once = 0;
mc_byte_swap_msg_user_request (mp);
s = mc_stream_by_index (mcm, mp->stream_index);
/* Not signed up for this stream? Turf-o-matic */
- if (! s || s->state != MC_STREAM_STATE_ready)
+ if (!s || s->state != MC_STREAM_STATE_ready)
{
vlib_buffer_free_one (vm, buffer_index);
return;
}
/* Find peer, including ourselves. */
- peer = get_or_create_peer_with_id (mcm,
- s, mp->peer_id,
+ peer = get_or_create_peer_with_id (mcm, s, mp->peer_id,
/* created */ 0);
- seq_cmp_result = mc_seq_cmp (mp->local_sequence,
+ seq_cmp_result = mc_seq_cmp (mp->local_sequence,
peer->last_sequence_received + 1);
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "rx-msg: peer %s stream %d rx seq %d seq_cmp %d",
- .format_args = "T4i4i4i4",
- };
- struct { u32 peer, stream_index, rx_sequence; i32 seq_cmp_result; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "rx-msg: peer %s stream %d rx seq %d seq_cmp %d",
+ .format_args = "T4i4i4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 peer, stream_index, rx_sequence;
+ i32 seq_cmp_result;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->peer = elog_id_for_peer_id (mcm, peer->id.as_u64);
ed->stream_index = mp->stream_index;
@@ -1031,11 +1135,11 @@ void mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp, u
ed->seq_cmp_result = seq_cmp_result;
}
- if (0 && mp->stream_index == 1 && once == 0)
+ if (0 && mp->stream_index == 1 && once == 0)
{
once = 1;
ELOG_TYPE (e, "FAKE lost msg on stream 1");
- ELOG (mcm->elog_main,e,0);
+ ELOG (mcm->elog_main, e, 0);
return;
}
@@ -1043,12 +1147,12 @@ void mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp, u
s->user_requests_received++;
if (seq_cmp_result > 0)
- peer->stats.n_msgs_from_future += 1;
+ peer->stats.n_msgs_from_future += 1;
/* Send ack even if msg from future */
if (1)
{
- mc_msg_user_ack_t * rp;
+ mc_msg_user_ack_t *rp;
u32 bi;
rp = mc_get_vlib_buffer (vm, sizeof (rp[0]), &bi);
@@ -1059,11 +1163,18 @@ void mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp, u
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "tx-ack: stream %d local seq %d",
- .format_args = "i4i4",
- };
- struct { u32 stream_index; u32 local_sequence; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "tx-ack: stream %d local seq %d",
+ .format_args = "i4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 stream_index;
+ u32 local_sequence;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->stream_index = rp->stream_index;
ed->local_sequence = rp->local_sequence;
@@ -1073,21 +1184,21 @@ void mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp, u
mcm->transport.tx_ack (mcm->transport.opaque, mp->peer_id, bi);
/* Msg from past? If so, free the buffer... */
- if (seq_cmp_result < 0)
- {
- vlib_buffer_free_one (vm, buffer_index);
- peer->stats.n_msgs_from_past += 1;
- }
+ if (seq_cmp_result < 0)
+ {
+ vlib_buffer_free_one (vm, buffer_index);
+ peer->stats.n_msgs_from_past += 1;
+ }
}
-
+
if (seq_cmp_result == 0)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, buffer_index);
+ vlib_buffer_t *b = vlib_get_buffer (vm, buffer_index);
switch (s->state)
{
case MC_STREAM_STATE_ready:
vlib_buffer_advance (b, sizeof (mp[0]));
- s->config.rx_buffer(mcm, s, mp->peer_id, buffer_index);
+ s->config.rx_buffer (mcm, s, mp->peer_id, buffer_index);
/* Stream vector can change address via rx callback for mc-internal
stream. */
@@ -1108,13 +1219,15 @@ void mc_msg_user_request_handler (mc_main_t * mcm, mc_msg_user_request_t * mp, u
}
}
-void mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp, u32 buffer_index)
+void
+mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp,
+ u32 buffer_index)
{
- vlib_main_t * vm = mcm->vlib_main;
+ vlib_main_t *vm = mcm->vlib_main;
uword *p;
- mc_stream_t * s;
- mc_stream_peer_t * peer;
- mc_retry_t * r;
+ mc_stream_t *s;
+ mc_stream_peer_t *peer;
+ mc_retry_t *r;
int peer_created = 0;
mc_byte_swap_msg_user_ack (mp);
@@ -1123,11 +1236,20 @@ void mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp, u32 buffe
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (t) = {
- .format = "rx-ack: local seq %d peer %s seq_cmp_result %d",
- .format_args = "i4T4i4",
- };
- struct { u32 local_sequence; u32 peer; i32 seq_cmp_result;} * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
+ {
+ .format = "rx-ack: local seq %d peer %s seq_cmp_result %d",
+ .format_args = "i4T4i4",
+ };
+ /* *INDENT-ON* */
+
+ struct
+ {
+ u32 local_sequence;
+ u32 peer;
+ i32 seq_cmp_result;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->local_sequence = mp->local_sequence;
ed->peer = elog_id_for_peer_id (mcm, mp->peer_id.as_u64);
@@ -1135,35 +1257,35 @@ void mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp, u32 buffe
}
/* Unknown stream? */
- if (! s)
+ if (!s)
return;
/* Find the peer which just ack'ed. */
peer = get_or_create_peer_with_id (mcm, s, mp->peer_id,
/* created */ &peer_created);
- /*
+ /*
* Peer reports message from the future. If it's not in the retry
- * fifo, look for a retired message.
+ * fifo, look for a retired message.
*/
if (mp->seq_cmp_result > 0)
{
- p = hash_get (s->retry_index_by_local_sequence, mp->local_sequence -
- mp->seq_cmp_result);
+ p = hash_get (s->retry_index_by_local_sequence, mp->local_sequence -
+ mp->seq_cmp_result);
if (p == 0)
- mc_resend_retired (mcm, s, mp->local_sequence - mp->seq_cmp_result);
+ mc_resend_retired (mcm, s, mp->local_sequence - mp->seq_cmp_result);
/* Normal retry should fix it... */
return;
}
- /*
+ /*
* Pointer to the indicated retry fifo entry.
* Worth hashing because we could use a window size of 100 or 1000.
*/
p = hash_get (s->retry_index_by_local_sequence, mp->local_sequence);
- /*
+ /*
* Is this a duplicate ACK, received after we've retired the
* fifo entry. This can happen when learning about new
* peers.
@@ -1171,21 +1293,28 @@ void mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp, u32 buffe
if (p == 0)
{
if (MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (t) =
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
{
.format = "ack: for seq %d from peer %s no fifo elt",
.format_args = "i4T4",
- };
- struct { u32 seq; u32 peer; } * ed;
- ed = ELOG_DATA (mcm->elog_main, t);
- ed->seq = mp->local_sequence;
- ed->peer = elog_id_for_peer_id (mcm, mp->peer_id.as_u64);
- }
+ };
+ /* *INDENT-ON* */
+
+ struct
+ {
+ u32 seq;
+ u32 peer;
+ } *ed;
+ ed = ELOG_DATA (mcm->elog_main, t);
+ ed->seq = mp->local_sequence;
+ ed->peer = elog_id_for_peer_id (mcm, mp->peer_id.as_u64);
+ }
return;
}
-
+
r = pool_elt_at_index (s->retry_pool, p[0]);
/* Make sure that this new peer ACKs our msgs from now on */
@@ -1203,61 +1332,79 @@ void mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp, u32 buffe
}
ASSERT (mp->local_sequence == r->local_sequence);
-
+
/* If we weren't expecting to hear from this peer */
- if (!peer_created &&
- ! clib_bitmap_get (r->unacked_by_peer_bitmap, peer - s->peers))
+ if (!peer_created &&
+ !clib_bitmap_get (r->unacked_by_peer_bitmap, peer - s->peers))
{
if (MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (t) =
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
{
.format = "dup-ack: for seq %d from peer %s",
.format_args = "i4T4",
- };
- struct { u32 seq; u32 peer; } * ed;
- ed = ELOG_DATA (mcm->elog_main, t);
- ed->seq = r->local_sequence;
- ed->peer = elog_id_for_peer_id (mcm, peer->id.as_u64);
- }
- if (! clib_bitmap_is_zero (r->unacked_by_peer_bitmap))
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 seq;
+ u32 peer;
+ } *ed;
+ ed = ELOG_DATA (mcm->elog_main, t);
+ ed->seq = r->local_sequence;
+ ed->peer = elog_id_for_peer_id (mcm, peer->id.as_u64);
+ }
+ if (!clib_bitmap_is_zero (r->unacked_by_peer_bitmap))
return;
}
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (t) =
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
{
.format = "ack: for seq %d from peer %s",
.format_args = "i4T4",
};
- struct { u32 seq; u32 peer; } * ed;
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 seq;
+ u32 peer;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->seq = mp->local_sequence;
ed->peer = elog_id_for_peer_id (mcm, peer->id.as_u64);
}
- r->unacked_by_peer_bitmap =
+ r->unacked_by_peer_bitmap =
clib_bitmap_andnoti (r->unacked_by_peer_bitmap, peer - s->peers);
-
+
/* Not all clients have ack'ed */
- if (! clib_bitmap_is_zero (r->unacked_by_peer_bitmap))
+ if (!clib_bitmap_is_zero (r->unacked_by_peer_bitmap))
{
return;
}
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (t) =
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
{
.format = "ack: retire fifo elt loc seq %d after %d acks",
.format_args = "i4i4",
};
- struct { u32 seq; u32 npeers; } * ed;
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 seq;
+ u32 npeers;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->seq = r->local_sequence;
ed->npeers = pool_elts (s->peers);
}
-
+
hash_unset (s->retry_index_by_local_sequence, mp->local_sequence);
mc_retry_free (mcm, s, r);
remove_retry_from_pool (s, r);
@@ -1268,25 +1415,24 @@ void mc_msg_user_ack_handler (mc_main_t * mcm, mc_msg_user_ack_t * mp, u32 buffe
static uword
mc_catchup_process (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * f)
+ vlib_node_runtime_t * node, vlib_frame_t * f)
{
- mc_main_t * mcm = mc_node_get_main (node);
+ mc_main_t *mcm = mc_node_get_main (node);
uword *event_data = 0;
- mc_catchup_process_arg_t * args;
+ mc_catchup_process_arg_t *args;
int i;
-
+
while (1)
{
if (event_data)
- _vec_len(event_data) = 0;
- vlib_process_wait_for_event_with_type (vm, &event_data, EVENT_MC_SEND_CATCHUP_DATA);
+ _vec_len (event_data) = 0;
+ vlib_process_wait_for_event_with_type (vm, &event_data,
+ EVENT_MC_SEND_CATCHUP_DATA);
- for (i = 0; i < vec_len(event_data); i++)
+ for (i = 0; i < vec_len (event_data); i++)
{
- args = pool_elt_at_index (mcm->catchup_process_args,
- event_data[i]);
-
+ args = pool_elt_at_index (mcm->catchup_process_args, event_data[i]);
+
mcm->transport.catchup_send_fun (mcm->transport.opaque,
args->catchup_opaque,
args->catchup_snapshot);
@@ -1296,40 +1442,46 @@ mc_catchup_process (vlib_main_t * vm,
}
}
- return 0; /* not likely */
+ return 0; /* not likely */
}
-static void serialize_mc_stream (serialize_main_t * m, va_list * va)
+static void
+serialize_mc_stream (serialize_main_t * m, va_list * va)
{
- mc_stream_t * s = va_arg (*va, mc_stream_t *);
- mc_stream_peer_t * p;
+ mc_stream_t *s = va_arg (*va, mc_stream_t *);
+ mc_stream_peer_t *p;
serialize_integer (m, pool_elts (s->peers), sizeof (u32));
+ /* *INDENT-OFF* */
pool_foreach (p, s->peers, ({
u8 * x = serialize_get (m, sizeof (p->id));
clib_memcpy (x, p->id.as_u8, sizeof (p->id));
- serialize_integer (m, p->last_sequence_received,
+ serialize_integer (m, p->last_sequence_received,
sizeof (p->last_sequence_received));
}));
+/* *INDENT-ON* */
serialize_bitmap (m, s->all_peer_bitmap);
}
-void unserialize_mc_stream (serialize_main_t * m, va_list * va)
+void
+unserialize_mc_stream (serialize_main_t * m, va_list * va)
{
- mc_stream_t * s = va_arg (*va, mc_stream_t *);
+ mc_stream_t *s = va_arg (*va, mc_stream_t *);
u32 i, n_peers;
- mc_stream_peer_t * p;
+ mc_stream_peer_t *p;
unserialize_integer (m, &n_peers, sizeof (u32));
mhash_init (&s->peer_index_by_id, sizeof (uword), sizeof (mc_peer_id_t));
for (i = 0; i < n_peers; i++)
{
- u8 * x;
+ u8 *x;
pool_get (s->peers, p);
x = unserialize_get (m, sizeof (p->id));
clib_memcpy (p->id.as_u8, x, sizeof (p->id));
- unserialize_integer (m, &p->last_sequence_received, sizeof (p->last_sequence_received));
- mhash_set (&s->peer_index_by_id, &p->id, p - s->peers, /* old_value */ 0);
+ unserialize_integer (m, &p->last_sequence_received,
+ sizeof (p->last_sequence_received));
+ mhash_set (&s->peer_index_by_id, &p->id, p - s->peers, /* old_value */
+ 0);
}
s->all_peer_bitmap = unserialize_bitmap (m);
@@ -1338,38 +1490,46 @@ void unserialize_mc_stream (serialize_main_t * m, va_list * va)
clib_warning ("BUG: stream %s all_peer_bitmap NULL", s->config.name);
}
-void mc_msg_catchup_request_handler (mc_main_t * mcm, mc_msg_catchup_request_t * req, u32 catchup_opaque)
+void
+mc_msg_catchup_request_handler (mc_main_t * mcm,
+ mc_msg_catchup_request_t * req,
+ u32 catchup_opaque)
{
- vlib_main_t * vm = mcm->vlib_main;
- mc_stream_t * s;
- mc_catchup_process_arg_t * args;
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_stream_t *s;
+ mc_catchup_process_arg_t *args;
mc_byte_swap_msg_catchup_request (req);
s = mc_stream_by_index (mcm, req->stream_index);
- if (! s || s->state != MC_STREAM_STATE_ready)
+ if (!s || s->state != MC_STREAM_STATE_ready)
return;
-
+
if (MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (t) =
- {
- .format = "catchup-request: from %s stream %d",
- .format_args = "T4i4",
- };
- struct { u32 peer, stream; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
+ {
+ .format = "catchup-request: from %s stream %d",
+ .format_args = "T4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 peer, stream;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->peer = elog_id_for_peer_id (mcm, req->peer_id.as_u64);
ed->stream = req->stream_index;
}
- /*
- * The application has to snapshoot its data structures right
- * here, right now. If we process any messages after
- * noting the last global sequence we've processed, the client
+ /*
+ * The application has to snapshoot its data structures right
+ * here, right now. If we process any messages after
+ * noting the last global sequence we've processed, the client
* won't be able to accurately reconstruct our data structures.
*
- * Once the data structures are e.g. vec_dup()'ed, we
+ * Once the data structures are e.g. vec_dup()'ed, we
* send the resulting messages from a separate process, to
* make sure that we don't cause a bunch of message retransmissions
*/
@@ -1382,7 +1542,7 @@ void mc_msg_catchup_request_handler (mc_main_t * mcm, mc_msg_catchup_request_t *
/* Construct catchup reply and snapshot state for stream to send as
catchup reply payload. */
{
- mc_msg_catchup_reply_t * rep;
+ mc_msg_catchup_reply_t *rep;
serialize_main_t m;
vec_resize (args->catchup_snapshot, sizeof (rep[0]));
@@ -1403,9 +1563,7 @@ void mc_msg_catchup_request_handler (mc_main_t * mcm, mc_msg_catchup_request_t *
/* Actually copy internal state */
args->catchup_snapshot = s->config.catchup_snapshot
- (mcm,
- args->catchup_snapshot,
- rep->last_global_sequence_included);
+ (mcm, args->catchup_snapshot, rep->last_global_sequence_included);
rep = (void *) args->catchup_snapshot;
rep->n_data_bytes = vec_len (args->catchup_snapshot) - sizeof (rep[0]);
@@ -1415,14 +1573,16 @@ void mc_msg_catchup_request_handler (mc_main_t * mcm, mc_msg_catchup_request_t *
/* now go send it... */
vlib_process_signal_event (vm, mcm->catchup_process,
- EVENT_MC_SEND_CATCHUP_DATA,
- args - mcm->catchup_process_args);
+ EVENT_MC_SEND_CATCHUP_DATA,
+ args - mcm->catchup_process_args);
}
#define EVENT_MC_UNSERIALIZE_BUFFER 0
#define EVENT_MC_UNSERIALIZE_CATCHUP 1
-void mc_msg_catchup_reply_handler (mc_main_t * mcm, mc_msg_catchup_reply_t * mp, u32 catchup_opaque)
+void
+mc_msg_catchup_reply_handler (mc_main_t * mcm, mc_msg_catchup_reply_t * mp,
+ u32 catchup_opaque)
{
vlib_process_signal_event (mcm->vlib_main,
mcm->unserialize_process,
@@ -1430,36 +1590,40 @@ void mc_msg_catchup_reply_handler (mc_main_t * mcm, mc_msg_catchup_reply_t * mp,
pointer_to_uword (mp));
}
-static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
+static void
+perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
{
- mc_stream_t * s;
+ mc_stream_t *s;
i32 seq_cmp_result;
-
+
mc_byte_swap_msg_catchup_reply (mp);
s = mc_stream_by_index (mcm, mp->stream_index);
/* Never heard of this stream or already caught up. */
- if (! s || s->state == MC_STREAM_STATE_ready)
+ if (!s || s->state == MC_STREAM_STATE_ready)
return;
-
+
{
serialize_main_t m;
- mc_stream_peer_t * p;
+ mc_stream_peer_t *p;
u32 n_stream_bytes;
/* For offline sim replay: save the entire catchup snapshot... */
if (s->config.save_snapshot)
- s->config.save_snapshot (mcm, /* is_catchup */ 1, mp->data, mp->n_data_bytes);
+ s->config.save_snapshot (mcm, /* is_catchup */ 1, mp->data,
+ mp->n_data_bytes);
unserialize_open_data (&m, mp->data, mp->n_data_bytes);
unserialize (&m, unserialize_mc_stream, s);
/* Make sure we start numbering our messages as expected */
+ /* *INDENT-OFF* */
pool_foreach (p, s->peers, ({
if (p->id.as_u64 == mcm->transport.our_ack_peer_id.as_u64)
s->our_local_sequence = p->last_sequence_received + 1;
}));
+/* *INDENT-ON* */
n_stream_bytes = m.stream.current_buffer_index;
@@ -1467,7 +1631,7 @@ static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
/* After serialized stream is user's catchup data. */
s->config.catchup (mcm, mp->data + n_stream_bytes,
- mp->n_data_bytes - n_stream_bytes);
+ mp->n_data_bytes - n_stream_bytes);
}
/* Vector could have been moved by catchup.
@@ -1478,12 +1642,12 @@ static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
while (clib_fifo_elts (s->catchup_fifo))
{
- mc_msg_user_request_t * gp;
+ mc_msg_user_request_t *gp;
u32 bi;
- vlib_buffer_t * b;
+ vlib_buffer_t *b;
+
+ clib_fifo_sub1 (s->catchup_fifo, bi);
- clib_fifo_sub1(s->catchup_fifo, bi);
-
b = vlib_get_buffer (mcm->vlib_main, bi);
gp = vlib_buffer_get_current (b);
@@ -1499,11 +1663,17 @@ static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
if (MC_EVENT_LOGGING)
{
- ELOG_TYPE_DECLARE (t) = {
- .format = "catchup replay local sequence 0x%x",
- .format_args = "i4",
- };
- struct { u32 local_sequence; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
+ {
+ .format = "catchup replay local sequence 0x%x",
+ .format_args = "i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 local_sequence;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->local_sequence = gp->local_sequence;
}
@@ -1512,11 +1682,17 @@ static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
{
if (MC_EVENT_LOGGING)
{
- ELOG_TYPE_DECLARE (t) = {
- .format = "catchup discard local sequence 0x%x",
- .format_args = "i4",
- };
- struct { u32 local_sequence; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (t) =
+ {
+ .format = "catchup discard local sequence 0x%x",
+ .format_args = "i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 local_sequence;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, t);
ed->local_sequence = gp->local_sequence;
}
@@ -1529,7 +1705,7 @@ static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
/* Now that we are caught up wake up joining process. */
{
- vlib_one_time_waiting_process_t * wp;
+ vlib_one_time_waiting_process_t *wp;
vec_foreach (wp, s->procs_waiting_for_join_done)
vlib_signal_one_time_waiting_process (mcm->vlib_main, wp);
if (s->procs_waiting_for_join_done)
@@ -1537,20 +1713,21 @@ static void perform_catchup (mc_main_t * mcm, mc_msg_catchup_reply_t * mp)
}
}
-static void this_node_maybe_master (mc_main_t * mcm)
+static void
+this_node_maybe_master (mc_main_t * mcm)
{
- vlib_main_t * vm = mcm->vlib_main;
- mc_msg_master_assert_t * mp;
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_msg_master_assert_t *mp;
uword event_type;
int timeouts = 0;
int is_master = mcm->relay_state == MC_RELAY_STATE_MASTER;
- clib_error_t * error;
+ clib_error_t *error;
f64 now, time_last_master_assert = -1;
u32 bi;
while (1)
{
- if (! mcm->we_can_be_relay_master)
+ if (!mcm->we_can_be_relay_master)
{
mcm->relay_state = MC_RELAY_STATE_SLAVE;
if (MC_EVENT_LOGGING)
@@ -1570,25 +1747,33 @@ static void this_node_maybe_master (mc_main_t * mcm)
mp->peer_id = mcm->transport.our_ack_peer_id;
mp->global_sequence = mcm->relay_global_sequence;
- /*
- * these messages clog the event log, set MC_EVENT_LOGGING higher
- * if you want them
- */
+ /*
+ * these messages clog the event log, set MC_EVENT_LOGGING higher
+ * if you want them
+ */
if (MC_EVENT_LOGGING > 1)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "tx-massert: peer %s global seq %u",
- .format_args = "T4i4",
- };
- struct { u32 peer, global_sequence; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "tx-massert: peer %s global seq %u",
+ .format_args = "T4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 peer, global_sequence;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->peer = elog_id_for_peer_id (mcm, mp->peer_id.as_u64);
ed->global_sequence = mp->global_sequence;
}
- mc_byte_swap_msg_master_assert (mp);
+ mc_byte_swap_msg_master_assert (mp);
- error = mcm->transport.tx_buffer (mcm->transport.opaque, MC_TRANSPORT_MASTERSHIP, bi);
+ error =
+ mcm->transport.tx_buffer (mcm->transport.opaque,
+ MC_TRANSPORT_MASTERSHIP, bi);
if (error)
clib_error_report (error);
}
@@ -1599,10 +1784,11 @@ static void this_node_maybe_master (mc_main_t * mcm)
switch (event_type)
{
case ~0:
- if (! is_master && timeouts++ > 2)
+ if (!is_master && timeouts++ > 2)
{
mcm->relay_state = MC_RELAY_STATE_MASTER;
- mcm->relay_master_peer_id = mcm->transport.our_ack_peer_id.as_u64;
+ mcm->relay_master_peer_id =
+ mcm->transport.our_ack_peer_id.as_u64;
if (MC_EVENT_LOGGING)
{
ELOG_TYPE (e, "become master (was maybe_master)");
@@ -1611,7 +1797,7 @@ static void this_node_maybe_master (mc_main_t * mcm)
return;
}
break;
-
+
case MC_RELAY_STATE_SLAVE:
mcm->relay_state = MC_RELAY_STATE_SLAVE;
if (MC_EVENT_LOGGING && mcm->relay_state != MC_RELAY_STATE_SLAVE)
@@ -1624,9 +1810,10 @@ static void this_node_maybe_master (mc_main_t * mcm)
}
}
-static void this_node_slave (mc_main_t * mcm)
+static void
+this_node_slave (mc_main_t * mcm)
{
- vlib_main_t * vm = mcm->vlib_main;
+ vlib_main_t *vm = mcm->vlib_main;
uword event_type;
int timeouts = 0;
@@ -1667,18 +1854,17 @@ static void this_node_slave (mc_main_t * mcm)
static uword
mc_mastership_process (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * f)
+ vlib_node_runtime_t * node, vlib_frame_t * f)
{
- mc_main_t * mcm = mc_node_get_main (node);
-
+ mc_main_t *mcm = mc_node_get_main (node);
+
while (1)
{
switch (mcm->relay_state)
{
case MC_RELAY_STATE_NEGOTIATE:
case MC_RELAY_STATE_MASTER:
- this_node_maybe_master(mcm);
+ this_node_maybe_master (mcm);
break;
case MC_RELAY_STATE_SLAVE:
@@ -1686,21 +1872,24 @@ mc_mastership_process (vlib_main_t * vm,
break;
}
}
- return 0; /* not likely */
+ return 0; /* not likely */
}
-void mc_enable_disable_mastership (mc_main_t * mcm, int we_can_be_master)
+void
+mc_enable_disable_mastership (mc_main_t * mcm, int we_can_be_master)
{
if (we_can_be_master != mcm->we_can_be_relay_master)
{
mcm->we_can_be_relay_master = we_can_be_master;
- vlib_process_signal_event (mcm->vlib_main,
+ vlib_process_signal_event (mcm->vlib_main,
mcm->mastership_process,
MC_RELAY_STATE_NEGOTIATE, 0);
}
}
-void mc_msg_master_assert_handler (mc_main_t * mcm, mc_msg_master_assert_t * mp, u32 buffer_index)
+void
+mc_msg_master_assert_handler (mc_main_t * mcm, mc_msg_master_assert_t * mp,
+ u32 buffer_index)
{
mc_peer_id_t his_peer_id, our_peer_id;
i32 seq_cmp_result;
@@ -1718,9 +1907,10 @@ void mc_msg_master_assert_handler (mc_main_t * mcm, mc_msg_master_assert_t * mp,
/* If the sender has a lower peer id and the sender's sequence >=
our global sequence, we become a slave. Otherwise we are master. */
- if (mc_peer_id_compare (his_peer_id, our_peer_id) < 0 && seq_cmp_result >= 0)
+ if (mc_peer_id_compare (his_peer_id, our_peer_id) < 0
+ && seq_cmp_result >= 0)
{
- vlib_process_signal_event (mcm->vlib_main,
+ vlib_process_signal_event (mcm->vlib_main,
mcm->mastership_process,
MC_RELAY_STATE_SLAVE, 0);
signal_slave = 1;
@@ -1734,8 +1924,8 @@ void mc_msg_master_assert_handler (mc_main_t * mcm, mc_msg_master_assert_t * mp,
}
{
- uword * q = mhash_get (&mcm->mastership_peer_index_by_id, &his_peer_id);
- mc_mastership_peer_t * p;
+ uword *q = mhash_get (&mcm->mastership_peer_index_by_id, &his_peer_id);
+ mc_mastership_peer_t *p;
if (q)
p = vec_elt_at_index (mcm->mastership_peers, q[0]);
@@ -1743,28 +1933,34 @@ void mc_msg_master_assert_handler (mc_main_t * mcm, mc_msg_master_assert_t * mp,
{
vec_add2 (mcm->mastership_peers, p, 1);
p->peer_id = his_peer_id;
- mhash_set (&mcm->mastership_peer_index_by_id, &p->peer_id, p - mcm->mastership_peers,
+ mhash_set (&mcm->mastership_peer_index_by_id, &p->peer_id,
+ p - mcm->mastership_peers,
/* old_value */ 0);
}
p->time_last_master_assert_received = vlib_time_now (mcm->vlib_main);
}
- /*
+ /*
* these messages clog the event log, set MC_EVENT_LOGGING higher
* if you want them.
*/
if (MC_EVENT_LOGGING > 1)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "rx-massert: peer %s global seq %u upd %d slave %d",
- .format_args = "T4i4i1i1",
- };
- struct {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "rx-massert: peer %s global seq %u upd %d slave %d",
+ .format_args = "T4i4i1i1",
+ };
+ /* *INDENT-ON* */
+
+ struct
+ {
u32 peer;
- u32 global_sequence;
+ u32 global_sequence;
u8 update_sequence;
u8 slave;
- } * ed;
+ } *ed;
ed = ELOG_DATA (mcm->elog_main, e);
ed->peer = elog_id_for_peer_id (mcm, his_peer_id.as_u64);
ed->global_sequence = mp->global_sequence;
@@ -1776,20 +1972,18 @@ void mc_msg_master_assert_handler (mc_main_t * mcm, mc_msg_master_assert_t * mp,
static void
mc_serialize_init (mc_main_t * mcm)
{
- mc_serialize_msg_t * m;
- vlib_main_t * vm = vlib_get_main();
+ mc_serialize_msg_t *m;
+ vlib_main_t *vm = vlib_get_main ();
mcm->global_msg_index_by_name
- = hash_create_string (/* elts */ 0, sizeof (uword));
+ = hash_create_string ( /* elts */ 0, sizeof (uword));
m = vm->mc_msg_registrations;
-
+
while (m)
{
m->global_index = vec_len (mcm->global_msgs);
- hash_set_mem (mcm->global_msg_index_by_name,
- m->name,
- m->global_index);
+ hash_set_mem (mcm->global_msg_index_by_name, m->name, m->global_index);
vec_add1 (mcm->global_msgs, m);
m = m->next_registration;
}
@@ -1797,19 +1991,18 @@ mc_serialize_init (mc_main_t * mcm)
clib_error_t *
mc_serialize_va (mc_main_t * mc,
- u32 stream_index,
+ u32 stream_index,
u32 multiple_messages_per_vlib_buffer,
- mc_serialize_msg_t * msg,
- va_list * va)
+ mc_serialize_msg_t * msg, va_list * va)
{
- mc_stream_t * s;
- clib_error_t * error;
- serialize_main_t * m = &mc->serialize_mains[VLIB_TX];
- vlib_serialize_buffer_main_t * sbm = &mc->serialize_buffer_mains[VLIB_TX];
+ mc_stream_t *s;
+ clib_error_t *error;
+ serialize_main_t *m = &mc->serialize_mains[VLIB_TX];
+ vlib_serialize_buffer_main_t *sbm = &mc->serialize_buffer_mains[VLIB_TX];
u32 bi, n_before, n_after, n_total, n_this_msg;
u32 si, gi;
- if (! sbm->vlib_main)
+ if (!sbm->vlib_main)
{
sbm->tx.max_n_data_bytes_per_chain = 4096;
sbm->tx.free_list_index = VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX;
@@ -1831,16 +2024,22 @@ mc_serialize_va (mc_main_t * mc,
serialize_likely_small_unsigned_integer (m, si);
/* For first time message is sent, use name to identify message. */
- if (si == ~0 || MSG_ID_DEBUG)
+ if (si == ~0 || MSG_ID_DEBUG)
serialize_cstring (m, msg->name);
if (MSG_ID_DEBUG && MC_EVENT_LOGGING > 0)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "serialize-msg: %s index %d",
- .format_args = "T4i4",
- };
- struct { u32 c[2]; } * ed;
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "serialize-msg: %s index %d",
+ .format_args = "T4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 c[2];
+ } *ed;
ed = ELOG_DATA (mc->elog_main, e);
ed->c[0] = elog_id_for_msg_name (mc, msg->name);
ed->c[1] = si;
@@ -1854,15 +2053,17 @@ mc_serialize_va (mc_main_t * mc,
/* For max message size ignore first message where string name is sent. */
if (si != ~0)
- msg->max_n_bytes_serialized = clib_max (msg->max_n_bytes_serialized, n_this_msg);
+ msg->max_n_bytes_serialized =
+ clib_max (msg->max_n_bytes_serialized, n_this_msg);
- if (! multiple_messages_per_vlib_buffer
+ if (!multiple_messages_per_vlib_buffer
|| si == ~0
- || n_total + msg->max_n_bytes_serialized > mc->transport.max_packet_size)
+ || n_total + msg->max_n_bytes_serialized >
+ mc->transport.max_packet_size)
{
bi = serialize_close_vlib_buffer (m);
sbm->first_buffer = 0;
- if (! error)
+ if (!error)
mc_stream_send (mc, stream_index, bi);
else if (bi != ~0)
vlib_buffer_free_one (mc->vlib_main, bi);
@@ -1875,12 +2076,11 @@ clib_error_t *
mc_serialize_internal (mc_main_t * mc,
u32 stream_index,
u32 multiple_messages_per_vlib_buffer,
- mc_serialize_msg_t * msg,
- ...)
+ mc_serialize_msg_t * msg, ...)
{
- vlib_main_t * vm = mc->vlib_main;
+ vlib_main_t *vm = mc->vlib_main;
va_list va;
- clib_error_t * error;
+ clib_error_t *error;
if (stream_index == ~0)
{
@@ -1892,125 +2092,146 @@ mc_serialize_internal (mc_main_t * mc,
va_start (va, msg);
error = mc_serialize_va (mc, stream_index,
- multiple_messages_per_vlib_buffer,
- msg, &va);
+ multiple_messages_per_vlib_buffer, msg, &va);
va_end (va);
return error;
}
-uword mc_unserialize_message (mc_main_t * mcm,
- mc_stream_t * s,
- serialize_main_t * m)
+uword
+mc_unserialize_message (mc_main_t * mcm,
+ mc_stream_t * s, serialize_main_t * m)
{
- mc_serialize_stream_msg_t * sm;
+ mc_serialize_stream_msg_t *sm;
u32 gi, si;
si = unserialize_likely_small_unsigned_integer (m);
- if (! (si == ~0 || MSG_ID_DEBUG))
+ if (!(si == ~0 || MSG_ID_DEBUG))
{
sm = vec_elt_at_index (s->stream_msgs, si);
gi = sm->global_index;
}
else
{
- char * name;
+ char *name;
unserialize_cstring (m, &name);
if (MSG_ID_DEBUG && MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (e) = {
- .format = "unserialize-msg: %s rx index %d",
- .format_args = "T4i4",
- };
- struct { u32 c[2]; } * ed;
- ed = ELOG_DATA (mcm->elog_main, e);
- ed->c[0] = elog_id_for_msg_name (mcm, name);
- ed->c[1] = si;
- }
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "unserialize-msg: %s rx index %d",
+ .format_args = "T4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 c[2];
+ } *ed;
+ ed = ELOG_DATA (mcm->elog_main, e);
+ ed->c[0] = elog_id_for_msg_name (mcm, name);
+ ed->c[1] = si;
+ }
{
- uword * p = hash_get_mem (mcm->global_msg_index_by_name, name);
- gi = p ? p[0] : ~0;
+ uword *p = hash_get_mem (mcm->global_msg_index_by_name, name);
+ gi = p ? p[0] : ~0;
}
/* Unknown message? */
if (gi == ~0)
- {
- vec_free (name);
- goto done;
- }
+ {
+ vec_free (name);
+ goto done;
+ }
vec_validate_init_empty (s->stream_msg_index_by_global_index, gi, ~0);
si = s->stream_msg_index_by_global_index[gi];
/* Stream local index unknown? Create it. */
if (si == ~0)
- {
- vec_add2 (s->stream_msgs, sm, 1);
+ {
+ vec_add2 (s->stream_msgs, sm, 1);
- si = sm - s->stream_msgs;
- sm->global_index = gi;
- s->stream_msg_index_by_global_index[gi] = si;
+ si = sm - s->stream_msgs;
+ sm->global_index = gi;
+ s->stream_msg_index_by_global_index[gi] = si;
- if (MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (e) = {
- .format = "msg-bind: stream %d %s to index %d",
- .format_args = "i4T4i4",
- };
- struct { u32 c[3]; } * ed;
- ed = ELOG_DATA (mcm->elog_main, e);
- ed->c[0] = s->index;
- ed->c[1] = elog_id_for_msg_name (mcm, name);
- ed->c[2] = si;
- }
- }
+ if (MC_EVENT_LOGGING > 0)
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "msg-bind: stream %d %s to index %d",
+ .format_args = "i4T4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 c[3];
+ } *ed;
+ ed = ELOG_DATA (mcm->elog_main, e);
+ ed->c[0] = s->index;
+ ed->c[1] = elog_id_for_msg_name (mcm, name);
+ ed->c[2] = si;
+ }
+ }
else
- {
- sm = vec_elt_at_index (s->stream_msgs, si);
- if (gi != sm->global_index && MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (e) = {
- .format = "msg-id-ERROR: %s index %d expected %d",
- .format_args = "T4i4i4",
- };
- struct { u32 c[3]; } * ed;
- ed = ELOG_DATA (mcm->elog_main, e);
- ed->c[0] = elog_id_for_msg_name (mcm, name);
- ed->c[1] = si;
- ed->c[2] = ~0;
- if (sm->global_index < vec_len (s->stream_msg_index_by_global_index))
- ed->c[2] = s->stream_msg_index_by_global_index[sm->global_index];
- }
- }
+ {
+ sm = vec_elt_at_index (s->stream_msgs, si);
+ if (gi != sm->global_index && MC_EVENT_LOGGING > 0)
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "msg-id-ERROR: %s index %d expected %d",
+ .format_args = "T4i4i4",
+ };
+ /* *INDENT-ON* */
+ struct
+ {
+ u32 c[3];
+ } *ed;
+ ed = ELOG_DATA (mcm->elog_main, e);
+ ed->c[0] = elog_id_for_msg_name (mcm, name);
+ ed->c[1] = si;
+ ed->c[2] = ~0;
+ if (sm->global_index <
+ vec_len (s->stream_msg_index_by_global_index))
+ ed->c[2] =
+ s->stream_msg_index_by_global_index[sm->global_index];
+ }
+ }
vec_free (name);
}
if (gi != ~0)
{
- mc_serialize_msg_t * msg;
+ mc_serialize_msg_t *msg;
msg = vec_elt (mcm->global_msgs, gi);
unserialize (m, msg->unserialize, mcm);
}
- done:
+done:
return gi != ~0;
}
void
mc_unserialize_internal (mc_main_t * mcm, u32 stream_and_buffer_index)
{
- vlib_main_t * vm = mcm->vlib_main;
- serialize_main_t * m = &mcm->serialize_mains[VLIB_RX];
- vlib_serialize_buffer_main_t * sbm = &mcm->serialize_buffer_mains[VLIB_RX];
- mc_stream_and_buffer_t * sb;
- mc_stream_t * stream;
+ vlib_main_t *vm = mcm->vlib_main;
+ serialize_main_t *m = &mcm->serialize_mains[VLIB_RX];
+ vlib_serialize_buffer_main_t *sbm = &mcm->serialize_buffer_mains[VLIB_RX];
+ mc_stream_and_buffer_t *sb;
+ mc_stream_t *stream;
u32 buffer_index;
- sb = pool_elt_at_index (mcm->mc_unserialize_stream_and_buffers, stream_and_buffer_index);
+ sb =
+ pool_elt_at_index (mcm->mc_unserialize_stream_and_buffers,
+ stream_and_buffer_index);
buffer_index = sb->buffer_index;
stream = vec_elt_at_index (mcm->stream_vector, sb->stream_index);
pool_put (mcm->mc_unserialize_stream_and_buffers, sb);
@@ -2018,11 +2239,12 @@ mc_unserialize_internal (mc_main_t * mcm, u32 stream_and_buffer_index)
if (stream->config.save_snapshot)
{
u32 n_bytes = vlib_buffer_index_length_in_chain (vm, buffer_index);
- static u8 * contents;
+ static u8 *contents;
vec_reset_length (contents);
vec_validate (contents, n_bytes - 1);
vlib_buffer_contents (vm, buffer_index, contents);
- stream->config.save_snapshot (mcm, /* is_catchup */ 0, contents, n_bytes);
+ stream->config.save_snapshot (mcm, /* is_catchup */ 0, contents,
+ n_bytes);
}
ASSERT (vlib_in_process_context (vm));
@@ -2041,28 +2263,28 @@ mc_unserialize_internal (mc_main_t * mcm, u32 stream_and_buffer_index)
void
mc_unserialize (mc_main_t * mcm, mc_stream_t * s, u32 buffer_index)
{
- vlib_main_t * vm = mcm->vlib_main;
- mc_stream_and_buffer_t * sb;
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_stream_and_buffer_t *sb;
pool_get (mcm->mc_unserialize_stream_and_buffers, sb);
sb->stream_index = s->index;
sb->buffer_index = buffer_index;
- vlib_process_signal_event (vm, mcm->unserialize_process,
- EVENT_MC_UNSERIALIZE_BUFFER, sb - mcm->mc_unserialize_stream_and_buffers);
+ vlib_process_signal_event (vm, mcm->unserialize_process,
+ EVENT_MC_UNSERIALIZE_BUFFER,
+ sb - mcm->mc_unserialize_stream_and_buffers);
}
static uword
mc_unserialize_process (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * f)
+ vlib_node_runtime_t * node, vlib_frame_t * f)
{
- mc_main_t * mcm = mc_node_get_main (node);
- uword event_type, * event_data = 0;
+ mc_main_t *mcm = mc_node_get_main (node);
+ uword event_type, *event_data = 0;
int i;
-
+
while (1)
{
if (event_data)
- _vec_len(event_data) = 0;
+ _vec_len (event_data) = 0;
vlib_process_wait_for_event (vm);
event_type = vlib_process_get_events (vm, &event_data);
@@ -2076,7 +2298,7 @@ mc_unserialize_process (vlib_main_t * vm,
case EVENT_MC_UNSERIALIZE_CATCHUP:
for (i = 0; i < vec_len (event_data); i++)
{
- u8 * mp = uword_to_pointer (event_data[i], u8 *);
+ u8 *mp = uword_to_pointer (event_data[i], u8 *);
perform_catchup (mcm, (void *) mp);
vec_free (mp);
}
@@ -2087,57 +2309,58 @@ mc_unserialize_process (vlib_main_t * vm,
}
}
- return 0; /* not likely */
+ return 0; /* not likely */
}
-void serialize_mc_main (serialize_main_t * m, va_list * va)
+void
+serialize_mc_main (serialize_main_t * m, va_list * va)
{
- mc_main_t * mcm = va_arg (*va, mc_main_t *);
- mc_stream_t * s;
- mc_serialize_stream_msg_t * sm;
- mc_serialize_msg_t * msg;
+ mc_main_t *mcm = va_arg (*va, mc_main_t *);
+ mc_stream_t *s;
+ mc_serialize_stream_msg_t *sm;
+ mc_serialize_msg_t *msg;
serialize_integer (m, vec_len (mcm->stream_vector), sizeof (u32));
vec_foreach (s, mcm->stream_vector)
- {
- /* Stream name. */
- serialize_cstring (m, s->config.name);
+ {
+ /* Stream name. */
+ serialize_cstring (m, s->config.name);
- /* Serialize global names for all sent messages. */
- serialize_integer (m, vec_len (s->stream_msgs), sizeof (u32));
- vec_foreach (sm, s->stream_msgs)
- {
- msg = vec_elt (mcm->global_msgs, sm->global_index);
- serialize_cstring (m, msg->name);
- }
+ /* Serialize global names for all sent messages. */
+ serialize_integer (m, vec_len (s->stream_msgs), sizeof (u32));
+ vec_foreach (sm, s->stream_msgs)
+ {
+ msg = vec_elt (mcm->global_msgs, sm->global_index);
+ serialize_cstring (m, msg->name);
}
+ }
}
-void unserialize_mc_main (serialize_main_t * m, va_list * va)
+void
+unserialize_mc_main (serialize_main_t * m, va_list * va)
{
- mc_main_t * mcm = va_arg (*va, mc_main_t *);
+ mc_main_t *mcm = va_arg (*va, mc_main_t *);
u32 i, n_streams, n_stream_msgs;
- char * name;
- mc_stream_t * s;
- mc_serialize_stream_msg_t * sm;
+ char *name;
+ mc_stream_t *s;
+ mc_serialize_stream_msg_t *sm;
unserialize_integer (m, &n_streams, sizeof (u32));
for (i = 0; i < n_streams; i++)
{
unserialize_cstring (m, &name);
- if (i != MC_STREAM_INDEX_INTERNAL
- && ! mc_stream_by_name (mcm, name))
- {
- vec_validate (mcm->stream_vector, i);
- s = vec_elt_at_index (mcm->stream_vector, i);
- mc_stream_init (s);
- s->index = s - mcm->stream_vector;
- s->config.name = name;
- s->state = MC_STREAM_STATE_name_known;
- hash_set_mem (mcm->stream_index_by_name, s->config.name, s->index);
- }
+ if (i != MC_STREAM_INDEX_INTERNAL && !mc_stream_by_name (mcm, name))
+ {
+ vec_validate (mcm->stream_vector, i);
+ s = vec_elt_at_index (mcm->stream_vector, i);
+ mc_stream_init (s);
+ s->index = s - mcm->stream_vector;
+ s->config.name = name;
+ s->state = MC_STREAM_STATE_name_known;
+ hash_set_mem (mcm->stream_index_by_name, s->config.name, s->index);
+ }
else
- vec_free (name);
+ vec_free (name);
s = vec_elt_at_index (mcm->stream_vector, i);
@@ -2147,45 +2370,53 @@ void unserialize_mc_main (serialize_main_t * m, va_list * va)
unserialize_integer (m, &n_stream_msgs, sizeof (u32));
vec_resize (s->stream_msgs, n_stream_msgs);
vec_foreach (sm, s->stream_msgs)
- {
- uword * p;
- u32 si, gi;
-
- unserialize_cstring (m, &name);
- p = hash_get (mcm->global_msg_index_by_name, name);
- gi = p ? p[0] : ~0;
- si = sm - s->stream_msgs;
-
- if (MC_EVENT_LOGGING > 0)
- {
- ELOG_TYPE_DECLARE (e) = {
+ {
+ uword *p;
+ u32 si, gi;
+
+ unserialize_cstring (m, &name);
+ p = hash_get (mcm->global_msg_index_by_name, name);
+ gi = p ? p[0] : ~0;
+ si = sm - s->stream_msgs;
+
+ if (MC_EVENT_LOGGING > 0)
+ {
+ /* *INDENT-OFF* */
+ ELOG_TYPE_DECLARE (e) =
+ {
.format = "catchup-bind: %s to %d global index %d stream %d",
.format_args = "T4i4i4i4",
};
- struct { u32 c[4]; } * ed;
- ed = ELOG_DATA (mcm->elog_main, e);
- ed->c[0] = elog_id_for_msg_name (mcm, name);
- ed->c[1] = si;
- ed->c[2] = gi;
- ed->c[3] = s->index;
- }
-
- vec_free (name);
-
- sm->global_index = gi;
- if (gi != ~0)
+ /* *INDENT-ON* */
+
+ struct
{
- vec_validate_init_empty (s->stream_msg_index_by_global_index,
- gi, ~0);
- s->stream_msg_index_by_global_index[gi] = si;
- }
- }
+ u32 c[4];
+ } *ed;
+ ed = ELOG_DATA (mcm->elog_main, e);
+ ed->c[0] = elog_id_for_msg_name (mcm, name);
+ ed->c[1] = si;
+ ed->c[2] = gi;
+ ed->c[3] = s->index;
+ }
+
+ vec_free (name);
+
+ sm->global_index = gi;
+ if (gi != ~0)
+ {
+ vec_validate_init_empty (s->stream_msg_index_by_global_index,
+ gi, ~0);
+ s->stream_msg_index_by_global_index[gi] = si;
+ }
+ }
}
}
-void mc_main_init (mc_main_t * mcm, char * tag)
+void
+mc_main_init (mc_main_t * mcm, char *tag)
{
- vlib_main_t * vm = vlib_get_main();
+ vlib_main_t *vm = vlib_get_main ();
mcm->vlib_main = vm;
mcm->elog_main = &vm->elog_main;
@@ -2194,7 +2425,7 @@ void mc_main_init (mc_main_t * mcm, char * tag)
mcm->relay_state = MC_RELAY_STATE_NEGOTIATE;
mcm->stream_index_by_name
- = hash_create_string (/* elts */ 0, /* value size */ sizeof (uword));
+ = hash_create_string ( /* elts */ 0, /* value size */ sizeof (uword));
{
vlib_node_registration_t r;
@@ -2229,16 +2460,19 @@ void mc_main_init (mc_main_t * mcm, char * tag)
}
if (MC_EVENT_LOGGING > 0)
- mhash_init (&mcm->elog_id_by_peer_id, sizeof (uword), sizeof (mc_peer_id_t));
+ mhash_init (&mcm->elog_id_by_peer_id, sizeof (uword),
+ sizeof (mc_peer_id_t));
- mhash_init (&mcm->mastership_peer_index_by_id, sizeof (uword), sizeof (mc_peer_id_t));
+ mhash_init (&mcm->mastership_peer_index_by_id, sizeof (uword),
+ sizeof (mc_peer_id_t));
mc_serialize_init (mcm);
}
-static u8 * format_mc_relay_state (u8 * s, va_list * args)
+static u8 *
+format_mc_relay_state (u8 * s, va_list * args)
{
mc_relay_state_t state = va_arg (*args, mc_relay_state_t);
- char * t = 0;
+ char *t = 0;
switch (state)
{
case MC_RELAY_STATE_NEGOTIATE:
@@ -2257,10 +2491,11 @@ static u8 * format_mc_relay_state (u8 * s, va_list * args)
return format (s, "%s", t);
}
-static u8 * format_mc_stream_state (u8 * s, va_list * args)
+static u8 *
+format_mc_stream_state (u8 * s, va_list * args)
{
mc_stream_state_t state = va_arg (*args, mc_stream_state_t);
- char * t = 0;
+ char *t = 0;
switch (state)
{
#define _(f) case MC_STREAM_STATE_##f: t = #f; break;
@@ -2274,90 +2509,101 @@ static u8 * format_mc_stream_state (u8 * s, va_list * args)
}
static int
-mc_peer_comp (void * a1, void * a2)
+mc_peer_comp (void *a1, void *a2)
{
- mc_stream_peer_t * p1 = a1;
- mc_stream_peer_t * p2 = a2;
+ mc_stream_peer_t *p1 = a1;
+ mc_stream_peer_t *p2 = a2;
return mc_peer_id_compare (p1->id, p2->id);
}
-u8 * format_mc_main (u8 * s, va_list * args)
+u8 *
+format_mc_main (u8 * s, va_list * args)
{
- mc_main_t * mcm = va_arg (*args, mc_main_t *);
- mc_stream_t * t;
- mc_stream_peer_t * p, * ps;
+ mc_main_t *mcm = va_arg (*args, mc_main_t *);
+ mc_stream_t *t;
+ mc_stream_peer_t *p, *ps;
uword indent = format_get_indent (s);
- s = format (s, "MC state %U, %d streams joined, global sequence 0x%x",
- format_mc_relay_state, mcm->relay_state,
- vec_len (mcm->stream_vector),
- mcm->relay_global_sequence);
+ s = format (s, "MC state %U, %d streams joined, global sequence 0x%x",
+ format_mc_relay_state, mcm->relay_state,
+ vec_len (mcm->stream_vector), mcm->relay_global_sequence);
{
- mc_mastership_peer_t * mp;
+ mc_mastership_peer_t *mp;
f64 now = vlib_time_now (mcm->vlib_main);
s = format (s, "\n%UMost recent mastership peers:",
format_white_space, indent + 2);
vec_foreach (mp, mcm->mastership_peers)
- {
- s = format (s, "\n%U%-30U%.4e",
- format_white_space, indent + 4,
- mcm->transport.format_peer_id, mp->peer_id,
- now - mp->time_last_master_assert_received);
- }
- }
-
- vec_foreach (t, mcm->stream_vector)
{
- s = format (s, "\n%Ustream `%s' index %d",
- format_white_space, indent + 2,
- t->config.name, t->index);
-
- s = format (s, "\n%Ustate %U",
- format_white_space, indent + 4,
- format_mc_stream_state, t->state);
-
- s = format (s, "\n%Uretries: interval %.0f sec, limit %d, pool elts %d, %Ld sent",
- format_white_space, indent + 4, t->config.retry_interval,
- t->config.retry_limit,
- pool_elts (t->retry_pool),
- t->stats.n_retries - t->stats_last_clear.n_retries);
-
- s = format (s, "\n%U%Ld/%Ld user requests sent/received",
+ s = format (s, "\n%U%-30U%.4e",
format_white_space, indent + 4,
- t->user_requests_sent, t->user_requests_received);
-
- s = format (s, "\n%U%d peers, local/global sequence 0x%x/0x%x",
- format_white_space, indent + 4,
- pool_elts (t->peers),
- t->our_local_sequence,
- t->last_global_sequence_processed);
-
- ps = 0;
- pool_foreach (p, t->peers,
- ({
- if (clib_bitmap_get (t->all_peer_bitmap, p - t->peers))
- vec_add1 (ps, p[0]);
- }));
- vec_sort_with_function (ps, mc_peer_comp);
- s = format (s, "\n%U%=30s%10s%16s%16s",
- format_white_space, indent + 6,
- "Peer", "Last seq", "Retries", "Future");
-
- vec_foreach (p, ps)
- {
- s = format (s, "\n%U%-30U0x%08x%16Ld%16Ld%s",
- format_white_space, indent + 6,
- mcm->transport.format_peer_id, p->id.as_u64,
- p->last_sequence_received,
- p->stats.n_msgs_from_past - p->stats_last_clear.n_msgs_from_past,
- p->stats.n_msgs_from_future - p->stats_last_clear.n_msgs_from_future,
- (mcm->transport.our_ack_peer_id.as_u64 == p->id.as_u64
- ? " (self)" : ""));
- }
- vec_free (ps);
+ mcm->transport.format_peer_id, mp->peer_id,
+ now - mp->time_last_master_assert_received);
}
+ }
+
+ vec_foreach (t, mcm->stream_vector)
+ {
+ s = format (s, "\n%Ustream `%s' index %d",
+ format_white_space, indent + 2, t->config.name, t->index);
+
+ s = format (s, "\n%Ustate %U",
+ format_white_space, indent + 4,
+ format_mc_stream_state, t->state);
+
+ s =
+ format (s,
+ "\n%Uretries: interval %.0f sec, limit %d, pool elts %d, %Ld sent",
+ format_white_space, indent + 4, t->config.retry_interval,
+ t->config.retry_limit, pool_elts (t->retry_pool),
+ t->stats.n_retries - t->stats_last_clear.n_retries);
+
+ s = format (s, "\n%U%Ld/%Ld user requests sent/received",
+ format_white_space, indent + 4,
+ t->user_requests_sent, t->user_requests_received);
+
+ s = format (s, "\n%U%d peers, local/global sequence 0x%x/0x%x",
+ format_white_space, indent + 4,
+ pool_elts (t->peers),
+ t->our_local_sequence, t->last_global_sequence_processed);
+
+ ps = 0;
+ /* *INDENT-OFF* */
+ pool_foreach (p, t->peers,
+ ({
+ if (clib_bitmap_get (t->all_peer_bitmap, p - t->peers))
+ vec_add1 (ps, p[0]);
+ }));
+ /* *INDENT-ON* */
+ vec_sort_with_function (ps, mc_peer_comp);
+ s = format (s, "\n%U%=30s%10s%16s%16s",
+ format_white_space, indent + 6,
+ "Peer", "Last seq", "Retries", "Future");
+
+ vec_foreach (p, ps)
+ {
+ s = format (s, "\n%U%-30U0x%08x%16Ld%16Ld%s",
+ format_white_space, indent + 6,
+ mcm->transport.format_peer_id, p->id.as_u64,
+ p->last_sequence_received,
+ p->stats.n_msgs_from_past -
+ p->stats_last_clear.n_msgs_from_past,
+ p->stats.n_msgs_from_future -
+ p->stats_last_clear.n_msgs_from_future,
+ (mcm->transport.our_ack_peer_id.as_u64 ==
+ p->id.as_u64 ? " (self)" : ""));
+ }
+ vec_free (ps);
+ }
return s;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/mc.h b/vlib/vlib/mc.h
index 55dce2822c6..8614050c241 100644
--- a/vlib/vlib/mc.h
+++ b/vlib/vlib/mc.h
@@ -29,20 +29,23 @@
always_inline uword
mc_need_byte_swap (void)
-{ return CLIB_ARCH_IS_LITTLE_ENDIAN; }
+{
+ return CLIB_ARCH_IS_LITTLE_ENDIAN;
+}
-/*
- * Used to uniquely identify hosts.
- * For IP4 this would be ip4_address plus tcp/udp port.
+/*
+ * Used to uniquely identify hosts.
+ * For IP4 this would be ip4_address plus tcp/udp port.
*/
-typedef union {
+typedef union
+{
u8 as_u8[8];
u64 as_u64;
} mc_peer_id_t;
always_inline mc_peer_id_t
mc_byte_swap_peer_id (mc_peer_id_t i)
-{
+{
/* Peer id is already in network byte order. */
return i;
}
@@ -56,13 +59,12 @@ mc_peer_id_compare (mc_peer_id_t a, mc_peer_id_t b)
/* Assert mastership. Lowest peer_id amount all peers wins mastership.
Only sent/received over mastership channel (MC_TRANSPORT_MASTERSHIP).
So, we don't need a message opcode. */
-typedef CLIB_PACKED (struct {
- /* Peer id asserting mastership. */
- mc_peer_id_t peer_id;
-
- /* Global sequence number asserted. */
- u32 global_sequence;
-}) mc_msg_master_assert_t;
+typedef CLIB_PACKED (struct
+ {
+ /* Peer id asserting mastership. */
+ mc_peer_id_t peer_id;
+ /* Global sequence number asserted. */
+ u32 global_sequence;}) mc_msg_master_assert_t;
always_inline void
mc_byte_swap_msg_master_assert (mc_msg_master_assert_t * r)
@@ -83,24 +85,22 @@ mc_byte_swap_msg_master_assert (mc_msg_master_assert_t * r)
_ (catchup_request) \
_ (catchup_reply)
-typedef enum {
+typedef enum
+{
#define _(f) MC_MSG_TYPE_##f,
foreach_mc_msg_type
#undef _
} mc_relay_msg_type_t;
/* Request to join a given stream. Multicast over MC_TRANSPORT_JOIN. */
-typedef CLIB_PACKED (struct {
- mc_peer_id_t peer_id;
-
- mc_relay_msg_type_t type : 32; /* MC_MSG_TYPE_join_or_leave_request */
-
- /* Stream to join or leave. */
- u32 stream_index;
-
- /* join = 1, leave = 0 */
- u8 is_join;
-}) mc_msg_join_or_leave_request_t;
+typedef CLIB_PACKED (struct
+ {
+mc_peer_id_t peer_id; mc_relay_msg_type_t type:32;
+ /* MC_MSG_TYPE_join_or_leave_request */
+ /* Stream to join or leave. */
+ u32 stream_index;
+ /* join = 1, leave = 0 */
+ u8 is_join;}) mc_msg_join_or_leave_request_t;
always_inline void
mc_byte_swap_msg_join_or_leave_request (mc_msg_join_or_leave_request_t * r)
@@ -114,16 +114,13 @@ mc_byte_swap_msg_join_or_leave_request (mc_msg_join_or_leave_request_t * r)
}
/* Join reply. Multicast over MC_TRANSPORT_JOIN. */
-typedef CLIB_PACKED (struct {
- mc_peer_id_t peer_id;
-
- mc_relay_msg_type_t type : 32; /* MC_MSG_TYPE_join_reply */
-
- u32 stream_index;
-
- /* Peer ID to contact to catchup with this stream. */
- mc_peer_id_t catchup_peer_id;
-}) mc_msg_join_reply_t;
+typedef CLIB_PACKED (struct
+ {
+mc_peer_id_t peer_id; mc_relay_msg_type_t type:32;
+ /* MC_MSG_TYPE_join_reply */
+ u32 stream_index;
+ /* Peer ID to contact to catchup with this stream. */
+ mc_peer_id_t catchup_peer_id;}) mc_msg_join_reply_t;
always_inline void
mc_byte_swap_msg_join_reply (mc_msg_join_reply_t * r)
@@ -139,23 +136,17 @@ mc_byte_swap_msg_join_reply (mc_msg_join_reply_t * r)
/* Generic (application) request. Multicast over MC_TRANSPORT_USER_REQUEST_TO_RELAY and then
relayed by relay master after filling in global sequence number. */
-typedef CLIB_PACKED (struct {
- mc_peer_id_t peer_id;
-
- u32 stream_index;
-
- /* Global sequence number as filled in by relay master. */
- u32 global_sequence;
-
- /* Local sequence number as filled in by peer sending message. */
- u32 local_sequence;
-
- /* Size of request data. */
- u32 n_data_bytes;
-
- /* Opaque request data. */
- u8 data[0];
-}) mc_msg_user_request_t;
+typedef CLIB_PACKED (struct
+ {
+ mc_peer_id_t peer_id; u32 stream_index;
+ /* Global sequence number as filled in by relay master. */
+ u32 global_sequence;
+ /* Local sequence number as filled in by peer sending message. */
+ u32 local_sequence;
+ /* Size of request data. */
+ u32 n_data_bytes;
+ /* Opaque request data. */
+ u8 data[0];}) mc_msg_user_request_t;
always_inline void
mc_byte_swap_msg_user_request (mc_msg_user_request_t * r)
@@ -171,13 +162,13 @@ mc_byte_swap_msg_user_request (mc_msg_user_request_t * r)
}
/* Sent unicast over ACK channel. */
-typedef CLIB_PACKED (struct {
- mc_peer_id_t peer_id;
- u32 global_sequence;
- u32 stream_index;
- u32 local_sequence;
- i32 seq_cmp_result;
-}) mc_msg_user_ack_t;
+typedef CLIB_PACKED (struct
+ {
+ mc_peer_id_t peer_id;
+ u32 global_sequence;
+ u32 stream_index;
+ u32 local_sequence;
+ i32 seq_cmp_result;}) mc_msg_user_ack_t;
always_inline void
mc_byte_swap_msg_user_ack (mc_msg_user_ack_t * r)
@@ -193,10 +184,10 @@ mc_byte_swap_msg_user_ack (mc_msg_user_ack_t * r)
}
/* Sent/received unicast over catchup channel (e.g. using TCP). */
-typedef CLIB_PACKED (struct {
- mc_peer_id_t peer_id;
- u32 stream_index;
-}) mc_msg_catchup_request_t;
+typedef CLIB_PACKED (struct
+ {
+ mc_peer_id_t peer_id;
+ u32 stream_index;}) mc_msg_catchup_request_t;
always_inline void
mc_byte_swap_msg_catchup_request (mc_msg_catchup_request_t * r)
@@ -209,20 +200,15 @@ mc_byte_swap_msg_catchup_request (mc_msg_catchup_request_t * r)
}
/* Sent/received unicast over catchup channel. */
-typedef CLIB_PACKED (struct {
- mc_peer_id_t peer_id;
-
- u32 stream_index;
-
- /* Last global sequence number included in catchup data. */
- u32 last_global_sequence_included;
-
- /* Size of catchup data. */
- u32 n_data_bytes;
-
- /* Catchup data. */
- u8 data[0];
-}) mc_msg_catchup_reply_t;
+typedef CLIB_PACKED (struct
+ {
+ mc_peer_id_t peer_id; u32 stream_index;
+ /* Last global sequence number included in catchup data. */
+ u32 last_global_sequence_included;
+ /* Size of catchup data. */
+ u32 n_data_bytes;
+ /* Catchup data. */
+ u8 data[0];}) mc_msg_catchup_reply_t;
always_inline void
mc_byte_swap_msg_catchup_reply (mc_msg_catchup_reply_t * r)
@@ -231,18 +217,20 @@ mc_byte_swap_msg_catchup_reply (mc_msg_catchup_reply_t * r)
{
r->peer_id = mc_byte_swap_peer_id (r->peer_id);
r->stream_index = clib_byte_swap_u32 (r->stream_index);
- r->last_global_sequence_included = clib_byte_swap_u32 (r->last_global_sequence_included);
+ r->last_global_sequence_included =
+ clib_byte_swap_u32 (r->last_global_sequence_included);
r->n_data_bytes = clib_byte_swap_u32 (r->n_data_bytes);
}
}
-typedef struct _mc_serialize_msg {
+typedef struct _mc_serialize_msg
+{
/* Name for this type. */
- char * name;
+ char *name;
/* Functions to serialize/unserialize data. */
- serialize_function_t * serialize;
- serialize_function_t * unserialize;
+ serialize_function_t *serialize;
+ serialize_function_t *unserialize;
/* Maximum message size in bytes when serialized.
If zero then this will be set to the largest sent message. */
@@ -255,10 +243,11 @@ typedef struct _mc_serialize_msg {
u32 global_index;
/* Registration list */
- struct _mc_serialize_msg * next_registration;
+ struct _mc_serialize_msg *next_registration;
} mc_serialize_msg_t;
-typedef struct {
+typedef struct
+{
/* Index into global message vector. */
u32 global_index;
} mc_serialize_stream_msg_t;
@@ -273,9 +262,10 @@ static void __mc_serialize_msg_registration_##x (void) \
x.next_registration = vm->mc_msg_registrations; \
vm->mc_msg_registrations = &x; \
} \
-__VA_ARGS__ mc_serialize_msg_t x
+__VA_ARGS__ mc_serialize_msg_t x
-typedef enum {
+typedef enum
+{
MC_TRANSPORT_MASTERSHIP,
MC_TRANSPORT_JOIN,
MC_TRANSPORT_USER_REQUEST_TO_RELAY,
@@ -283,18 +273,23 @@ typedef enum {
MC_N_TRANSPORT_TYPE,
} mc_transport_type_t;
-typedef struct {
- clib_error_t * (* tx_buffer) (void * opaque, mc_transport_type_t type, u32 buffer_index);
+typedef struct
+{
+ clib_error_t *(*tx_buffer) (void *opaque, mc_transport_type_t type,
+ u32 buffer_index);
- clib_error_t * (* tx_ack) (void * opaque, mc_peer_id_t peer_id, u32 buffer_index);
+ clib_error_t *(*tx_ack) (void *opaque, mc_peer_id_t peer_id,
+ u32 buffer_index);
/* Returns catchup opaque. */
- uword (* catchup_request_fun) (void * opaque, u32 stream_index, mc_peer_id_t catchup_peer_id);
+ uword (*catchup_request_fun) (void *opaque, u32 stream_index,
+ mc_peer_id_t catchup_peer_id);
- void (* catchup_send_fun) (void * opaque, uword catchup_opaque, u8 * data_vector);
+ void (*catchup_send_fun) (void *opaque, uword catchup_opaque,
+ u8 * data_vector);
/* Opaque passed to callbacks. */
- void * opaque;
+ void *opaque;
mc_peer_id_t our_ack_peer_id;
mc_peer_id_t our_catchup_peer_id;
@@ -303,17 +298,19 @@ typedef struct {
For IP this is interface MTU less IP + UDP header size. */
u32 max_packet_size;
- format_function_t * format_peer_id;
+ format_function_t *format_peer_id;
} mc_transport_t;
-typedef struct {
+typedef struct
+{
/* Count of messages received from this peer from the past/future
(with seq_cmp != 0). */
u64 n_msgs_from_past;
u64 n_msgs_from_future;
} mc_stream_peer_stats_t;
-typedef struct {
+typedef struct
+{
/* ID of this peer. */
mc_peer_id_t id;
@@ -323,7 +320,8 @@ typedef struct {
mc_stream_peer_stats_t stats, stats_last_clear;
} mc_stream_peer_t;
-typedef struct {
+typedef struct
+{
u32 buffer_index;
/* Cached copy of local sequence number from buffer. */
@@ -336,13 +334,14 @@ typedef struct {
u32 prev_index, next_index;
/* Bitmap of all peers which have acked this msg */
- uword * unacked_by_peer_bitmap;
+ uword *unacked_by_peer_bitmap;
/* Message send or resend time */
f64 sent_at;
} mc_retry_t;
-typedef struct {
+typedef struct
+{
/* Number of retries sent for this stream. */
u64 n_retries;
} mc_stream_stats_t;
@@ -350,9 +349,10 @@ typedef struct {
struct mc_main_t;
struct mc_stream_t;
-typedef struct {
+typedef struct
+{
/* Stream name. */
- char * name;
+ char *name;
/* Number of outstanding messages. */
u32 window_size;
@@ -364,31 +364,27 @@ typedef struct {
u32 retry_limit;
/* User rx buffer callback */
- void (* rx_buffer) (struct mc_main_t * mc_main,
- struct mc_stream_t * stream,
- mc_peer_id_t peer_id,
- u32 buffer_index);
+ void (*rx_buffer) (struct mc_main_t * mc_main,
+ struct mc_stream_t * stream,
+ mc_peer_id_t peer_id, u32 buffer_index);
/* User callback to create a snapshot */
- u8 * (* catchup_snapshot) (struct mc_main_t *mc_main,
- u8 * snapshot_vector,
- u32 last_global_sequence_included);
+ u8 *(*catchup_snapshot) (struct mc_main_t * mc_main,
+ u8 * snapshot_vector,
+ u32 last_global_sequence_included);
/* User callback to replay a snapshot */
- void (* catchup) (struct mc_main_t *mc_main,
- u8 * snapshot_data,
- u32 n_snapshot_data_bytes);
+ void (*catchup) (struct mc_main_t * mc_main,
+ u8 * snapshot_data, u32 n_snapshot_data_bytes);
/* Callback to save a snapshot for offline replay */
- void (* save_snapshot) (struct mc_main_t *mc_main,
- u32 is_catchup,
- u8 * snapshot_data,
- u32 n_snapshot_data_bytes);
+ void (*save_snapshot) (struct mc_main_t * mc_main,
+ u32 is_catchup,
+ u8 * snapshot_data, u32 n_snapshot_data_bytes);
/* Called when a peer dies */
- void (* peer_died) (struct mc_main_t * mc_main,
- struct mc_stream_t * stream,
- mc_peer_id_t peer_id);
+ void (*peer_died) (struct mc_main_t * mc_main,
+ struct mc_stream_t * stream, mc_peer_id_t peer_id);
} mc_stream_config_t;
#define foreach_mc_stream_state \
@@ -398,13 +394,15 @@ typedef struct {
_ (catchup) \
_ (ready)
-typedef enum {
+typedef enum
+{
#define _(f) MC_STREAM_STATE_##f,
foreach_mc_stream_state
#undef _
} mc_stream_state_t;
-typedef struct mc_stream_t {
+typedef struct mc_stream_t
+{
mc_stream_config_t config;
mc_stream_state_t state;
@@ -415,33 +413,33 @@ typedef struct mc_stream_t {
/* Stream index 0 is always for MC internal use. */
#define MC_STREAM_INDEX_INTERNAL 0
- mc_retry_t * retry_pool;
+ mc_retry_t *retry_pool;
/* Head and tail index of retry pool. */
u32 retry_head_index, retry_tail_index;
- /*
+ /*
* Country club for recently retired messages
* If the set of peers is expanding and a new peer
* misses a message, we can easily retire the FIFO
* element before we even know about the new peer
*/
- mc_retry_t * retired_fifo;
+ mc_retry_t *retired_fifo;
/* Hash mapping local sequence to retry pool index. */
- uword * retry_index_by_local_sequence;
+ uword *retry_index_by_local_sequence;
/* catch-up fifo of VLIB buffer indices.
start recording when catching up. */
- u32 * catchup_fifo;
+ u32 *catchup_fifo;
mc_stream_stats_t stats, stats_last_clear;
/* Peer pool. */
- mc_stream_peer_t * peers;
+ mc_stream_peer_t *peers;
/* Bitmap with ones for all peers in peer pool. */
- uword * all_peer_bitmap;
+ uword *all_peer_bitmap;
/* Map of 64 bit id to index in stream pool. */
mhash_t peer_index_by_id;
@@ -449,14 +447,14 @@ typedef struct mc_stream_t {
/* Timeout, in case we're alone in the world */
f64 join_timeout;
- vlib_one_time_waiting_process_t * procs_waiting_for_join_done;
+ vlib_one_time_waiting_process_t *procs_waiting_for_join_done;
- vlib_one_time_waiting_process_t * procs_waiting_for_open_window;
+ vlib_one_time_waiting_process_t *procs_waiting_for_open_window;
/* Next sequence number to use */
u32 our_local_sequence;
- /*
+ /*
* Last global sequence we processed.
* When supplying catchup data, we need to tell
* the client precisely where to start replaying
@@ -464,13 +462,13 @@ typedef struct mc_stream_t {
u32 last_global_sequence_processed;
/* Vector of unique messages we've sent on this stream. */
- mc_serialize_stream_msg_t * stream_msgs;
+ mc_serialize_stream_msg_t *stream_msgs;
/* Vector global message index into per stream message index. */
- u32 * stream_msg_index_by_global_index;
+ u32 *stream_msg_index_by_global_index;
/* Hashed by message name. */
- uword * stream_msg_index_by_name;
+ uword *stream_msg_index_by_name;
u64 user_requests_sent;
u64 user_requests_received;
@@ -495,30 +493,35 @@ mc_stream_init (mc_stream_t * s)
s->retry_head_index = s->retry_tail_index = ~0;
}
-typedef struct {
+typedef struct
+{
u32 stream_index;
u32 catchup_opaque;
u8 *catchup_snapshot;
} mc_catchup_process_arg_t;
-typedef enum {
+typedef enum
+{
MC_RELAY_STATE_NEGOTIATE,
MC_RELAY_STATE_MASTER,
MC_RELAY_STATE_SLAVE,
} mc_relay_state_t;
-typedef struct {
+typedef struct
+{
mc_peer_id_t peer_id;
f64 time_last_master_assert_received;
} mc_mastership_peer_t;
-typedef struct {
+typedef struct
+{
u32 stream_index;
u32 buffer_index;
} mc_stream_and_buffer_t;
-typedef struct mc_main_t {
+typedef struct mc_main_t
+{
mc_relay_state_t relay_state;
/* Mastership */
@@ -526,30 +529,30 @@ typedef struct mc_main_t {
u64 relay_master_peer_id;
- mc_mastership_peer_t * mastership_peers;
+ mc_mastership_peer_t *mastership_peers;
/* Map of 64 bit id to index in stream pool. */
mhash_t mastership_peer_index_by_id;
/* The transport we're using. */
mc_transport_t transport;
-
+
/* Last-used global sequence number. */
u32 relay_global_sequence;
/* Vector of streams. */
- mc_stream_t * stream_vector;
+ mc_stream_t *stream_vector;
/* Hash table mapping stream name to pool index. */
- uword * stream_index_by_name;
+ uword *stream_index_by_name;
- uword * procs_waiting_for_stream_name_by_name;
+ uword *procs_waiting_for_stream_name_by_name;
- vlib_one_time_waiting_process_t ** procs_waiting_for_stream_name_pool;
+ vlib_one_time_waiting_process_t **procs_waiting_for_stream_name_pool;
int joins_in_progress;
- mc_catchup_process_arg_t * catchup_process_args;
+ mc_catchup_process_arg_t *catchup_process_args;
/* Node indices for mastership, join ager,
retry and catchup processes. */
@@ -560,10 +563,10 @@ typedef struct mc_main_t {
u32 unserialize_process;
/* Global vector of messages. */
- mc_serialize_msg_t ** global_msgs;
+ mc_serialize_msg_t **global_msgs;
/* Hash table mapping message name to index. */
- uword * global_msg_index_by_name;
+ uword *global_msg_index_by_name;
/* Shared serialize/unserialize main. */
serialize_main_t serialize_mains[VLIB_N_RX_TX];
@@ -571,8 +574,8 @@ typedef struct mc_main_t {
vlib_serialize_buffer_main_t serialize_buffer_mains[VLIB_N_RX_TX];
/* Convenience variables */
- struct vlib_main_t * vlib_main;
- elog_main_t * elog_main;
+ struct vlib_main_t *vlib_main;
+ elog_main_t *elog_main;
/* Maps 64 bit peer id to elog string table offset for this formatted peer id. */
mhash_t elog_id_by_peer_id;
@@ -580,13 +583,13 @@ typedef struct mc_main_t {
uword *elog_id_by_msg_name;
/* For mc_unserialize. */
- mc_stream_and_buffer_t * mc_unserialize_stream_and_buffers;
+ mc_stream_and_buffer_t *mc_unserialize_stream_and_buffers;
} mc_main_t;
always_inline mc_stream_t *
-mc_stream_by_name (mc_main_t * m, char * name)
+mc_stream_by_name (mc_main_t * m, char *name)
{
- uword * p = hash_get (m->stream_index_by_name, name);
+ uword *p = hash_get (m->stream_index_by_name, name);
return p ? vec_elt_at_index (m->stream_vector, p[0]) : 0;
}
@@ -599,51 +602,49 @@ mc_stream_by_index (mc_main_t * m, u32 i)
always_inline void
mc_clear_stream_stats (mc_main_t * m)
{
- mc_stream_t * s;
- mc_stream_peer_t * p;
+ mc_stream_t *s;
+ mc_stream_peer_t *p;
vec_foreach (s, m->stream_vector)
- {
- s->stats_last_clear = s->stats;
+ {
+ s->stats_last_clear = s->stats;
+ /* *INDENT-OFF* */
pool_foreach (p, s->peers, ({
p->stats_last_clear = p->stats;
}));
- }
+ /* *INDENT-ON* */
+ }
}
/* Declare all message handlers. */
#define _(f) void mc_msg_##f##_handler (mc_main_t * mcm, mc_msg_##f##_t * msg, u32 buffer_index);
foreach_mc_msg_type
#undef _
-
-u32 mc_stream_join (mc_main_t * mcm, mc_stream_config_t *);
+ u32 mc_stream_join (mc_main_t * mcm, mc_stream_config_t *);
void mc_stream_leave (mc_main_t * mcm, u32 stream_index);
-void mc_wait_for_stream_ready (mc_main_t * m, char * stream_name);
+void mc_wait_for_stream_ready (mc_main_t * m, char *stream_name);
u32 mc_stream_send (mc_main_t * mcm, u32 stream_index, u32 buffer_index);
-void mc_main_init (mc_main_t * mcm, char * tag);
+void mc_main_init (mc_main_t * mcm, char *tag);
void mc_enable_disable_mastership (mc_main_t * mcm, int we_can_be_master);
-void * mc_get_vlib_buffer (struct vlib_main_t * vm, u32 n_bytes, u32 * bi_return);
+void *mc_get_vlib_buffer (struct vlib_main_t *vm, u32 n_bytes,
+ u32 * bi_return);
format_function_t format_mc_main;
-clib_error_t *
-mc_serialize_internal (mc_main_t * mc,
- u32 stream_index,
- u32 multiple_messages_per_vlib_buffer,
- mc_serialize_msg_t * msg,
- ...);
+clib_error_t *mc_serialize_internal (mc_main_t * mc,
+ u32 stream_index,
+ u32 multiple_messages_per_vlib_buffer,
+ mc_serialize_msg_t * msg, ...);
-clib_error_t *
-mc_serialize_va (mc_main_t * mc,
- u32 stream_index,
- u32 multiple_messages_per_vlib_buffer,
- mc_serialize_msg_t * msg,
- va_list * va);
+clib_error_t *mc_serialize_va (mc_main_t * mc,
+ u32 stream_index,
+ u32 multiple_messages_per_vlib_buffer,
+ mc_serialize_msg_t * msg, va_list * va);
#define mc_serialize_stream(mc,si,msg,args...) \
mc_serialize_internal((mc),(si),(0),(msg),(msg)->serialize,args)
@@ -656,19 +657,32 @@ mc_serialize_va (mc_main_t * mc,
void mc_unserialize (mc_main_t * mcm, mc_stream_t * s, u32 buffer_index);
uword mc_unserialize_message (mc_main_t * mcm, mc_stream_t * s,
- serialize_main_t * m);
+ serialize_main_t * m);
serialize_function_t serialize_mc_main, unserialize_mc_main;
always_inline uword
mc_max_message_size_in_bytes (mc_main_t * mcm)
-{ return mcm->transport.max_packet_size - sizeof (mc_msg_user_request_t); }
+{
+ return mcm->transport.max_packet_size - sizeof (mc_msg_user_request_t);
+}
always_inline word
mc_serialize_n_bytes_left (mc_main_t * mcm, serialize_main_t * m)
-{ return mc_max_message_size_in_bytes (mcm) - serialize_vlib_buffer_n_bytes (m); }
+{
+ return mc_max_message_size_in_bytes (mcm) -
+ serialize_vlib_buffer_n_bytes (m);
+}
void unserialize_mc_stream (serialize_main_t * m, va_list * va);
void mc_stream_join_process_hold (void);
#endif /* included_vlib_mc_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/node.c b/vlib/vlib/node.c
index 5d250d00a6f..838f34199bd 100644
--- a/vlib/vlib/node.c
+++ b/vlib/vlib/node.c
@@ -41,12 +41,13 @@
#include <vlib/threads.h>
/* Query node given name. */
-vlib_node_t * vlib_get_node_by_name (vlib_main_t * vm, u8 * name)
+vlib_node_t *
+vlib_get_node_by_name (vlib_main_t * vm, u8 * name)
{
- vlib_node_main_t * nm = &vm->node_main;
- uword * p;
- u8 * key = name;
- if (! clib_mem_is_heap_object (key))
+ vlib_node_main_t *nm = &vm->node_main;
+ uword *p;
+ u8 *key = name;
+ if (!clib_mem_is_heap_object (key))
key = format (0, "%s", key);
p = hash_get (nm->node_by_name, key);
if (key != name)
@@ -54,10 +55,11 @@ vlib_node_t * vlib_get_node_by_name (vlib_main_t * vm, u8 * name)
return p ? vec_elt (nm->nodes, p[0]) : 0;
}
-static void node_set_elog_name (vlib_main_t * vm, uword node_index)
+static void
+node_set_elog_name (vlib_main_t * vm, uword node_index)
{
- vlib_node_t * n = vlib_get_node (vm, node_index);
- elog_event_type_t * t;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ elog_event_type_t *t;
t = vec_elt_at_index (vm->node_call_elog_event_types, node_index);
vec_free (t->format);
@@ -67,14 +69,15 @@ static void node_set_elog_name (vlib_main_t * vm, uword node_index)
vec_free (t->format);
t->format = (char *) format (0, "%v-return: %%d%c", n->name, 0);
- n->name_elog_string = elog_string (&vm->elog_main, "%v%c", n->name,0);
+ n->name_elog_string = elog_string (&vm->elog_main, "%v%c", n->name, 0);
}
-void vlib_node_rename (vlib_main_t * vm, u32 node_index, char * fmt, ...)
+void
+vlib_node_rename (vlib_main_t * vm, u32 node_index, char *fmt, ...)
{
va_list va;
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
va_start (va, fmt);
hash_unset (nm->node_by_name, n->name);
@@ -87,20 +90,18 @@ void vlib_node_rename (vlib_main_t * vm, u32 node_index, char * fmt, ...)
}
static void
-vlib_node_runtime_update (vlib_main_t * vm,
- u32 node_index,
- u32 next_index)
+vlib_node_runtime_update (vlib_main_t * vm, u32 node_index, u32 next_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_runtime_t * r, * s;
- vlib_node_t * node, * next_node;
- vlib_next_frame_t * nf;
- vlib_pending_frame_t * pf;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_runtime_t *r, *s;
+ vlib_node_t *node, *next_node;
+ vlib_next_frame_t *nf;
+ vlib_pending_frame_t *pf;
i32 i, j, n_insert;
- ASSERT(os_get_cpu_number() == 0);
+ ASSERT (os_get_cpu_number () == 0);
- vlib_worker_thread_barrier_sync(vm);
+ vlib_worker_thread_barrier_sync (vm);
node = vec_elt (nm->nodes, node_index);
r = vlib_node_get_runtime (vm, node_index);
@@ -119,22 +120,23 @@ vlib_node_runtime_update (vlib_main_t * vm,
for (j = 0; j < vec_len (nm->nodes); j++)
{
s = vlib_node_get_runtime (vm, j);
- if (j != node_index
- && s->next_frame_index >= i)
+ if (j != node_index && s->next_frame_index >= i)
s->next_frame_index += n_insert;
}
/* Pending frames may need to be relocated also. */
vec_foreach (pf, nm->pending_frames)
- {
- if (pf->next_frame_index != VLIB_PENDING_FRAME_NO_NEXT_FRAME
- && pf->next_frame_index >= i)
- pf->next_frame_index += n_insert;
- }
+ {
+ if (pf->next_frame_index != VLIB_PENDING_FRAME_NO_NEXT_FRAME
+ && pf->next_frame_index >= i)
+ pf->next_frame_index += n_insert;
+ }
+ /* *INDENT-OFF* */
pool_foreach (pf, nm->suspended_process_frames, ({
if (pf->next_frame_index != ~0 && pf->next_frame_index >= i)
pf->next_frame_index += n_insert;
}));
+ /* *INDENT-ON* */
r->n_next_nodes = vec_len (node->next_nodes);
}
@@ -144,27 +146,26 @@ vlib_node_runtime_update (vlib_main_t * vm,
nf = nm->next_frames + r->next_frame_index + next_index;
nf->node_runtime_index = next_node->runtime_index;
- vlib_worker_thread_node_runtime_update();
+ vlib_worker_thread_node_runtime_update ();
- vlib_worker_thread_barrier_release(vm);
+ vlib_worker_thread_barrier_release (vm);
}
/* Add next node to given node in given slot. */
uword
vlib_node_add_next_with_slot (vlib_main_t * vm,
uword node_index,
- uword next_node_index,
- uword slot)
+ uword next_node_index, uword slot)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * node, * next;
- uword * p;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *node, *next;
+ uword *p;
node = vec_elt (nm->nodes, node_index);
next = vec_elt (nm->nodes, next_node_index);
/* Runtime has to be initialized. */
- ASSERT(nm->flags & VLIB_NODE_MAIN_RUNTIME_STARTED);
+ ASSERT (nm->flags & VLIB_NODE_MAIN_RUNTIME_STARTED);
if ((p = hash_get (node->next_slot_by_node, next_node_index)))
{
@@ -191,7 +192,8 @@ vlib_node_add_next_with_slot (vlib_main_t * vm,
/* Siblings all get same node structure. */
{
uword sib_node_index, sib_slot;
- vlib_node_t * sib_node;
+ vlib_node_t *sib_node;
+ /* *INDENT-OFF* */
clib_bitmap_foreach (sib_node_index, node->sibling_bitmap, ({
sib_node = vec_elt (nm->nodes, sib_node_index);
if (sib_node != node)
@@ -200,6 +202,7 @@ vlib_node_add_next_with_slot (vlib_main_t * vm,
ASSERT (sib_slot == slot);
}
}));
+ /* *INDENT-ON* */
}
return slot;
@@ -208,18 +211,16 @@ vlib_node_add_next_with_slot (vlib_main_t * vm,
/* Add named next node to given node in given slot. */
uword
vlib_node_add_named_next_with_slot (vlib_main_t * vm,
- uword node,
- char * name,
- uword slot)
+ uword node, char *name, uword slot)
{
- vlib_node_main_t * nm;
- vlib_node_t * n, * n_next;
+ vlib_node_main_t *nm;
+ vlib_node_t *n, *n_next;
nm = &vm->node_main;
n = vlib_get_node (vm, node);
n_next = vlib_get_node_by_name (vm, (u8 *) name);
- if (! n_next)
+ if (!n_next)
{
if (nm->flags & VLIB_NODE_MAIN_RUNTIME_STARTED)
return ~0;
@@ -235,7 +236,8 @@ vlib_node_add_named_next_with_slot (vlib_main_t * vm,
return vlib_node_add_next_with_slot (vm, node, n_next->index, slot);
}
-static void node_elog_init (vlib_main_t * vm, uword ni)
+static void
+node_elog_init (vlib_main_t * vm, uword ni)
{
elog_event_type_t t;
@@ -258,18 +260,18 @@ static void node_elog_init (vlib_main_t * vm, uword ni)
#define STACK_ALIGN CLIB_CACHE_LINE_BYTES
#endif
-static void register_node (vlib_main_t * vm,
- vlib_node_registration_t * r)
+static void
+register_node (vlib_main_t * vm, vlib_node_registration_t * r)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n;
- u32 page_size = clib_mem_get_page_size();
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n;
+ u32 page_size = clib_mem_get_page_size ();
int i;
if (CLIB_DEBUG > 0)
{
/* Default (0) type should match INTERNAL. */
- vlib_node_t zero = {0};
+ vlib_node_t zero = { 0 };
ASSERT (VLIB_NODE_TYPE_INTERNAL == zero.type);
}
@@ -280,21 +282,20 @@ static void register_node (vlib_main_t * vm,
n->index = vec_len (nm->nodes);
vec_add1 (nm->nodes, n);
-
+
/* Name is always a vector so it can be formatted with %v. */
if (clib_mem_is_heap_object (vec_header (r->name, 0)))
n->name = vec_dup ((u8 *) r->name);
else
n->name = format (0, "%s", r->name);
- if (! nm->node_by_name)
- nm->node_by_name = hash_create_vec (/* size */ 32,
- sizeof (n->name[0]),
- sizeof (uword));
+ if (!nm->node_by_name)
+ nm->node_by_name = hash_create_vec ( /* size */ 32,
+ sizeof (n->name[0]), sizeof (uword));
/* Node names must be unique. */
{
- vlib_node_t * o = vlib_get_node_by_name (vm, n->name);
+ vlib_node_t *o = vlib_get_node_by_name (vm, n->name);
if (o)
clib_error ("more than one node named `%v'", n->name);
}
@@ -314,21 +315,21 @@ static void register_node (vlib_main_t * vm,
#define _(f) n->f = r->f
- _ (type);
- _ (flags);
- _ (state);
- _ (scalar_size);
- _ (vector_size);
- _ (format_buffer);
- _ (unformat_buffer);
- _ (format_trace);
- _ (validate_frame);
+ _(type);
+ _(flags);
+ _(state);
+ _(scalar_size);
+ _(vector_size);
+ _(format_buffer);
+ _(unformat_buffer);
+ _(format_trace);
+ _(validate_frame);
/* Register error counters. */
vlib_register_errors (vm, n->index, r->n_errors, r->error_strings);
node_elog_init (vm, n->index);
- _ (runtime_data_bytes);
+ _(runtime_data_bytes);
if (r->runtime_data_bytes > 0)
{
vec_resize (n->runtime_data, r->runtime_data_bytes);
@@ -347,36 +348,37 @@ static void register_node (vlib_main_t * vm,
/* Initialize node runtime. */
{
- vlib_node_runtime_t * rt;
+ vlib_node_runtime_t *rt;
u32 i;
if (n->type == VLIB_NODE_TYPE_PROCESS)
{
- vlib_process_t * p;
+ vlib_process_t *p;
uword log2_n_stack_bytes;
log2_n_stack_bytes = clib_max (r->process_log2_n_stack_bytes, 15);
#ifdef CLIB_UNIX
- /*
- * Bump the stack size if running over a kernel with a large page size,
- * and the stack isn't any too big to begin with. Otherwise, we'll
- * trip over the stack guard page for sure.
- */
- if ((page_size > (4<<10)) && log2_n_stack_bytes < 19)
- {
- if ((1<<log2_n_stack_bytes) <= page_size)
- log2_n_stack_bytes = min_log2 (page_size) + 1;
- else
- log2_n_stack_bytes++;
- }
+ /*
+ * Bump the stack size if running over a kernel with a large page size,
+ * and the stack isn't any too big to begin with. Otherwise, we'll
+ * trip over the stack guard page for sure.
+ */
+ if ((page_size > (4 << 10)) && log2_n_stack_bytes < 19)
+ {
+ if ((1 << log2_n_stack_bytes) <= page_size)
+ log2_n_stack_bytes = min_log2 (page_size) + 1;
+ else
+ log2_n_stack_bytes++;
+ }
#endif
- p = clib_mem_alloc_aligned_at_offset
- (sizeof (p[0]) + (1 << log2_n_stack_bytes),
- STACK_ALIGN, STRUCT_OFFSET_OF (vlib_process_t, stack));
- if (p == 0)
- clib_panic ("failed to allocate process stack (%d bytes)", 1<<log2_n_stack_bytes);
+ p = clib_mem_alloc_aligned_at_offset
+ (sizeof (p[0]) + (1 << log2_n_stack_bytes),
+ STACK_ALIGN, STRUCT_OFFSET_OF (vlib_process_t, stack));
+ if (p == 0)
+ clib_panic ("failed to allocate process stack (%d bytes)",
+ 1 << log2_n_stack_bytes);
memset (p, 0, sizeof (p[0]));
p->log2_n_stack_bytes = log2_n_stack_bytes;
@@ -395,12 +397,12 @@ static void register_node (vlib_main_t * vm,
rt = &p->node_runtime;
#ifdef CLIB_UNIX
- /*
- * Disallow writes to the bottom page of the stack, to
- * catch stack overflows.
- */
- if (mprotect (p->stack, page_size, PROT_READ) < 0)
- clib_unix_warning ("process stack");
+ /*
+ * Disallow writes to the bottom page of the stack, to
+ * catch stack overflows.
+ */
+ if (mprotect (p->stack, page_size, PROT_READ) < 0)
+ clib_unix_warning ("process stack");
#endif
}
@@ -432,56 +434,62 @@ static void register_node (vlib_main_t * vm,
ASSERT (vec_len (n->runtime_data) <= sizeof (rt->runtime_data));
if (vec_len (n->runtime_data) > 0)
- clib_memcpy (rt->runtime_data, n->runtime_data, vec_len (n->runtime_data));
+ clib_memcpy (rt->runtime_data, n->runtime_data,
+ vec_len (n->runtime_data));
vec_free (n->runtime_data);
}
}
/* Register new packet processing node. */
-u32 vlib_register_node (vlib_main_t * vm, vlib_node_registration_t * r)
+u32
+vlib_register_node (vlib_main_t * vm, vlib_node_registration_t * r)
{
register_node (vm, r);
return r->index;
}
-void vlib_register_all_static_nodes (vlib_main_t * vm)
+void
+vlib_register_all_static_nodes (vlib_main_t * vm)
{
- vlib_node_registration_t * r;
-
+ vlib_node_registration_t *r;
+
r = vm->node_main.node_registrations;
- while (r) {
- register_node (vm, r);
- r = r->next_registration;
- }
+ while (r)
+ {
+ register_node (vm, r);
+ r = r->next_registration;
+ }
}
clib_error_t *
vlib_node_main_init (vlib_main_t * vm)
{
- vlib_node_main_t * nm = &vm->node_main;
- clib_error_t * error = 0;
- vlib_node_t * n;
+ vlib_node_main_t *nm = &vm->node_main;
+ clib_error_t *error = 0;
+ vlib_node_t *n;
uword ni;
nm->flags |= VLIB_NODE_MAIN_RUNTIME_STARTED;
/* Generate sibling relationships */
{
- vlib_node_t * n, * sib;
+ vlib_node_t *n, *sib;
uword si;
for (ni = 0; ni < vec_len (nm->nodes); ni++)
{
n = vec_elt (nm->nodes, ni);
- if (! n->sibling_of)
+ if (!n->sibling_of)
continue;
sib = vlib_get_node_by_name (vm, (u8 *) n->sibling_of);
- if (! sib)
- clib_error ("sibling `%s' not found for node `%v'", n->sibling_of, n->name);
+ if (!sib)
+ clib_error ("sibling `%s' not found for node `%v'", n->sibling_of,
+ n->name);
+ /* *INDENT-OFF* */
clib_bitmap_foreach (si, sib->sibling_bitmap, ({
vlib_node_t * m = vec_elt (nm->nodes, si);
@@ -491,6 +499,7 @@ vlib_node_main_init (vlib_main_t * vm)
/* Connect us to all of sibling's siblings. */
n->sibling_bitmap = clib_bitmap_ori (n->sibling_bitmap, si);
}));
+ /* *INDENT-ON* */
/* Connect sibling to us. */
sib->sibling_bitmap = clib_bitmap_ori (sib->sibling_bitmap, n->index);
@@ -509,9 +518,9 @@ vlib_node_main_init (vlib_main_t * vm)
for (i = 0; i < vec_len (n->next_node_names); i++)
{
- char * a = n->next_node_names[i];
+ char *a = n->next_node_names[i];
- if (! a)
+ if (!a)
continue;
if (~0 == vlib_node_add_named_next_with_slot (vm, n->index, a, i))
@@ -528,7 +537,7 @@ vlib_node_main_init (vlib_main_t * vm)
/* Set previous node pointers. */
for (ni = 0; ni < vec_len (nm->nodes); ni++)
{
- vlib_node_t * n_next;
+ vlib_node_t *n_next;
uword i;
n = vec_elt (nm->nodes, ni);
@@ -545,33 +554,41 @@ vlib_node_main_init (vlib_main_t * vm)
}
{
- vlib_next_frame_t * nf;
- vlib_node_runtime_t * r;
- vlib_node_t * next;
+ vlib_next_frame_t *nf;
+ vlib_node_runtime_t *r;
+ vlib_node_t *next;
uword i;
vec_foreach (r, nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL])
- {
- if (r->n_next_nodes == 0)
- continue;
+ {
+ if (r->n_next_nodes == 0)
+ continue;
- n = vlib_get_node (vm, r->node_index);
- nf = vec_elt_at_index (nm->next_frames, r->next_frame_index);
+ n = vlib_get_node (vm, r->node_index);
+ nf = vec_elt_at_index (nm->next_frames, r->next_frame_index);
- for (i = 0; i < vec_len (n->next_nodes); i++)
- {
- next = vlib_get_node (vm, n->next_nodes[i]);
+ for (i = 0; i < vec_len (n->next_nodes); i++)
+ {
+ next = vlib_get_node (vm, n->next_nodes[i]);
- /* Validate node runtime indices are correctly initialized. */
- ASSERT (nf[i].node_runtime_index == next->runtime_index);
+ /* Validate node runtime indices are correctly initialized. */
+ ASSERT (nf[i].node_runtime_index == next->runtime_index);
- nf[i].flags = 0;
- if (next->flags & VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH)
- nf[i].flags |= VLIB_FRAME_NO_FREE_AFTER_DISPATCH;
- }
- }
+ nf[i].flags = 0;
+ if (next->flags & VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH)
+ nf[i].flags |= VLIB_FRAME_NO_FREE_AFTER_DISPATCH;
+ }
+ }
}
- done:
+done:
return error;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/node.h b/vlib/vlib/node.h
index e9842275b0e..795856e6d7f 100644
--- a/vlib/vlib/node.h
+++ b/vlib/vlib/node.h
@@ -55,7 +55,8 @@ typedef uword (vlib_node_function_t) (struct vlib_main_t * vm,
struct vlib_node_runtime_t * node,
struct vlib_frame_t * frame);
-typedef enum {
+typedef enum
+{
/* An internal node on the call graph (could be output). */
VLIB_NODE_TYPE_INTERNAL,
@@ -74,15 +75,16 @@ typedef enum {
VLIB_N_NODE_TYPE,
} vlib_node_type_t;
-typedef struct _vlib_node_registration {
+typedef struct _vlib_node_registration
+{
/* Vector processing function for this node. */
- vlib_node_function_t * function;
+ vlib_node_function_t *function;
/* Node name. */
- char * name;
+ char *name;
/* Name of sibling (if applicable). */
- char * sibling_of;
+ char *sibling_of;
/* Node index filled in by registration. */
u32 index;
@@ -91,23 +93,23 @@ typedef struct _vlib_node_registration {
vlib_node_type_t type;
/* Error strings indexed by error code for this node. */
- char ** error_strings;
+ char **error_strings;
/* Buffer format/unformat for this node. */
- format_function_t * format_buffer;
- unformat_function_t * unformat_buffer;
+ format_function_t *format_buffer;
+ unformat_function_t *unformat_buffer;
/* Trace format/unformat for this node. */
- format_function_t * format_trace;
- unformat_function_t * unformat_trace;
+ format_function_t *format_trace;
+ unformat_function_t *unformat_trace;
/* Function to validate incoming frames. */
- u8 * (* validate_frame) (struct vlib_main_t * vm,
- struct vlib_node_runtime_t *,
- struct vlib_frame_t * f);
+ u8 *(*validate_frame) (struct vlib_main_t * vm,
+ struct vlib_node_runtime_t *,
+ struct vlib_frame_t * f);
/* Per-node runtime data. */
- void * runtime_data;
+ void *runtime_data;
/* Process stack size. */
u16 process_log2_n_stack_bytes;
@@ -131,10 +133,10 @@ typedef struct _vlib_node_registration {
u16 n_next_nodes;
/* Constructor link-list, don't ask... */
- struct _vlib_node_registration * next_registration;
+ struct _vlib_node_registration *next_registration;
/* Names of next nodes which this node feeds into. */
- char * next_nodes[];
+ char *next_nodes[];
} vlib_node_registration_t;
@@ -148,7 +150,7 @@ static void __vlib_add_node_registration_##x (void) \
x.next_registration = vm->node_main.node_registrations; \
vm->node_main.node_registrations = &x; \
} \
-__VA_ARGS__ vlib_node_registration_t x
+__VA_ARGS__ vlib_node_registration_t x
#if CLIB_DEBUG > 0
#define VLIB_NODE_FUNCTION_CLONE_TEMPLATE(arch, fn)
@@ -179,11 +181,14 @@ __VA_ARGS__ vlib_node_registration_t x
always_inline vlib_node_registration_t *
vlib_node_next_registered (vlib_node_registration_t * c)
{
- c = clib_elf_section_data_next (c, c->n_next_nodes * sizeof (c->next_nodes[0]));
+ c =
+ clib_elf_section_data_next (c,
+ c->n_next_nodes * sizeof (c->next_nodes[0]));
return c;
}
-typedef struct {
+typedef struct
+{
/* Total calls, clock ticks and vector elements processed for this node. */
u64 calls, vectors, clocks, suspends;
u64 max_clock;
@@ -199,19 +204,21 @@ typedef struct {
/* Input node is never called. */ \
_ (DISABLED)
-typedef enum {
+typedef enum
+{
#define _(f) VLIB_NODE_STATE_##f,
foreach_vlib_node_state
#undef _
- VLIB_N_NODE_STATE,
+ VLIB_N_NODE_STATE,
} vlib_node_state_t;
-typedef struct vlib_node_t {
+typedef struct vlib_node_t
+{
/* Vector processing function for this node. */
- vlib_node_function_t * function;
+ vlib_node_function_t *function;
/* Node name. */
- u8 * name;
+ u8 *name;
/* Node name index in elog string table. */
u32 name_elog_string;
@@ -233,7 +240,7 @@ typedef struct vlib_node_t {
u32 runtime_index;
/* Runtime data for this node. */
- void * runtime_data;
+ void *runtime_data;
/* Node flags. */
u16 flags;
@@ -271,48 +278,48 @@ typedef struct vlib_node_t {
u32 error_heap_index;
/* Error strings indexed by error code for this node. */
- char ** error_strings;
+ char **error_strings;
/* Vector of next node names.
Only used before next_nodes array is initialized. */
- char ** next_node_names;
+ char **next_node_names;
/* Next node indices for this node. */
- u32 * next_nodes;
+ u32 *next_nodes;
/* Name of node that we are sibling of. */
- char * sibling_of;
+ char *sibling_of;
/* Bitmap of all of this node's siblings. */
- uword * sibling_bitmap;
+ uword *sibling_bitmap;
/* Total number of vectors sent to each next node. */
- u64 * n_vectors_by_next_node;
+ u64 *n_vectors_by_next_node;
/* Hash table mapping next node index into slot in
next_nodes vector. Quickly determines whether this node
is connected to given next node and, if so, with which slot. */
- uword * next_slot_by_node;
+ uword *next_slot_by_node;
/* Bitmap of node indices which feed this node. */
- uword * prev_node_bitmap;
+ uword *prev_node_bitmap;
/* Node/next-index which own enqueue rights with to this node. */
u32 owner_node_index, owner_next_index;
/* Buffer format/unformat for this node. */
- format_function_t * format_buffer;
- unformat_function_t * unformat_buffer;
+ format_function_t *format_buffer;
+ unformat_function_t *unformat_buffer;
/* Trace buffer format/unformat for this node. */
- format_function_t * format_trace;
+ format_function_t *format_trace;
/* Function to validate incoming frames. */
- u8 * (* validate_frame) (struct vlib_main_t * vm,
- struct vlib_node_runtime_t *,
- struct vlib_frame_t * f);
+ u8 *(*validate_frame) (struct vlib_main_t * vm,
+ struct vlib_node_runtime_t *,
+ struct vlib_frame_t * f);
/* for pretty-printing, not typically valid */
- u8 * state_string;
+ u8 *state_string;
} vlib_node_t;
#define VLIB_INVALID_NODE_INDEX ((u32) ~0)
@@ -322,7 +329,8 @@ typedef struct vlib_node_t {
#define VLIB_FRAME_ALIGN VLIB_MAX_CPUS
/* Calling frame (think stack frame) for a node. */
-typedef struct vlib_frame_t {
+typedef struct vlib_frame_t
+{
/* Frame flags. */
u16 flags;
@@ -342,7 +350,8 @@ typedef struct vlib_frame_t {
u8 arguments[0];
} vlib_frame_t;
-typedef struct {
+typedef struct
+{
/* Frame index. */
u32 frame_index;
@@ -385,7 +394,8 @@ vlib_next_frame_init (vlib_next_frame_t * nf)
}
/* A frame pending dispatch by main loop. */
-typedef struct {
+typedef struct
+{
/* Node and runtime for this frame. */
u32 node_runtime_index;
@@ -399,12 +409,13 @@ typedef struct {
#define VLIB_PENDING_FRAME_NO_NEXT_FRAME ((u32) ~0)
} vlib_pending_frame_t;
-typedef struct vlib_node_runtime_t {
+typedef struct vlib_node_runtime_t
+{
/* Node function to call. */
- vlib_node_function_t * function;
+ vlib_node_function_t *function;
/* Vector of errors for this node. */
- vlib_error_t * errors;
+ vlib_error_t *errors;
/* Number of clock cycles. */
u32 clocks_since_last_overflow;
@@ -459,22 +470,26 @@ typedef struct vlib_node_runtime_t {
- 1 * sizeof (vlib_error_t *)
- 11 * sizeof (u32)
- 5 * sizeof (u16)) / sizeof (uword)];
-} vlib_node_runtime_t;
+}
+vlib_node_runtime_t;
-typedef struct {
+typedef struct
+{
/* Number of allocated frames for this scalar/vector size. */
u32 n_alloc_frames;
/* Vector of free frame indices for this scalar/vector size. */
- u32 * free_frame_indices;
+ u32 *free_frame_indices;
} vlib_frame_size_t;
-typedef struct {
+typedef struct
+{
/* Users opaque value for event type. */
uword opaque;
} vlib_process_event_type_t;
-typedef struct {
+typedef struct
+{
/* Node runtime for this process. */
vlib_node_runtime_t node_runtime;
@@ -507,20 +522,20 @@ typedef struct {
u32 n_suspends;
/* Vectors of pending event data indexed by event type index. */
- void ** pending_event_data_by_type_index;
+ void **pending_event_data_by_type_index;
/* Bitmap of event type-indices with non-empty vectors. */
- uword * non_empty_event_type_bitmap;
+ uword *non_empty_event_type_bitmap;
/* Bitmap of event type-indices which are one time events. */
- uword * one_time_event_type_bitmap;
+ uword *one_time_event_type_bitmap;
/* Type is opaque pointer -- typically a pointer to an event handler
function. Hash table to map opaque to a type index. */
- uword * event_type_index_by_type_opaque;
+ uword *event_type_index_by_type_opaque;
/* Pool of currently valid event types. */
- vlib_process_event_type_t * event_type_pool;
+ vlib_process_event_type_t *event_type_pool;
/* When suspending saves cpu cycle counter when process is to be resumed. */
u64 resume_cpu_time;
@@ -547,17 +562,25 @@ typedef struct {
#ifdef CLIB_UNIX
/* Ensure that the stack is aligned on the multiple of the page size */
-typedef char assert_process_stack_must_be_aligned_exactly_to_page_size_multiple
- [(sizeof(vlib_process_t) - PAGE_SIZE_MULTIPLE) == 0 ? 0 : -1];
+typedef char
+ assert_process_stack_must_be_aligned_exactly_to_page_size_multiple[(sizeof
+ (vlib_process_t)
+ -
+ PAGE_SIZE_MULTIPLE)
+ ==
+ 0 ? 0 :
+ -1];
#endif
-typedef struct {
- u32 node_index;
+typedef struct
+{
+ u32 node_index;
- u32 one_time_event;
+ u32 one_time_event;
} vlib_one_time_waiting_process_t;
-typedef struct {
+typedef struct
+{
u16 n_data_elts;
u16 n_data_elt_bytes;
@@ -570,46 +593,57 @@ typedef struct {
u32 event_type_index;
- union {
+ union
+ {
u8 inline_event_data[64 - 3 * sizeof (u32) - 2 * sizeof (u16)];
/* Vector of event data used only when data does not fit inline. */
- u8 * event_data_as_vector;
+ u8 *event_data_as_vector;
};
-} vlib_signal_timed_event_data_t;
+}
+vlib_signal_timed_event_data_t;
always_inline uword
vlib_timing_wheel_data_is_timed_event (u32 d)
-{ return d & 1; }
+{
+ return d & 1;
+}
always_inline u32
vlib_timing_wheel_data_set_suspended_process (u32 i)
-{ return 0 + 2*i; }
+{
+ return 0 + 2 * i;
+}
always_inline u32
vlib_timing_wheel_data_set_timed_event (u32 i)
-{ return 1 + 2*i; }
+{
+ return 1 + 2 * i;
+}
always_inline uword
vlib_timing_wheel_data_get_index (u32 d)
-{ return d / 2; }
+{
+ return d / 2;
+}
-typedef struct {
+typedef struct
+{
/* Public nodes. */
- vlib_node_t ** nodes;
+ vlib_node_t **nodes;
/* Node index hashed by node name. */
- uword * node_by_name;
+ uword *node_by_name;
u32 flags;
#define VLIB_NODE_MAIN_RUNTIME_STARTED (1 << 0)
/* Nodes segregated by type for cache locality.
Does not apply to nodes of type VLIB_NODE_TYPE_INTERNAL. */
- vlib_node_runtime_t * nodes_by_type[VLIB_N_NODE_TYPE];
+ vlib_node_runtime_t *nodes_by_type[VLIB_N_NODE_TYPE];
/* Node runtime indices for input nodes with pending interrupts. */
- u32 * pending_interrupt_node_runtime_indices;
+ u32 *pending_interrupt_node_runtime_indices;
/* Input nodes are switched from/to interrupt to/from polling mode
when average vector length goes above/below polling/interrupt
@@ -618,55 +652,56 @@ typedef struct {
u32 interrupt_threshold_vector_length;
/* Vector of next frames. */
- vlib_next_frame_t * next_frames;
+ vlib_next_frame_t *next_frames;
/* Vector of internal node's frames waiting to be called. */
- vlib_pending_frame_t * pending_frames;
+ vlib_pending_frame_t *pending_frames;
/* Timing wheel for scheduling time-based node dispatch. */
timing_wheel_t timing_wheel;
- vlib_signal_timed_event_data_t * signal_timed_event_data_pool;
+ vlib_signal_timed_event_data_t *signal_timed_event_data_pool;
/* Opaque data vector added via timing_wheel_advance. */
- u32 * data_from_advancing_timing_wheel;
+ u32 *data_from_advancing_timing_wheel;
/* CPU time of next process to be ready on timing wheel. */
u64 cpu_time_next_process_ready;
/* Vector of process nodes.
One for each node of type VLIB_NODE_TYPE_PROCESS. */
- vlib_process_t ** processes;
+ vlib_process_t **processes;
/* Current running process or ~0 if no process running. */
u32 current_process_index;
/* Pool of pending process frames. */
- vlib_pending_frame_t * suspended_process_frames;
+ vlib_pending_frame_t *suspended_process_frames;
/* Vector of event data vectors pending recycle. */
- void ** recycled_event_data_vectors;
+ void **recycled_event_data_vectors;
/* Current counts of nodes in each state. */
u32 input_node_counts_by_state[VLIB_N_NODE_STATE];
/* Hash of (scalar_size,vector_size) to frame_sizes index. */
- uword * frame_size_hash;
+ uword *frame_size_hash;
/* Per-size frame allocation information. */
- vlib_frame_size_t * frame_sizes;
+ vlib_frame_size_t *frame_sizes;
/* Time of last node runtime stats clear. */
f64 time_last_runtime_stats_clear;
/* Node registrations added by constructors */
- vlib_node_registration_t * node_registrations;
+ vlib_node_registration_t *node_registrations;
} vlib_node_main_t;
#define FRAME_QUEUE_MAX_NELTS 32
-typedef struct {
- CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
+typedef struct
+{
+ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
u64 head;
u64 head_hint;
u64 tail;
@@ -677,8 +712,17 @@ typedef struct {
i32 n_vectors[FRAME_QUEUE_MAX_NELTS];
} frame_queue_trace_t;
-typedef struct {
+typedef struct
+{
u64 count[FRAME_QUEUE_MAX_NELTS];
} frame_queue_nelt_counter_t;
#endif /* included_vlib_node_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/node_cli.c b/vlib/vlib/node_cli.c
index 13a1b91ef81..af9b47dd05d 100644
--- a/vlib/vlib/node_cli.c
+++ b/vlib/vlib/node_cli.c
@@ -41,21 +41,20 @@
#include <vlib/threads.h>
static int
-node_cmp (void * a1, void *a2)
+node_cmp (void *a1, void *a2)
{
- vlib_node_t ** n1 = a1;
- vlib_node_t ** n2 = a2;
+ vlib_node_t **n1 = a1;
+ vlib_node_t **n2 = a2;
return vec_cmp (n1[0]->name, n2[0]->name);
}
static clib_error_t *
show_node_graph (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n;
u32 node_index;
vlib_cli_output (vm, "%U\n", format_vlib_node_graph, nm, 0);
@@ -67,7 +66,7 @@ show_node_graph (vlib_main_t * vm,
}
else
{
- vlib_node_t ** nodes = vec_dup (nm->nodes);
+ vlib_node_t **nodes = vec_dup (nm->nodes);
uword i;
vec_sort_with_function (nodes, node_cmp);
@@ -81,37 +80,42 @@ show_node_graph (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_node_graph_command, static) = {
.path = "show vlib graph",
.short_help = "Show packet processing node graph",
.function = show_node_graph,
};
+/* *INDENT-ON* */
-static u8 * format_vlib_node_stats (u8 * s, va_list * va)
+static u8 *
+format_vlib_node_stats (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
- vlib_node_t * n = va_arg (*va, vlib_node_t *);
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
+ vlib_node_t *n = va_arg (*va, vlib_node_t *);
int max = va_arg (*va, int);
f64 v;
- char * state;
- u8 * ns;
- u8 * misc_info = 0;
+ char *state;
+ u8 *ns;
+ u8 *misc_info = 0;
u64 c, p, l, d;
f64 x;
- f64 maxc, maxcn;
+ f64 maxc, maxcn;
u32 maxn;
uword indent;
- if (! n)
+ if (!n)
{
- if (max)
- return format (s,
- "%=30s%=17s%=16s%=16s%=16s%=16s",
- "Name", "Max Node Clocks", "Vectors at Max", "Max Clocks", "Avg Clocks", "Avg Vectors/Call");
+ if (max)
+ return format (s,
+ "%=30s%=17s%=16s%=16s%=16s%=16s",
+ "Name", "Max Node Clocks", "Vectors at Max",
+ "Max Clocks", "Avg Clocks", "Avg Vectors/Call");
else
- return format (s,
- "%=30s%=12s%=16s%=16s%=16s%=16s%=16s",
- "Name", "State", "Calls", "Vectors", "Suspends", "Clocks", "Vectors/Call");
+ return format (s,
+ "%=30s%=12s%=16s%=16s%=16s%=16s%=16s",
+ "Name", "State", "Calls", "Vectors", "Suspends",
+ "Clocks", "Vectors/Call");
}
indent = format_get_indent (s);
@@ -120,11 +124,11 @@ static u8 * format_vlib_node_stats (u8 * s, va_list * va)
c = n->stats_total.calls - n->stats_last_clear.calls;
p = n->stats_total.vectors - n->stats_last_clear.vectors;
d = n->stats_total.suspends - n->stats_last_clear.suspends;
- maxc = (f64)n->stats_total.max_clock;
+ maxc = (f64) n->stats_total.max_clock;
maxn = n->stats_total.max_clock_n;
- if (n->stats_total.max_clock_n)
- maxcn = (f64)n->stats_total.max_clock / (f64)maxn;
- else
+ if (n->stats_total.max_clock_n)
+ maxcn = (f64) n->stats_total.max_clock / (f64) maxn;
+ else
maxcn = 0.0;
/* Clocks per packet, per call or per suspend. */
@@ -135,27 +139,27 @@ static u8 * format_vlib_node_stats (u8 * s, va_list * va)
x = (f64) l / (f64) c;
else if (d > 0)
x = (f64) l / (f64) d;
-
+
if (c > 0)
- v = (double)p / (double)c;
+ v = (double) p / (double) c;
else
v = 0;
state = "active";
if (n->type == VLIB_NODE_TYPE_PROCESS)
{
- vlib_process_t * p = vlib_get_process_from_node (vm, n);
+ vlib_process_t *p = vlib_get_process_from_node (vm, n);
/* Show processes with events pending. This helps spot bugs where events are not
- being handled. */
- if (! clib_bitmap_is_zero (p->non_empty_event_type_bitmap))
+ being handled. */
+ if (!clib_bitmap_is_zero (p->non_empty_event_type_bitmap))
misc_info = format (misc_info, "events pending, ");
switch (p->flags & (VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK
| VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT))
{
default:
- if (! (p->flags & VLIB_PROCESS_IS_RUNNING))
+ if (!(p->flags & VLIB_PROCESS_IS_RUNNING))
state = "done";
break;
@@ -167,12 +171,12 @@ static u8 * format_vlib_node_stats (u8 * s, va_list * va)
state = "event wait";
break;
- case (VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT
- | VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK):
- state = "any wait";
+ case (VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT | VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK):
+ state =
+ "any wait";
break;
}
- }
+ }
else if (n->type != VLIB_NODE_TYPE_INTERNAL)
{
state = "polling";
@@ -186,10 +190,10 @@ static u8 * format_vlib_node_stats (u8 * s, va_list * va)
if (max)
s = format (s, "%-30v%=17.2e%=16d%=16.2e%=16.2e%=16.2e",
- ns, maxc, maxn, maxcn, x, v);
+ ns, maxc, maxn, maxcn, x, v);
else
s = format (s, "%-30v%=12s%16Ld%16Ld%16Ld%16.2e%16.2f", ns, state,
- c, p, d, x, v);
+ c, p, d, x, v);
if (ns != n->name)
vec_free (ns);
@@ -205,16 +209,15 @@ static u8 * format_vlib_node_stats (u8 * s, va_list * va)
static clib_error_t *
show_node_runtime (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n;
f64 time_now;
u32 node_index;
- vlib_node_t *** node_dups = 0;
- f64 * vectors_per_main_loop = 0;
- f64 * last_vector_length_per_node = 0;
+ vlib_node_t ***node_dups = 0;
+ f64 *vectors_per_main_loop = 0;
+ f64 *last_vector_length_per_node = 0;
time_now = vlib_time_now (vm);
@@ -227,7 +230,7 @@ show_node_runtime (vlib_main_t * vm,
}
else
{
- vlib_node_t ** nodes;
+ vlib_node_t **nodes;
uword i, j;
f64 dt;
u64 n_input, n_output, n_drop, n_punt;
@@ -235,143 +238,144 @@ show_node_runtime (vlib_main_t * vm,
u64 n_clocks, l, v, c, d;
int brief = 1;
int max = 0;
- vlib_main_t ** stat_vms = 0, *stat_vm;
+ vlib_main_t **stat_vms = 0, *stat_vm;
/* Suppress nodes with zero calls since last clear */
if (unformat (input, "brief") || unformat (input, "b"))
- brief = 1;
- if (unformat (input, "verbose") || unformat(input, "v"))
- brief = 0;
- if (unformat (input, "max") || unformat(input, "m"))
- max = 1;
-
- if (vec_len(vlib_mains) == 0)
- vec_add1 (stat_vms, vm);
+ brief = 1;
+ if (unformat (input, "verbose") || unformat (input, "v"))
+ brief = 0;
+ if (unformat (input, "max") || unformat (input, "m"))
+ max = 1;
+
+ if (vec_len (vlib_mains) == 0)
+ vec_add1 (stat_vms, vm);
else
- {
- for (i = 0; i < vec_len (vlib_mains); i++)
- {
- stat_vm = vlib_mains[i];
- if (stat_vm)
- vec_add1 (stat_vms, stat_vm);
- }
- }
-
- /*
+ {
+ for (i = 0; i < vec_len (vlib_mains); i++)
+ {
+ stat_vm = vlib_mains[i];
+ if (stat_vm)
+ vec_add1 (stat_vms, stat_vm);
+ }
+ }
+
+ /*
* Barrier sync across stats scraping.
* Otherwise, the counts will be grossly inaccurate.
*/
- vlib_worker_thread_barrier_sync(vm);
+ vlib_worker_thread_barrier_sync (vm);
for (j = 0; j < vec_len (stat_vms); j++)
- {
- stat_vm = stat_vms[j];
- nm = &stat_vm->node_main;
-
- for (i = 0; i < vec_len (nm->nodes); i++)
- {
- n = nm->nodes[i];
- vlib_node_sync_stats (stat_vm, n);
- }
-
- nodes = vec_dup (nm->nodes);
-
- vec_add1(node_dups, nodes);
- vec_add1 (vectors_per_main_loop,
- vlib_last_vectors_per_main_loop_as_f64 (stat_vm));
- vec_add1 (last_vector_length_per_node,
- vlib_last_vector_length_per_node (stat_vm));
- }
- vlib_worker_thread_barrier_release(vm);
+ {
+ stat_vm = stat_vms[j];
+ nm = &stat_vm->node_main;
+
+ for (i = 0; i < vec_len (nm->nodes); i++)
+ {
+ n = nm->nodes[i];
+ vlib_node_sync_stats (stat_vm, n);
+ }
+
+ nodes = vec_dup (nm->nodes);
+
+ vec_add1 (node_dups, nodes);
+ vec_add1 (vectors_per_main_loop,
+ vlib_last_vectors_per_main_loop_as_f64 (stat_vm));
+ vec_add1 (last_vector_length_per_node,
+ vlib_last_vector_length_per_node (stat_vm));
+ }
+ vlib_worker_thread_barrier_release (vm);
for (j = 0; j < vec_len (stat_vms); j++)
- {
- stat_vm = stat_vms[j];
- nodes = node_dups[j];
-
- vec_sort_with_function (nodes, node_cmp);
-
- n_input = n_output = n_drop = n_punt = n_clocks = 0;
- n_internal_vectors = n_internal_calls = 0;
- for (i = 0; i < vec_len (nodes); i++)
- {
- n = nodes[i];
-
- l = n->stats_total.clocks - n->stats_last_clear.clocks;
- n_clocks += l;
-
- v = n->stats_total.vectors - n->stats_last_clear.vectors;
- c = n->stats_total.calls - n->stats_last_clear.calls;
-
- switch (n->type)
- {
- default:
- continue;
-
- case VLIB_NODE_TYPE_INTERNAL:
- n_output += (n->flags & VLIB_NODE_FLAG_IS_OUTPUT) ? v : 0;
- n_drop += (n->flags & VLIB_NODE_FLAG_IS_DROP) ? v : 0;
- n_punt += (n->flags & VLIB_NODE_FLAG_IS_PUNT) ? v : 0;
- if (! (n->flags & VLIB_NODE_FLAG_IS_OUTPUT))
- {
- n_internal_vectors += v;
- n_internal_calls += c;
- }
- if (n->flags & VLIB_NODE_FLAG_IS_HANDOFF)
- n_input += v;
- break;
-
- case VLIB_NODE_TYPE_INPUT:
- n_input += v;
- break;
- }
- }
-
- if (vec_len (vlib_mains))
- {
- vlib_worker_thread_t *w = vlib_worker_threads + j;
- if (j > 0)
- vlib_cli_output (vm, "---------------");
-
- if ( w->dpdk_lcore_id > -1)
- vlib_cli_output (vm, "Thread %d %s (lcore %u)", j, w->name,
- w->dpdk_lcore_id);
- else
- vlib_cli_output (vm, "Thread %d %s", j,
- w->name);
- }
-
- dt = time_now - nm->time_last_runtime_stats_clear;
- vlib_cli_output
- (vm,
- "Time %.1f, average vectors/node %.2f, last %d main loops %.2f per node %.2f"
- "\n vector rates in %.4e, out %.4e, drop %.4e, punt %.4e",
- dt,
- (n_internal_calls > 0
- ? (f64) n_internal_vectors / (f64) n_internal_calls
- : 0),
- 1 << VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE,
- vectors_per_main_loop [j],
- last_vector_length_per_node [j],
- (f64) n_input / dt,
- (f64) n_output / dt,
- (f64) n_drop / dt,
- (f64) n_punt / dt);
-
- vlib_cli_output (vm, "%U", format_vlib_node_stats, stat_vm, 0, max);
- for (i = 0; i < vec_len (nodes); i++)
- {
- c = nodes[i]->stats_total.calls - nodes[i]->stats_last_clear.calls;
- d = nodes[i]->stats_total.suspends - nodes[i]->stats_last_clear.suspends;
- if (c || d || ! brief)
- {
- vlib_cli_output (vm, "%U", format_vlib_node_stats, stat_vm,
- nodes[i], max);
- }
- }
- vec_free (nodes);
- }
+ {
+ stat_vm = stat_vms[j];
+ nodes = node_dups[j];
+
+ vec_sort_with_function (nodes, node_cmp);
+
+ n_input = n_output = n_drop = n_punt = n_clocks = 0;
+ n_internal_vectors = n_internal_calls = 0;
+ for (i = 0; i < vec_len (nodes); i++)
+ {
+ n = nodes[i];
+
+ l = n->stats_total.clocks - n->stats_last_clear.clocks;
+ n_clocks += l;
+
+ v = n->stats_total.vectors - n->stats_last_clear.vectors;
+ c = n->stats_total.calls - n->stats_last_clear.calls;
+
+ switch (n->type)
+ {
+ default:
+ continue;
+
+ case VLIB_NODE_TYPE_INTERNAL:
+ n_output += (n->flags & VLIB_NODE_FLAG_IS_OUTPUT) ? v : 0;
+ n_drop += (n->flags & VLIB_NODE_FLAG_IS_DROP) ? v : 0;
+ n_punt += (n->flags & VLIB_NODE_FLAG_IS_PUNT) ? v : 0;
+ if (!(n->flags & VLIB_NODE_FLAG_IS_OUTPUT))
+ {
+ n_internal_vectors += v;
+ n_internal_calls += c;
+ }
+ if (n->flags & VLIB_NODE_FLAG_IS_HANDOFF)
+ n_input += v;
+ break;
+
+ case VLIB_NODE_TYPE_INPUT:
+ n_input += v;
+ break;
+ }
+ }
+
+ if (vec_len (vlib_mains))
+ {
+ vlib_worker_thread_t *w = vlib_worker_threads + j;
+ if (j > 0)
+ vlib_cli_output (vm, "---------------");
+
+ if (w->dpdk_lcore_id > -1)
+ vlib_cli_output (vm, "Thread %d %s (lcore %u)", j, w->name,
+ w->dpdk_lcore_id);
+ else
+ vlib_cli_output (vm, "Thread %d %s", j, w->name);
+ }
+
+ dt = time_now - nm->time_last_runtime_stats_clear;
+ vlib_cli_output
+ (vm,
+ "Time %.1f, average vectors/node %.2f, last %d main loops %.2f per node %.2f"
+ "\n vector rates in %.4e, out %.4e, drop %.4e, punt %.4e",
+ dt,
+ (n_internal_calls > 0
+ ? (f64) n_internal_vectors / (f64) n_internal_calls
+ : 0),
+ 1 << VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE,
+ vectors_per_main_loop[j],
+ last_vector_length_per_node[j],
+ (f64) n_input / dt,
+ (f64) n_output / dt, (f64) n_drop / dt, (f64) n_punt / dt);
+
+ vlib_cli_output (vm, "%U", format_vlib_node_stats, stat_vm, 0, max);
+ for (i = 0; i < vec_len (nodes); i++)
+ {
+ c =
+ nodes[i]->stats_total.calls -
+ nodes[i]->stats_last_clear.calls;
+ d =
+ nodes[i]->stats_total.suspends -
+ nodes[i]->stats_last_clear.suspends;
+ if (c || d || !brief)
+ {
+ vlib_cli_output (vm, "%U", format_vlib_node_stats, stat_vm,
+ nodes[i], max);
+ }
+ }
+ vec_free (nodes);
+ }
vec_free (stat_vms);
vec_free (node_dups);
vec_free (vectors_per_main_loop);
@@ -381,68 +385,82 @@ show_node_runtime (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_node_runtime_command, static) = {
.path = "show runtime",
.short_help = "Show packet processing runtime",
.function = show_node_runtime,
.is_mp_safe = 1,
};
+/* *INDENT-ON* */
static clib_error_t *
clear_node_runtime (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_node_main_t * nm;
- vlib_node_t * n;
+ vlib_node_main_t *nm;
+ vlib_node_t *n;
int i, j;
- vlib_main_t ** stat_vms = 0, *stat_vm;
- vlib_node_runtime_t * r;
+ vlib_main_t **stat_vms = 0, *stat_vm;
+ vlib_node_runtime_t *r;
- if (vec_len(vlib_mains) == 0)
+ if (vec_len (vlib_mains) == 0)
vec_add1 (stat_vms, vm);
else
{
for (i = 0; i < vec_len (vlib_mains); i++)
- {
- stat_vm = vlib_mains[i];
- if (stat_vm)
- vec_add1 (stat_vms, stat_vm);
- }
+ {
+ stat_vm = vlib_mains[i];
+ if (stat_vm)
+ vec_add1 (stat_vms, stat_vm);
+ }
}
-
- vlib_worker_thread_barrier_sync(vm);
+
+ vlib_worker_thread_barrier_sync (vm);
for (j = 0; j < vec_len (stat_vms); j++)
{
stat_vm = stat_vms[j];
nm = &stat_vm->node_main;
-
+
for (i = 0; i < vec_len (nm->nodes); i++)
- {
- n = nm->nodes[i];
- vlib_node_sync_stats (stat_vm, n);
- n->stats_last_clear = n->stats_total;
-
- r = vlib_node_get_runtime (stat_vm, n->index);
- r->max_clock = 0;
- }
+ {
+ n = nm->nodes[i];
+ vlib_node_sync_stats (stat_vm, n);
+ n->stats_last_clear = n->stats_total;
+
+ r = vlib_node_get_runtime (stat_vm, n->index);
+ r->max_clock = 0;
+ }
/* Note: input/output rates computed using vlib_global_main */
nm->time_last_runtime_stats_clear = vlib_time_now (vm);
}
- vlib_worker_thread_barrier_release(vm);
-
+ vlib_worker_thread_barrier_release (vm);
+
vec_free (stat_vms);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (clear_node_runtime_command, static) = {
.path = "clear runtime",
.short_help = "Clear packet processing runtime statistics",
.function = clear_node_runtime,
};
+/* *INDENT-ON* */
/* Dummy function to get us linked in. */
-void vlib_node_cli_reference (void) {}
+void
+vlib_node_cli_reference (void)
+{
+}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/node_format.c b/vlib/vlib/node_format.c
index d1d415e1376..e9dde40fa70 100644
--- a/vlib/vlib/node_format.c
+++ b/vlib/vlib/node_format.c
@@ -39,24 +39,24 @@
#include <vlib/vlib.h>
-u8 * format_vlib_node_graph (u8 * s, va_list * va)
+u8 *
+format_vlib_node_graph (u8 * s, va_list * va)
{
- vlib_node_main_t * nm = va_arg (*va, vlib_node_main_t *);
- vlib_node_t * n = va_arg (*va, vlib_node_t *);
+ vlib_node_main_t *nm = va_arg (*va, vlib_node_main_t *);
+ vlib_node_t *n = va_arg (*va, vlib_node_t *);
int i, j;
uword indent;
- typedef struct {
+ typedef struct
+ {
u32 next_node;
u32 next_slot;
u32 prev_node;
} tmp_t;
- tmp_t * tmps = 0;
- tmp_t empty = { .next_node = ~0, .prev_node = ~0 };
+ tmp_t *tmps = 0;
+ tmp_t empty = {.next_node = ~0,.prev_node = ~0 };
- if (! n)
- return format (s,
- "%=26s%=26s%=26s",
- "Name", "Next", "Previous");
+ if (!n)
+ return format (s, "%=26s%=26s%=26s", "Name", "Next", "Previous");
s = format (s, "%-26v", n->name);
@@ -73,11 +73,13 @@ u8 * format_vlib_node_graph (u8 * s, va_list * va)
}
j = 0;
+ /* *INDENT-OFF* */
clib_bitmap_foreach (i, n->prev_node_bitmap, ({
vec_validate_init_empty (tmps, j, empty);
tmps[j].prev_node = i;
j++;
}));
+ /* *INDENT-ON* */
for (i = 0; i < vec_len (tmps); i++)
{
@@ -86,8 +88,8 @@ u8 * format_vlib_node_graph (u8 * s, va_list * va)
if (tmps[i].next_node != ~0)
{
- vlib_node_t * x;
- u8 * t = 0;
+ vlib_node_t *x;
+ u8 *t = 0;
x = vec_elt (nm->nodes, tmps[i].next_node);
t = format (t, "%v [%d]", x->name, tmps[i].next_slot);
@@ -99,7 +101,7 @@ u8 * format_vlib_node_graph (u8 * s, va_list * va)
if (tmps[i].prev_node != ~0)
{
- vlib_node_t * x;
+ vlib_node_t *x;
x = vec_elt (nm->nodes, tmps[i].prev_node);
s = format (s, "%=26v", x->name);
}
@@ -110,60 +112,76 @@ u8 * format_vlib_node_graph (u8 * s, va_list * va)
return s;
}
-u8 * format_vlib_node_and_next (u8 * s, va_list * va)
+u8 *
+format_vlib_node_and_next (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
- vlib_node_t * n = va_arg (*va, vlib_node_t *);
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
+ vlib_node_t *n = va_arg (*va, vlib_node_t *);
u32 next_index = va_arg (*va, u32);
- vlib_node_t * n_next;
- u32 * ni;
+ vlib_node_t *n_next;
+ u32 *ni;
ni = vec_elt_at_index (n->next_nodes, next_index);
n_next = vlib_get_node (vm, ni[0]);
return format (s, "%v -> %v", n->name, n_next->name);
}
-u8 * format_vlib_node_name (u8 * s, va_list * va)
+u8 *
+format_vlib_node_name (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
u32 node_index = va_arg (*va, u32);
- vlib_node_t * n = vlib_get_node (vm, node_index);
+ vlib_node_t *n = vlib_get_node (vm, node_index);
return format (s, "%v", n->name);
}
-u8 * format_vlib_next_node_name (u8 * s, va_list * va)
+u8 *
+format_vlib_next_node_name (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
u32 node_index = va_arg (*va, u32);
u32 next_index = va_arg (*va, u32);
- vlib_node_t * next = vlib_get_next_node (vm, node_index, next_index);
+ vlib_node_t *next = vlib_get_next_node (vm, node_index, next_index);
return format (s, "%v", next->name);
}
/* Parse node name -> node index. */
-uword unformat_vlib_node (unformat_input_t * input, va_list * args)
+uword
+unformat_vlib_node (unformat_input_t * input, va_list * args)
{
- vlib_main_t * vm = va_arg (*args, vlib_main_t *);
- u32 * result = va_arg (*args, u32 *);
+ vlib_main_t *vm = va_arg (*args, vlib_main_t *);
+ u32 *result = va_arg (*args, u32 *);
return unformat_user (input, unformat_hash_vec_string,
vm->node_main.node_by_name, result);
}
-u8 * format_vlib_time (u8 * s, va_list * va)
+u8 *
+format_vlib_time (u8 * s, va_list * va)
{
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*va, vlib_main_t *);
f64 time = va_arg (*va, f64);
return format (s, "%12.4f", time);
}
-u8 * format_vlib_cpu_time (u8 * s, va_list * va)
+u8 *
+format_vlib_cpu_time (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
u64 cpu_time = va_arg (*va, u64);
f64 dt;
-
- dt = (cpu_time - vm->clib_time.init_cpu_time) * vm->clib_time.seconds_per_clock;
+
+ dt =
+ (cpu_time -
+ vm->clib_time.init_cpu_time) * vm->clib_time.seconds_per_clock;
return format (s, "%U", format_vlib_time, vm, dt);
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/node_funcs.h b/vlib/vlib/node_funcs.h
index f567ce54909..b5b7dd5f6ba 100644
--- a/vlib/vlib/node_funcs.h
+++ b/vlib/vlib/node_funcs.h
@@ -37,7 +37,7 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-/** \file
+/** \file
vlib node functions
*/
@@ -56,7 +56,9 @@
always_inline vlib_node_t *
vlib_get_node (vlib_main_t * vm, u32 i)
-{ return vec_elt (vm->node_main.nodes, i); }
+{
+ return vec_elt (vm->node_main.nodes, i);
+}
/** \brief Get vlib node by graph arc (next) index.
@param vm vlib_main_t pointer, varies by thread
@@ -68,8 +70,8 @@ vlib_get_node (vlib_main_t * vm, u32 i)
always_inline vlib_node_t *
vlib_get_next_node (vlib_main_t * vm, u32 node_index, u32 next_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n;
n = vec_elt (nm->nodes, node_index);
ASSERT (next_index < vec_len (n->next_nodes));
@@ -85,9 +87,9 @@ vlib_get_next_node (vlib_main_t * vm, u32 node_index, u32 next_index)
always_inline vlib_node_runtime_t *
vlib_node_get_runtime (vlib_main_t * vm, u32 node_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vec_elt (nm->nodes, node_index);
- vlib_process_t * p;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vec_elt (nm->nodes, node_index);
+ vlib_process_t *p;
if (n->type != VLIB_NODE_TYPE_PROCESS)
return vec_elt_at_index (nm->nodes_by_type[n->type], n->runtime_index);
else
@@ -106,7 +108,7 @@ vlib_node_get_runtime (vlib_main_t * vm, u32 node_index)
always_inline void *
vlib_node_get_runtime_data (vlib_main_t * vm, u32 node_index)
{
- vlib_node_runtime_t * r = vlib_node_get_runtime (vm, node_index);
+ vlib_node_runtime_t *r = vlib_node_get_runtime (vm, node_index);
return r->runtime_data;
}
@@ -119,11 +121,10 @@ vlib_node_get_runtime_data (vlib_main_t * vm, u32 node_index)
always_inline void
vlib_node_set_runtime_data (vlib_main_t * vm, u32 node_index,
- void * runtime_data,
- u32 n_runtime_data_bytes)
+ void *runtime_data, u32 n_runtime_data_bytes)
{
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_node_runtime_t * r = vlib_node_get_runtime (vm, node_index);
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_node_runtime_t *r = vlib_node_get_runtime (vm, node_index);
n->runtime_data_bytes = n_runtime_data_bytes;
vec_free (n->runtime_data);
@@ -140,16 +141,17 @@ vlib_node_set_runtime_data (vlib_main_t * vm, u32 node_index,
@param new_state new state for node, see vlib_node_state_t
*/
always_inline void
-vlib_node_set_state (vlib_main_t * vm, u32 node_index, vlib_node_state_t new_state)
+vlib_node_set_state (vlib_main_t * vm, u32 node_index,
+ vlib_node_state_t new_state)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n;
- vlib_node_runtime_t * r;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n;
+ vlib_node_runtime_t *r;
n = vec_elt (nm->nodes, node_index);
if (n->type == VLIB_NODE_TYPE_PROCESS)
{
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
+ vlib_process_t *p = vec_elt (nm->processes, n->runtime_index);
r = &p->node_runtime;
/* When disabling make sure flags are cleared. */
@@ -176,8 +178,8 @@ vlib_node_set_state (vlib_main_t * vm, u32 node_index, vlib_node_state_t new_sta
always_inline void
vlib_node_set_interrupt_pending (vlib_main_t * vm, u32 node_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vec_elt (nm->nodes, node_index);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vec_elt (nm->nodes, node_index);
ASSERT (n->type == VLIB_NODE_TYPE_INPUT);
vec_add1 (nm->pending_interrupt_node_runtime_indices, n->runtime_index);
}
@@ -185,7 +187,7 @@ vlib_node_set_interrupt_pending (vlib_main_t * vm, u32 node_index)
always_inline vlib_process_t *
vlib_get_process_from_node (vlib_main_t * vm, vlib_node_t * node)
{
- vlib_node_main_t * nm = &vm->node_main;
+ vlib_node_main_t *nm = &vm->node_main;
ASSERT (node->type == VLIB_NODE_TYPE_PROCESS);
return vec_elt (nm->processes, node->runtime_index);
}
@@ -194,7 +196,7 @@ vlib_get_process_from_node (vlib_main_t * vm, vlib_node_t * node)
always_inline vlib_frame_t *
vlib_get_frame_no_check (vlib_main_t * vm, uword frame_index)
{
- vlib_frame_t * f;
+ vlib_frame_t *f;
u32 cpu_index = frame_index & VLIB_CPU_MASK;
u32 offset = frame_index & VLIB_OFFSET_MASK;
vm = vlib_mains ? vlib_mains[cpu_index] : vm;
@@ -207,7 +209,7 @@ vlib_frame_index_no_check (vlib_main_t * vm, vlib_frame_t * f)
{
u32 i;
- ASSERT (((uword)f & VLIB_CPU_MASK)==0);
+ ASSERT (((uword) f & VLIB_CPU_MASK) == 0);
vm = vlib_mains ? vlib_mains[f->cpu_index] : vm;
@@ -218,7 +220,7 @@ vlib_frame_index_no_check (vlib_main_t * vm, vlib_frame_t * f)
always_inline vlib_frame_t *
vlib_get_frame (vlib_main_t * vm, uword frame_index)
{
- vlib_frame_t * f = vlib_get_frame_no_check (vm, frame_index);
+ vlib_frame_t *f = vlib_get_frame_no_check (vm, frame_index);
ASSERT (f->flags & VLIB_FRAME_IS_ALLOCATED);
return f;
}
@@ -264,23 +266,23 @@ vlib_frame_vector_args (vlib_frame_t * f)
*/
always_inline void *
vlib_frame_args (vlib_frame_t * f)
-{ return vlib_frame_vector_args (f) - f->scalar_size; }
+{
+ return vlib_frame_vector_args (f) - f->scalar_size;
+}
always_inline vlib_next_frame_t *
vlib_node_runtime_get_next_frame (vlib_main_t * vm,
- vlib_node_runtime_t * n,
- u32 next_index)
+ vlib_node_runtime_t * n, u32 next_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_next_frame_t * nf;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_next_frame_t *nf;
ASSERT (next_index < n->n_next_nodes);
- nf = vec_elt_at_index (nm->next_frames,
- n->next_frame_index + next_index);
+ nf = vec_elt_at_index (nm->next_frames, n->next_frame_index + next_index);
if (CLIB_DEBUG > 0)
{
- vlib_node_t * node, * next;
+ vlib_node_t *node, *next;
node = vec_elt (nm->nodes, n->node_index);
next = vec_elt (nm->nodes, node->next_nodes[next_index]);
ASSERT (nf->node_runtime_index == next->runtime_index);
@@ -304,24 +306,21 @@ vlib_node_runtime_get_next_frame (vlib_main_t * vm,
*/
always_inline vlib_next_frame_t *
-vlib_node_get_next_frame (vlib_main_t * vm,
- u32 node_index,
- u32 next_index)
+vlib_node_get_next_frame (vlib_main_t * vm, u32 node_index, u32 next_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n;
- vlib_node_runtime_t * r;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n;
+ vlib_node_runtime_t *r;
n = vec_elt (nm->nodes, node_index);
r = vec_elt_at_index (nm->nodes_by_type[n->type], n->runtime_index);
return vlib_node_runtime_get_next_frame (vm, r, next_index);
}
-vlib_frame_t *
-vlib_get_next_frame_internal (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- u32 next_index,
- u32 alloc_new_frame);
+vlib_frame_t *vlib_get_next_frame_internal (vlib_main_t * vm,
+ vlib_node_runtime_t * node,
+ u32 next_index,
+ u32 alloc_new_frame);
#define vlib_get_next_frame_macro(vm,node,next_index,vectors,n_vectors_left,alloc_new_frame) \
do { \
@@ -334,7 +333,7 @@ do { \
} while (0)
-/** \brief Get pointer to next frame vector data by
+/** \brief Get pointer to next frame vector data by
(@c vlib_node_runtime_t, @c next_index).
Standard single/dual loop boilerplate element.
@attention This is a MACRO, with SIDE EFFECTS.
@@ -366,8 +365,7 @@ do { \
void
vlib_put_next_frame (vlib_main_t * vm,
vlib_node_runtime_t * r,
- u32 next_index,
- u32 n_packets_left);
+ u32 next_index, u32 n_packets_left);
/* Combination get plus put. Returns vector argument just added. */
#define vlib_set_next_frame(vm,node,next_index,v) \
@@ -382,43 +380,49 @@ vlib_put_next_frame (vlib_main_t * vm,
always_inline void
vlib_set_next_frame_buffer (vlib_main_t * vm,
vlib_node_runtime_t * node,
- u32 next_index,
- u32 buffer_index)
+ u32 next_index, u32 buffer_index)
{
- u32 * p;
+ u32 *p;
p = vlib_set_next_frame (vm, node, next_index, p);
p[0] = buffer_index;
}
-vlib_frame_t * vlib_get_frame_to_node (vlib_main_t * vm, u32 to_node_index);
-void vlib_put_frame_to_node (vlib_main_t * vm, u32 to_node_index, vlib_frame_t * f);
+vlib_frame_t *vlib_get_frame_to_node (vlib_main_t * vm, u32 to_node_index);
+void vlib_put_frame_to_node (vlib_main_t * vm, u32 to_node_index,
+ vlib_frame_t * f);
always_inline vlib_process_t *
vlib_get_current_process (vlib_main_t * vm)
{
- vlib_node_main_t * nm = &vm->node_main;
+ vlib_node_main_t *nm = &vm->node_main;
return vec_elt (nm->processes, nm->current_process_index);
}
always_inline uword
vlib_in_process_context (vlib_main_t * vm)
-{ return vm->node_main.current_process_index != ~0; }
+{
+ return vm->node_main.current_process_index != ~0;
+}
always_inline uword
vlib_current_process (vlib_main_t * vm)
-{ return vlib_get_current_process (vm)->node_runtime.node_index; }
+{
+ return vlib_get_current_process (vm)->node_runtime.node_index;
+}
/* Anything less than 1e-6 is considered zero. */
always_inline uword
vlib_process_suspend_time_is_zero (f64 dt)
-{ return dt < 1e-6; }
+{
+ return dt < 1e-6;
+}
always_inline uword
vlib_process_suspend (vlib_main_t * vm, f64 dt)
{
uword r;
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p = vec_elt (nm->processes, nm->current_process_index);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p = vec_elt (nm->processes, nm->current_process_index);
u64 dt_cpu = dt * vm->clib_time.clocks_per_second;
if (vlib_process_suspend_time_is_zero (dt))
@@ -436,9 +440,10 @@ vlib_process_suspend (vlib_main_t * vm, f64 dt)
}
always_inline void
-vlib_process_free_event_type (vlib_process_t * p, uword t, uword is_one_time_event)
+vlib_process_free_event_type (vlib_process_t * p, uword t,
+ uword is_one_time_event)
{
- ASSERT (! pool_is_free_index (p->event_type_pool, t));
+ ASSERT (!pool_is_free_index (p->event_type_pool, t));
pool_put_index (p->event_type_pool, t);
if (is_one_time_event)
p->one_time_event_type_bitmap =
@@ -448,19 +453,20 @@ vlib_process_free_event_type (vlib_process_t * p, uword t, uword is_one_time_eve
always_inline void
vlib_process_maybe_free_event_type (vlib_process_t * p, uword t)
{
- ASSERT (! pool_is_free_index (p->event_type_pool, t));
+ ASSERT (!pool_is_free_index (p->event_type_pool, t));
if (clib_bitmap_get (p->one_time_event_type_bitmap, t))
vlib_process_free_event_type (p, t, /* is_one_time_event */ 1);
}
always_inline void *
-vlib_process_get_event_data (vlib_main_t * vm, uword * return_event_type_opaque)
+vlib_process_get_event_data (vlib_main_t * vm,
+ uword * return_event_type_opaque)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
- vlib_process_event_type_t * et;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
+ vlib_process_event_type_t *et;
uword t, l;
- void * event_data_vector;
+ void *event_data_vector;
p = vec_elt (nm->processes, nm->current_process_index);
@@ -470,7 +476,8 @@ vlib_process_get_event_data (vlib_main_t * vm, uword * return_event_type_opaque)
if (t == ~0)
return 0;
- p->non_empty_event_type_bitmap = clib_bitmap_andnoti (p->non_empty_event_type_bitmap, t);
+ p->non_empty_event_type_bitmap =
+ clib_bitmap_andnoti (p->non_empty_event_type_bitmap, t);
l = _vec_len (p->pending_event_data_by_type_index[t]);
ASSERT (l > 0);
@@ -490,9 +497,9 @@ vlib_process_get_event_data (vlib_main_t * vm, uword * return_event_type_opaque)
/* Return event data vector for later reuse. We reuse event data to avoid
repeatedly allocating event vectors in cases where we care about speed. */
always_inline void
-vlib_process_put_event_data (vlib_main_t * vm, void * event_data)
+vlib_process_put_event_data (vlib_main_t * vm, void *event_data)
{
- vlib_node_main_t * nm = &vm->node_main;
+ vlib_node_main_t *nm = &vm->node_main;
vec_add1 (nm->recycled_event_data_vectors, event_data);
}
@@ -500,9 +507,9 @@ vlib_process_put_event_data (vlib_main_t * vm, void * event_data)
always_inline uword
vlib_process_get_events (vlib_main_t * vm, uword ** data_vector)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
- vlib_process_event_type_t * et;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
+ vlib_process_event_type_t *et;
uword r, t, l;
p = vec_elt (nm->processes, nm->current_process_index);
@@ -513,7 +520,8 @@ vlib_process_get_events (vlib_main_t * vm, uword ** data_vector)
if (t == ~0)
return t;
- p->non_empty_event_type_bitmap = clib_bitmap_andnoti (p->non_empty_event_type_bitmap, t);
+ p->non_empty_event_type_bitmap =
+ clib_bitmap_andnoti (p->non_empty_event_type_bitmap, t);
l = _vec_len (p->pending_event_data_by_type_index[t]);
if (data_vector)
@@ -531,11 +539,13 @@ vlib_process_get_events (vlib_main_t * vm, uword ** data_vector)
}
always_inline uword
-vlib_process_get_events_helper (vlib_process_t * p, uword t, uword ** data_vector)
+vlib_process_get_events_helper (vlib_process_t * p, uword t,
+ uword ** data_vector)
{
uword l;
- p->non_empty_event_type_bitmap = clib_bitmap_andnoti (p->non_empty_event_type_bitmap, t);
+ p->non_empty_event_type_bitmap =
+ clib_bitmap_andnoti (p->non_empty_event_type_bitmap, t);
l = _vec_len (p->pending_event_data_by_type_index[t]);
if (data_vector)
@@ -553,19 +563,19 @@ always_inline uword
vlib_process_get_events_with_type (vlib_main_t * vm, uword ** data_vector,
uword with_type_opaque)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
- uword t, * h;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
+ uword t, *h;
p = vec_elt (nm->processes, nm->current_process_index);
h = hash_get (p->event_type_index_by_type_opaque, with_type_opaque);
- if (! h)
+ if (!h)
/* This can happen when an event has not yet been
signaled with given opaque type. */
return 0;
t = h[0];
- if (! clib_bitmap_get (p->non_empty_event_type_bitmap, t))
+ if (!clib_bitmap_get (p->non_empty_event_type_bitmap, t))
return 0;
return vlib_process_get_events_helper (p, t, data_vector);
@@ -574,17 +584,19 @@ vlib_process_get_events_with_type (vlib_main_t * vm, uword ** data_vector,
always_inline uword *
vlib_process_wait_for_event (vlib_main_t * vm)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
uword r;
p = vec_elt (nm->processes, nm->current_process_index);
if (clib_bitmap_is_zero (p->non_empty_event_type_bitmap))
{
p->flags |= VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT;
- r = clib_setjmp (&p->resume_longjmp, VLIB_PROCESS_RESUME_LONGJMP_SUSPEND);
+ r =
+ clib_setjmp (&p->resume_longjmp, VLIB_PROCESS_RESUME_LONGJMP_SUSPEND);
if (r == VLIB_PROCESS_RESUME_LONGJMP_SUSPEND)
- clib_longjmp (&p->return_longjmp, VLIB_PROCESS_RETURN_LONGJMP_SUSPEND);
+ clib_longjmp (&p->return_longjmp,
+ VLIB_PROCESS_RETURN_LONGJMP_SUSPEND);
}
return p->non_empty_event_type_bitmap;
@@ -595,18 +607,20 @@ vlib_process_wait_for_one_time_event (vlib_main_t * vm,
uword ** data_vector,
uword with_type_index)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
uword r;
p = vec_elt (nm->processes, nm->current_process_index);
- ASSERT (! pool_is_free_index (p->event_type_pool, with_type_index));
- while (! clib_bitmap_get (p->non_empty_event_type_bitmap, with_type_index))
+ ASSERT (!pool_is_free_index (p->event_type_pool, with_type_index));
+ while (!clib_bitmap_get (p->non_empty_event_type_bitmap, with_type_index))
{
p->flags |= VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT;
- r = clib_setjmp (&p->resume_longjmp, VLIB_PROCESS_RESUME_LONGJMP_SUSPEND);
+ r =
+ clib_setjmp (&p->resume_longjmp, VLIB_PROCESS_RESUME_LONGJMP_SUSPEND);
if (r == VLIB_PROCESS_RESUME_LONGJMP_SUSPEND)
- clib_longjmp (&p->return_longjmp, VLIB_PROCESS_RETURN_LONGJMP_SUSPEND);
+ clib_longjmp (&p->return_longjmp,
+ VLIB_PROCESS_RETURN_LONGJMP_SUSPEND);
}
return vlib_process_get_events_helper (p, with_type_index, data_vector);
@@ -617,21 +631,23 @@ vlib_process_wait_for_event_with_type (vlib_main_t * vm,
uword ** data_vector,
uword with_type_opaque)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
- uword r, * h;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
+ uword r, *h;
p = vec_elt (nm->processes, nm->current_process_index);
h = hash_get (p->event_type_index_by_type_opaque, with_type_opaque);
- while (! h || ! clib_bitmap_get (p->non_empty_event_type_bitmap, h[0]))
+ while (!h || !clib_bitmap_get (p->non_empty_event_type_bitmap, h[0]))
{
p->flags |= VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT;
- r = clib_setjmp (&p->resume_longjmp, VLIB_PROCESS_RESUME_LONGJMP_SUSPEND);
+ r =
+ clib_setjmp (&p->resume_longjmp, VLIB_PROCESS_RESUME_LONGJMP_SUSPEND);
if (r == VLIB_PROCESS_RESUME_LONGJMP_SUSPEND)
- clib_longjmp (&p->return_longjmp, VLIB_PROCESS_RETURN_LONGJMP_SUSPEND);
+ clib_longjmp (&p->return_longjmp,
+ VLIB_PROCESS_RETURN_LONGJMP_SUSPEND);
/* See if unknown event type has been signaled now. */
- if (! h)
+ if (!h)
h = hash_get (p->event_type_index_by_type_opaque, with_type_opaque);
}
@@ -641,15 +657,15 @@ vlib_process_wait_for_event_with_type (vlib_main_t * vm,
always_inline f64
vlib_process_wait_for_event_or_clock (vlib_main_t * vm, f64 dt)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_process_t * p;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_process_t *p;
f64 wakeup_time;
uword r;
p = vec_elt (nm->processes, nm->current_process_index);
if (vlib_process_suspend_time_is_zero (dt)
- || ! clib_bitmap_is_zero (p->non_empty_event_type_bitmap))
+ || !clib_bitmap_is_zero (p->non_empty_event_type_bitmap))
return dt;
wakeup_time = vlib_time_now (vm) + dt;
@@ -674,33 +690,36 @@ vlib_process_wait_for_event_or_clock (vlib_main_t * vm, f64 dt)
always_inline vlib_process_event_type_t *
vlib_process_new_event_type (vlib_process_t * p, uword with_type_opaque)
{
- vlib_process_event_type_t * et;
+ vlib_process_event_type_t *et;
pool_get (p->event_type_pool, et);
et->opaque = with_type_opaque;
return et;
}
always_inline uword
-vlib_process_create_one_time_event (vlib_main_t * vm, uword node_index, uword with_type_opaque)
+vlib_process_create_one_time_event (vlib_main_t * vm, uword node_index,
+ uword with_type_opaque)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
- vlib_process_event_type_t * et;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_process_t *p = vec_elt (nm->processes, n->runtime_index);
+ vlib_process_event_type_t *et;
uword t;
et = vlib_process_new_event_type (p, with_type_opaque);
t = et - p->event_type_pool;
- p->one_time_event_type_bitmap = clib_bitmap_ori (p->one_time_event_type_bitmap, t);
+ p->one_time_event_type_bitmap =
+ clib_bitmap_ori (p->one_time_event_type_bitmap, t);
return t;
}
always_inline void
-vlib_process_delete_one_time_event (vlib_main_t * vm, uword node_index, uword t)
+vlib_process_delete_one_time_event (vlib_main_t * vm, uword node_index,
+ uword t)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_process_t *p = vec_elt (nm->processes, n->runtime_index);
ASSERT (clib_bitmap_get (p->one_time_event_type_bitmap, t));
vlib_process_free_event_type (p, t, /* is_one_time_event */ 1);
@@ -711,22 +730,21 @@ vlib_process_signal_event_helper (vlib_node_main_t * nm,
vlib_node_t * n,
vlib_process_t * p,
uword t,
- uword n_data_elts,
- uword n_data_elt_bytes)
+ uword n_data_elts, uword n_data_elt_bytes)
{
uword p_flags, add_to_pending, delete_from_wheel;
- void * data_to_be_written_by_caller;
+ void *data_to_be_written_by_caller;
- ASSERT (! pool_is_free_index (p->event_type_pool, t));
+ ASSERT (!pool_is_free_index (p->event_type_pool, t));
vec_validate (p->pending_event_data_by_type_index, t);
/* Resize data vector and return caller's data to be written. */
{
- void * data_vec = p->pending_event_data_by_type_index[t];
+ void *data_vec = p->pending_event_data_by_type_index[t];
uword l;
- if (! data_vec && vec_len (nm->recycled_event_data_vectors))
+ if (!data_vec && vec_len (nm->recycled_event_data_vectors))
{
data_vec = vec_pop (nm->recycled_event_data_vectors);
_vec_len (data_vec) = 0;
@@ -736,14 +754,16 @@ vlib_process_signal_event_helper (vlib_node_main_t * nm,
data_vec = _vec_resize (data_vec,
/* length_increment */ n_data_elts,
- /* total size after increment */ (l + n_data_elts) * n_data_elt_bytes,
+ /* total size after increment */
+ (l + n_data_elts) * n_data_elt_bytes,
/* header_bytes */ 0, /* data_align */ 0);
p->pending_event_data_by_type_index[t] = data_vec;
data_to_be_written_by_caller = data_vec + l * n_data_elt_bytes;
}
- p->non_empty_event_type_bitmap = clib_bitmap_ori (p->non_empty_event_type_bitmap, t);
+ p->non_empty_event_type_bitmap =
+ clib_bitmap_ori (p->non_empty_event_type_bitmap, t);
p_flags = p->flags;
@@ -773,7 +793,7 @@ vlib_process_signal_event_helper (vlib_node_main_t * nm,
p->flags = p_flags | VLIB_PROCESS_RESUME_PENDING;
vec_add1 (nm->data_from_advancing_timing_wheel, x);
if (delete_from_wheel)
- timing_wheel_delete (&nm->timing_wheel, x);
+ timing_wheel_delete (&nm->timing_wheel, x);
}
return data_to_be_written_by_caller;
@@ -783,25 +803,26 @@ always_inline void *
vlib_process_signal_event_data (vlib_main_t * vm,
uword node_index,
uword type_opaque,
- uword n_data_elts,
- uword n_data_elt_bytes)
+ uword n_data_elts, uword n_data_elt_bytes)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
- uword * h, t;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_process_t *p = vec_elt (nm->processes, n->runtime_index);
+ uword *h, t;
h = hash_get (p->event_type_index_by_type_opaque, type_opaque);
- if (! h)
+ if (!h)
{
- vlib_process_event_type_t * et = vlib_process_new_event_type (p, type_opaque);
+ vlib_process_event_type_t *et =
+ vlib_process_new_event_type (p, type_opaque);
t = et - p->event_type_pool;
hash_set (p->event_type_index_by_type_opaque, type_opaque, t);
}
else
t = h[0];
- return vlib_process_signal_event_helper (nm, n, p, t, n_data_elts, n_data_elt_bytes);
+ return vlib_process_signal_event_helper (nm, n, p, t, n_data_elts,
+ n_data_elt_bytes);
}
always_inline void *
@@ -809,18 +830,18 @@ vlib_process_signal_event_at_time (vlib_main_t * vm,
f64 dt,
uword node_index,
uword type_opaque,
- uword n_data_elts,
- uword n_data_elt_bytes)
+ uword n_data_elts, uword n_data_elt_bytes)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
- uword * h, t;
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_process_t *p = vec_elt (nm->processes, n->runtime_index);
+ uword *h, t;
h = hash_get (p->event_type_index_by_type_opaque, type_opaque);
- if (! h)
+ if (!h)
{
- vlib_process_event_type_t * et = vlib_process_new_event_type (p, type_opaque);
+ vlib_process_event_type_t *et =
+ vlib_process_new_event_type (p, type_opaque);
t = et - p->event_type_pool;
hash_set (p->event_type_index_by_type_opaque, type_opaque, t);
}
@@ -828,10 +849,11 @@ vlib_process_signal_event_at_time (vlib_main_t * vm,
t = h[0];
if (vlib_process_suspend_time_is_zero (dt))
- return vlib_process_signal_event_helper (nm, n, p, t, n_data_elts, n_data_elt_bytes);
+ return vlib_process_signal_event_helper (nm, n, p, t, n_data_elts,
+ n_data_elt_bytes);
else
{
- vlib_signal_timed_event_data_t * te;
+ vlib_signal_timed_event_data_t *te;
u64 dt_cpu = dt * vm->clib_time.clocks_per_second;
pool_get_aligned (nm->signal_timed_event_data_pool, te, sizeof (te[0]));
@@ -849,7 +871,9 @@ vlib_process_signal_event_at_time (vlib_main_t * vm,
te->event_type_index = t;
timing_wheel_insert (&nm->timing_wheel, clib_cpu_time_now () + dt_cpu,
- vlib_timing_wheel_data_set_timed_event (te - nm->signal_timed_event_data_pool));
+ vlib_timing_wheel_data_set_timed_event (te -
+ nm->
+ signal_timed_event_data_pool));
/* Inline data big enough to hold event? */
if (te->n_data_bytes < sizeof (te->inline_event_data))
@@ -870,68 +894,70 @@ vlib_process_signal_one_time_event_data (vlib_main_t * vm,
uword n_data_elts,
uword n_data_elt_bytes)
{
- vlib_node_main_t * nm = &vm->node_main;
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_process_t * p = vec_elt (nm->processes, n->runtime_index);
- return vlib_process_signal_event_helper (nm, n, p, type_index, n_data_elts, n_data_elt_bytes);
+ vlib_node_main_t *nm = &vm->node_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_process_t *p = vec_elt (nm->processes, n->runtime_index);
+ return vlib_process_signal_event_helper (nm, n, p, type_index, n_data_elts,
+ n_data_elt_bytes);
}
always_inline void
vlib_process_signal_event (vlib_main_t * vm,
- uword node_index,
- uword type_opaque,
- uword data)
+ uword node_index, uword type_opaque, uword data)
{
- uword * d = vlib_process_signal_event_data (vm, node_index, type_opaque,
- 1 /* elts */, sizeof (uword));
+ uword *d = vlib_process_signal_event_data (vm, node_index, type_opaque,
+ 1 /* elts */ , sizeof (uword));
d[0] = data;
}
always_inline void
vlib_process_signal_event_pointer (vlib_main_t * vm,
uword node_index,
- uword type_opaque,
- void * data)
+ uword type_opaque, void *data)
{
- void ** d = vlib_process_signal_event_data (vm, node_index, type_opaque,
- 1 /* elts */, sizeof (data));
+ void **d = vlib_process_signal_event_data (vm, node_index, type_opaque,
+ 1 /* elts */ , sizeof (data));
d[0] = data;
}
always_inline void
vlib_process_signal_one_time_event (vlib_main_t * vm,
uword node_index,
- uword type_index,
- uword data)
+ uword type_index, uword data)
{
- uword * d = vlib_process_signal_one_time_event_data (vm, node_index, type_index,
- 1 /* elts */, sizeof (uword));
+ uword *d =
+ vlib_process_signal_one_time_event_data (vm, node_index, type_index,
+ 1 /* elts */ , sizeof (uword));
d[0] = data;
}
always_inline void
-vlib_signal_one_time_waiting_process (vlib_main_t * vm, vlib_one_time_waiting_process_t * p)
+vlib_signal_one_time_waiting_process (vlib_main_t * vm,
+ vlib_one_time_waiting_process_t * p)
{
- vlib_process_signal_one_time_event (vm, p->node_index, p->one_time_event, /* data */ ~0);
+ vlib_process_signal_one_time_event (vm, p->node_index, p->one_time_event,
+ /* data */ ~0);
memset (p, ~0, sizeof (p[0]));
}
always_inline void
vlib_signal_one_time_waiting_process_vector (vlib_main_t * vm,
- vlib_one_time_waiting_process_t ** wps)
+ vlib_one_time_waiting_process_t
+ ** wps)
{
- vlib_one_time_waiting_process_t * wp;
- vec_foreach (wp, *wps)
- vlib_signal_one_time_waiting_process (vm, wp);
+ vlib_one_time_waiting_process_t *wp;
+ vec_foreach (wp, *wps) vlib_signal_one_time_waiting_process (vm, wp);
vec_free (*wps);
}
always_inline void
-vlib_current_process_wait_for_one_time_event (vlib_main_t * vm, vlib_one_time_waiting_process_t * p)
+vlib_current_process_wait_for_one_time_event (vlib_main_t * vm,
+ vlib_one_time_waiting_process_t
+ * p)
{
p->node_index = vlib_current_process (vm);
- p->one_time_event =
- vlib_process_create_one_time_event (vm, p->node_index, /* type opaque */ ~0);
+ p->one_time_event = vlib_process_create_one_time_event (vm, p->node_index, /* type opaque */
+ ~0);
vlib_process_wait_for_one_time_event (vm,
/* don't care about data */ 0,
p->one_time_event);
@@ -939,9 +965,10 @@ vlib_current_process_wait_for_one_time_event (vlib_main_t * vm, vlib_one_time_wa
always_inline void
vlib_current_process_wait_for_one_time_event_vector (vlib_main_t * vm,
- vlib_one_time_waiting_process_t ** wps)
+ vlib_one_time_waiting_process_t
+ ** wps)
{
- vlib_one_time_waiting_process_t * wp;
+ vlib_one_time_waiting_process_t *wp;
vec_add2 (*wps, wp, 1);
vlib_current_process_wait_for_one_time_event (vm, wp);
}
@@ -960,7 +987,9 @@ vlib_node_runtime_update_main_loop_vector_stats (vlib_main_t * vm,
i0 = i ^ 0;
i1 = i ^ 1;
d = ((vm->main_loop_count >> VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE)
- - (node->main_loop_count_last_dispatch >> VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE));
+ -
+ (node->main_loop_count_last_dispatch >>
+ VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE));
vi0 = node->main_loop_vector_stats[i0];
vi1 = node->main_loop_vector_stats[i1];
vi0 = d == 0 ? vi0 : 0;
@@ -976,59 +1005,57 @@ vlib_node_runtime_update_main_loop_vector_stats (vlib_main_t * vm,
always_inline f64
vlib_node_vectors_per_main_loop_as_float (vlib_main_t * vm, u32 node_index)
{
- vlib_node_runtime_t * rt = vlib_node_get_runtime (vm, node_index);
+ vlib_node_runtime_t *rt = vlib_node_get_runtime (vm, node_index);
u32 v;
- v = vlib_node_runtime_update_main_loop_vector_stats (vm, rt, /* n_vectors */ 0);
+ v = vlib_node_runtime_update_main_loop_vector_stats (vm, rt, /* n_vectors */
+ 0);
return (f64) v / (1 << VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE);
}
always_inline u32
vlib_node_vectors_per_main_loop_as_integer (vlib_main_t * vm, u32 node_index)
{
- vlib_node_runtime_t * rt = vlib_node_get_runtime (vm, node_index);
+ vlib_node_runtime_t *rt = vlib_node_get_runtime (vm, node_index);
u32 v;
- v = vlib_node_runtime_update_main_loop_vector_stats (vm, rt, /* n_vectors */ 0);
+ v = vlib_node_runtime_update_main_loop_vector_stats (vm, rt, /* n_vectors */
+ 0);
return v >> VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE;
}
void
-vlib_frame_free (vlib_main_t * vm,
- vlib_node_runtime_t * r,
- vlib_frame_t * f);
+vlib_frame_free (vlib_main_t * vm, vlib_node_runtime_t * r, vlib_frame_t * f);
/* Add next node to given node in given slot. */
uword
vlib_node_add_next_with_slot (vlib_main_t * vm,
- uword node,
- uword next_node,
- uword slot);
+ uword node, uword next_node, uword slot);
/* As above but adds to end of node's next vector. */
always_inline uword
vlib_node_add_next (vlib_main_t * vm, uword node, uword next_node)
-{ return vlib_node_add_next_with_slot (vm, node, next_node, ~0); }
+{
+ return vlib_node_add_next_with_slot (vm, node, next_node, ~0);
+}
/* Add next node to given node in given slot. */
uword
vlib_node_add_named_next_with_slot (vlib_main_t * vm,
- uword node,
- char * next_name,
- uword slot);
+ uword node, char *next_name, uword slot);
/* As above but adds to end of node's next vector. */
always_inline uword
-vlib_node_add_named_next (vlib_main_t * vm,
- uword node,
- char * name)
-{ return vlib_node_add_named_next_with_slot (vm, node, name, ~0); }
+vlib_node_add_named_next (vlib_main_t * vm, uword node, char *name)
+{
+ return vlib_node_add_named_next_with_slot (vm, node, name, ~0);
+}
/* Query node given name. */
-vlib_node_t * vlib_get_node_by_name (vlib_main_t * vm, u8 * name);
+vlib_node_t *vlib_get_node_by_name (vlib_main_t * vm, u8 * name);
/* Rename a node. */
-void vlib_node_rename (vlib_main_t * vm, u32 node_index, char * fmt, ...);
+void vlib_node_rename (vlib_main_t * vm, u32 node_index, char *fmt, ...);
/* Register new packet processing node. Nodes can be registered
dynamically via this call or statically via the VLIB_REGISTER_NODE
@@ -1042,11 +1069,10 @@ void vlib_register_all_static_nodes (vlib_main_t * vm);
void vlib_start_process (vlib_main_t * vm, uword process_index);
/* Sync up runtime and main node stats. */
-void
-vlib_node_sync_stats (vlib_main_t * vm, vlib_node_t * n);
+void vlib_node_sync_stats (vlib_main_t * vm, vlib_node_t * n);
/* Node graph initialization function. */
-clib_error_t * vlib_node_main_init (vlib_main_t * vm);
+clib_error_t *vlib_node_main_init (vlib_main_t * vm);
format_function_t format_vlib_node_graph;
format_function_t format_vlib_node_name;
@@ -1057,14 +1083,22 @@ format_function_t format_vlib_time;
/* Parse node name -> node index. */
unformat_function_t unformat_vlib_node;
-always_inline void
-vlib_node_increment_counter (vlib_main_t *vm, u32 node_index,
- u32 counter_index, u64 increment)
+always_inline void
+vlib_node_increment_counter (vlib_main_t * vm, u32 node_index,
+ u32 counter_index, u64 increment)
{
- vlib_node_t * n = vlib_get_node (vm, node_index);
- vlib_error_main_t * em = &vm->error_main;
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ vlib_error_main_t *em = &vm->error_main;
u32 node_counter_base_index = n->error_heap_index;
em->counters[node_counter_base_index + counter_index] += increment;
}
#endif /* included_vlib_node_funcs_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/parse.c b/vlib/vlib/parse.c
index cea8f7515a0..1c4500ce85a 100644
--- a/vlib/vlib/parse.c
+++ b/vlib/vlib/parse.c
@@ -17,10 +17,11 @@
#define PARSE_DEBUG 0
u16 word_type_index, number_type_index, eof_type_index, rule_eof_type_index,
- plus_type_index, minus_type_index, star_type_index, slash_type_index,
- lpar_type_index, rpar_type_index;
+ plus_type_index, minus_type_index, star_type_index, slash_type_index,
+ lpar_type_index, rpar_type_index;
-u8 * format_vlib_parse_value (u8 * s, va_list * args)
+u8 *
+format_vlib_parse_value (u8 * s, va_list * args)
{
vlib_parse_main_t *pm = va_arg (*args, vlib_parse_main_t *);
vlib_parse_type_t *type;
@@ -29,37 +30,41 @@ u8 * format_vlib_parse_value (u8 * s, va_list * args)
s = format (s, "%d items:\n", vec_len (pm->parse_value));
vec_foreach (v, pm->parse_value)
- {
- type_index = v->type;
- type = pool_elt_at_index (pm->parse_types, type_index);
- if (type->format_value)
- s = format (s, "[%d]: %U\n", v - pm->parse_value,
- type->format_value, v);
- else
- s = format (s, "[%d]: (nofun)\n", v - pm->parse_value);
- }
+ {
+ type_index = v->type;
+ type = pool_elt_at_index (pm->parse_types, type_index);
+ if (type->format_value)
+ s = format (s, "[%d]: %U\n", v - pm->parse_value,
+ type->format_value, v);
+ else
+ s = format (s, "[%d]: (nofun)\n", v - pm->parse_value);
+ }
return s;
}
-static u8 * format_vlib_parse_match (u8 * s, va_list * args)
+static u8 *
+format_vlib_parse_match (u8 * s, va_list * args)
{
vlib_parse_match_t m = va_arg (*args, vlib_parse_match_t);
- char * t = 0;
+ char *t = 0;
switch (m)
{
#define _(a) case VLIB_PARSE_##a: t = #a; break;
foreach_parse_match_type
#undef _
- default: t = 0; break;
+ default:
+ t = 0;
+ break;
}
-
+
if (t)
return format (s, "%s", t);
else
return format (s, "unknown 0x%x", m);
}
-static u8 * format_vlib_parse_item (u8 * s, va_list * args)
+static u8 *
+format_vlib_parse_item (u8 * s, va_list * args)
{
vlib_parse_main_t *pm = va_arg (*args, vlib_parse_main_t *);
vlib_parse_item_t *item = va_arg (*args, vlib_parse_item_t *);
@@ -72,7 +77,8 @@ static u8 * format_vlib_parse_item (u8 * s, va_list * args)
return s;
}
-static u8 * format_vlib_parse_graph (u8 * s, va_list * args)
+static u8 *
+format_vlib_parse_graph (u8 * s, va_list * args)
{
vlib_parse_main_t *pm = va_arg (*args, vlib_parse_main_t *);
vlib_parse_graph_t *node = va_arg (*args, vlib_parse_graph_t *);
@@ -80,11 +86,13 @@ static u8 * format_vlib_parse_graph (u8 * s, va_list * args)
vlib_parse_type_t *type;
/* $$$ hash table */
- pool_foreach (type, pm->parse_types,
+ /* *INDENT-OFF* */
+ pool_foreach (type, pm->parse_types,
({
if (type->rule_index == node - pm->parse_graph)
s = format (s, "\n<%s>\n", type->name);
}));
+/* *INDENT-ON* */
if (pm->root_index == (node - pm->parse_graph))
s = format (s, "\n<root>\n");
@@ -94,12 +102,12 @@ static u8 * format_vlib_parse_graph (u8 * s, va_list * args)
s = format (s, "[%d] %U ", node - pm->parse_graph,
format_vlib_parse_item, pm, item);
- if (node->peer == (u32)~0)
+ if (node->peer == (u32) ~ 0)
s = format (s, "peer nil ");
else
s = format (s, "peer %4u ", node->peer);
- if (node->deeper == (u32)~0)
+ if (node->deeper == (u32) ~ 0)
s = format (s, "deeper nil ");
else
s = format (s, "deeper %4u ", node->deeper);
@@ -107,78 +115,81 @@ static u8 * format_vlib_parse_graph (u8 * s, va_list * args)
return s;
}
-void dump_parse_graph (void)
+void
+dump_parse_graph (void)
{
vlib_parse_main_t *pm = &vlib_parse_main;
vlib_parse_graph_t *node;
+ /* *INDENT-OFF* */
pool_foreach (node, pm->parse_graph, ({
fformat(stdout, "%U\n", format_vlib_parse_graph, pm, node);
}));
+/* *INDENT-ON* */
}
always_inline void
-parse_cleanup_value (vlib_parse_main_t *pm, vlib_parse_value_t *pv)
+parse_cleanup_value (vlib_parse_main_t * pm, vlib_parse_value_t * pv)
{
vlib_parse_type_t *type = pool_elt_at_index (pm->parse_types, pv->type);
if (type->value_cleanup_function)
type->value_cleanup_function (pv);
}
-static void parse_reset (vlib_parse_main_t *pm, u8 *input)
+static void
+parse_reset (vlib_parse_main_t * pm, u8 * input)
{
vlib_lex_token_t *t;
vlib_parse_value_t *pv;
vlib_lex_reset (pm->lex_main, input);
- vec_foreach (t, pm->tokens)
- vlib_lex_cleanup_token (t);
+ vec_foreach (t, pm->tokens) vlib_lex_cleanup_token (t);
- vec_foreach (pv, pm->parse_value)
- parse_cleanup_value (pm, pv);
+ vec_foreach (pv, pm->parse_value) parse_cleanup_value (pm, pv);
_vec_len (pm->parse_value) = 0;
_vec_len (pm->tokens) = 0;
pm->current_token_index = 0;
}
-static void parse_help (vlib_parse_main_t *pm, u32 index)
+static void
+parse_help (vlib_parse_main_t * pm, u32 index)
{
vlib_parse_graph_t *node;
- vlib_parse_item_t *item;
- vlib_parse_type_t *type;
+ vlib_parse_item_t *item;
+ vlib_parse_type_t *type;
vlib_main_t *vm = pm->vlib_main;
u8 *help_input;
int i;
-
+
help_input = vec_dup (pm->lex_main->input_vector);
- for (i = vec_len(help_input)-1; i >= 0; i--)
+ for (i = vec_len (help_input) - 1; i >= 0; i--)
if (help_input[i] == '?')
{
help_input[i] = 0;
- _vec_len(help_input) = i;
+ _vec_len (help_input) = i;
break;
}
- for (i = vec_len(help_input)-1; i >= 0; i--)
+ for (i = vec_len (help_input) - 1; i >= 0; i--)
{
if (help_input[i] != ' ' && help_input[i] != '\t')
break;
help_input[i] = 0;
break;
}
- _vec_len(help_input) = i+1;
+ _vec_len (help_input) = i + 1;
- while (index != (u32)~0)
+ while (index != (u32) ~ 0)
{
node = pool_elt_at_index (pm->parse_graph, index);
item = pool_elt_at_index (pm->parse_items, node->item);
type = pool_elt_at_index (pm->parse_types, item->type);
-
+
if (item->type == eof_type_index && vec_len (pm->match_items) == 0)
- /* do nothing */;
+ /* do nothing */ ;
else if (item->type == word_type_index)
vlib_cli_output (vm, "%s %s\n", help_input, item->value.as_pointer);
else
@@ -189,26 +200,26 @@ static void parse_help (vlib_parse_main_t *pm, u32 index)
}
static vlib_parse_match_t
-parse_eval_internal (vlib_parse_main_t *pm, u32 index)
+parse_eval_internal (vlib_parse_main_t * pm, u32 index)
{
vlib_parse_graph_t *node;
- vlib_parse_item_t *item;
- vlib_parse_type_t *type;
+ vlib_parse_item_t *item;
+ vlib_parse_type_t *type;
vlib_parse_value_t value, *pv;
vlib_parse_match_t rv;
u32 *partial_matches = 0;
vlib_lex_token_t *t;
- u32 save_token_index=(u32)~0, save_match_items=0;
+ u32 save_token_index = (u32) ~ 0, save_match_items = 0;
int had_value = 0;
- if (pm->current_token_index >= vec_len(pm->tokens))
+ if (pm->current_token_index >= vec_len (pm->tokens))
return VLIB_PARSE_MATCH_FAIL;
/* current token */
t = vec_elt_at_index (pm->tokens, pm->current_token_index);
/* Help ? */
- if (PREDICT_FALSE(t->token == VLIB_LEX_qmark))
+ if (PREDICT_FALSE (t->token == VLIB_LEX_qmark))
{
parse_help (pm, index);
_vec_len (pm->match_items) = 0;
@@ -216,107 +227,106 @@ parse_eval_internal (vlib_parse_main_t *pm, u32 index)
}
/* Across all peers at this level of the parse graph */
- while (index != (u32)~0)
+ while (index != (u32) ~ 0)
{
node = pool_elt_at_index (pm->parse_graph, index);
item = pool_elt_at_index (pm->parse_items, node->item);
type = pool_elt_at_index (pm->parse_types, item->type);
-
- /*
+
+ /*
* Save the token index. We may have to back up several
- * trie plies. Type-specific match functions can consume
+ * trie plies. Type-specific match functions can consume
* multiple tokens, and they may not be optimally careful
*/
save_token_index = pm->current_token_index;
save_match_items = vec_len (pm->match_items);
vec_add1 (pm->match_items, node->item);
-
+
if (PARSE_DEBUG > 1)
- clib_warning ("Try to match token %U against node %d",
- format_vlib_lex_token, pm->lex_main, t, index);
-
+ clib_warning ("Try to match token %U against node %d",
+ format_vlib_lex_token, pm->lex_main, t, index);
+
/* Call the type-specific match function */
rv = type->match_function (pm, type, t, &value);
-
+
if (PARSE_DEBUG > 1)
- clib_warning ("returned %U", format_vlib_parse_match, rv);
-
+ clib_warning ("returned %U", format_vlib_parse_match, rv);
+
switch (rv)
- {
- case VLIB_PARSE_MATCH_VALUE:
- /*
- * Matched, and returned a value to append to the
- * set of args passed to the action function
- */
- value.type = item->type;
- vec_add1 (pm->parse_value, value);
- had_value = 1;
- /* fallthrough */
-
- case VLIB_PARSE_MATCH_FULL:
- unambiguous_partial_match:
- /* Consume the matched token */
- pm->current_token_index++;
-
- /* continue matching along this path */
- rv = parse_eval_internal (pm, node->deeper);
-
- /* this is not the right path */
- if (rv == VLIB_PARSE_MATCH_FAIL)
- {
- if (had_value)
- {
- /* Delete the value */
- value = pm->parse_value [vec_len (pm->parse_value)-1];
- parse_cleanup_value (pm, &value);
- _vec_len (pm->parse_value) -= 1;
- }
- /* Continue with the next sibling */
- pm->current_token_index = save_token_index;
- _vec_len (pm->match_items) = save_match_items;
- index = node->peer;
- break;
- }
- return rv;
-
- case VLIB_PARSE_MATCH_PARTIAL:
- /* Partial (substring) match, remember it but keep going */
- vec_add1 (partial_matches, node - pm->parse_graph);
- index = node->peer;
- break;
-
- case VLIB_PARSE_MATCH_FAIL:
- /* Continue with the next sibling */
- index = node->peer;
- _vec_len (pm->match_items) = save_match_items;
- break;
-
- case VLIB_PARSE_MATCH_DONE:
- /* Parse complete, invoke the action function */
- if (PARSE_DEBUG > 0)
- clib_warning ("parse_value: %U", format_vlib_parse_value, pm);
-
- {
- vlib_parse_eval_function_t * f = item->value.as_pointer;
- if (f)
+ {
+ case VLIB_PARSE_MATCH_VALUE:
+ /*
+ * Matched, and returned a value to append to the
+ * set of args passed to the action function
+ */
+ value.type = item->type;
+ vec_add1 (pm->parse_value, value);
+ had_value = 1;
+ /* fallthrough */
+
+ case VLIB_PARSE_MATCH_FULL:
+ unambiguous_partial_match:
+ /* Consume the matched token */
+ pm->current_token_index++;
+
+ /* continue matching along this path */
+ rv = parse_eval_internal (pm, node->deeper);
+
+ /* this is not the right path */
+ if (rv == VLIB_PARSE_MATCH_FAIL)
+ {
+ if (had_value)
+ {
+ /* Delete the value */
+ value = pm->parse_value[vec_len (pm->parse_value) - 1];
+ parse_cleanup_value (pm, &value);
+ _vec_len (pm->parse_value) -= 1;
+ }
+ /* Continue with the next sibling */
+ pm->current_token_index = save_token_index;
+ _vec_len (pm->match_items) = save_match_items;
+ index = node->peer;
+ break;
+ }
+ return rv;
+
+ case VLIB_PARSE_MATCH_PARTIAL:
+ /* Partial (substring) match, remember it but keep going */
+ vec_add1 (partial_matches, node - pm->parse_graph);
+ index = node->peer;
+ break;
+
+ case VLIB_PARSE_MATCH_FAIL:
+ /* Continue with the next sibling */
+ index = node->peer;
+ _vec_len (pm->match_items) = save_match_items;
+ break;
+
+ case VLIB_PARSE_MATCH_DONE:
+ /* Parse complete, invoke the action function */
+ if (PARSE_DEBUG > 0)
+ clib_warning ("parse_value: %U", format_vlib_parse_value, pm);
+
+ {
+ vlib_parse_eval_function_t *f = item->value.as_pointer;
+ if (f)
rv = f (pm, item, pm->parse_value);
- }
-
- vec_foreach (pv, pm->parse_value)
- parse_cleanup_value (pm, pv);
- _vec_len (pm->parse_value) = 0;
- _vec_len (pm->match_items) = 0;
- return rv;
-
- case VLIB_PARSE_MATCH_AMBIGUOUS:
- case VLIB_PARSE_MATCH_EVAL_FAIL:
- case VLIB_PARSE_MATCH_RULE:
- _vec_len (pm->match_items) = save_match_items;
- return rv;
- }
+ }
+
+ vec_foreach (pv, pm->parse_value) parse_cleanup_value (pm, pv);
+ _vec_len (pm->parse_value) = 0;
+ _vec_len (pm->match_items) = 0;
+ return rv;
+
+ case VLIB_PARSE_MATCH_AMBIGUOUS:
+ case VLIB_PARSE_MATCH_EVAL_FAIL:
+ case VLIB_PARSE_MATCH_RULE:
+ _vec_len (pm->match_items) = save_match_items;
+ return rv;
+ }
}
- /*
+ /*
* Out of siblings. If we have exactly one partial match
* we win
*/
@@ -342,18 +352,16 @@ parse_eval_internal (vlib_parse_main_t *pm, u32 index)
return rv;
}
-vlib_parse_match_t rule_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t,
- vlib_parse_value_t *valuep)
+vlib_parse_match_t
+rule_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
{
vlib_parse_match_t rv;
static int recursion_level;
if (PARSE_DEBUG > 1)
- clib_warning ("[%d]: try to match type %s graph index %d",
- recursion_level,
- type->name,
- type->rule_index);
+ clib_warning ("[%d]: try to match type %s graph index %d",
+ recursion_level, type->name, type->rule_index);
recursion_level++;
rv = parse_eval_internal (pm, type->rule_index);
recursion_level--;
@@ -362,42 +370,47 @@ vlib_parse_match_t rule_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
if (rv == VLIB_PARSE_MATCH_RULE)
{
if (PARSE_DEBUG > 1)
- clib_warning ("[%d]: type %s matched", recursion_level, type->name);
+ clib_warning ("[%d]: type %s matched", recursion_level, type->name);
return VLIB_PARSE_MATCH_FULL;
- }
- else
+ }
+ else
{
if (PARSE_DEBUG > 1)
- clib_warning ("[%d]: type %s returns %U", recursion_level, type->name,
- format_vlib_parse_match, rv);
+ clib_warning ("[%d]: type %s returns %U", recursion_level, type->name,
+ format_vlib_parse_match, rv);
}
return rv;
}
-static int parse_eval (vlib_parse_main_t *pm, u8 *input)
+static int
+parse_eval (vlib_parse_main_t * pm, u8 * input)
{
- vlib_lex_token_t * t;
+ vlib_lex_token_t *t;
parse_reset (pm, input);
-
+
/* Tokenize the entire input vector */
- do {
- vec_add2 (pm->tokens, t, 1);
- vlib_lex_get_token (pm->lex_main, t);
- } while (t->token != VLIB_LEX_eof);
+ do
+ {
+ vec_add2 (pm->tokens, t, 1);
+ vlib_lex_get_token (pm->lex_main, t);
+ }
+ while (t->token != VLIB_LEX_eof);
/* Feed it to the parser */
return parse_eval_internal (pm, pm->root_index);
}
/* Temporary vlib stub */
-vlib_parse_match_t vlib_parse_eval (u8 *input)
+vlib_parse_match_t
+vlib_parse_eval (u8 * input)
{
return parse_eval (&vlib_parse_main, input);
}
-u16 parse_type_find_or_create (vlib_parse_main_t *pm, vlib_parse_type_t *t)
+u16
+parse_type_find_or_create (vlib_parse_main_t * pm, vlib_parse_type_t * t)
{
uword *p;
vlib_parse_type_t *n;
@@ -409,7 +422,7 @@ u16 parse_type_find_or_create (vlib_parse_main_t *pm, vlib_parse_type_t *t)
pool_get (pm->parse_types, n);
*n = *t;
- n->rule_index = (u32) ~0;
+ n->rule_index = (u32) ~ 0;
name_copy = format (0, "%s%c", n->name, 0);
@@ -417,7 +430,8 @@ u16 parse_type_find_or_create (vlib_parse_main_t *pm, vlib_parse_type_t *t)
return n - pm->parse_types;
}
-u16 parse_type_find_by_name (vlib_parse_main_t *pm, char *name)
+u16
+parse_type_find_by_name (vlib_parse_main_t * pm, char *name)
{
uword *p;
@@ -425,11 +439,11 @@ u16 parse_type_find_by_name (vlib_parse_main_t *pm, char *name)
if (p)
return p[0];
- return (u16) ~0;
+ return (u16) ~ 0;
}
-u32 parse_item_find_or_create (vlib_parse_main_t *pm, vlib_parse_item_t *item)
-
+u32
+parse_item_find_or_create (vlib_parse_main_t * pm, vlib_parse_item_t * item)
{
uword *p;
vlib_parse_item_t *i;
@@ -446,7 +460,8 @@ u32 parse_item_find_or_create (vlib_parse_main_t *pm, vlib_parse_item_t *item)
return i - pm->parse_items;
}
-static void parse_type_and_graph_init (vlib_parse_main_t *pm)
+static void
+parse_type_and_graph_init (vlib_parse_main_t * pm)
{
u32 eof_index;
vlib_parse_type_t type;
@@ -467,14 +482,13 @@ static void parse_type_and_graph_init (vlib_parse_main_t *pm)
_ (rpar)
#define _(a) a##_type_index = parse_type_find_by_name (pm, #a);
- foreach_token_type
+ foreach_token_type
#undef _
-
- memset (&item, 0, sizeof (item));
+ memset (&item, 0, sizeof (item));
item.type = eof_type_index;
-
+
eof_index = parse_item_find_or_create (pm, &item);
- pm->root_index = (u32)~0;
+ pm->root_index = (u32) ~ 0;
#if 0
pool_get (pm->parse_graph, g);
@@ -486,41 +500,44 @@ static void parse_type_and_graph_init (vlib_parse_main_t *pm)
-static void tokenize (vlib_parse_main_t *pm, parse_registration_t *pr)
+static void
+tokenize (vlib_parse_main_t * pm, parse_registration_t * pr)
{
vlib_lex_token_t *t;
- pm->register_input = format (pm->register_input,
- "%s%c", pr->initializer, 0);
-
+ pm->register_input = format (pm->register_input,
+ "%s%c", pr->initializer, 0);
+
parse_reset (pm, pm->register_input);
-
- do {
- vec_add2 (pm->tokens, t, 1);
- vlib_lex_get_token (pm->lex_main, t);
- } while (t->token != VLIB_LEX_eof);
+
+ do
+ {
+ vec_add2 (pm->tokens, t, 1);
+ vlib_lex_get_token (pm->lex_main, t);
+ }
+ while (t->token != VLIB_LEX_eof);
_vec_len (pm->register_input) = 0;
}
-static int is_typed_rule (vlib_parse_main_t *pm)
+static int
+is_typed_rule (vlib_parse_main_t * pm)
{
vlib_lex_token_t *t = vec_elt_at_index (pm->tokens, 0);
-
+
/* <mytype> = blah blah blah */
- if (vec_len(pm->tokens) >= 4
+ if (vec_len (pm->tokens) >= 4
&& t[0].token == VLIB_LEX_lt
&& t[1].token == VLIB_LEX_word
- && t[2].token == VLIB_LEX_gt
- && t[3].token == VLIB_LEX_equals)
+ && t[2].token == VLIB_LEX_gt && t[3].token == VLIB_LEX_equals)
return 1;
return 0;
}
-static int token_matches_graph_node (vlib_parse_main_t *pm,
- vlib_lex_token_t *t,
- vlib_parse_graph_t *node,
- vlib_parse_item_t *item,
- vlib_parse_type_t *type,
- u32 *token_increment)
+static int
+token_matches_graph_node (vlib_parse_main_t * pm,
+ vlib_lex_token_t * t,
+ vlib_parse_graph_t * node,
+ vlib_parse_item_t * item,
+ vlib_parse_type_t * type, u32 * token_increment)
{
/* EOFs don't match */
if (t->token == VLIB_LEX_eof)
@@ -531,11 +548,11 @@ static int token_matches_graph_node (vlib_parse_main_t *pm,
{
/* but the item in hand is not a word */
if (item->type != word_type_index)
- return 0;
-
+ return 0;
+
/* Or it's not this particular word */
if (strcmp (t->value.as_pointer, item->value.as_pointer))
- return 0;
+ return 0;
*token_increment = 1;
return 1;
}
@@ -543,26 +560,25 @@ static int token_matches_graph_node (vlib_parse_main_t *pm,
if (t->token == VLIB_LEX_lt)
{
u16 token_type_index;
-
+
/* < TYPE > */
- if (t[1].token != VLIB_LEX_word ||
- t[2].token != VLIB_LEX_gt)
- {
- clib_warning (0, "broken type name in '%s'", pm->register_input);
- return 0;
- }
-
+ if (t[1].token != VLIB_LEX_word || t[2].token != VLIB_LEX_gt)
+ {
+ clib_warning (0, "broken type name in '%s'", pm->register_input);
+ return 0;
+ }
+
token_type_index = parse_type_find_by_name (pm, t[1].value.as_pointer);
- if (token_type_index == (u16)~0)
- {
- clib_warning (0, "unknown type '%s'", t[1].value.as_pointer);
- return 0;
- }
-
+ if (token_type_index == (u16) ~ 0)
+ {
+ clib_warning (0, "unknown type '%s'", t[1].value.as_pointer);
+ return 0;
+ }
+
/* Its a known type but does not match. */
if (item->type != token_type_index)
- return 0;
-
+ return 0;
+
*token_increment = 3;
return 1;
}
@@ -570,15 +586,15 @@ static int token_matches_graph_node (vlib_parse_main_t *pm,
return 0;
}
-u32 generate_subgraph_from_tokens (vlib_parse_main_t *pm,
- vlib_lex_token_t *t,
- u32 *new_subgraph_depth,
- parse_registration_t *pr,
- int not_a_rule)
+u32
+generate_subgraph_from_tokens (vlib_parse_main_t * pm,
+ vlib_lex_token_t * t,
+ u32 * new_subgraph_depth,
+ parse_registration_t * pr, int not_a_rule)
{
vlib_parse_graph_t *g, *last_g;
vlib_parse_item_t new_item;
- u32 rv = (u32)~0, new_item_index, last_index = (u32)~0;
+ u32 rv = (u32) ~ 0, new_item_index, last_index = (u32) ~ 0;
u16 token_type_index;
u32 depth = 0;
@@ -591,73 +607,73 @@ u32 generate_subgraph_from_tokens (vlib_parse_main_t *pm,
new_item.type = word_type_index;
new_item.value.as_pointer = vec_dup ((u8 *) t->value.as_pointer);
new_item_index = parse_item_find_or_create (pm, &new_item);
- t++;
+ t++;
}
else if (t->token == VLIB_LEX_lt)
{
- if (t[1].token != VLIB_LEX_word ||
- t[2].token != VLIB_LEX_gt)
+ if (t[1].token != VLIB_LEX_word || t[2].token != VLIB_LEX_gt)
{
clib_warning ("broken type name in '%s'", pm->register_input);
- goto screwed;
+ goto screwed;
}
- token_type_index = parse_type_find_by_name (pm,
- t[1].value.as_pointer);
- if (token_type_index == (u16)~0)
+ token_type_index = parse_type_find_by_name (pm,
+ t[1].value.as_pointer);
+ if (token_type_index == (u16) ~ 0)
{
- clib_warning ("unknown type 2 '%s'", t[1].value.as_pointer);
- goto screwed;
+ clib_warning ("unknown type 2 '%s'", t[1].value.as_pointer);
+ goto screwed;
}
new_item.type = token_type_index;
new_item.value.as_pointer = 0;
new_item_index = parse_item_find_or_create (pm, &new_item);
- t += 3; /* skip < <type-name> and > */
+ t += 3; /* skip < <type-name> and > */
}
else if (t->token == VLIB_LEX_eof)
{
- screwed:
+ screwed:
new_item.type = not_a_rule ? eof_type_index : rule_eof_type_index;
new_item.value.as_pointer = pr->eof_match;
new_item_index = parse_item_find_or_create (pm, &new_item);
- t++;
+ t++;
}
else
{
- clib_warning ("unexpected token %U index %d in '%s'",
- format_vlib_lex_token, pm->lex_main, t,
- t - pm->tokens, pm->register_input);
- goto screwed;
+ clib_warning ("unexpected token %U index %d in '%s'",
+ format_vlib_lex_token, pm->lex_main, t,
+ t - pm->tokens, pm->register_input);
+ goto screwed;
}
pool_get (pm->parse_graph, g);
memset (g, 0xff, sizeof (*g));
g->item = new_item_index;
depth++;
-
- if (rv == (u32)~0)
- {
- rv = g - pm->parse_graph;
- last_index = rv;
- }
+
+ if (rv == (u32) ~ 0)
+ {
+ rv = g - pm->parse_graph;
+ last_index = rv;
+ }
else
- {
- last_g = pool_elt_at_index (pm->parse_graph, last_index);
- last_index = last_g->deeper = g - pm->parse_graph;
- }
+ {
+ last_g = pool_elt_at_index (pm->parse_graph, last_index);
+ last_index = last_g->deeper = g - pm->parse_graph;
+ }
}
*new_subgraph_depth = depth;
return rv;
}
-static u32 measure_depth (vlib_parse_main_t *pm, u32 index)
+static u32
+measure_depth (vlib_parse_main_t * pm, u32 index)
{
vlib_parse_graph_t *node;
vlib_parse_item_t *item;
- u32 max=0;
+ u32 max = 0;
u32 depth;
- if (index == (u32)~0)
+ if (index == (u32) ~ 0)
return 0;
node = pool_elt_at_index (pm->parse_graph, index);
@@ -666,47 +682,48 @@ static u32 measure_depth (vlib_parse_main_t *pm, u32 index)
if (item->type == eof_type_index)
return 1;
- while (index != (u32)~0)
+ while (index != (u32) ~ 0)
{
node = pool_elt_at_index (pm->parse_graph, index);
depth = measure_depth (pm, node->deeper);
if (max < depth)
- max = depth;
+ max = depth;
index = node->peer;
}
return max + 1;
}
-static void add_subgraph_to_graph (vlib_parse_main_t *pm,
- u32 last_matching_index,
- u32 graph_root_index,
- u32 new_subgraph_index,
- u32 new_subgraph_depth)
+static void
+add_subgraph_to_graph (vlib_parse_main_t * pm,
+ u32 last_matching_index,
+ u32 graph_root_index,
+ u32 new_subgraph_index, u32 new_subgraph_depth)
{
vlib_parse_graph_t *parent_node;
int new_subgraph_longest = 1;
u32 current_peer_index;
u32 current_depth;
vlib_parse_graph_t *current_peer = 0;
- vlib_parse_graph_t *new_subgraph_node =
+ vlib_parse_graph_t *new_subgraph_node =
pool_elt_at_index (pm->parse_graph, new_subgraph_index);
- /*
+ /*
* Case 1: top-level peer. Splice into the top-level
- * peer chain according to rule depth
+ * peer chain according to rule depth
*/
- if (last_matching_index == (u32)~0)
+ if (last_matching_index == (u32) ~ 0)
{
u32 index = graph_root_index;
- while (1) {
- current_peer = pool_elt_at_index (pm->parse_graph, index);
- current_depth = measure_depth (pm, index);
- if (current_depth < new_subgraph_depth
- || current_peer->peer == (u32)~0)
- break;
- index = current_peer->peer;
- }
+ while (1)
+ {
+ current_peer = pool_elt_at_index (pm->parse_graph, index);
+ current_depth = measure_depth (pm, index);
+ if (current_depth < new_subgraph_depth
+ || current_peer->peer == (u32) ~ 0)
+ break;
+ index = current_peer->peer;
+ }
new_subgraph_node->peer = current_peer->peer;
current_peer->peer = new_subgraph_index;
return;
@@ -715,12 +732,12 @@ static void add_subgraph_to_graph (vlib_parse_main_t *pm,
parent_node = pool_elt_at_index (pm->parse_graph, last_matching_index);
current_peer_index = parent_node->deeper;
- while (current_peer_index != (u32)~0)
+ while (current_peer_index != (u32) ~ 0)
{
current_peer = pool_elt_at_index (pm->parse_graph, current_peer_index);
current_depth = measure_depth (pm, current_peer_index);
if (current_depth < new_subgraph_depth)
- break;
+ break;
new_subgraph_longest = 0;
current_peer_index = current_peer->peer;
}
@@ -740,10 +757,10 @@ static void add_subgraph_to_graph (vlib_parse_main_t *pm,
}
static clib_error_t *
-parse_register_one (vlib_parse_main_t *pm, parse_registration_t *pr)
+parse_register_one (vlib_parse_main_t * pm, parse_registration_t * pr)
{
u32 graph_root_index;
- u16 subgraph_type_index = (u16)~0;
+ u16 subgraph_type_index = (u16) ~ 0;
vlib_parse_type_t *subgraph_type = 0;
vlib_lex_token_t *t;
vlib_parse_graph_t *node;
@@ -755,22 +772,23 @@ parse_register_one (vlib_parse_main_t *pm, parse_registration_t *pr)
int use_main_graph = 1;
tokenize (pm, pr);
-
+
/* A typed rule? */
if (is_typed_rule (pm))
{
/* Get the type and its current subgraph root, if any */
t = vec_elt_at_index (pm->tokens, 1);
subgraph_type_index = parse_type_find_by_name (pm, t->value.as_pointer);
- if (subgraph_type_index == (u16)~0)
- return clib_error_return (0, "undeclared type '%s'",
- t->value.as_pointer);
- subgraph_type = pool_elt_at_index (pm->parse_types, subgraph_type_index);
+ if (subgraph_type_index == (u16) ~ 0)
+ return clib_error_return (0, "undeclared type '%s'",
+ t->value.as_pointer);
+ subgraph_type =
+ pool_elt_at_index (pm->parse_types, subgraph_type_index);
graph_root_index = subgraph_type->rule_index;
/* Skip "mytype> = */
t += 3;
use_main_graph = 0;
- }
+ }
else
{
/* top-level graph */
@@ -778,55 +796,54 @@ parse_register_one (vlib_parse_main_t *pm, parse_registration_t *pr)
t = vec_elt_at_index (pm->tokens, 0);
}
- last_matching_index = (u32)~0;
+ last_matching_index = (u32) ~ 0;
last_index = node_index = graph_root_index;
/* Find the first token which isn't already being parsed */
- while (t < pm->tokens + vec_len (pm->tokens) && node_index != (u32) ~0)
+ while (t < pm->tokens + vec_len (pm->tokens) && node_index != (u32) ~ 0)
{
node = pool_elt_at_index (pm->parse_graph, node_index);
item = pool_elt_at_index (pm->parse_items, node->item);
type = pool_elt_at_index (pm->parse_types, item->type);
last_index = node_index;
-
- if (token_matches_graph_node (pm, t, node, item, type, &token_increment))
- {
- t += token_increment;
- last_matching_index = node_index;
- node_index = node->deeper;
- }
+
+ if (token_matches_graph_node
+ (pm, t, node, item, type, &token_increment))
+ {
+ t += token_increment;
+ last_matching_index = node_index;
+ node_index = node->deeper;
+ }
else
- node_index = node->peer;
+ node_index = node->peer;
}
-
- new_subgraph_index =
- generate_subgraph_from_tokens (pm, t, &new_subgraph_depth, pr,
- use_main_graph);
-
+
+ new_subgraph_index =
+ generate_subgraph_from_tokens (pm, t, &new_subgraph_depth, pr,
+ use_main_graph);
+
/* trivial cases: first graph node or first type rule */
- if (graph_root_index == (u32)~0)
+ if (graph_root_index == (u32) ~ 0)
{
if (use_main_graph)
- pm->root_index = new_subgraph_index;
+ pm->root_index = new_subgraph_index;
else
- subgraph_type->rule_index = new_subgraph_index;
+ subgraph_type->rule_index = new_subgraph_index;
return 0;
}
-
+
add_subgraph_to_graph (pm, last_matching_index, graph_root_index,
- new_subgraph_index,
- new_subgraph_depth);
+ new_subgraph_index, new_subgraph_depth);
return 0;
}
static clib_error_t *
parse_register (vlib_main_t * vm,
- parse_registration_t * lo,
- parse_registration_t * hi,
- vlib_parse_main_t *pm)
+ parse_registration_t * lo,
+ parse_registration_t * hi, vlib_parse_main_t * pm)
{
- parse_registration_t * pr;
-
+ parse_registration_t *pr;
+
for (pr = lo; pr < hi; pr = vlib_elf_section_data_next (pr, 0))
vec_add1 (pm->parse_registrations, pr);
@@ -834,39 +851,41 @@ parse_register (vlib_main_t * vm,
}
static clib_error_t *
-parse_register_one_type (vlib_parse_main_t *pm, vlib_parse_type_t *rp)
+parse_register_one_type (vlib_parse_main_t * pm, vlib_parse_type_t * rp)
{
- (void) parse_type_find_or_create (pm, (vlib_parse_type_t *)rp);
+ (void) parse_type_find_or_create (pm, (vlib_parse_type_t *) rp);
return 0;
}
static clib_error_t *
parse_type_register (vlib_main_t * vm,
- vlib_parse_type_t * lo,
- vlib_parse_type_t * hi,
- vlib_parse_main_t *pm)
+ vlib_parse_type_t * lo,
+ vlib_parse_type_t * hi, vlib_parse_main_t * pm)
{
- clib_error_t * error = 0;
- vlib_parse_type_t * ptr;
-
- for (ptr = lo; ptr < hi; ptr = vlib_elf_section_data_next (ptr, 0)) {
- error = parse_register_one_type (pm, ptr);
- if (error)
- goto done;
- }
-
- done:
+ clib_error_t *error = 0;
+ vlib_parse_type_t *ptr;
+
+ for (ptr = lo; ptr < hi; ptr = vlib_elf_section_data_next (ptr, 0))
+ {
+ error = parse_register_one_type (pm, ptr);
+ if (error)
+ goto done;
+ }
+
+done:
return error;
}
-clib_error_t *vlib_stdlex_init (vlib_main_t *vm) __attribute__((weak));
-clib_error_t *vlib_stdlex_init (vlib_main_t *vm)
-{
+clib_error_t *vlib_stdlex_init (vlib_main_t * vm) __attribute__ ((weak));
+clib_error_t *
+vlib_stdlex_init (vlib_main_t * vm)
+{
(void) vlib_lex_add_table ("ignore_everything");
- return 0;
+ return 0;
}
-static int compute_rule_length (parse_registration_t *r)
+static int
+compute_rule_length (parse_registration_t * r)
{
int length, i;
vlib_parse_main_t *pm = &vlib_parse_main;
@@ -886,14 +905,14 @@ static int compute_rule_length (parse_registration_t *r)
for (i = 0; i < vec_len (pm->tokens); i++)
{
switch (pm->tokens[i].token)
- {
- case VLIB_LEX_lt:
- case VLIB_LEX_gt:
- length -= 1;
-
- default:
- break;
- }
+ {
+ case VLIB_LEX_lt:
+ case VLIB_LEX_gt:
+ length -= 1;
+
+ default:
+ break;
+ }
}
ASSERT (length > 0);
@@ -901,8 +920,8 @@ static int compute_rule_length (parse_registration_t *r)
return length;
}
-static int rule_length_compare (parse_registration_t *r1,
- parse_registration_t *r2)
+static int
+rule_length_compare (parse_registration_t * r1, parse_registration_t * r2)
{
compute_rule_length (r1);
compute_rule_length (r2);
@@ -911,19 +930,20 @@ static int rule_length_compare (parse_registration_t *r1,
}
-static clib_error_t * parse_init (vlib_main_t *vm)
+static clib_error_t *
+parse_init (vlib_main_t * vm)
{
vlib_parse_main_t *pm = &vlib_parse_main;
vlib_lex_main_t *lm = &vlib_lex_main;
- vlib_elf_section_bounds_t * b, * bounds;
- clib_error_t * error = 0;
+ vlib_elf_section_bounds_t *b, *bounds;
+ clib_error_t *error = 0;
parse_registration_t *rule;
int i;
if ((error = vlib_call_init_function (vm, lex_onetime_init)))
return error;
- if ((error = vlib_stdlex_init(vm)))
+ if ((error = vlib_stdlex_init (vm)))
return error;
if ((error = vlib_call_init_function (vm, parse_builtin_init)))
@@ -947,22 +967,22 @@ static clib_error_t * parse_init (vlib_main_t *vm)
bounds = vlib_get_elf_section_bounds (vm, "parse_type_registrations");
vec_foreach (b, bounds)
- {
- error = parse_type_register (vm, b->lo, b->hi, pm);
- if (error)
- break;
- }
+ {
+ error = parse_type_register (vm, b->lo, b->hi, pm);
+ if (error)
+ break;
+ }
vec_free (bounds);
parse_type_and_graph_init (pm);
bounds = vlib_get_elf_section_bounds (vm, "parse_registrations");
vec_foreach (b, bounds)
- {
- error = parse_register (vm, b->lo, b->hi, pm);
- if (error)
- break;
- }
+ {
+ error = parse_register (vm, b->lo, b->hi, pm);
+ if (error)
+ break;
+ }
vec_free (bounds);
vec_sort_with_function (pm->parse_registrations, rule_length_compare);
@@ -977,3 +997,11 @@ static clib_error_t * parse_init (vlib_main_t *vm)
}
VLIB_INIT_FUNCTION (parse_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/parse.h b/vlib/vlib/parse.h
index 5b9acebf774..036e744723b 100644
--- a/vlib/vlib/parse.h
+++ b/vlib/vlib/parse.h
@@ -19,11 +19,13 @@
#include <vlib/lex.h>
#include <vppinfra/mhash.h>
-typedef struct {
+typedef struct
+{
/* Word aligned value. */
- union {
+ union
+ {
u8 as_u8[32 - 1 * sizeof (u16)];
- void * as_pointer;
+ void *as_pointer;
uword as_uword;
word as_word;
u64 as_u64;
@@ -31,32 +33,44 @@ typedef struct {
/* 16 bit type at end so that 30 bytes of value are aligned. */
u16 type;
-} __attribute ((packed)) vlib_parse_value_t;
+} __attribute ((packed))
+ vlib_parse_value_t;
/* Instance of a type. */
-typedef struct {
- u32 type;
-
- u32 origin;
-
- u32 help_index;
-
- union {
- void * as_pointer;
- uword as_uword;
- } value;
-} vlib_parse_item_t;
-
-typedef struct {
- /* Index of item for this node. */
- u32 item;
-
- /* Graph index of peer (sibling) node (linked list of peers). */
- u32 peer;
-
- /* Graph index of deeper (child) node (linked list of children). */
- u32 deeper;
-} vlib_parse_graph_t;
+ typedef struct
+ {
+ u32
+ type;
+
+ u32
+ origin;
+
+ u32
+ help_index;
+
+ union
+ {
+ void *
+ as_pointer;
+ uword
+ as_uword;
+ } value;
+ } vlib_parse_item_t;
+
+ typedef struct
+ {
+ /* Index of item for this node. */
+ u32
+ item;
+
+ /* Graph index of peer (sibling) node (linked list of peers). */
+ u32
+ peer;
+
+ /* Graph index of deeper (child) node (linked list of children). */
+ u32
+ deeper;
+ } vlib_parse_graph_t;
#define foreach_parse_match_type \
_(MATCH_DONE) \
@@ -68,84 +82,112 @@ typedef struct {
_(MATCH_AMBIGUOUS) \
_(MATCH_EVAL_FAIL)
-typedef enum {
+ typedef enum
+ {
#define _(a) VLIB_PARSE_##a,
- foreach_parse_match_type
+ foreach_parse_match_type
#undef _
-} vlib_parse_match_t;
-
-struct vlib_parse_type;
-struct vlib_parse_main;
-
-typedef vlib_parse_match_t (vlib_parse_match_function_t)
- (struct vlib_parse_main *,
- struct vlib_parse_type *,
- vlib_lex_token_t *,
- vlib_parse_value_t *);
-typedef void (vlib_parse_value_cleanup_function_t) (vlib_parse_value_t *);
-
-typedef struct vlib_parse_type {
- /* Type name. */
- char * name;
-
- vlib_parse_match_function_t * match_function;
-
- vlib_parse_value_cleanup_function_t * value_cleanup_function;
-
- format_function_t * format_value;
-
- u32 rule_index;
-} vlib_parse_type_t;
-
-typedef struct {
- char *initializer;
- void * eof_match;
- int rule_length;
-} parse_registration_t;
-
-typedef struct vlib_parse_main {
- /* (type, origin, help, value) tuples */
- vlib_parse_item_t *parse_items;
- mhash_t parse_item_hash;
-
- /* (item, peer, deeper) tuples */
- vlib_parse_graph_t *parse_graph;
- u32 root_index;
-
- u8 *register_input;
-
- /* parser types */
- vlib_parse_type_t * parse_types;
- uword *parse_type_by_name_hash;
-
- /* Vector of MATCH_VALUEs */
- vlib_parse_value_t * parse_value;
- u32 * match_items;
-
- /* Parse registrations */
- parse_registration_t **parse_registrations;
-
- /* Token vector */
- vlib_lex_token_t *tokens;
- u32 current_token_index;
-
- vlib_lex_main_t *lex_main;
- vlib_main_t *vlib_main;
-} vlib_parse_main_t;
-
-vlib_parse_main_t vlib_parse_main;
-
-typedef vlib_parse_match_t (vlib_parse_eval_function_t)
- (vlib_parse_main_t *,
- vlib_parse_item_t *,
- vlib_parse_value_t *);
-
-vlib_parse_match_t vlib_parse_eval (u8 * input);
-
-format_function_t format_vlib_parse_value;
+ } vlib_parse_match_t;
+
+ struct vlib_parse_type;
+ struct vlib_parse_main;
+
+ typedef
+ vlib_parse_match_t (vlib_parse_match_function_t)
+ (struct vlib_parse_main *,
+ struct vlib_parse_type *, vlib_lex_token_t *, vlib_parse_value_t *);
+ typedef void (vlib_parse_value_cleanup_function_t) (vlib_parse_value_t
+ *);
+
+ typedef struct vlib_parse_type
+ {
+ /* Type name. */
+ char *
+ name;
+
+ vlib_parse_match_function_t *
+ match_function;
+
+ vlib_parse_value_cleanup_function_t *
+ value_cleanup_function;
+
+ format_function_t *
+ format_value;
+
+ u32
+ rule_index;
+ } vlib_parse_type_t;
+
+ typedef struct
+ {
+ char *
+ initializer;
+ void *
+ eof_match;
+ int
+ rule_length;
+ } parse_registration_t;
+
+ typedef struct vlib_parse_main
+ {
+ /* (type, origin, help, value) tuples */
+ vlib_parse_item_t *
+ parse_items;
+ mhash_t
+ parse_item_hash;
+
+ /* (item, peer, deeper) tuples */
+ vlib_parse_graph_t *
+ parse_graph;
+ u32
+ root_index;
+
+ u8 *
+ register_input;
+
+ /* parser types */
+ vlib_parse_type_t *
+ parse_types;
+ uword *
+ parse_type_by_name_hash;
+
+ /* Vector of MATCH_VALUEs */
+ vlib_parse_value_t *
+ parse_value;
+ u32 *
+ match_items;
+
+ /* Parse registrations */
+ parse_registration_t **
+ parse_registrations;
+
+ /* Token vector */
+ vlib_lex_token_t *
+ tokens;
+ u32
+ current_token_index;
+
+ vlib_lex_main_t *
+ lex_main;
+ vlib_main_t *
+ vlib_main;
+ } vlib_parse_main_t;
+
+ vlib_parse_main_t
+ vlib_parse_main;
+
+ typedef
+ vlib_parse_match_t (vlib_parse_eval_function_t)
+ (vlib_parse_main_t *, vlib_parse_item_t *, vlib_parse_value_t *);
+
+vlib_parse_match_t
+vlib_parse_eval (u8 * input);
+
+ format_function_t format_vlib_parse_value;
/* FIXME need these to be global? */
-vlib_parse_match_function_t rule_match, eof_match, word_match, number_match;
+ vlib_parse_match_function_t rule_match, eof_match, word_match,
+ number_match;
#define _PARSE_REGISTRATION_DATA(x) \
VLIB_ELF_SECTION_DATA(x##_registration,parse_registration_t,parse_registrations)
@@ -169,3 +211,11 @@ static _PARSE_TYPE_REGISTRATION_DATA(n) = { \
};
#endif /* included_vlib_parse_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/parse_builtin.c b/vlib/vlib/parse_builtin.c
index df830db4e21..0ce716b539e 100644
--- a/vlib/vlib/parse_builtin.c
+++ b/vlib/vlib/parse_builtin.c
@@ -17,32 +17,40 @@
always_inline void *
parse_last_match_value (vlib_parse_main_t * pm)
{
- vlib_parse_item_t * i;
+ vlib_parse_item_t *i;
i = pool_elt_at_index (pm->parse_items,
- vec_elt (pm->match_items, vec_len (pm->match_items) - 1));
+ vec_elt (pm->match_items,
+ vec_len (pm->match_items) - 1));
return i->value.as_pointer;
}
-vlib_parse_match_t eof_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t, vlib_parse_value_t *valuep)
-{ return t->token == VLIB_LEX_eof ? VLIB_PARSE_MATCH_DONE : VLIB_PARSE_MATCH_FAIL; }
+vlib_parse_match_t
+eof_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
+{
+ return t->token ==
+ VLIB_LEX_eof ? VLIB_PARSE_MATCH_DONE : VLIB_PARSE_MATCH_FAIL;
+}
-PARSE_TYPE_INIT (eof, eof_match, 0 /* cleanup value */, 0 /* format value */);
+PARSE_TYPE_INIT (eof, eof_match, 0 /* cleanup value */ ,
+ 0 /* format value */ );
-vlib_parse_match_t rule_eof_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t, vlib_parse_value_t *valuep)
+vlib_parse_match_t
+rule_eof_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
{
- vlib_parse_match_function_t * fp = parse_last_match_value (pm);
+ vlib_parse_match_function_t *fp = parse_last_match_value (pm);
pm->current_token_index--;
return fp ? fp (pm, type, t, valuep) : VLIB_PARSE_MATCH_RULE;
}
PARSE_TYPE_INIT (rule_eof, rule_eof_match, 0, 0);
-vlib_parse_match_t word_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t, vlib_parse_value_t *valuep)
+vlib_parse_match_t
+word_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
{
- u8 * tv, * iv;
+ u8 *tv, *iv;
int i;
if (t->token != VLIB_LEX_word)
@@ -60,10 +68,12 @@ vlib_parse_match_t word_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
return iv[i] == 0 ? VLIB_PARSE_MATCH_FULL : VLIB_PARSE_MATCH_PARTIAL;
}
-PARSE_TYPE_INIT (word, word_match, 0 /* clnup value */, 0 /* format value */);
+PARSE_TYPE_INIT (word, word_match, 0 /* clnup value */ ,
+ 0 /* format value */ );
-vlib_parse_match_t number_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
- vlib_lex_token_t *t, vlib_parse_value_t *valuep)
+vlib_parse_match_t
+number_match (vlib_parse_main_t * pm, vlib_parse_type_t * type,
+ vlib_lex_token_t * t, vlib_parse_value_t * valuep)
{
if (t->token == VLIB_LEX_number)
{
@@ -73,20 +83,21 @@ vlib_parse_match_t number_match (vlib_parse_main_t *pm, vlib_parse_type_t *type,
return VLIB_PARSE_MATCH_FAIL;
}
-static u8 * format_value_number (u8 * s, va_list * args)
+static u8 *
+format_value_number (u8 * s, va_list * args)
{
- vlib_parse_value_t * v = va_arg (*args, vlib_parse_value_t *);
+ vlib_parse_value_t *v = va_arg (*args, vlib_parse_value_t *);
uword a = v->value.as_uword;
- if (BITS(uword) == 64)
+ if (BITS (uword) == 64)
s = format (s, "%lld(0x%llx)", a, a);
- else
+ else
s = format (s, "%ld(0x%lx)", a, a);
return s;
}
-PARSE_TYPE_INIT (number, number_match, 0 /* cln value */,
- format_value_number /* fmt value */);
+PARSE_TYPE_INIT (number, number_match, 0 /* cln value */ ,
+ format_value_number /* fmt value */ );
#define foreach_vanilla_lex_match_function \
@@ -121,7 +132,6 @@ PARSE_TYPE_INIT (name, name##_match, 0 /* cln value */, \
foreach_vanilla_lex_match_function
#undef _
-
/* So we're linked in. */
static clib_error_t *
parse_builtin_init (vlib_main_t * vm)
@@ -130,3 +140,11 @@ parse_builtin_init (vlib_main_t * vm)
}
VLIB_INIT_FUNCTION (parse_builtin_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/pci/linux_pci.c b/vlib/vlib/pci/linux_pci.c
index 6cc70e6d6aa..ba6defeb2f1 100644
--- a/vlib/vlib/pci/linux_pci.c
+++ b/vlib/vlib/pci/linux_pci.c
@@ -50,12 +50,13 @@
#include <linux/ethtool.h>
#include <linux/sockios.h>
-typedef struct {
+typedef struct
+{
/* /sys/bus/pci/devices/... directory name for this device. */
- u8 * dev_dir_name;
+ u8 *dev_dir_name;
/* Resource file descriptors. */
- int * resource_fds;
+ int *resource_fds;
/* File descriptor for config space read/write. */
int config_fd;
@@ -72,9 +73,10 @@ typedef struct {
} linux_pci_device_t;
/* Pool of PCI devices. */
-typedef struct {
- vlib_main_t * vlib_main;
- linux_pci_device_t * linux_pci_devices;
+typedef struct
+{
+ vlib_main_t *vlib_main;
+ linux_pci_device_t *linux_pci_devices;
} linux_pci_main_t;
extern linux_pci_main_t linux_pci_main;
@@ -82,22 +84,23 @@ extern linux_pci_main_t linux_pci_main;
/* Call to allocate/initialize the pci subsystem.
This is not an init function so that users can explicitly enable
pci only when it's needed. */
-clib_error_t * pci_bus_init (vlib_main_t * vm);
+clib_error_t *pci_bus_init (vlib_main_t * vm);
-clib_error_t * vlib_pci_bind_to_uio (vlib_pci_device_t * d, char * uio_driver_name);
+clib_error_t *vlib_pci_bind_to_uio (vlib_pci_device_t * d,
+ char *uio_driver_name);
linux_pci_main_t linux_pci_main;
clib_error_t *
-vlib_pci_bind_to_uio (vlib_pci_device_t * d, char * uio_driver_name)
+vlib_pci_bind_to_uio (vlib_pci_device_t * d, char *uio_driver_name)
{
- clib_error_t * error = 0;
+ clib_error_t *error = 0;
u8 *s = 0;
DIR *dir = 0;
struct dirent *e;
int fd;
- pci_config_header_t * c;
- u8 * dev_dir_name = format(0, "/sys/bus/pci/devices/%U",
+ pci_config_header_t *c;
+ u8 *dev_dir_name = format (0, "/sys/bus/pci/devices/%U",
format_vlib_pci_addr, &d->bus_address);
c = &d->config0.header;
@@ -105,14 +108,14 @@ vlib_pci_bind_to_uio (vlib_pci_device_t * d, char * uio_driver_name)
/* if uio sub-directory exists, we are fine, device is
already bound to UIO driver */
s = format (s, "%v/uio%c", dev_dir_name, 0);
- if (access ( (char *) s, F_OK) == 0)
+ if (access ((char *) s, F_OK) == 0)
goto done;
vec_reset_length (s);
/* walk trough all linux interfaces and if interface belonging to
this device is founf check if interface is admin up */
dir = opendir ("/sys/class/net");
- s = format(s, "%U%c", format_vlib_pci_addr, &d->bus_address, 0);
+ s = format (s, "%U%c", format_vlib_pci_addr, &d->bus_address, 0);
if (!dir)
{
@@ -122,50 +125,50 @@ vlib_pci_bind_to_uio (vlib_pci_device_t * d, char * uio_driver_name)
goto done;
}
- fd = socket(PF_INET, SOCK_DGRAM, 0);
+ fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0)
{
error = clib_error_return_unix (0, "socket");
goto done;
}
- while((e = readdir (dir)))
+ while ((e = readdir (dir)))
{
struct ifreq ifr;
struct ethtool_drvinfo drvinfo;
- if (e->d_name[0] == '.') /* skip . and .. */
+ if (e->d_name[0] == '.') /* skip . and .. */
continue;
- memset(&ifr, 0, sizeof ifr);
- memset(&drvinfo, 0, sizeof drvinfo);
+ memset (&ifr, 0, sizeof ifr);
+ memset (&drvinfo, 0, sizeof drvinfo);
ifr.ifr_data = (char *) &drvinfo;
- strncpy(ifr.ifr_name, e->d_name, IFNAMSIZ - 1);
+ strncpy (ifr.ifr_name, e->d_name, IFNAMSIZ - 1);
drvinfo.cmd = ETHTOOL_GDRVINFO;
if (ioctl (fd, SIOCETHTOOL, &ifr) < 0)
- {
- if (errno == ENOTSUP)
- /* Some interfaces (eg "lo") don't support this ioctl */
- continue;
+ {
+ if (errno == ENOTSUP)
+ /* Some interfaces (eg "lo") don't support this ioctl */
+ continue;
- error = clib_error_return_unix (0, "ioctl fetch intf %s bus info",
- e->d_name);
- close (fd);
- goto done;
- }
+ error = clib_error_return_unix (0, "ioctl fetch intf %s bus info",
+ e->d_name);
+ close (fd);
+ goto done;
+ }
if (strcmp ((char *) s, drvinfo.bus_info))
continue;
- memset (&ifr, 0, sizeof(ifr));
+ memset (&ifr, 0, sizeof (ifr));
strncpy (ifr.ifr_name, e->d_name, IFNAMSIZ - 1);
if (ioctl (fd, SIOCGIFFLAGS, &ifr) < 0)
- {
- error = clib_error_return_unix (0, "ioctl fetch intf %s flags",
- e->d_name);
- close (fd);
- goto done;
- }
+ {
+ error = clib_error_return_unix (0, "ioctl fetch intf %s flags",
+ e->d_name);
+ close (fd);
+ goto done;
+ }
if (ifr.ifr_flags & IFF_UP)
{
@@ -173,7 +176,7 @@ vlib_pci_bind_to_uio (vlib_pci_device_t * d, char * uio_driver_name)
"interface %s is up",
format_vlib_pci_addr, &d->bus_address,
e->d_name);
- close (fd);
+ close (fd);
goto done;
}
}
@@ -201,51 +204,54 @@ done:
static clib_error_t *
-scan_uio_dir (void * arg, u8 * path_name, u8 * file_name)
+scan_uio_dir (void *arg, u8 * path_name, u8 * file_name)
{
- linux_pci_device_t * l = arg;
+ linux_pci_device_t *l = arg;
unformat_input_t input;
unformat_init_string (&input, (char *) file_name, vec_len (file_name));
- if (! unformat (&input, "uio%d", &l->uio_minor))
+ if (!unformat (&input, "uio%d", &l->uio_minor))
abort ();
unformat_free (&input);
return 0;
}
-static clib_error_t * linux_pci_uio_read_ready (unix_file_t * uf)
+static clib_error_t *
+linux_pci_uio_read_ready (unix_file_t * uf)
{
- vlib_pci_main_t * pm = &pci_main;
- vlib_pci_device_t * d;
+ vlib_pci_main_t *pm = &pci_main;
+ vlib_pci_device_t *d;
int __attribute__ ((unused)) rv;
u32 icount;
- rv = read(uf->file_descriptor, &icount, 4);
+ rv = read (uf->file_descriptor, &icount, 4);
d = pool_elt_at_index (pm->pci_devs, uf->private_data);
if (d->interrupt_handler)
- d->interrupt_handler(d);
+ d->interrupt_handler (d);
- vlib_pci_intr_enable(d);
+ vlib_pci_intr_enable (d);
return /* no error */ 0;
}
-static clib_error_t *linux_pci_uio_error_ready (unix_file_t *uf)
+static clib_error_t *
+linux_pci_uio_error_ready (unix_file_t * uf)
{
u32 error_index = (u32) uf->private_data;
return clib_error_return (0, "pci device %d: error", error_index);
}
-static void add_device (vlib_pci_device_t * dev, linux_pci_device_t * pdev)
+static void
+add_device (vlib_pci_device_t * dev, linux_pci_device_t * pdev)
{
- vlib_pci_main_t * pm = &pci_main;
- linux_pci_main_t * lpm = &linux_pci_main;
- linux_pci_device_t * l;
+ vlib_pci_main_t *pm = &pci_main;
+ linux_pci_main_t *lpm = &linux_pci_main;
+ linux_pci_device_t *l;
pool_get (lpm->linux_pci_devices, l);
l[0] = pdev[0];
@@ -255,13 +261,14 @@ static void add_device (vlib_pci_device_t * dev, linux_pci_device_t * pdev)
dev->os_handle = l - lpm->linux_pci_devices;
{
- u8 * uio_dir = format (0, "%s/uio", l->dev_dir_name);
- foreach_directory_file ((char *) uio_dir, scan_uio_dir, l, /* scan_dirs */ 1);
+ u8 *uio_dir = format (0, "%s/uio", l->dev_dir_name);
+ foreach_directory_file ((char *) uio_dir, scan_uio_dir, l, /* scan_dirs */
+ 1);
vec_free (uio_dir);
}
{
- char * uio_name = (char *) format (0, "/dev/uio%d%c", l->uio_minor, 0);
+ char *uio_name = (char *) format (0, "/dev/uio%d%c", l->uio_minor, 0);
l->uio_fd = open (uio_name, O_RDWR);
if (l->uio_fd < 0)
clib_unix_error ("open `%s'", uio_name);
@@ -269,8 +276,8 @@ static void add_device (vlib_pci_device_t * dev, linux_pci_device_t * pdev)
}
{
- unix_file_t template = {0};
- unix_main_t * um = &unix_main;
+ unix_file_t template = { 0 };
+ unix_main_t *um = &unix_main;
template.read_function = linux_pci_uio_read_ready;
template.file_descriptor = l->uio_fd;
@@ -281,7 +288,8 @@ static void add_device (vlib_pci_device_t * dev, linux_pci_device_t * pdev)
}
}
-static void linux_pci_device_free (linux_pci_device_t * l)
+static void
+linux_pci_device_free (linux_pci_device_t * l)
{
int i;
for (i = 0; i < vec_len (l->resource_fds); i++)
@@ -299,12 +307,10 @@ static void linux_pci_device_free (linux_pci_device_t * l)
clib_error_t *
vlib_pci_read_write_config (vlib_pci_device_t * dev,
vlib_read_or_write_t read_or_write,
- uword address,
- void * data,
- u32 n_bytes)
+ uword address, void *data, u32 n_bytes)
{
- linux_pci_main_t * lpm = &linux_pci_main;
- linux_pci_device_t * p;
+ linux_pci_main_t *lpm = &linux_pci_main;
+ linux_pci_device_t *p;
int n;
p = pool_elt_at_index (lpm->linux_pci_devices, dev->os_handle);
@@ -324,16 +330,14 @@ vlib_pci_read_write_config (vlib_pci_device_t * dev,
static clib_error_t *
os_map_pci_resource_internal (uword os_handle,
- u32 resource,
- u8 *addr,
- void ** result)
+ u32 resource, u8 * addr, void **result)
{
- linux_pci_main_t * pm = &linux_pci_main;
- linux_pci_device_t * p;
+ linux_pci_main_t *pm = &linux_pci_main;
+ linux_pci_device_t *p;
struct stat stat_buf;
- u8 * file_name;
+ u8 *file_name;
int fd;
- clib_error_t * error;
+ clib_error_t *error;
int flags = MAP_SHARED;
error = 0;
@@ -360,8 +364,7 @@ os_map_pci_resource_internal (uword os_handle,
*result = mmap (addr,
/* size */ stat_buf.st_size,
- PROT_READ | PROT_WRITE,
- flags,
+ PROT_READ | PROT_WRITE, flags,
/* file */ fd,
/* offset */ 0);
if (*result == (void *) -1)
@@ -370,7 +373,7 @@ os_map_pci_resource_internal (uword os_handle,
goto done;
}
- done:
+done:
if (error)
{
if (fd >= 0)
@@ -381,34 +384,33 @@ os_map_pci_resource_internal (uword os_handle,
}
clib_error_t *
-vlib_pci_map_resource (vlib_pci_device_t * dev,
- u32 resource,
- void ** result)
+vlib_pci_map_resource (vlib_pci_device_t * dev, u32 resource, void **result)
{
- return (os_map_pci_resource_internal (dev->os_handle, resource, 0 /* addr */,
- result));
+ return (os_map_pci_resource_internal
+ (dev->os_handle, resource, 0 /* addr */ ,
+ result));
}
clib_error_t *
vlib_pci_map_resource_fixed (vlib_pci_device_t * dev,
- u32 resource,
- u8 *addr,
- void ** result)
+ u32 resource, u8 * addr, void **result)
{
- return (os_map_pci_resource_internal (dev->os_handle, resource, addr, result));
+ return (os_map_pci_resource_internal
+ (dev->os_handle, resource, addr, result));
}
-void vlib_pci_free_device (vlib_pci_device_t * dev)
+void
+vlib_pci_free_device (vlib_pci_device_t * dev)
{
- linux_pci_main_t * pm = &linux_pci_main;
- linux_pci_device_t * l;
+ linux_pci_main_t *pm = &linux_pci_main;
+ linux_pci_device_t *l;
l = pool_elt_at_index (pm->linux_pci_devices, dev->os_handle);
linux_pci_device_free (l);
pool_put (pm->linux_pci_devices, l);
}
-pci_device_registration_t * __attribute__((unused))
+pci_device_registration_t * __attribute__ ((unused))
pci_device_next_registered (pci_device_registration_t * r)
{
uword i;
@@ -425,11 +427,11 @@ init_device_from_registered (vlib_main_t * vm,
vlib_pci_device_t * dev,
linux_pci_device_t * pdev)
{
- vlib_pci_main_t * pm = &pci_main;
- pci_device_registration_t * r;
- pci_device_id_t * i;
- pci_config_header_t * c;
- clib_error_t * error;
+ vlib_pci_main_t *pm = &pci_main;
+ pci_device_registration_t *r;
+ pci_device_id_t *i;
+ pci_config_header_t *c;
+ clib_error_t *error;
c = &dev->config0.header;
@@ -438,8 +440,8 @@ init_device_from_registered (vlib_main_t * vm,
while (r)
{
for (i = r->supported_devices; i->vendor_id != 0; i++)
- if (i->vendor_id == c->vendor_id && i->device_id == c->device_id)
- {
+ if (i->vendor_id == c->vendor_id && i->device_id == c->device_id)
+ {
error = vlib_pci_bind_to_uio (dev, "uio_pci_generic");
if (error)
{
@@ -447,12 +449,12 @@ init_device_from_registered (vlib_main_t * vm,
continue;
}
- add_device (dev, pdev);
+ add_device (dev, pdev);
dev->interrupt_handler = r->interrupt_handler;
- return r->init_function (vm, dev);
- }
+ return r->init_function (vm, dev);
+ }
r = r->next_registration;
- }
+ }
/* No driver, close the PCI config-space FD */
close (pdev->config_fd);
return 0;
@@ -460,22 +462,21 @@ init_device_from_registered (vlib_main_t * vm,
static clib_error_t *
init_device (vlib_main_t * vm,
- vlib_pci_device_t * dev,
- linux_pci_device_t * pdev)
+ vlib_pci_device_t * dev, linux_pci_device_t * pdev)
{
return init_device_from_registered (vm, dev, pdev);
}
static clib_error_t *
-scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
+scan_device (void *arg, u8 * dev_dir_name, u8 * ignored)
{
- vlib_main_t * vm = arg;
- vlib_pci_main_t * pm = &pci_main;
+ vlib_main_t *vm = arg;
+ vlib_pci_main_t *pm = &pci_main;
int fd;
- u8 * f;
- clib_error_t * error = 0;
- vlib_pci_device_t * dev;
- linux_pci_device_t pdev = {0};
+ u8 *f;
+ clib_error_t *error = 0;
+ vlib_pci_device_t *dev;
+ linux_pci_device_t pdev = { 0 };
f = format (0, "%v/config%c", dev_dir_name, 0);
fd = open ((char *) f, O_RDWR);
@@ -494,8 +495,10 @@ scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
/* You can only read more that 64 bytes of config space as root; so we try to
read the full space but fall back to just the first 64 bytes. */
- if (read (fd, &dev->config_data, sizeof (dev->config_data)) != sizeof (dev->config_data)
- && read (fd, &dev->config0, sizeof (dev->config0)) != sizeof (dev->config0))
+ if (read (fd, &dev->config_data, sizeof (dev->config_data)) !=
+ sizeof (dev->config_data)
+ && read (fd, &dev->config0,
+ sizeof (dev->config0)) != sizeof (dev->config0))
{
pool_put (pm->pci_devs, dev);
error = clib_error_return_unix (0, "read `%s'", f);
@@ -508,11 +511,11 @@ scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
if (all_ones.vendor_id == 0)
memset (&all_ones, ~0, sizeof (all_ones));
- if (! memcmp (&dev->config0.header, &all_ones, sizeof (all_ones)))
+ if (!memcmp (&dev->config0.header, &all_ones, sizeof (all_ones)))
{
- pool_put (pm->pci_devs, dev);
+ pool_put (pm->pci_devs, dev);
error = clib_error_return (0, "invalid PCI config for `%s'", f);
- close (fd);
+ close (fd);
goto done;
}
}
@@ -529,8 +532,8 @@ scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
unformat_init_string (&input, (char *) dev_dir_name,
vec_len (dev_dir_name));
- if (! unformat (&input, "/sys/bus/pci/devices/%U",
- unformat_vlib_pci_addr, &dev->bus_address))
+ if (!unformat (&input, "/sys/bus/pci/devices/%U",
+ unformat_vlib_pci_addr, &dev->bus_address))
abort ();
unformat_free (&input);
@@ -541,20 +544,20 @@ scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
pdev.config_fd = fd;
pdev.dev_dir_name = dev_dir_name;
- hash_set(pm->pci_dev_index_by_pci_addr, dev->bus_address.as_u32,
- dev - pm->pci_devs);
+ hash_set (pm->pci_dev_index_by_pci_addr, dev->bus_address.as_u32,
+ dev - pm->pci_devs);
error = init_device (vm, dev, &pdev);
- vec_reset_length(f);
+ vec_reset_length (f);
f = format (f, "%v/vpd%c", dev_dir_name, 0);
fd = open ((char *) f, O_RDONLY);
- if (fd >= 0)
+ if (fd >= 0)
{
while (1)
{
u8 tag[3];
- u8 * data = 0;
+ u8 *data = 0;
int len;
if (read (fd, &tag, 3) != 3)
@@ -564,7 +567,7 @@ scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
break;
len = (tag[2] << 8) | tag[1];
- vec_validate(data, len);
+ vec_validate (data, len);
if (read (fd, data, len) != len)
{
@@ -583,34 +586,36 @@ scan_device (void * arg, u8 * dev_dir_name, u8 * ignored)
close (fd);
}
- vec_reset_length(f);
+ vec_reset_length (f);
f = format (f, "%v/driver%c", dev_dir_name, 0);
- dev->driver_name = vlib_sysfs_link_to_name((char *) f);
+ dev->driver_name = vlib_sysfs_link_to_name ((char *) f);
dev->numa_node = -1;
- vec_reset_length(f);
+ vec_reset_length (f);
f = format (f, "%v/numa_node%c", dev_dir_name, 0);
vlib_sysfs_read ((char *) f, "%u", &dev->numa_node);
- done:
+done:
vec_free (f);
return error;
}
-clib_error_t * linux_pci_init (vlib_main_t * vm)
+clib_error_t *
+linux_pci_init (vlib_main_t * vm)
{
- vlib_pci_main_t * pm = &pci_main;
- clib_error_t * error;
+ vlib_pci_main_t *pm = &pci_main;
+ clib_error_t *error;
pm->vlib_main = vm;
if ((error = vlib_call_init_function (vm, unix_input_init)))
return error;
- ASSERT(sizeof(vlib_pci_addr_t) == sizeof(u32));
+ ASSERT (sizeof (vlib_pci_addr_t) == sizeof (u32));
pm->pci_dev_index_by_pci_addr = hash_create (0, sizeof (uword));
- error = foreach_directory_file ("/sys/bus/pci/devices", scan_device, vm, /* scan_dirs */ 0);
+ error = foreach_directory_file ("/sys/bus/pci/devices", scan_device, vm,
+ /* scan_dirs */ 0);
/* Complain and continue. might not be root, etc. */
if (error)
@@ -620,3 +625,11 @@ clib_error_t * linux_pci_init (vlib_main_t * vm)
}
VLIB_INIT_FUNCTION (linux_pci_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/pci/pci.c b/vlib/vlib/pci/pci.c
index bbd122153d5..73ae541320a 100644
--- a/vlib/vlib/pci/pci.c
+++ b/vlib/vlib/pci/pci.c
@@ -54,27 +54,28 @@ vlib_pci_main_t pci_main;
static clib_error_t *
show_pci_fn (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_pci_main_t * pm = &pci_main;
- vlib_pci_device_t * d;
- pci_config_header_t * c;
+ vlib_pci_main_t *pm = &pci_main;
+ vlib_pci_device_t *d;
+ pci_config_header_t *c;
int show_all = 0;
- u8 * s = 0;
+ u8 *s = 0;
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
if (unformat (input, "all"))
- show_all = 1;
+ show_all = 1;
else
- return clib_error_return (0, "unknown input `%U'",
- format_unformat_error, input);
+ return clib_error_return (0, "unknown input `%U'",
+ format_unformat_error, input);
}
vlib_cli_output (vm, "%-13s%-7s%-12s%-15s%-20s%-40s",
- "Address", "Socket", "VID:PID", "Link Speed", "Driver", "Product Name");
+ "Address", "Socket", "VID:PID", "Link Speed", "Driver",
+ "Product Name");
+ /* *INDENT-OFF* */
pool_foreach (d, pm->pci_devs, ({
c = &d->config0.header;
@@ -93,23 +94,24 @@ show_pci_fn (vlib_main_t * vm,
d->driver_name ? (char *) d->driver_name : "",
d->product_name);
}));
+/* *INDENT-ON* */
- vec_free(s);
+ vec_free (s);
return 0;
}
uword
unformat_vlib_pci_addr (unformat_input_t * input, va_list * args)
{
- vlib_pci_addr_t * addr = va_arg (* args, vlib_pci_addr_t *);
+ vlib_pci_addr_t *addr = va_arg (*args, vlib_pci_addr_t *);
u32 x[4];
if (!unformat (input, "%x:%x:%x.%x", &x[0], &x[1], &x[2], &x[3]))
return 0;
- addr->domain = x[0];
- addr->bus = x[1];
- addr->slot = x[2];
+ addr->domain = x[0];
+ addr->bus = x[1];
+ addr->slot = x[2];
addr->function = x[3];
return 1;
@@ -118,7 +120,7 @@ unformat_vlib_pci_addr (unformat_input_t * input, va_list * args)
u8 *
format_vlib_pci_addr (u8 * s, va_list * va)
{
- vlib_pci_addr_t * addr = va_arg (* va, vlib_pci_addr_t *);
+ vlib_pci_addr_t *addr = va_arg (*va, vlib_pci_addr_t *);
return format (s, "%04x:%02x:%02x.%x", addr->domain, addr->bus,
addr->slot, addr->function);
}
@@ -126,15 +128,16 @@ format_vlib_pci_addr (u8 * s, va_list * va)
u8 *
format_vlib_pci_handle (u8 * s, va_list * va)
{
- vlib_pci_addr_t * addr = va_arg (* va, vlib_pci_addr_t *);
+ vlib_pci_addr_t *addr = va_arg (*va, vlib_pci_addr_t *);
return format (s, "%x/%x/%x", addr->bus, addr->slot, addr->function);
}
u8 *
-format_vlib_pci_link_speed (u8 *s, va_list * va)
+format_vlib_pci_link_speed (u8 * s, va_list * va)
{
- vlib_pci_device_t * d = va_arg (* va, vlib_pci_device_t *);
- pcie_config_regs_t * r = pci_config_find_capability (&d->config0, PCI_CAP_ID_PCIE);
+ vlib_pci_device_t *d = va_arg (*va, vlib_pci_device_t *);
+ pcie_config_regs_t *r =
+ pci_config_find_capability (&d->config0, PCI_CAP_ID_PCIE);
int width;
if (!r)
@@ -152,15 +155,26 @@ format_vlib_pci_link_speed (u8 *s, va_list * va)
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_pci_command, static) = {
.path = "show pci",
.short_help = "show pci [all]",
.function = show_pci_fn,
};
+/* *INDENT-ON* */
-clib_error_t * pci_bus_init (vlib_main_t * vm)
+clib_error_t *
+pci_bus_init (vlib_main_t * vm)
{
return 0;
}
VLIB_INIT_FUNCTION (pci_bus_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/pci/pci.h b/vlib/vlib/pci/pci.h
index 7e8a9fcc80b..06e10b80e59 100644
--- a/vlib/vlib/pci/pci.h
+++ b/vlib/vlib/pci/pci.h
@@ -43,72 +43,74 @@
#include <vlib/vlib.h>
#include <vlib/pci/pci_config.h>
-typedef CLIB_PACKED (union {
- struct {
- u16 domain;
- u8 bus;
- u8 slot:5;
- u8 function:3;
- };
- u32 as_u32;
-}) vlib_pci_addr_t;
-
-typedef struct vlib_pci_device {
+typedef CLIB_PACKED (union
+ {
+ struct
+ {
+u16 domain; u8 bus; u8 slot: 5; u8 function:3;};
+ u32 as_u32;}) vlib_pci_addr_t;
+
+typedef struct vlib_pci_device
+{
/* Operating system handle for this device. */
uword os_handle;
vlib_pci_addr_t bus_address;
/* First 64 bytes of configuration space. */
- union {
+ union
+ {
pci_config_type0_regs_t config0;
pci_config_type1_regs_t config1;
u8 config_data[256];
};
/* Interrupt handler */
- void (* interrupt_handler) (struct vlib_pci_device * dev);
+ void (*interrupt_handler) (struct vlib_pci_device * dev);
/* Driver name */
- u8 * driver_name;
+ u8 *driver_name;
/* Numa Node */
int numa_node;
/* Vital Product Data */
- u8 * product_name;
- u8 * vpd_r;
- u8 * vpd_w;
+ u8 *product_name;
+ u8 *vpd_r;
+ u8 *vpd_w;
/* Private data */
uword private_data;
} vlib_pci_device_t;
-typedef struct {
+typedef struct
+{
u16 vendor_id, device_id;
} pci_device_id_t;
-typedef struct _pci_device_registration {
+typedef struct _pci_device_registration
+{
/* Driver init function. */
- clib_error_t * (* init_function) (vlib_main_t * vm, vlib_pci_device_t * dev);
+ clib_error_t *(*init_function) (vlib_main_t * vm, vlib_pci_device_t * dev);
/* Interrupt handler */
- void (* interrupt_handler) (vlib_pci_device_t * dev);
+ void (*interrupt_handler) (vlib_pci_device_t * dev);
/* List of registrations */
- struct _pci_device_registration * next_registration;
+ struct _pci_device_registration *next_registration;
/* Vendor/device ids supported by this driver. */
pci_device_id_t supported_devices[];
} pci_device_registration_t;
/* Pool of PCI devices. */
-typedef struct {
- vlib_main_t * vlib_main;
- vlib_pci_device_t * pci_devs;
- pci_device_registration_t * pci_device_registrations;
- uword * pci_dev_index_by_pci_addr;
+typedef struct
+{
+ vlib_main_t *vlib_main;
+ vlib_pci_device_t *pci_devs;
+ pci_device_registration_t *pci_device_registrations;
+ uword *pci_dev_index_by_pci_addr;
} vlib_pci_main_t;
extern vlib_pci_main_t pci_main;
@@ -125,16 +127,14 @@ static void __vlib_add_pci_device_registration_##x (void) \
} \
__VA_ARGS__ pci_device_registration_t x
-clib_error_t *
-vlib_pci_bind_to_uio (vlib_pci_device_t * d, char * uio_driver_name);
+clib_error_t *vlib_pci_bind_to_uio (vlib_pci_device_t * d,
+ char *uio_driver_name);
/* Configuration space read/write. */
-clib_error_t *
-vlib_pci_read_write_config (vlib_pci_device_t * dev,
- vlib_read_or_write_t read_or_write,
- uword address,
- void * data,
- u32 n_bytes);
+clib_error_t *vlib_pci_read_write_config (vlib_pci_device_t * dev,
+ vlib_read_or_write_t read_or_write,
+ uword address,
+ void *data, u32 n_bytes);
#define _(t) \
static inline clib_error_t * \
@@ -145,9 +145,9 @@ vlib_pci_read_config_##t (vlib_pci_device_t * dev, \
sizeof (data[0])); \
}
-_ (u32);
-_ (u16);
-_ (u8);
+_(u32);
+_(u16);
+_(u8);
#undef _
@@ -160,52 +160,52 @@ vlib_pci_write_config_##t (vlib_pci_device_t * dev, uword address, \
address, data, sizeof (data[0])); \
}
-_ (u32);
-_ (u16);
-_ (u8);
+_(u32);
+_(u16);
+_(u8);
#undef _
static inline clib_error_t *
-vlib_pci_intr_enable(vlib_pci_device_t * dev)
+vlib_pci_intr_enable (vlib_pci_device_t * dev)
{
u16 command;
- clib_error_t * err;
+ clib_error_t *err;
- err = vlib_pci_read_config_u16(dev, 4, &command);
+ err = vlib_pci_read_config_u16 (dev, 4, &command);
if (err)
return err;
command &= ~PCI_COMMAND_INTX_DISABLE;
- return vlib_pci_write_config_u16(dev, 4, &command);
+ return vlib_pci_write_config_u16 (dev, 4, &command);
}
static inline clib_error_t *
-vlib_pci_intr_disable(vlib_pci_device_t * dev)
+vlib_pci_intr_disable (vlib_pci_device_t * dev)
{
u16 command;
- clib_error_t * err;
+ clib_error_t *err;
- err = vlib_pci_read_config_u16(dev, 4, &command);
+ err = vlib_pci_read_config_u16 (dev, 4, &command);
if (err)
return err;
command |= PCI_COMMAND_INTX_DISABLE;
- return vlib_pci_write_config_u16(dev, 4, &command);
+ return vlib_pci_write_config_u16 (dev, 4, &command);
}
static inline clib_error_t *
-vlib_pci_bus_master_enable(vlib_pci_device_t * dev)
+vlib_pci_bus_master_enable (vlib_pci_device_t * dev)
{
- clib_error_t * err;
+ clib_error_t *err;
u16 command;
/* Set bus master enable (BME) */
- err = vlib_pci_read_config_u16(dev, 4, &command);
+ err = vlib_pci_read_config_u16 (dev, 4, &command);
if (err)
return err;
@@ -215,19 +215,18 @@ vlib_pci_bus_master_enable(vlib_pci_device_t * dev)
command |= PCI_COMMAND_BUS_MASTER;
- return vlib_pci_write_config_u16(dev, 4, &command);
+ return vlib_pci_write_config_u16 (dev, 4, &command);
}
-clib_error_t *
-vlib_pci_map_resource (vlib_pci_device_t * dev, u32 resource, void ** result);
+clib_error_t *vlib_pci_map_resource (vlib_pci_device_t * dev, u32 resource,
+ void **result);
-clib_error_t *
-vlib_pci_map_resource_fixed (vlib_pci_device_t * dev, u32 resource, u8 * addr,
- void ** result);
+clib_error_t *vlib_pci_map_resource_fixed (vlib_pci_device_t * dev,
+ u32 resource, u8 * addr,
+ void **result);
/* Free's device. */
-void
-vlib_pci_free_device (vlib_pci_device_t * dev);
+void vlib_pci_free_device (vlib_pci_device_t * dev);
unformat_function_t unformat_vlib_pci_addr;
format_function_t format_vlib_pci_addr;
@@ -235,3 +234,11 @@ format_function_t format_vlib_pci_handle;
format_function_t format_vlib_pci_link_speed;
#endif /* included_vlib_pci_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/pci/pci_config.h b/vlib/vlib/pci/pci_config.h
index 9d6f08a7207..f65a36cac5a 100644
--- a/vlib/vlib/pci/pci_config.h
+++ b/vlib/vlib/pci/pci_config.h
@@ -43,7 +43,8 @@
#include <vppinfra/byte_order.h>
#include <vppinfra/error.h>
-typedef enum {
+typedef enum
+{
PCI_CLASS_NOT_DEFINED = 0x0000,
PCI_CLASS_NOT_DEFINED_VGA = 0x0001,
@@ -156,50 +157,53 @@ typedef enum {
static inline pci_device_class_t
pci_device_class_base (pci_device_class_t c)
-{ return c &~ 0xff; }
+{
+ return c & ~0xff;
+}
/*
* Under PCI, each device has 256 bytes of configuration address space,
* of which the first 64 bytes are standardized as follows:
*/
-typedef struct {
+typedef struct
+{
u16 vendor_id;
u16 device_id;
u16 command;
-#define PCI_COMMAND_IO (1 << 0) /* Enable response in I/O space */
-#define PCI_COMMAND_MEMORY (1 << 1) /* Enable response in Memory space */
-#define PCI_COMMAND_BUS_MASTER (1 << 2) /* Enable bus mastering */
-#define PCI_COMMAND_SPECIAL (1 << 3) /* Enable response to special cycles */
-#define PCI_COMMAND_WRITE_INVALIDATE (1 << 4) /* Use memory write and invalidate */
+#define PCI_COMMAND_IO (1 << 0) /* Enable response in I/O space */
+#define PCI_COMMAND_MEMORY (1 << 1) /* Enable response in Memory space */
+#define PCI_COMMAND_BUS_MASTER (1 << 2) /* Enable bus mastering */
+#define PCI_COMMAND_SPECIAL (1 << 3) /* Enable response to special cycles */
+#define PCI_COMMAND_WRITE_INVALIDATE (1 << 4) /* Use memory write and invalidate */
#define PCI_COMMAND_VGA_PALETTE_SNOOP (1 << 5)
#define PCI_COMMAND_PARITY (1 << 6)
-#define PCI_COMMAND_WAIT (1 << 7) /* Enable address/data stepping */
-#define PCI_COMMAND_SERR (1 << 8) /* Enable SERR */
+#define PCI_COMMAND_WAIT (1 << 7) /* Enable address/data stepping */
+#define PCI_COMMAND_SERR (1 << 8) /* Enable SERR */
#define PCI_COMMAND_BACK_TO_BACK_WRITE (1 << 9)
-#define PCI_COMMAND_INTX_DISABLE (1 << 10) /* INTx Emulation Disable */
+#define PCI_COMMAND_INTX_DISABLE (1 << 10) /* INTx Emulation Disable */
u16 status;
#define PCI_STATUS_INTX_PENDING (1 << 3)
#define PCI_STATUS_CAPABILITY_LIST (1 << 4)
-#define PCI_STATUS_66MHZ (1 << 5) /* Support 66 Mhz PCI 2.1 bus */
-#define PCI_STATUS_UDF (1 << 6) /* Support User Definable Features (obsolete) */
-#define PCI_STATUS_BACK_TO_BACK_WRITE (1 << 7) /* Accept fast-back to back */
-#define PCI_STATUS_PARITY_ERROR (1 << 8) /* Detected parity error */
+#define PCI_STATUS_66MHZ (1 << 5) /* Support 66 Mhz PCI 2.1 bus */
+#define PCI_STATUS_UDF (1 << 6) /* Support User Definable Features (obsolete) */
+#define PCI_STATUS_BACK_TO_BACK_WRITE (1 << 7) /* Accept fast-back to back */
+#define PCI_STATUS_PARITY_ERROR (1 << 8) /* Detected parity error */
#define PCI_STATUS_DEVSEL_GET(x) ((x >> 9) & 3) /* DEVSEL timing */
#define PCI_STATUS_DEVSEL_FAST (0 << 9)
#define PCI_STATUS_DEVSEL_MEDIUM (1 << 9)
#define PCI_STATUS_DEVSEL_SLOW (2 << 9)
-#define PCI_STATUS_SIG_TARGET_ABORT (1 << 11) /* Set on target abort */
-#define PCI_STATUS_REC_TARGET_ABORT (1 << 12) /* Master ack of " */
-#define PCI_STATUS_REC_MASTER_ABORT (1 << 13) /* Set on master abort */
-#define PCI_STATUS_SIG_SYSTEM_ERROR (1 << 14) /* Set when we drive SERR */
+#define PCI_STATUS_SIG_TARGET_ABORT (1 << 11) /* Set on target abort */
+#define PCI_STATUS_REC_TARGET_ABORT (1 << 12) /* Master ack of " */
+#define PCI_STATUS_REC_MASTER_ABORT (1 << 13) /* Set on master abort */
+#define PCI_STATUS_SIG_SYSTEM_ERROR (1 << 14) /* Set when we drive SERR */
#define PCI_STATUS_DETECTED_PARITY_ERROR (1 << 15)
u8 revision_id;
- u8 programming_interface_class; /* Reg. Level Programming Interface */
+ u8 programming_interface_class; /* Reg. Level Programming Interface */
- pci_device_class_t device_class : 16;
+ pci_device_class_t device_class:16;
u8 cache_size;
u8 latency_timer;
@@ -219,25 +223,26 @@ typedef struct {
always_inline void
pci_config_header_little_to_host (pci_config_header_t * r)
{
- if (! CLIB_ARCH_IS_BIG_ENDIAN)
+ if (!CLIB_ARCH_IS_BIG_ENDIAN)
return;
#define _(f,t) r->f = clib_byte_swap_##t (r->f)
- _ (vendor_id, u16);
- _ (device_id, u16);
- _ (command, u16);
- _ (status, u16);
- _ (device_class, u16);
+ _(vendor_id, u16);
+ _(device_id, u16);
+ _(command, u16);
+ _(status, u16);
+ _(device_class, u16);
#undef _
}
/* Header type 0 (normal devices) */
-typedef struct {
+typedef struct
+{
pci_config_header_t header;
/*
* Base addresses specify locations in memory or I/O space.
- * Decoded size can be determined by writing a value of
- * 0xffffffff to the register, and reading it back. Only
+ * Decoded size can be determined by writing a value of
+ * 0xffffffff to the register, and reading it back. Only
* 1 bits are decoded.
*/
u32 base_address[6];
@@ -251,9 +256,9 @@ typedef struct {
#define PCI_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */
#define PCI_ROM_ADDRESS_ENABLE 0x01
#define PCI_ROM_ADDRESS_MASK (~0x7ffUL)
-
+
u8 first_capability_offset;
- CLIB_PAD_FROM_TO (0x35, 0x3c);
+ CLIB_PAD_FROM_TO (0x35, 0x3c);
u8 interrupt_line;
u8 interrupt_pin;
@@ -267,21 +272,22 @@ always_inline void
pci_config_type0_little_to_host (pci_config_type0_regs_t * r)
{
int i;
- if (! CLIB_ARCH_IS_BIG_ENDIAN)
+ if (!CLIB_ARCH_IS_BIG_ENDIAN)
return;
pci_config_header_little_to_host (&r->header);
#define _(f,t) r->f = clib_byte_swap_##t (r->f)
for (i = 0; i < ARRAY_LEN (r->base_address); i++)
- _ (base_address[i], u32);
- _ (cardbus_cis, u16);
- _ (subsystem_vendor_id, u16);
- _ (subsystem_id, u16);
- _ (rom_address, u32);
+ _(base_address[i], u32);
+ _(cardbus_cis, u16);
+ _(subsystem_vendor_id, u16);
+ _(subsystem_id, u16);
+ _(rom_address, u32);
#undef _
}
/* Header type 1 (PCI-to-PCI bridges) */
-typedef struct {
+typedef struct
+{
pci_config_header_t header;
u32 base_address[2];
@@ -319,17 +325,17 @@ typedef struct {
/* Same as for type 0. */
u8 capability_list_offset;
- CLIB_PAD_FROM_TO (0x35, 0x37);
+ CLIB_PAD_FROM_TO (0x35, 0x37);
u32 rom_address;
- CLIB_PAD_FROM_TO (0x3c, 0x3e);
+ CLIB_PAD_FROM_TO (0x3c, 0x3e);
u16 bridge_control;
#define PCI_BRIDGE_CTL_PARITY 0x01 /* Enable parity detection on secondary interface */
#define PCI_BRIDGE_CTL_SERR 0x02 /* The same for SERR forwarding */
#define PCI_BRIDGE_CTL_NO_ISA 0x04 /* Disable bridging of ISA ports */
#define PCI_BRIDGE_CTL_VGA 0x08 /* Forward VGA addresses */
-#define PCI_BRIDGE_CTL_MASTER_ABORT 0x20 /* Report master aborts */
+#define PCI_BRIDGE_CTL_MASTER_ABORT 0x20 /* Report master aborts */
#define PCI_BRIDGE_CTL_BUS_RESET 0x40 /* Secondary bus reset */
#define PCI_BRIDGE_CTL_FAST_BACK 0x80 /* Fast Back2Back enabled on secondary interface */
@@ -340,28 +346,29 @@ always_inline void
pci_config_type1_little_to_host (pci_config_type1_regs_t * r)
{
int i;
- if (! CLIB_ARCH_IS_BIG_ENDIAN)
+ if (!CLIB_ARCH_IS_BIG_ENDIAN)
return;
pci_config_header_little_to_host (&r->header);
#define _(f,t) r->f = clib_byte_swap_##t (r->f)
for (i = 0; i < ARRAY_LEN (r->base_address); i++)
- _ (base_address[i], u32);
- _ (secondary_status, u16);
- _ (memory_base, u16);
- _ (memory_limit, u16);
- _ (prefetchable_memory_base, u16);
- _ (prefetchable_memory_limit, u16);
- _ (prefetchable_memory_base_upper_32bits, u32);
- _ (prefetchable_memory_limit_upper_32bits, u32);
- _ (io_base_upper_16bits, u16);
- _ (io_limit_upper_16bits, u16);
- _ (rom_address, u32);
- _ (bridge_control, u16);
+ _(base_address[i], u32);
+ _(secondary_status, u16);
+ _(memory_base, u16);
+ _(memory_limit, u16);
+ _(prefetchable_memory_base, u16);
+ _(prefetchable_memory_limit, u16);
+ _(prefetchable_memory_base_upper_32bits, u32);
+ _(prefetchable_memory_limit_upper_32bits, u32);
+ _(io_base_upper_16bits, u16);
+ _(io_limit_upper_16bits, u16);
+ _(rom_address, u32);
+ _(bridge_control, u16);
#undef _
}
/* Capabilities. */
-typedef enum pci_capability_type {
+typedef enum pci_capability_type
+{
/* Power Management */
PCI_CAP_ID_PM = 1,
@@ -378,7 +385,7 @@ typedef enum pci_capability_type {
PCI_CAP_ID_MSI = 5,
/* CompactPCI HotSwap */
- PCI_CAP_ID_CHSWP = 6,
+ PCI_CAP_ID_CHSWP = 6,
/* PCI-X */
PCI_CAP_ID_PCIX = 7,
@@ -397,26 +404,25 @@ typedef enum pci_capability_type {
} pci_capability_type_t;
/* Common header for capabilities. */
-typedef CLIB_PACKED (struct {
- enum pci_capability_type type : 8;
-
- u8 next_offset;
-}) pci_capability_regs_t;
+typedef CLIB_PACKED (struct
+ {
+ enum pci_capability_type type:8;
+ u8 next_offset;}) pci_capability_regs_t;
always_inline void *
pci_config_find_capability (pci_config_type0_regs_t * t, int cap_type)
{
- pci_capability_regs_t * c;
+ pci_capability_regs_t *c;
u32 next_offset;
u32 ttl = 48;
- if (! (t->header.status & PCI_STATUS_CAPABILITY_LIST))
+ if (!(t->header.status & PCI_STATUS_CAPABILITY_LIST))
return 0;
next_offset = t->first_capability_offset;
while (ttl-- && next_offset >= 0x40)
{
- c = (void *) t + (next_offset &~ 3);
+ c = (void *) t + (next_offset & ~3);
if ((u8) c->type == 0xff)
break;
if (c->type == cap_type)
@@ -427,49 +433,41 @@ pci_config_find_capability (pci_config_type0_regs_t * t, int cap_type)
}
/* Power Management Registers */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
-
- u16 capabilities;
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 capabilities;
#define PCI_PM_CAP_VER_MASK 0x0007 /* Version */
#define PCI_PM_CAP_PME_CLOCK 0x0008 /* PME clock required */
-#define PCI_PM_CAP_RESERVED 0x0010 /* Reserved field */
+#define PCI_PM_CAP_RESERVED 0x0010 /* Reserved field */
#define PCI_PM_CAP_DSI 0x0020 /* Device specific initialization */
#define PCI_PM_CAP_AUX_POWER 0x01C0 /* Auxilliary power support mask */
#define PCI_PM_CAP_D1 0x0200 /* D1 power state support */
#define PCI_PM_CAP_D2 0x0400 /* D2 power state support */
#define PCI_PM_CAP_PME 0x0800 /* PME pin supported */
-#define PCI_PM_CAP_PME_MASK 0xF800 /* PME Mask of all supported states */
-#define PCI_PM_CAP_PME_D0 0x0800 /* PME# from D0 */
-#define PCI_PM_CAP_PME_D1 0x1000 /* PME# from D1 */
-#define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */
-#define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */
-#define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */
-
- u16 control;
+#define PCI_PM_CAP_PME_MASK 0xF800 /* PME Mask of all supported states */
+#define PCI_PM_CAP_PME_D0 0x0800 /* PME# from D0 */
+#define PCI_PM_CAP_PME_D1 0x1000 /* PME# from D1 */
+#define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */
+#define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */
+#define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */
+ u16 control;
#define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */
#define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */
#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */
#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */
#define PCI_PM_CTRL_PME_STATUS 0x8000 /* PME pin status */
-
- u8 extensions;
+ u8 extensions;
#define PCI_PM_PPB_B2_B3 0x40 /* Stop clock when in D3hot (??) */
#define PCI_PM_BPCC_ENABLE 0x80 /* Bus power/clock control enable (??) */
-
- u8 data;
-}) pci_power_management_regs_t;
+ u8 data;}) pci_power_management_regs_t;
/* AGP registers */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
- u8 version;
- u8 rest_of_capability_flags;
-
- u32 status;
- u32 command;
- /* Command & status common bits. */
-#define PCI_AGP_RQ_MASK 0xff000000 /* Maximum number of requests - 1 */
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u8 version;
+ u8 rest_of_capability_flags; u32 status; u32 command;
+ /* Command & status common bits. */
+#define PCI_AGP_RQ_MASK 0xff000000 /* Maximum number of requests - 1 */
#define PCI_AGP_SBA 0x0200 /* Sideband addressing supported */
#define PCI_AGP_64BIT 0x0020 /* 64-bit addressing supported */
#define PCI_AGP_ALLOW_TRANSACTIONS 0x0100 /* Allow processing of AGP transactions */
@@ -477,58 +475,47 @@ typedef CLIB_PACKED (struct {
#define PCI_AGP_RATE4 0x0004 /* 4x transfer rate supported */
#define PCI_AGP_RATE2 0x0002 /* 2x transfer rate supported */
#define PCI_AGP_RATE1 0x0001 /* 1x transfer rate supported */
-}) pci_agp_regs_t;
+ }) pci_agp_regs_t;
/* Vital Product Data */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
- u16 address;
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 address;
#define PCI_VPD_ADDR_MASK 0x7fff /* Address mask */
#define PCI_VPD_ADDR_F 0x8000 /* Write 0, 1 indicates completion */
-
- u32 data;
-}) pci_vpd_regs_t;
+ u32 data;}) pci_vpd_regs_t;
/* Slot Identification */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
- u8 esr;
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u8 esr;
#define PCI_SID_ESR_NSLOTS 0x1f /* Number of expansion slots available */
#define PCI_SID_ESR_FIC 0x20 /* First In Chassis Flag */
- u8 chassis;
-}) pci_sid_regs_t;
+ u8 chassis;}) pci_sid_regs_t;
/* Message Signalled Interrupts registers */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
-
- u16 flags;
-#define PCI_MSI_FLAGS_ENABLE (1 << 0) /* MSI feature enabled */
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 flags;
+#define PCI_MSI_FLAGS_ENABLE (1 << 0) /* MSI feature enabled */
#define PCI_MSI_FLAGS_GET_MAX_QUEUE_SIZE(x) ((x >> 1) & 0x7)
#define PCI_MSI_FLAGS_MAX_QUEUE_SIZE(x) (((x) & 0x7) << 1)
#define PCI_MSI_FLAGS_GET_QUEUE_SIZE(x) ((x >> 4) & 0x7)
#define PCI_MSI_FLAGS_QUEUE_SIZE(x) (((x) & 0x7) << 4)
-#define PCI_MSI_FLAGS_64BIT (1 << 7) /* 64-bit addresses allowed */
-#define PCI_MSI_FLAGS_MASKBIT (1 << 8) /* 64-bit mask bits allowed */
-
- u32 address;
- u32 data;
- u32 mask_bits;
-}) pci_msi32_regs_t;
-
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
- u16 flags;
- u32 address[2];
- u32 data;
- u32 mask_bits;
-}) pci_msi64_regs_t;
+#define PCI_MSI_FLAGS_64BIT (1 << 7) /* 64-bit addresses allowed */
+#define PCI_MSI_FLAGS_MASKBIT (1 << 8) /* 64-bit mask bits allowed */
+ u32 address; u32 data; u32 mask_bits;}) pci_msi32_regs_t;
-/* CompactPCI Hotswap Register */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 flags;
+ u32 address[2];
+ u32 data; u32 mask_bits;}) pci_msi64_regs_t;
- u16 control_status;
+/* CompactPCI Hotswap Register */
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 control_status;
#define PCI_CHSWP_DHA 0x01 /* Device Hiding Arm */
#define PCI_CHSWP_EIM 0x02 /* ENUM# Signal Mask */
#define PCI_CHSWP_PIE 0x04 /* Pending Insert or Extract */
@@ -536,20 +523,18 @@ typedef CLIB_PACKED (struct {
#define PCI_CHSWP_PI 0x30 /* Programming Interface */
#define PCI_CHSWP_EXT 0x40 /* ENUM# status - extraction */
#define PCI_CHSWP_INS 0x80 /* ENUM# status - insertion */
-}) pci_chswp_regs_t;
+ }) pci_chswp_regs_t;
/* PCIX registers */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
-
- u16 command;
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 command;
#define PCIX_CMD_DPERR_E 0x0001 /* Data Parity Error Recovery Enable */
#define PCIX_CMD_ERO 0x0002 /* Enable Relaxed Ordering */
#define PCIX_CMD_MAX_READ 0x000c /* Max Memory Read Byte Count */
#define PCIX_CMD_MAX_SPLIT 0x0070 /* Max Outstanding Split Transactions */
-#define PCIX_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
-
- u32 status;
+#define PCIX_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
+ u32 status;
#define PCIX_STATUS_DEVFN 0x000000ff /* A copy of devfn */
#define PCIX_STATUS_BUS 0x0000ff00 /* A copy of bus nr */
#define PCIX_STATUS_64BIT 0x00010000 /* 64-bit device */
@@ -563,16 +548,18 @@ typedef CLIB_PACKED (struct {
#define PCIX_STATUS_SPL_ERR 0x20000000 /* Rcvd Split Completion Error Msg */
#define PCIX_STATUS_266MHZ 0x40000000 /* 266 MHz capable */
#define PCIX_STATUS_533MHZ 0x80000000 /* 533 MHz capable */
-}) pcix_config_regs_t;
+ }) pcix_config_regs_t;
-static inline int pcie_size_to_code (int bytes)
+static inline int
+pcie_size_to_code (int bytes)
{
ASSERT (is_pow2 (bytes));
ASSERT (bytes <= 4096);
return min_log2 (bytes) - 7;
}
-static inline int pcie_code_to_size (int code)
+static inline int
+pcie_code_to_size (int code)
{
int size = 1 << (code + 7);
ASSERT (size <= 4096);
@@ -580,27 +567,25 @@ static inline int pcie_code_to_size (int code)
}
/* PCI Express capability registers */
-typedef CLIB_PACKED (struct {
- pci_capability_regs_t header;
-
- u16 pcie_capabilities;
+typedef CLIB_PACKED (struct
+ {
+ pci_capability_regs_t header; u16 pcie_capabilities;
#define PCIE_CAP_VERSION(x) (((x) >> 0) & 0xf)
#define PCIE_CAP_DEVICE_TYPE(x) (((x) >> 4) & 0xf)
#define PCIE_DEVICE_TYPE_ENDPOINT 0
#define PCIE_DEVICE_TYPE_LEGACY_ENDPOINT 1
#define PCIE_DEVICE_TYPE_ROOT_PORT 4
- /* Upstream/downstream port of PCI Express switch. */
+ /* Upstream/downstream port of PCI Express switch. */
#define PCIE_DEVICE_TYPE_SWITCH_UPSTREAM 5
#define PCIE_DEVICE_TYPE_SWITCH_DOWNSTREAM 6
#define PCIE_DEVICE_TYPE_PCIE_TO_PCI_BRIDGE 7
#define PCIE_DEVICE_TYPE_PCI_TO_PCIE_BRIDGE 8
- /* Root complex integrated endpoint. */
+ /* Root complex integrated endpoint. */
#define PCIE_DEVICE_TYPE_ROOT_COMPLEX_ENDPOINT 9
#define PCIE_DEVICE_TYPE_ROOT_COMPLEX_EVENT_COLLECTOR 10
#define PCIE_CAP_SLOW_IMPLEMENTED (1 << 8)
#define PCIE_CAP_MSI_IRQ(x) (((x) >> 9) & 0x1f)
-
- u32 dev_capabilities;
+ u32 dev_capabilities;
#define PCIE_DEVCAP_MAX_PAYLOAD(x) (128 << (((x) >> 0) & 0x7))
#define PCIE_DEVCAP_PHANTOM_BITS(x) (((x) >> 3) & 0x3)
#define PCIE_DEVCAP_EXTENTED_TAG (1 << 5)
@@ -609,59 +594,45 @@ typedef CLIB_PACKED (struct {
#define PCIE_DEVCAP_ATN_BUT 0x1000 /* Attention Button Present */
#define PCIE_DEVCAP_ATN_IND 0x2000 /* Attention Indicator Present */
#define PCIE_DEVCAP_PWR_IND 0x4000 /* Power Indicator Present */
-#define PCIE_DEVCAP_PWR_VAL 0x3fc0000 /* Slot Power Limit Value */
-#define PCIE_DEVCAP_PWR_SCL 0xc000000 /* Slot Power Limit Scale */
-
- u16 dev_control;
+#define PCIE_DEVCAP_PWR_VAL 0x3fc0000 /* Slot Power Limit Value */
+#define PCIE_DEVCAP_PWR_SCL 0xc000000 /* Slot Power Limit Scale */
+ u16 dev_control;
#define PCIE_CTRL_CERE 0x0001 /* Correctable Error Reporting En. */
#define PCIE_CTRL_NFERE 0x0002 /* Non-Fatal Error Reporting Enable */
#define PCIE_CTRL_FERE 0x0004 /* Fatal Error Reporting Enable */
#define PCIE_CTRL_URRE 0x0008 /* Unsupported Request Reporting En. */
-#define PCIE_CTRL_RELAX_EN 0x0010 /* Enable relaxed ordering */
+#define PCIE_CTRL_RELAX_EN 0x0010 /* Enable relaxed ordering */
#define PCIE_CTRL_MAX_PAYLOAD(n) (((n) & 7) << 5)
#define PCIE_CTRL_EXT_TAG 0x0100 /* Extended Tag Field Enable */
#define PCIE_CTRL_PHANTOM 0x0200 /* Phantom Functions Enable */
#define PCIE_CTRL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */
-#define PCIE_CTRL_NOSNOOP_EN 0x0800 /* Enable No Snoop */
+#define PCIE_CTRL_NOSNOOP_EN 0x0800 /* Enable No Snoop */
#define PCIE_CTRL_MAX_READ_REQUEST(n) (((n) & 7) << 12)
-
- u16 dev_status;
+ u16 dev_status;
#define PCIE_DEVSTA_AUXPD 0x10 /* AUX Power Detected */
#define PCIE_DEVSTA_TRPND 0x20 /* Transactions Pending */
-
- u32 link_capabilities;
- u16 link_control;
- u16 link_status;
-
- u32 slot_capabilities;
- u16 slot_control;
- u16 slot_status;
-
- u16 root_control;
+ u32 link_capabilities; u16 link_control; u16 link_status;
+ u32 slot_capabilities;
+ u16 slot_control; u16 slot_status; u16 root_control;
#define PCIE_RTCTL_SECEE 0x01 /* System Error on Correctable Error */
#define PCIE_RTCTL_SENFEE 0x02 /* System Error on Non-Fatal Error */
#define PCIE_RTCTL_SEFEE 0x04 /* System Error on Fatal Error */
#define PCIE_RTCTL_PMEIE 0x08 /* PME Interrupt Enable */
#define PCIE_RTCTL_CRSSVE 0x10 /* CRS Software Visibility Enable */
-
- u16 root_capabilities;
- u32 root_status;
-
- u32 dev_capabilities2;
- u16 dev_control2;
- u16 dev_status2;
-
- u32 link_capabilities2;
- u16 link_control2;
- u16 link_status2;
-
- u32 slot_capabilities2;
- u16 slot_control2;
- u16 slot_status2;
-}) pcie_config_regs_t;
+ u16 root_capabilities;
+ u32 root_status;
+ u32 dev_capabilities2;
+ u16 dev_control2;
+ u16 dev_status2;
+ u32 link_capabilities2;
+ u16 link_control2;
+ u16 link_status2;
+ u32 slot_capabilities2; u16 slot_control2;
+ u16 slot_status2;}) pcie_config_regs_t;
/* PCI express extended capabilities. */
-typedef enum pcie_capability_type {
+typedef enum pcie_capability_type
+{
PCIE_CAP_ADVANCED_ERROR = 1,
PCIE_CAP_VC = 2,
PCIE_CAP_DSN = 3,
@@ -669,18 +640,14 @@ typedef enum pcie_capability_type {
} pcie_capability_type_t;
/* Common header for capabilities. */
-typedef CLIB_PACKED (struct {
- enum pcie_capability_type type : 16;
-
- u16 version : 4;
-
- u16 next_capability : 12;
-}) pcie_capability_regs_t;
-
-typedef CLIB_PACKED (struct {
- pcie_capability_regs_t header;
-
- u32 uncorrectable_status;
+typedef CLIB_PACKED (struct
+ {
+enum pcie_capability_type type:16; u16 version: 4; u16 next_capability:12;})
+ pcie_capability_regs_t;
+
+typedef CLIB_PACKED (struct
+ {
+ pcie_capability_regs_t header; u32 uncorrectable_status;
#define PCIE_ERROR_UNC_LINK_TRAINING (1 << 0)
#define PCIE_ERROR_UNC_DATA_LINK_PROTOCOL (1 << 4)
#define PCIE_ERROR_UNC_SURPRISE_DOWN (1 << 5)
@@ -693,27 +660,20 @@ typedef CLIB_PACKED (struct {
#define PCIE_ERROR_UNC_MALFORMED_TLP (1 << 18)
#define PCIE_ERROR_UNC_CRC_ERROR (1 << 19)
#define PCIE_ERROR_UNC_UNSUPPORTED_REQUEST (1 << 20)
- u32 uncorrectable_mask;
- u32 uncorrectable_severity;
-
- u32 correctable_status;
+ u32 uncorrectable_mask;
+ u32 uncorrectable_severity; u32 correctable_status;
#define PCIE_ERROR_COR_RX_ERROR (1 << 0)
#define PCIE_ERROR_COR_BAD_TLP (1 << 6)
#define PCIE_ERROR_COR_BAD_DLLP (1 << 7)
#define PCIE_ERROR_COR_REPLAY_ROLLOVER (1 << 8)
#define PCIE_ERROR_COR_REPLAY_TIMER (1 << 12)
#define PCIE_ERROR_COR_ADVISORY (1 << 13)
-
- u32 correctable_mask;
- u32 control;
- u32 log[4];
-
- u32 root_command;
-
- u32 root_status;
- u16 correctable_error_source;
- u16 error_source;
-}) pcie_advanced_error_regs_t;
+ u32 correctable_mask;
+ u32 control;
+ u32 log[4];
+ u32 root_command;
+ u32 root_status; u16 correctable_error_source;
+ u16 error_source;}) pcie_advanced_error_regs_t;
/* Virtual Channel */
#define PCI_VC_PORT_REG1 4
@@ -727,13 +687,21 @@ typedef CLIB_PACKED (struct {
/* Power Budgeting */
#define PCI_PWR_DSR 4 /* Data Select Register */
#define PCI_PWR_DATA 8 /* Data Register */
-#define PCI_PWR_DATA_BASE(x) ((x) & 0xff) /* Base Power */
-#define PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3) /* Data Scale */
-#define PCI_PWR_DATA_PM_SUB(x) (((x) >> 10) & 7) /* PM Sub State */
-#define PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
-#define PCI_PWR_DATA_TYPE(x) (((x) >> 15) & 7) /* Type */
-#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */
+#define PCI_PWR_DATA_BASE(x) ((x) & 0xff) /* Base Power */
+#define PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3) /* Data Scale */
+#define PCI_PWR_DATA_PM_SUB(x) (((x) >> 10) & 7) /* PM Sub State */
+#define PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
+#define PCI_PWR_DATA_TYPE(x) (((x) >> 15) & 7) /* Type */
+#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */
#define PCI_PWR_CAP 12 /* Capability */
#define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */
#endif /* included_vlib_pci_config_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/physmem.h b/vlib/vlib/physmem.h
index 6f75a0f3662..9e7d52a6226 100644
--- a/vlib/vlib/physmem.h
+++ b/vlib/vlib/physmem.h
@@ -40,11 +40,13 @@
#ifndef included_vlib_physmem_h
#define included_vlib_physmem_h
-typedef struct {
+typedef struct
+{
uword start, end, size;
} vlib_physmem_region_t;
-typedef struct {
+typedef struct
+{
vlib_physmem_region_t virtual;
uword log2_n_bytes_per_page;
@@ -52,7 +54,7 @@ typedef struct {
/* 1 << log2_n_bytes_per_page - 1. */
uword page_mask;
- u64 * page_table;
+ u64 *page_table;
/* is fake physmem */
u8 is_fake;
@@ -69,10 +71,12 @@ vlib_physmem_offset_to_physical (vlib_physmem_main_t * pm, uword o)
always_inline int
vlib_physmem_is_virtual (vlib_physmem_main_t * pm, uword p)
-{ return p >= pm->virtual.start && p < pm->virtual.end; }
+{
+ return p >= pm->virtual.start && p < pm->virtual.end;
+}
always_inline uword
-vlib_physmem_offset_of (vlib_physmem_main_t * pm, void * p)
+vlib_physmem_offset_of (vlib_physmem_main_t * pm, void *p)
{
uword a = pointer_to_uword (p);
uword o;
@@ -94,3 +98,11 @@ vlib_physmem_at_offset (vlib_physmem_main_t * pm, uword offset)
}
#endif /* included_vlib_physmem_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/threads.c b/vlib/vlib/threads.c
index d2ce449f6ce..47db218dc0e 100644
--- a/vlib/vlib/threads.c
+++ b/vlib/vlib/threads.c
@@ -41,12 +41,13 @@ DECLARE_CJ_GLOBAL_LOG;
* Weak definitions of DPDK symbols used in this file.
* Needed for linking test programs without DPDK libs.
*/
-unsigned __thread __attribute__((weak)) RTE_PER_LCORE(_lcore_id);
-struct lcore_config __attribute__((weak)) lcore_config[];
-unsigned __attribute__((weak)) rte_socket_id();
-int __attribute__((weak)) rte_eal_remote_launch();
+unsigned __thread __attribute__ ((weak)) RTE_PER_LCORE (_lcore_id);
+struct lcore_config __attribute__ ((weak)) lcore_config[];
+unsigned __attribute__ ((weak)) rte_socket_id ();
+int __attribute__ ((weak)) rte_eal_remote_launch ();
#endif
-u32 vl(void *p)
+u32
+vl (void *p)
{
return vec_len (p);
}
@@ -56,7 +57,7 @@ vlib_thread_main_t vlib_thread_main;
uword
os_get_cpu_number (void)
{
- void * sp;
+ void *sp;
uword n;
u32 len;
@@ -67,8 +68,8 @@ os_get_cpu_number (void)
/* Get any old stack address. */
sp = &sp;
- n = ((uword)sp - (uword)vlib_thread_stacks[0])
- >> VLIB_LOG2_THREAD_STACK_SIZE;
+ n = ((uword) sp - (uword) vlib_thread_stacks[0])
+ >> VLIB_LOG2_THREAD_STACK_SIZE;
/* "processes" have their own stacks, and they always run in thread 0 */
n = n >= len ? 0 : n;
@@ -80,23 +81,24 @@ void
vlib_set_thread_name (char *name)
{
int pthread_setname_np (pthread_t __target_thread, const char *__name);
- pthread_t thread = pthread_self();
+ pthread_t thread = pthread_self ();
- if (thread)
- pthread_setname_np(thread, name);
+ if (thread)
+ pthread_setname_np (thread, name);
}
-static int sort_registrations_by_no_clone (void *a0, void * a1)
-{
- vlib_thread_registration_t ** tr0 = a0;
- vlib_thread_registration_t ** tr1 = a1;
+static int
+sort_registrations_by_no_clone (void *a0, void *a1)
+{
+ vlib_thread_registration_t **tr0 = a0;
+ vlib_thread_registration_t **tr1 = a1;
- return ((i32)((*tr0)->no_data_structure_clone)
- - ((i32)((*tr1)->no_data_structure_clone)));
+ return ((i32) ((*tr0)->no_data_structure_clone)
+ - ((i32) ((*tr1)->no_data_structure_clone)));
}
static uword *
-vlib_sysfs_list_to_bitmap(char * filename)
+vlib_sysfs_list_to_bitmap (char *filename)
{
FILE *fp;
uword *r = 0;
@@ -105,17 +107,18 @@ vlib_sysfs_list_to_bitmap(char * filename)
if (fp != NULL)
{
- u8 * buffer = 0;
- vec_validate (buffer, 256-1);
- if (fgets ((char *)buffer, 256, fp))
- {
- unformat_input_t in;
- unformat_init_string (&in, (char *) buffer, strlen ((char *) buffer));
- unformat(&in, "%U", unformat_bitmap_list, &r);
- unformat_free (&in);
- }
- vec_free(buffer);
- fclose(fp);
+ u8 *buffer = 0;
+ vec_validate (buffer, 256 - 1);
+ if (fgets ((char *) buffer, 256, fp))
+ {
+ unformat_input_t in;
+ unformat_init_string (&in, (char *) buffer,
+ strlen ((char *) buffer));
+ unformat (&in, "%U", unformat_bitmap_list, &r);
+ unformat_free (&in);
+ }
+ vec_free (buffer);
+ fclose (fp);
}
return r;
}
@@ -126,73 +129,73 @@ vlib_sysfs_list_to_bitmap(char * filename)
clib_error_t *
vlib_thread_init (vlib_main_t * vm)
{
- vlib_thread_main_t * tm = &vlib_thread_main;
- vlib_worker_thread_t * w;
- vlib_thread_registration_t * tr;
+ vlib_thread_main_t *tm = &vlib_thread_main;
+ vlib_worker_thread_t *w;
+ vlib_thread_registration_t *tr;
u32 n_vlib_mains = 1;
u32 first_index = 1;
u32 i;
- uword * avail_cpu;
+ uword *avail_cpu;
/* get bitmaps of active cpu cores and sockets */
tm->cpu_core_bitmap =
- vlib_sysfs_list_to_bitmap("/sys/devices/system/cpu/online");
+ vlib_sysfs_list_to_bitmap ("/sys/devices/system/cpu/online");
tm->cpu_socket_bitmap =
- vlib_sysfs_list_to_bitmap("/sys/devices/system/node/online");
+ vlib_sysfs_list_to_bitmap ("/sys/devices/system/node/online");
- avail_cpu = clib_bitmap_dup(tm->cpu_core_bitmap);
+ avail_cpu = clib_bitmap_dup (tm->cpu_core_bitmap);
/* skip cores */
- for (i=0; i < tm->skip_cores; i++)
+ for (i = 0; i < tm->skip_cores; i++)
{
- uword c = clib_bitmap_first_set(avail_cpu);
+ uword c = clib_bitmap_first_set (avail_cpu);
if (c == ~0)
- return clib_error_return (0, "no available cpus to skip");
+ return clib_error_return (0, "no available cpus to skip");
- avail_cpu = clib_bitmap_set(avail_cpu, c, 0);
+ avail_cpu = clib_bitmap_set (avail_cpu, c, 0);
}
/* grab cpu for main thread */
if (!tm->main_lcore)
{
- tm->main_lcore = clib_bitmap_first_set(avail_cpu);
- if (tm->main_lcore == (u8) ~0)
- return clib_error_return (0, "no available cpus to be used for the"
- " main thread");
+ tm->main_lcore = clib_bitmap_first_set (avail_cpu);
+ if (tm->main_lcore == (u8) ~ 0)
+ return clib_error_return (0, "no available cpus to be used for the"
+ " main thread");
}
else
{
- if (clib_bitmap_get(avail_cpu, tm->main_lcore) == 0)
- return clib_error_return (0, "cpu %u is not available to be used"
- " for the main thread", tm->main_lcore);
+ if (clib_bitmap_get (avail_cpu, tm->main_lcore) == 0)
+ return clib_error_return (0, "cpu %u is not available to be used"
+ " for the main thread", tm->main_lcore);
}
- avail_cpu = clib_bitmap_set(avail_cpu, tm->main_lcore, 0);
+ avail_cpu = clib_bitmap_set (avail_cpu, tm->main_lcore, 0);
/* assume that there is socket 0 only if there is no data from sysfs */
if (!tm->cpu_socket_bitmap)
- tm->cpu_socket_bitmap = clib_bitmap_set(0, 0, 1);
+ tm->cpu_socket_bitmap = clib_bitmap_set (0, 0, 1);
/* pin main thread to main_lcore */
#if DPDK==0
{
- cpu_set_t cpuset;
- CPU_ZERO(&cpuset);
- CPU_SET(tm->main_lcore, &cpuset);
- pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+ cpu_set_t cpuset;
+ CPU_ZERO (&cpuset);
+ CPU_SET (tm->main_lcore, &cpuset);
+ pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
}
#endif
/* as many threads as stacks... */
- vec_validate_aligned (vlib_worker_threads, vec_len(vlib_thread_stacks)-1,
- CLIB_CACHE_LINE_BYTES);
+ vec_validate_aligned (vlib_worker_threads, vec_len (vlib_thread_stacks) - 1,
+ CLIB_CACHE_LINE_BYTES);
/* Preallocate thread 0 */
- _vec_len(vlib_worker_threads) = 1;
+ _vec_len (vlib_worker_threads) = 1;
w = vlib_worker_threads;
- w->thread_mheap = clib_mem_get_heap();
+ w->thread_mheap = clib_mem_get_heap ();
w->thread_stack = vlib_thread_stacks[0];
w->dpdk_lcore_id = -1;
- w->lwp = syscall(SYS_gettid);
+ w->lwp = syscall (SYS_gettid);
tm->n_vlib_mains = 1;
/* assign threads to cores and set n_vlib_mains */
@@ -204,8 +207,7 @@ vlib_thread_init (vlib_main_t * vm)
tr = tr->next;
}
- vec_sort_with_function
- (tm->registrations, sort_registrations_by_no_clone);
+ vec_sort_with_function (tm->registrations, sort_registrations_by_no_clone);
for (i = 0; i < vec_len (tm->registrations); i++)
{
@@ -217,11 +219,12 @@ vlib_thread_init (vlib_main_t * vm)
/* construct coremask */
if (tr->use_pthreads || !tr->count)
- continue;
+ continue;
if (tr->coremask)
- {
- uword c;
+ {
+ uword c;
+ /* *INDENT-OFF* */
clib_bitmap_foreach (c, tr->coremask, ({
if (clib_bitmap_get(avail_cpu, c) == 0)
return clib_error_return (0, "cpu %u is not available to be used"
@@ -229,92 +232,98 @@ vlib_thread_init (vlib_main_t * vm)
avail_cpu = clib_bitmap_set(avail_cpu, c, 0);
}));
+/* *INDENT-ON* */
- }
+ }
else
- {
- for (j=0; j < tr->count; j++)
- {
- uword c = clib_bitmap_first_set(avail_cpu);
- if (c == ~0)
- return clib_error_return (0, "no available cpus to be used for"
- " the '%s' thread", tr->name);
-
- avail_cpu = clib_bitmap_set(avail_cpu, c, 0);
- tr->coremask = clib_bitmap_set(tr->coremask, c, 1);
- }
- }
+ {
+ for (j = 0; j < tr->count; j++)
+ {
+ uword c = clib_bitmap_first_set (avail_cpu);
+ if (c == ~0)
+ return clib_error_return (0,
+ "no available cpus to be used for"
+ " the '%s' thread", tr->name);
+
+ avail_cpu = clib_bitmap_set (avail_cpu, c, 0);
+ tr->coremask = clib_bitmap_set (tr->coremask, c, 1);
+ }
+ }
}
- clib_bitmap_free(avail_cpu);
+ clib_bitmap_free (avail_cpu);
tm->n_vlib_mains = n_vlib_mains;
- vec_validate_aligned (vlib_worker_threads, first_index-1,
- CLIB_CACHE_LINE_BYTES);
+ vec_validate_aligned (vlib_worker_threads, first_index - 1,
+ CLIB_CACHE_LINE_BYTES);
tm->efd.enabled = VLIB_EFD_DISABLED;
tm->efd.queue_hi_thresh = ((VLIB_EFD_DEF_WORKER_HI_THRESH_PCT *
- FRAME_QUEUE_NELTS)/100);
+ FRAME_QUEUE_NELTS) / 100);
return 0;
}
vlib_worker_thread_t *
vlib_alloc_thread (vlib_main_t * vm)
{
- vlib_worker_thread_t * w;
+ vlib_worker_thread_t *w;
- if (vec_len(vlib_worker_threads) >= vec_len (vlib_thread_stacks))
+ if (vec_len (vlib_worker_threads) >= vec_len (vlib_thread_stacks))
{
clib_warning ("out of worker threads... Quitting...");
- exit(1);
+ exit (1);
}
vec_add2 (vlib_worker_threads, w, 1);
w->thread_stack = vlib_thread_stacks[w - vlib_worker_threads];
return w;
}
-vlib_frame_queue_t * vlib_frame_queue_alloc (int nelts)
+vlib_frame_queue_t *
+vlib_frame_queue_alloc (int nelts)
{
- vlib_frame_queue_t * fq;
+ vlib_frame_queue_t *fq;
- fq = clib_mem_alloc_aligned(sizeof (*fq), CLIB_CACHE_LINE_BYTES);
+ fq = clib_mem_alloc_aligned (sizeof (*fq), CLIB_CACHE_LINE_BYTES);
memset (fq, 0, sizeof (*fq));
fq->nelts = nelts;
- fq->vector_threshold = 128; // packets
- vec_validate_aligned (fq->elts, nelts-1, CLIB_CACHE_LINE_BYTES);
+ fq->vector_threshold = 128; // packets
+ vec_validate_aligned (fq->elts, nelts - 1, CLIB_CACHE_LINE_BYTES);
if (1)
- {
- if (((uword)&fq->tail) & (CLIB_CACHE_LINE_BYTES - 1))
- fformat(stderr, "WARNING: fq->tail unaligned\n");
- if (((uword)&fq->head) & (CLIB_CACHE_LINE_BYTES - 1))
- fformat(stderr, "WARNING: fq->head unaligned\n");
- if (((uword)fq->elts) & (CLIB_CACHE_LINE_BYTES - 1))
- fformat(stderr, "WARNING: fq->elts unaligned\n");
-
- if (sizeof (fq->elts[0]) % CLIB_CACHE_LINE_BYTES)
- fformat(stderr, "WARNING: fq->elts[0] size %d\n",
- sizeof (fq->elts[0]));
- if (nelts & (nelts -1))
- {
- fformat (stderr, "FATAL: nelts MUST be a power of 2\n");
- abort();
- }
- }
-
+ {
+ if (((uword) & fq->tail) & (CLIB_CACHE_LINE_BYTES - 1))
+ fformat (stderr, "WARNING: fq->tail unaligned\n");
+ if (((uword) & fq->head) & (CLIB_CACHE_LINE_BYTES - 1))
+ fformat (stderr, "WARNING: fq->head unaligned\n");
+ if (((uword) fq->elts) & (CLIB_CACHE_LINE_BYTES - 1))
+ fformat (stderr, "WARNING: fq->elts unaligned\n");
+
+ if (sizeof (fq->elts[0]) % CLIB_CACHE_LINE_BYTES)
+ fformat (stderr, "WARNING: fq->elts[0] size %d\n",
+ sizeof (fq->elts[0]));
+ if (nelts & (nelts - 1))
+ {
+ fformat (stderr, "FATAL: nelts MUST be a power of 2\n");
+ abort ();
+ }
+ }
+
return (fq);
}
void vl_msg_api_handler_no_free (void *) __attribute__ ((weak));
-void vl_msg_api_handler_no_free (void *v) { }
+void
+vl_msg_api_handler_no_free (void *v)
+{
+}
/* Turned off, save as reference material... */
#if 0
-static inline int vlib_frame_queue_dequeue_internal (int thread_id,
- vlib_main_t *vm,
- vlib_node_main_t *nm)
+static inline int
+vlib_frame_queue_dequeue_internal (int thread_id,
+ vlib_main_t * vm, vlib_node_main_t * nm)
{
vlib_frame_queue_t *fq = vlib_frame_queues[thread_id];
vlib_frame_queue_elt_t *elt;
@@ -325,78 +334,79 @@ static inline int vlib_frame_queue_dequeue_internal (int thread_id,
int msg_type;
u64 before;
int processed = 0;
-
- ASSERT(vm == vlib_mains[thread_id]);
+
+ ASSERT (vm == vlib_mains[thread_id]);
while (1)
{
if (fq->head == fq->tail)
- return processed;
+ return processed;
- elt = fq->elts + ((fq->head+1) & (fq->nelts-1));
+ elt = fq->elts + ((fq->head + 1) & (fq->nelts - 1));
if (!elt->valid)
- return processed;
+ return processed;
- before = clib_cpu_time_now();
+ before = clib_cpu_time_now ();
f = elt->frame;
node_runtime_index = elt->node_runtime_index;
msg_type = elt->msg_type;
switch (msg_type)
- {
- case VLIB_FRAME_QUEUE_ELT_FREE_BUFFERS:
- vlib_buffer_free (vm, vlib_frame_vector_args (f), f->n_vectors);
- /* note fallthrough... */
- case VLIB_FRAME_QUEUE_ELT_FREE_FRAME:
- r = vec_elt_at_index (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL],
- node_runtime_index);
- vlib_frame_free (vm, r, f);
- break;
- case VLIB_FRAME_QUEUE_ELT_DISPATCH_FRAME:
- vec_add2 (vm->node_main.pending_frames, p, 1);
- f->flags |= (VLIB_FRAME_PENDING | VLIB_FRAME_FREE_AFTER_DISPATCH);
- p->node_runtime_index = elt->node_runtime_index;
- p->frame_index = vlib_frame_index (vm, f);
- p->next_frame_index = VLIB_PENDING_FRAME_NO_NEXT_FRAME;
- fq->dequeue_vectors += (u64) f->n_vectors;
- break;
- case VLIB_FRAME_QUEUE_ELT_API_MSG:
- vl_msg_api_handler_no_free (f);
- break;
- default:
- clib_warning ("bogus frame queue message, type %d", msg_type);
- break;
- }
+ {
+ case VLIB_FRAME_QUEUE_ELT_FREE_BUFFERS:
+ vlib_buffer_free (vm, vlib_frame_vector_args (f), f->n_vectors);
+ /* note fallthrough... */
+ case VLIB_FRAME_QUEUE_ELT_FREE_FRAME:
+ r = vec_elt_at_index (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL],
+ node_runtime_index);
+ vlib_frame_free (vm, r, f);
+ break;
+ case VLIB_FRAME_QUEUE_ELT_DISPATCH_FRAME:
+ vec_add2 (vm->node_main.pending_frames, p, 1);
+ f->flags |= (VLIB_FRAME_PENDING | VLIB_FRAME_FREE_AFTER_DISPATCH);
+ p->node_runtime_index = elt->node_runtime_index;
+ p->frame_index = vlib_frame_index (vm, f);
+ p->next_frame_index = VLIB_PENDING_FRAME_NO_NEXT_FRAME;
+ fq->dequeue_vectors += (u64) f->n_vectors;
+ break;
+ case VLIB_FRAME_QUEUE_ELT_API_MSG:
+ vl_msg_api_handler_no_free (f);
+ break;
+ default:
+ clib_warning ("bogus frame queue message, type %d", msg_type);
+ break;
+ }
elt->valid = 0;
fq->dequeues++;
- fq->dequeue_ticks += clib_cpu_time_now() - before;
- CLIB_MEMORY_BARRIER();
+ fq->dequeue_ticks += clib_cpu_time_now () - before;
+ CLIB_MEMORY_BARRIER ();
fq->head++;
processed++;
}
- ASSERT(0);
+ ASSERT (0);
return processed;
}
-int vlib_frame_queue_dequeue (int thread_id,
- vlib_main_t *vm,
- vlib_node_main_t *nm)
+int
+vlib_frame_queue_dequeue (int thread_id,
+ vlib_main_t * vm, vlib_node_main_t * nm)
{
return vlib_frame_queue_dequeue_internal (thread_id, vm, nm);
}
-int vlib_frame_queue_enqueue (vlib_main_t *vm, u32 node_runtime_index,
- u32 frame_queue_index, vlib_frame_t *frame,
- vlib_frame_queue_msg_type_t type)
+int
+vlib_frame_queue_enqueue (vlib_main_t * vm, u32 node_runtime_index,
+ u32 frame_queue_index, vlib_frame_t * frame,
+ vlib_frame_queue_msg_type_t type)
{
vlib_frame_queue_t *fq = vlib_frame_queues[frame_queue_index];
vlib_frame_queue_elt_t *elt;
u32 save_count;
u64 new_tail;
- u64 before = clib_cpu_time_now();
-
+ u64 before = clib_cpu_time_now ();
+
ASSERT (fq);
new_tail = __sync_add_and_fetch (&fq->tail, 1);
@@ -410,10 +420,10 @@ int vlib_frame_queue_enqueue (vlib_main_t *vm, u32 node_runtime_index,
// vlib_frame_queue_dequeue (vm->cpu_index, vm, nm);
}
- elt = fq->elts + (new_tail & (fq->nelts-1));
+ elt = fq->elts + (new_tail & (fq->nelts - 1));
/* this would be very bad... */
- while (elt->valid)
+ while (elt->valid)
{
}
@@ -423,7 +433,7 @@ int vlib_frame_queue_enqueue (vlib_main_t *vm, u32 node_runtime_index,
elt->frame = frame;
elt->node_runtime_index = node_runtime_index;
elt->msg_type = type;
- CLIB_MEMORY_BARRIER();
+ CLIB_MEMORY_BARRIER ();
elt->valid = 1;
return save_count;
@@ -431,10 +441,11 @@ int vlib_frame_queue_enqueue (vlib_main_t *vm, u32 node_runtime_index,
#endif /* 0 */
/* To be called by vlib worker threads upon startup */
-void vlib_worker_thread_init (vlib_worker_thread_t * w)
+void
+vlib_worker_thread_init (vlib_worker_thread_t * w)
{
- vlib_thread_main_t *tm = vlib_get_thread_main();
-
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
+
/* worker threads wants no signals. */
{
sigset_t s;
@@ -444,13 +455,11 @@ void vlib_worker_thread_init (vlib_worker_thread_t * w)
clib_mem_set_heap (w->thread_mheap);
- if (vec_len(tm->thread_prefix) && w->registration->short_name)
+ if (vec_len (tm->thread_prefix) && w->registration->short_name)
{
- w->name = format(0, "%v_%s_%d%c", tm->thread_prefix,
- w->registration->short_name,
- w->instance_id,
- '\0');
- vlib_set_thread_name((char *)w->name);
+ w->name = format (0, "%v_%s_%d%c", tm->thread_prefix,
+ w->registration->short_name, w->instance_id, '\0');
+ vlib_set_thread_name ((char *) w->name);
}
if (!w->registration->use_pthreads)
@@ -460,79 +469,80 @@ void vlib_worker_thread_init (vlib_worker_thread_t * w)
clib_smp_atomic_add (vlib_worker_threads->workers_at_barrier, 1);
while (*vlib_worker_threads->wait_at_barrier)
- ;
+ ;
clib_smp_atomic_add (vlib_worker_threads->workers_at_barrier, -1);
}
}
-void *vlib_worker_thread_bootstrap_fn (void *arg)
+void *
+vlib_worker_thread_bootstrap_fn (void *arg)
{
void *rv;
vlib_worker_thread_t *w = arg;
-
- w->lwp = syscall(SYS_gettid);
+
+ w->lwp = syscall (SYS_gettid);
w->dpdk_lcore_id = -1;
#if DPDK==1
- if (w->registration && !w->registration->use_pthreads &&
- rte_socket_id) /* do we really have dpdk linked */
+ if (w->registration && !w->registration->use_pthreads && rte_socket_id) /* do we really have dpdk linked */
{
- unsigned lcore = rte_lcore_id();
+ unsigned lcore = rte_lcore_id ();
lcore = lcore < RTE_MAX_LCORE ? lcore : -1;
w->dpdk_lcore_id = lcore;
}
#endif
- rv = (void *) clib_calljmp
- ((uword (*)(uword)) w->thread_function,
- (uword) arg, w->thread_stack + VLIB_THREAD_STACK_SIZE);
+ rv = (void *) clib_calljmp
+ ((uword (*)(uword)) w->thread_function,
+ (uword) arg, w->thread_stack + VLIB_THREAD_STACK_SIZE);
/* NOTREACHED, we hope */
return rv;
}
static int
-vlib_launch_thread (void *fp, vlib_worker_thread_t *w, unsigned lcore_id)
+vlib_launch_thread (void *fp, vlib_worker_thread_t * w, unsigned lcore_id)
{
- void *(*fp_arg)(void *) = fp;
+ void *(*fp_arg) (void *) = fp;
#if DPDK==1
if (!w->registration->use_pthreads)
- if (rte_eal_remote_launch) /* do we have dpdk linked */
- return rte_eal_remote_launch (fp, (void *)w, lcore_id);
+ if (rte_eal_remote_launch) /* do we have dpdk linked */
+ return rte_eal_remote_launch (fp, (void *) w, lcore_id);
else
return -1;
else
#endif
- {
- int ret;
- pthread_t worker;
- cpu_set_t cpuset;
- CPU_ZERO(&cpuset);
- CPU_SET(lcore_id, &cpuset);
-
- ret = pthread_create (&worker, NULL /* attr */, fp_arg, (void *)w);
- if(ret == 0)
- return pthread_setaffinity_np(worker, sizeof(cpu_set_t), &cpuset);
- else
- return ret;
- }
+ {
+ int ret;
+ pthread_t worker;
+ cpu_set_t cpuset;
+ CPU_ZERO (&cpuset);
+ CPU_SET (lcore_id, &cpuset);
+
+ ret = pthread_create (&worker, NULL /* attr */ , fp_arg, (void *) w);
+ if (ret == 0)
+ return pthread_setaffinity_np (worker, sizeof (cpu_set_t), &cpuset);
+ else
+ return ret;
+ }
}
-static clib_error_t * start_workers (vlib_main_t * vm)
+static clib_error_t *
+start_workers (vlib_main_t * vm)
{
int i, j;
vlib_worker_thread_t *w;
vlib_main_t *vm_clone;
void *oldheap;
vlib_frame_queue_t *fq;
- vlib_thread_main_t * tm = &vlib_thread_main;
- vlib_thread_registration_t * tr;
- vlib_node_runtime_t * rt;
+ vlib_thread_main_t *tm = &vlib_thread_main;
+ vlib_thread_registration_t *tr;
+ vlib_node_runtime_t *rt;
u32 n_vlib_mains = tm->n_vlib_mains;
u32 worker_thread_index;
- u8 * main_heap = clib_mem_get_per_cpu_heap();
- mheap_t * main_heap_header = mheap_header (main_heap);
-
+ u8 *main_heap = clib_mem_get_per_cpu_heap ();
+ mheap_t *main_heap_header = mheap_header (main_heap);
+
vec_reset_length (vlib_worker_threads);
/* Set up the main thread */
@@ -540,32 +550,31 @@ static clib_error_t * start_workers (vlib_main_t * vm)
w->elog_track.name = "main thread";
elog_track_register (&vm->elog_main, &w->elog_track);
- if (vec_len(tm->thread_prefix))
+ if (vec_len (tm->thread_prefix))
{
- w->name = format(0, "%v_main%c", tm->thread_prefix, '\0');
- vlib_set_thread_name((char *)w->name);
+ w->name = format (0, "%v_main%c", tm->thread_prefix, '\0');
+ vlib_set_thread_name ((char *) w->name);
}
#if DPDK==1
w->dpdk_lcore_id = -1;
- if (rte_socket_id) /* do we really have dpdk linked */
+ if (rte_socket_id) /* do we really have dpdk linked */
{
- unsigned lcore = rte_lcore_id();
+ unsigned lcore = rte_lcore_id ();
w->dpdk_lcore_id = lcore < RTE_MAX_LCORE ? lcore : -1;;
}
#endif
- /*
+ /*
* Truth of the matter: we always use at least two
- * threads. So, make the main heap thread-safe
+ * threads. So, make the main heap thread-safe
* and make the event log thread-safe.
*/
main_heap_header->flags |= MHEAP_FLAG_THREAD_SAFE;
- vm->elog_main.lock =
- clib_mem_alloc_aligned (CLIB_CACHE_LINE_BYTES,
- CLIB_CACHE_LINE_BYTES);
+ vm->elog_main.lock =
+ clib_mem_alloc_aligned (CLIB_CACHE_LINE_BYTES, CLIB_CACHE_LINE_BYTES);
vm->elog_main.lock[0] = 0;
-
+
if (n_vlib_mains > 1)
{
vec_validate (vlib_mains, tm->n_vlib_mains - 1);
@@ -577,10 +586,10 @@ static clib_error_t * start_workers (vlib_main_t * vm)
fq = vlib_frame_queue_alloc (FRAME_QUEUE_NELTS);
vec_add1 (vlib_frame_queues, fq);
- vlib_worker_threads->wait_at_barrier =
- clib_mem_alloc_aligned (sizeof (u32), CLIB_CACHE_LINE_BYTES);
+ vlib_worker_threads->wait_at_barrier =
+ clib_mem_alloc_aligned (sizeof (u32), CLIB_CACHE_LINE_BYTES);
vlib_worker_threads->workers_at_barrier =
- clib_mem_alloc_aligned (sizeof (u32), CLIB_CACHE_LINE_BYTES);
+ clib_mem_alloc_aligned (sizeof (u32), CLIB_CACHE_LINE_BYTES);
/* Ask for an initial barrier sync */
*vlib_worker_threads->workers_at_barrier = 0;
@@ -588,132 +597,139 @@ static clib_error_t * start_workers (vlib_main_t * vm)
worker_thread_index = 1;
- for (i = 0; i < vec_len(tm->registrations); i++)
- {
- vlib_node_main_t *nm, *nm_clone;
- vlib_buffer_main_t *bm_clone;
- vlib_buffer_free_list_t *fl_clone, *fl_orig;
- vlib_buffer_free_list_t *orig_freelist_pool;
- int k;
-
- tr = tm->registrations[i];
-
- if (tr->count == 0)
- continue;
-
- for (k = 0; k < tr->count; k++)
- {
- vec_add2 (vlib_worker_threads, w, 1);
- if (tr->mheap_size)
- w->thread_mheap = mheap_alloc (0 /* use VM */, tr->mheap_size);
- else
- w->thread_mheap = main_heap;
- w->thread_stack = vlib_thread_stacks[w - vlib_worker_threads];
- w->thread_function = tr->function;
- w->thread_function_arg = w;
- w->instance_id = k;
- w->registration = tr;
-
- w->elog_track.name =
- (char *) format (0, "%s %d", tr->name, k+1);
- vec_add1 (w->elog_track.name, 0);
- elog_track_register (&vm->elog_main, &w->elog_track);
-
- if (tr->no_data_structure_clone)
- continue;
-
- /* Allocate "to-worker-N" frame queue */
- if (tr->frame_queue_nelts) {
- fq = vlib_frame_queue_alloc (tr->frame_queue_nelts);
- } else {
- fq = vlib_frame_queue_alloc (FRAME_QUEUE_NELTS);
- }
-
- vec_validate (vlib_frame_queues, worker_thread_index);
- vlib_frame_queues[worker_thread_index] = fq;
-
- /* Fork vlib_global_main et al. Look for bugs here */
- oldheap = clib_mem_set_heap (w->thread_mheap);
-
- vm_clone = clib_mem_alloc (sizeof (*vm_clone));
- clib_memcpy (vm_clone, vlib_mains[0], sizeof (*vm_clone));
-
- vm_clone->cpu_index = worker_thread_index;
- vm_clone->heap_base = w->thread_mheap;
- vm_clone->mbuf_alloc_list = 0;
- memset (&vm_clone->random_buffer, 0, sizeof (vm_clone->random_buffer));
-
- nm = &vlib_mains[0]->node_main;
- nm_clone = &vm_clone->node_main;
- /* fork next frames array, preserving node runtime indices */
- nm_clone->next_frames = vec_dup (nm->next_frames);
- for (j = 0; j < vec_len (nm_clone->next_frames); j++)
- {
- vlib_next_frame_t *nf = &nm_clone->next_frames[j];
- u32 save_node_runtime_index;
- u32 save_flags;
-
- save_node_runtime_index = nf->node_runtime_index;
- save_flags = nf->flags & VLIB_FRAME_NO_FREE_AFTER_DISPATCH;
- vlib_next_frame_init (nf);
- nf->node_runtime_index = save_node_runtime_index;
- nf->flags = save_flags;
- }
-
- /* fork the frame dispatch queue */
- nm_clone->pending_frames = 0;
- vec_validate (nm_clone->pending_frames, 10); /* $$$$$?????? */
- _vec_len (nm_clone->pending_frames) = 0;
-
- /* fork nodes */
- nm_clone->nodes = 0;
- for (j = 0; j < vec_len (nm->nodes); j++)
- {
- vlib_node_t *n;
- n = clib_mem_alloc_no_fail (sizeof(*n));
- clib_memcpy (n, nm->nodes[j], sizeof (*n));
- /* none of the copied nodes have enqueue rights given out */
- n->owner_node_index = VLIB_INVALID_NODE_INDEX;
- memset (&n->stats_total, 0, sizeof (n->stats_total));
- memset (&n->stats_last_clear, 0, sizeof (n->stats_last_clear));
- vec_add1 (nm_clone->nodes, n);
- }
- nm_clone->nodes_by_type[VLIB_NODE_TYPE_INTERNAL] =
- vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL]);
-
- nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT] =
- vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INPUT]);
- vec_foreach(rt, nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT])
- rt->cpu_index = vm_clone->cpu_index;
-
- nm_clone->processes = vec_dup (nm->processes);
-
- /* zap the (per worker) frame freelists, etc */
- nm_clone->frame_sizes = 0;
- nm_clone->frame_size_hash = 0;
-
- /* Packet trace buffers are guaranteed to be empty, nothing to do here */
-
- clib_mem_set_heap (oldheap);
- vec_add1 (vlib_mains, vm_clone);
-
- vm_clone->error_main.counters =
- vec_dup(vlib_mains[0]->error_main.counters);
- vm_clone->error_main.counters_last_clear =
- vec_dup(vlib_mains[0]->error_main.counters_last_clear);
-
- /* Fork the vlib_buffer_main_t free lists, etc. */
- bm_clone = vec_dup (vm_clone->buffer_main);
- vm_clone->buffer_main = bm_clone;
-
- orig_freelist_pool = bm_clone->buffer_free_list_pool;
- bm_clone->buffer_free_list_pool = 0;
-
+ for (i = 0; i < vec_len (tm->registrations); i++)
+ {
+ vlib_node_main_t *nm, *nm_clone;
+ vlib_buffer_main_t *bm_clone;
+ vlib_buffer_free_list_t *fl_clone, *fl_orig;
+ vlib_buffer_free_list_t *orig_freelist_pool;
+ int k;
+
+ tr = tm->registrations[i];
+
+ if (tr->count == 0)
+ continue;
+
+ for (k = 0; k < tr->count; k++)
+ {
+ vec_add2 (vlib_worker_threads, w, 1);
+ if (tr->mheap_size)
+ w->thread_mheap =
+ mheap_alloc (0 /* use VM */ , tr->mheap_size);
+ else
+ w->thread_mheap = main_heap;
+ w->thread_stack = vlib_thread_stacks[w - vlib_worker_threads];
+ w->thread_function = tr->function;
+ w->thread_function_arg = w;
+ w->instance_id = k;
+ w->registration = tr;
+
+ w->elog_track.name =
+ (char *) format (0, "%s %d", tr->name, k + 1);
+ vec_add1 (w->elog_track.name, 0);
+ elog_track_register (&vm->elog_main, &w->elog_track);
+
+ if (tr->no_data_structure_clone)
+ continue;
+
+ /* Allocate "to-worker-N" frame queue */
+ if (tr->frame_queue_nelts)
+ {
+ fq = vlib_frame_queue_alloc (tr->frame_queue_nelts);
+ }
+ else
+ {
+ fq = vlib_frame_queue_alloc (FRAME_QUEUE_NELTS);
+ }
+
+ vec_validate (vlib_frame_queues, worker_thread_index);
+ vlib_frame_queues[worker_thread_index] = fq;
+
+ /* Fork vlib_global_main et al. Look for bugs here */
+ oldheap = clib_mem_set_heap (w->thread_mheap);
+
+ vm_clone = clib_mem_alloc (sizeof (*vm_clone));
+ clib_memcpy (vm_clone, vlib_mains[0], sizeof (*vm_clone));
+
+ vm_clone->cpu_index = worker_thread_index;
+ vm_clone->heap_base = w->thread_mheap;
+ vm_clone->mbuf_alloc_list = 0;
+ memset (&vm_clone->random_buffer, 0,
+ sizeof (vm_clone->random_buffer));
+
+ nm = &vlib_mains[0]->node_main;
+ nm_clone = &vm_clone->node_main;
+ /* fork next frames array, preserving node runtime indices */
+ nm_clone->next_frames = vec_dup (nm->next_frames);
+ for (j = 0; j < vec_len (nm_clone->next_frames); j++)
+ {
+ vlib_next_frame_t *nf = &nm_clone->next_frames[j];
+ u32 save_node_runtime_index;
+ u32 save_flags;
+
+ save_node_runtime_index = nf->node_runtime_index;
+ save_flags = nf->flags & VLIB_FRAME_NO_FREE_AFTER_DISPATCH;
+ vlib_next_frame_init (nf);
+ nf->node_runtime_index = save_node_runtime_index;
+ nf->flags = save_flags;
+ }
+
+ /* fork the frame dispatch queue */
+ nm_clone->pending_frames = 0;
+ vec_validate (nm_clone->pending_frames, 10); /* $$$$$?????? */
+ _vec_len (nm_clone->pending_frames) = 0;
+
+ /* fork nodes */
+ nm_clone->nodes = 0;
+ for (j = 0; j < vec_len (nm->nodes); j++)
+ {
+ vlib_node_t *n;
+ n = clib_mem_alloc_no_fail (sizeof (*n));
+ clib_memcpy (n, nm->nodes[j], sizeof (*n));
+ /* none of the copied nodes have enqueue rights given out */
+ n->owner_node_index = VLIB_INVALID_NODE_INDEX;
+ memset (&n->stats_total, 0, sizeof (n->stats_total));
+ memset (&n->stats_last_clear, 0,
+ sizeof (n->stats_last_clear));
+ vec_add1 (nm_clone->nodes, n);
+ }
+ nm_clone->nodes_by_type[VLIB_NODE_TYPE_INTERNAL] =
+ vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL]);
+
+ nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT] =
+ vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INPUT]);
+ vec_foreach (rt, nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT])
+ rt->cpu_index = vm_clone->cpu_index;
+
+ nm_clone->processes = vec_dup (nm->processes);
+
+ /* zap the (per worker) frame freelists, etc */
+ nm_clone->frame_sizes = 0;
+ nm_clone->frame_size_hash = 0;
+
+ /* Packet trace buffers are guaranteed to be empty, nothing to do here */
+
+ clib_mem_set_heap (oldheap);
+ vec_add1 (vlib_mains, vm_clone);
+
+ vm_clone->error_main.counters =
+ vec_dup (vlib_mains[0]->error_main.counters);
+ vm_clone->error_main.counters_last_clear =
+ vec_dup (vlib_mains[0]->error_main.counters_last_clear);
+
+ /* Fork the vlib_buffer_main_t free lists, etc. */
+ bm_clone = vec_dup (vm_clone->buffer_main);
+ vm_clone->buffer_main = bm_clone;
+
+ orig_freelist_pool = bm_clone->buffer_free_list_pool;
+ bm_clone->buffer_free_list_pool = 0;
+
+ /* *INDENT-OFF* */
pool_foreach (fl_orig, orig_freelist_pool,
({
- pool_get_aligned (bm_clone->buffer_free_list_pool,
+ pool_get_aligned (bm_clone->buffer_free_list_pool,
fl_clone, CLIB_CACHE_LINE_BYTES);
- ASSERT (fl_orig - orig_freelist_pool
+ ASSERT (fl_orig - orig_freelist_pool
== fl_clone - bm_clone->buffer_free_list_pool);
fl_clone[0] = fl_orig[0];
@@ -721,36 +737,38 @@ static clib_error_t * start_workers (vlib_main_t * vm)
fl_clone->unaligned_buffers = 0;
fl_clone->n_alloc = 0;
}));
+/* *INDENT-ON* */
- worker_thread_index++;
- }
- }
+ worker_thread_index++;
+ }
+ }
}
else
{
/* only have non-data-structure copy threads to create... */
- for (i = 0; i < vec_len(tm->registrations); i++)
- {
- tr = tm->registrations[i];
-
- for (j = 0; j < tr->count; j++)
- {
- vec_add2 (vlib_worker_threads, w, 1);
- if (tr->mheap_size)
- w->thread_mheap = mheap_alloc (0 /* use VM */, tr->mheap_size);
- else
- w->thread_mheap = main_heap;
- w->thread_stack = vlib_thread_stacks[w - vlib_worker_threads];
- w->thread_function = tr->function;
- w->thread_function_arg = w;
- w->instance_id = j;
- w->elog_track.name =
- (char *) format (0, "%s %d", tr->name, j+1);
- w->registration = tr;
- vec_add1 (w->elog_track.name, 0);
- elog_track_register (&vm->elog_main, &w->elog_track);
- }
- }
+ for (i = 0; i < vec_len (tm->registrations); i++)
+ {
+ tr = tm->registrations[i];
+
+ for (j = 0; j < tr->count; j++)
+ {
+ vec_add2 (vlib_worker_threads, w, 1);
+ if (tr->mheap_size)
+ w->thread_mheap =
+ mheap_alloc (0 /* use VM */ , tr->mheap_size);
+ else
+ w->thread_mheap = main_heap;
+ w->thread_stack = vlib_thread_stacks[w - vlib_worker_threads];
+ w->thread_function = tr->function;
+ w->thread_function_arg = w;
+ w->instance_id = j;
+ w->elog_track.name =
+ (char *) format (0, "%s %d", tr->name, j + 1);
+ w->registration = tr;
+ vec_add1 (w->elog_track.name, 0);
+ elog_track_register (&vm->elog_main, &w->elog_track);
+ }
+ }
}
worker_thread_index = 1;
@@ -762,50 +780,53 @@ static clib_error_t * start_workers (vlib_main_t * vm)
tr = tm->registrations[i];
if (tr->use_pthreads || tm->use_pthreads)
- {
- for (j = 0; j < tr->count; j++)
- {
- w = vlib_worker_threads + worker_thread_index++;
- if (vlib_launch_thread (vlib_worker_thread_bootstrap_fn, w, 0) < 0)
- clib_warning ("Couldn't start '%s' pthread ", tr->name);
- }
- }
+ {
+ for (j = 0; j < tr->count; j++)
+ {
+ w = vlib_worker_threads + worker_thread_index++;
+ if (vlib_launch_thread (vlib_worker_thread_bootstrap_fn, w, 0) <
+ 0)
+ clib_warning ("Couldn't start '%s' pthread ", tr->name);
+ }
+ }
else
- {
- uword c;
+ {
+ uword c;
+ /* *INDENT-OFF* */
clib_bitmap_foreach (c, tr->coremask, ({
w = vlib_worker_threads + worker_thread_index++;
if (vlib_launch_thread (vlib_worker_thread_bootstrap_fn, w, c) < 0)
clib_warning ("Couldn't start DPDK lcore %d", c);
}));
- }
+/* *INDENT-ON* */
+ }
}
- vlib_worker_thread_barrier_sync(vm);
- vlib_worker_thread_barrier_release(vm);
+ vlib_worker_thread_barrier_sync (vm);
+ vlib_worker_thread_barrier_release (vm);
return 0;
}
VLIB_MAIN_LOOP_ENTER_FUNCTION (start_workers);
-void vlib_worker_thread_node_runtime_update(void)
+void
+vlib_worker_thread_node_runtime_update (void)
{
int i, j;
vlib_worker_thread_t *w;
vlib_main_t *vm;
vlib_node_main_t *nm, *nm_clone;
- vlib_node_t ** old_nodes_clone;
+ vlib_node_t **old_nodes_clone;
vlib_main_t *vm_clone;
- vlib_node_runtime_t * rt, * old_rt;
+ vlib_node_runtime_t *rt, *old_rt;
void *oldheap;
never_inline void
vlib_node_runtime_sync_stats (vlib_main_t * vm,
- vlib_node_runtime_t * r,
- uword n_calls,
- uword n_vectors,
- uword n_clocks);
-
- ASSERT (os_get_cpu_number() == 0);
+ vlib_node_runtime_t * r,
+ uword n_calls,
+ uword n_vectors, uword n_clocks);
+
+ ASSERT (os_get_cpu_number () == 0);
if (vec_len (vlib_mains) == 0)
return;
@@ -813,51 +834,52 @@ void vlib_worker_thread_node_runtime_update(void)
vm = vlib_mains[0];
nm = &vm->node_main;
- ASSERT (os_get_cpu_number() == 0);
+ ASSERT (os_get_cpu_number () == 0);
ASSERT (*vlib_worker_threads->wait_at_barrier == 1);
- /*
+ /*
* Scrape all runtime stats, so we don't lose node runtime(s) with
* pending counts, or throw away worker / io thread counts.
*/
- for (j = 0; j < vec_len (nm->nodes); j++)
+ for (j = 0; j < vec_len (nm->nodes); j++)
{
- vlib_node_t * n;
+ vlib_node_t *n;
n = nm->nodes[j];
vlib_node_sync_stats (vm, n);
}
for (i = 1; i < vec_len (vlib_mains); i++)
{
- vlib_node_t * n;
-
+ vlib_node_t *n;
+
vm_clone = vlib_mains[i];
nm_clone = &vm_clone->node_main;
- for (j = 0; j < vec_len (nm_clone->nodes); j++)
- {
- n = nm_clone->nodes[j];
+ for (j = 0; j < vec_len (nm_clone->nodes); j++)
+ {
+ n = nm_clone->nodes[j];
- rt = vlib_node_get_runtime (vm_clone, n->index);
- vlib_node_runtime_sync_stats (vm_clone, rt, 0, 0, 0);
- }
+ rt = vlib_node_get_runtime (vm_clone, n->index);
+ vlib_node_runtime_sync_stats (vm_clone, rt, 0, 0, 0);
+ }
}
for (i = 1; i < vec_len (vlib_mains); i++)
{
- vlib_node_runtime_t * rt;
+ vlib_node_runtime_t *rt;
w = vlib_worker_threads + i;
oldheap = clib_mem_set_heap (w->thread_mheap);
vm_clone = vlib_mains[i];
/* Re-clone error heap */
- u64 * old_counters = vm_clone->error_main.counters;
- u64 * old_counters_all_clear = vm_clone->error_main.counters_last_clear;
- clib_memcpy (&vm_clone->error_main, &vm->error_main, sizeof (vm->error_main));
- j = vec_len(vm->error_main.counters) - 1;
- vec_validate_aligned(old_counters, j, CLIB_CACHE_LINE_BYTES);
- vec_validate_aligned(old_counters_all_clear, j, CLIB_CACHE_LINE_BYTES);
+ u64 *old_counters = vm_clone->error_main.counters;
+ u64 *old_counters_all_clear = vm_clone->error_main.counters_last_clear;
+ clib_memcpy (&vm_clone->error_main, &vm->error_main,
+ sizeof (vm->error_main));
+ j = vec_len (vm->error_main.counters) - 1;
+ vec_validate_aligned (old_counters, j, CLIB_CACHE_LINE_BYTES);
+ vec_validate_aligned (old_counters_all_clear, j, CLIB_CACHE_LINE_BYTES);
vm_clone->error_main.counters = old_counters;
vm_clone->error_main.counters_last_clear = old_counters_all_clear;
@@ -866,85 +888,86 @@ void vlib_worker_thread_node_runtime_update(void)
nm_clone->next_frames = vec_dup (nm->next_frames);
for (j = 0; j < vec_len (nm_clone->next_frames); j++)
- {
- vlib_next_frame_t *nf = &nm_clone->next_frames[j];
- u32 save_node_runtime_index;
- u32 save_flags;
-
- save_node_runtime_index = nf->node_runtime_index;
- save_flags = nf->flags & VLIB_FRAME_NO_FREE_AFTER_DISPATCH;
- vlib_next_frame_init (nf);
- nf->node_runtime_index = save_node_runtime_index;
- nf->flags = save_flags;
- }
+ {
+ vlib_next_frame_t *nf = &nm_clone->next_frames[j];
+ u32 save_node_runtime_index;
+ u32 save_flags;
+
+ save_node_runtime_index = nf->node_runtime_index;
+ save_flags = nf->flags & VLIB_FRAME_NO_FREE_AFTER_DISPATCH;
+ vlib_next_frame_init (nf);
+ nf->node_runtime_index = save_node_runtime_index;
+ nf->flags = save_flags;
+ }
old_nodes_clone = nm_clone->nodes;
nm_clone->nodes = 0;
/* re-fork nodes */
- for (j = 0; j < vec_len (nm->nodes); j++) {
- vlib_node_t *old_n_clone;
- vlib_node_t *new_n, *new_n_clone;
-
- new_n = nm->nodes[j];
- old_n_clone = old_nodes_clone[j];
-
- new_n_clone = clib_mem_alloc_no_fail (sizeof(*new_n_clone));
- clib_memcpy (new_n_clone, new_n, sizeof (*new_n));
- /* none of the copied nodes have enqueue rights given out */
- new_n_clone->owner_node_index = VLIB_INVALID_NODE_INDEX;
-
- if (j >= vec_len (old_nodes_clone))
- {
- /* new node, set to zero */
- memset (&new_n_clone->stats_total, 0,
- sizeof (new_n_clone->stats_total));
- memset (&new_n_clone->stats_last_clear, 0,
- sizeof (new_n_clone->stats_last_clear));
- }
- else
- {
- /* Copy stats if the old data is valid */
- clib_memcpy (&new_n_clone->stats_total,
- &old_n_clone->stats_total,
- sizeof (new_n_clone->stats_total));
- clib_memcpy (&new_n_clone->stats_last_clear,
- &old_n_clone->stats_last_clear,
- sizeof (new_n_clone->stats_last_clear));
-
- /* keep previous node state */
- new_n_clone->state = old_n_clone->state;
- }
- vec_add1 (nm_clone->nodes, new_n_clone);
- }
+ for (j = 0; j < vec_len (nm->nodes); j++)
+ {
+ vlib_node_t *old_n_clone;
+ vlib_node_t *new_n, *new_n_clone;
+
+ new_n = nm->nodes[j];
+ old_n_clone = old_nodes_clone[j];
+
+ new_n_clone = clib_mem_alloc_no_fail (sizeof (*new_n_clone));
+ clib_memcpy (new_n_clone, new_n, sizeof (*new_n));
+ /* none of the copied nodes have enqueue rights given out */
+ new_n_clone->owner_node_index = VLIB_INVALID_NODE_INDEX;
+
+ if (j >= vec_len (old_nodes_clone))
+ {
+ /* new node, set to zero */
+ memset (&new_n_clone->stats_total, 0,
+ sizeof (new_n_clone->stats_total));
+ memset (&new_n_clone->stats_last_clear, 0,
+ sizeof (new_n_clone->stats_last_clear));
+ }
+ else
+ {
+ /* Copy stats if the old data is valid */
+ clib_memcpy (&new_n_clone->stats_total,
+ &old_n_clone->stats_total,
+ sizeof (new_n_clone->stats_total));
+ clib_memcpy (&new_n_clone->stats_last_clear,
+ &old_n_clone->stats_last_clear,
+ sizeof (new_n_clone->stats_last_clear));
+
+ /* keep previous node state */
+ new_n_clone->state = old_n_clone->state;
+ }
+ vec_add1 (nm_clone->nodes, new_n_clone);
+ }
/* Free the old node clone */
- for (j = 0; j < vec_len(old_nodes_clone); j++)
- clib_mem_free (old_nodes_clone[j]);
+ for (j = 0; j < vec_len (old_nodes_clone); j++)
+ clib_mem_free (old_nodes_clone[j]);
vec_free (old_nodes_clone);
-
+
vec_free (nm_clone->nodes_by_type[VLIB_NODE_TYPE_INTERNAL]);
nm_clone->nodes_by_type[VLIB_NODE_TYPE_INTERNAL] =
- vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL]);
+ vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INTERNAL]);
/* clone input node runtime */
old_rt = nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT];
nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT] =
- vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INPUT]);
+ vec_dup (nm->nodes_by_type[VLIB_NODE_TYPE_INPUT]);
- vec_foreach(rt, nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT])
- {
- rt->cpu_index = vm_clone->cpu_index;
- }
+ vec_foreach (rt, nm_clone->nodes_by_type[VLIB_NODE_TYPE_INPUT])
+ {
+ rt->cpu_index = vm_clone->cpu_index;
+ }
- for (j=0; j < vec_len(old_rt); j++)
- {
- rt = vlib_node_get_runtime (vm_clone, old_rt[j].node_index);
- rt->state = old_rt[j].state;
- }
+ for (j = 0; j < vec_len (old_rt); j++)
+ {
+ rt = vlib_node_get_runtime (vm_clone, old_rt[j].node_index);
+ rt->state = old_rt[j].state;
+ }
- vec_free(old_rt);
+ vec_free (old_rt);
nm_clone->processes = vec_dup (nm->processes);
@@ -958,86 +981,88 @@ static clib_error_t *
cpu_config (vlib_main_t * vm, unformat_input_t * input)
{
vlib_thread_registration_t *tr;
- uword * p;
- vlib_thread_main_t * tm = &vlib_thread_main;
- u8 * name;
+ uword *p;
+ vlib_thread_main_t *tm = &vlib_thread_main;
+ u8 *name;
u64 coremask;
- uword * bitmap;
+ uword *bitmap;
u32 count;
tm->thread_registrations_by_name = hash_create_string (0, sizeof (uword));
- tm->n_thread_stacks = 1; /* account for main thread */
+ tm->n_thread_stacks = 1; /* account for main thread */
tr = tm->next;
while (tr)
{
- hash_set_mem (tm->thread_registrations_by_name, tr->name, (uword)tr);
+ hash_set_mem (tm->thread_registrations_by_name, tr->name, (uword) tr);
tr = tr->next;
}
- while (unformat_check_input(input) != UNFORMAT_END_OF_INPUT)
+ while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
if (unformat (input, "use-pthreads"))
- tm->use_pthreads = 1;
+ tm->use_pthreads = 1;
else if (unformat (input, "thread-prefix %v", &tm->thread_prefix))
- ;
+ ;
else if (unformat (input, "main-core %u", &tm->main_lcore))
- ;
+ ;
else if (unformat (input, "skip-cores %u", &tm->skip_cores))
- ;
+ ;
else if (unformat (input, "coremask-%s %llx", &name, &coremask))
- {
- p = hash_get_mem (tm->thread_registrations_by_name, name);
- if (p == 0)
- return clib_error_return (0, "no such thread type '%s'", name);
+ {
+ p = hash_get_mem (tm->thread_registrations_by_name, name);
+ if (p == 0)
+ return clib_error_return (0, "no such thread type '%s'", name);
- tr = (vlib_thread_registration_t *)p[0];
+ tr = (vlib_thread_registration_t *) p[0];
- if (tr->use_pthreads)
- return clib_error_return (0, "coremask cannot be set for '%s' threads",
- name);
+ if (tr->use_pthreads)
+ return clib_error_return (0,
+ "coremask cannot be set for '%s' threads",
+ name);
- tr->coremask = clib_bitmap_set_multiple
- (tr->coremask, 0, coremask, BITS(coremask));
- tr->count = clib_bitmap_count_set_bits (tr->coremask);
- }
+ tr->coremask = clib_bitmap_set_multiple
+ (tr->coremask, 0, coremask, BITS (coremask));
+ tr->count = clib_bitmap_count_set_bits (tr->coremask);
+ }
else if (unformat (input, "corelist-%s %U", &name, unformat_bitmap_list,
- &bitmap))
- {
- p = hash_get_mem (tm->thread_registrations_by_name, name);
- if (p == 0)
- return clib_error_return (0, "no such thread type '%s'", name);
+ &bitmap))
+ {
+ p = hash_get_mem (tm->thread_registrations_by_name, name);
+ if (p == 0)
+ return clib_error_return (0, "no such thread type '%s'", name);
- tr = (vlib_thread_registration_t *)p[0];
+ tr = (vlib_thread_registration_t *) p[0];
- if (tr->use_pthreads)
- return clib_error_return (0, "corelist cannot be set for '%s' threads",
- name);
+ if (tr->use_pthreads)
+ return clib_error_return (0,
+ "corelist cannot be set for '%s' threads",
+ name);
- tr->coremask = bitmap;
- tr->count = clib_bitmap_count_set_bits (tr->coremask);
- }
+ tr->coremask = bitmap;
+ tr->count = clib_bitmap_count_set_bits (tr->coremask);
+ }
else if (unformat (input, "%s %u", &name, &count))
- {
- p = hash_get_mem (tm->thread_registrations_by_name, name);
- if (p == 0)
- return clib_error_return (0, "no such thread type '%s'", name);
-
- tr = (vlib_thread_registration_t *)p[0];
- if (tr->fixed_count)
- return clib_error_return
- (0, "number of %s threads not configurable", tr->name);
- tr->count = count;
- }
- else
- break;
+ {
+ p = hash_get_mem (tm->thread_registrations_by_name, name);
+ if (p == 0)
+ return clib_error_return (0, "no such thread type '%s'", name);
+
+ tr = (vlib_thread_registration_t *) p[0];
+ if (tr->fixed_count)
+ return clib_error_return
+ (0, "number of %s threads not configurable", tr->name);
+ tr->count = count;
+ }
+ else
+ break;
}
tr = tm->next;
if (!tm->thread_prefix)
- tm->thread_prefix = format(0, "vpp");
+ tm->thread_prefix = format (0, "vpp");
while (tr)
{
@@ -1053,30 +1078,37 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
VLIB_EARLY_CONFIG_FUNCTION (cpu_config, "cpu");
#if !defined (__x86_64__) && !defined (__aarch64__) && !defined (__powerpc64__) && !defined(__arm__)
-void __sync_fetch_and_add_8 (void)
+void
+__sync_fetch_and_add_8 (void)
{
- fformat(stderr, "%s called\n", __FUNCTION__);
- abort();
+ fformat (stderr, "%s called\n", __FUNCTION__);
+ abort ();
}
-void __sync_add_and_fetch_8 (void)
+
+void
+__sync_add_and_fetch_8 (void)
{
- fformat(stderr, "%s called\n", __FUNCTION__);
- abort();
+ fformat (stderr, "%s called\n", __FUNCTION__);
+ abort ();
}
#endif
void vnet_main_fixup (vlib_fork_fixup_t which) __attribute__ ((weak));
-void vnet_main_fixup (vlib_fork_fixup_t which) { }
+void
+vnet_main_fixup (vlib_fork_fixup_t which)
+{
+}
-void vlib_worker_thread_fork_fixup (vlib_fork_fixup_t which)
+void
+vlib_worker_thread_fork_fixup (vlib_fork_fixup_t which)
{
- vlib_main_t * vm = vlib_get_main();
+ vlib_main_t *vm = vlib_get_main ();
if (vlib_mains == 0)
return;
- ASSERT(os_get_cpu_number() == 0);
- vlib_worker_thread_barrier_sync(vm);
+ ASSERT (os_get_cpu_number () == 0);
+ vlib_worker_thread_barrier_sync (vm);
switch (which)
{
@@ -1085,48 +1117,50 @@ void vlib_worker_thread_fork_fixup (vlib_fork_fixup_t which)
break;
default:
- ASSERT(0);
+ ASSERT (0);
}
- vlib_worker_thread_barrier_release(vm);
+ vlib_worker_thread_barrier_release (vm);
}
-void vlib_worker_thread_barrier_sync(vlib_main_t *vm)
+void
+vlib_worker_thread_barrier_sync (vlib_main_t * vm)
{
f64 deadline;
u32 count;
-
+
if (!vlib_mains)
- return;
+ return;
count = vec_len (vlib_mains) - 1;
/* Tolerate recursive calls */
if (++vlib_worker_threads[0].recursion_level > 1)
- return;
+ return;
vlib_worker_threads[0].barrier_sync_count++;
- ASSERT (os_get_cpu_number() == 0);
+ ASSERT (os_get_cpu_number () == 0);
deadline = vlib_time_now (vm) + BARRIER_SYNC_TIMEOUT;
*vlib_worker_threads->wait_at_barrier = 1;
while (*vlib_worker_threads->workers_at_barrier != count)
{
- if (vlib_time_now(vm) > deadline)
- {
- fformat(stderr, "%s: worker thread deadlock\n", __FUNCTION__);
- os_panic();
- }
+ if (vlib_time_now (vm) > deadline)
+ {
+ fformat (stderr, "%s: worker thread deadlock\n", __FUNCTION__);
+ os_panic ();
+ }
}
}
-void vlib_worker_thread_barrier_release(vlib_main_t * vm)
+void
+vlib_worker_thread_barrier_release (vlib_main_t * vm)
{
f64 deadline;
if (!vlib_mains)
- return;
+ return;
if (--vlib_worker_threads[0].recursion_level > 0)
return;
@@ -1137,41 +1171,42 @@ void vlib_worker_thread_barrier_release(vlib_main_t * vm)
while (*vlib_worker_threads->workers_at_barrier > 0)
{
- if (vlib_time_now(vm) > deadline)
- {
- fformat(stderr, "%s: worker thread deadlock\n", __FUNCTION__);
- os_panic();
- }
+ if (vlib_time_now (vm) > deadline)
+ {
+ fformat (stderr, "%s: worker thread deadlock\n", __FUNCTION__);
+ os_panic ();
+ }
}
}
/*
* Check the frame queue to see if any frames are available.
- * If so, pull the packets off the frames and put them to
+ * If so, pull the packets off the frames and put them to
* the handoff node.
*/
-static inline int vlib_frame_queue_dequeue_internal (vlib_main_t *vm)
+static inline int
+vlib_frame_queue_dequeue_internal (vlib_main_t * vm)
{
u32 thread_id = vm->cpu_index;
vlib_frame_queue_t *fq = vlib_frame_queues[thread_id];
vlib_frame_queue_elt_t *elt;
- u32 * from, * to;
- vlib_frame_t * f;
+ u32 *from, *to;
+ vlib_frame_t *f;
int msg_type;
int processed = 0;
u32 n_left_to_node;
u32 vectors = 0;
- vlib_thread_main_t *tm = vlib_get_thread_main();
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
ASSERT (fq);
- ASSERT(vm == vlib_mains[thread_id]);
+ ASSERT (vm == vlib_mains[thread_id]);
if (PREDICT_FALSE (tm->handoff_dispatch_node_index == ~0))
- return 0;
+ return 0;
/*
* Gather trace data for frame queues
*/
- if (PREDICT_FALSE(fq->trace))
+ if (PREDICT_FALSE (fq->trace))
{
frame_queue_trace_t *fqt;
frame_queue_nelt_counter_t *fqh;
@@ -1185,41 +1220,43 @@ static inline int vlib_frame_queue_dequeue_internal (vlib_main_t *vm)
fqt->tail = fq->tail;
fqt->threshold = fq->vector_threshold;
fqt->n_in_use = fqt->tail - fqt->head;
- if (fqt->n_in_use >= fqt->nelts){
- // if beyond max then use max
- fqt->n_in_use = fqt->nelts-1;
- }
+ if (fqt->n_in_use >= fqt->nelts)
+ {
+ // if beyond max then use max
+ fqt->n_in_use = fqt->nelts - 1;
+ }
/* Record the number of elements in use in the histogram */
fqh = &tm->frame_queue_histogram[thread_id];
- fqh->count[ fqt->n_in_use ]++;
+ fqh->count[fqt->n_in_use]++;
/* Record a snapshot of the elements in use */
- for (elix=0; elix<fqt->nelts; elix++) {
- elt = fq->elts + ((fq->head+1 + elix) & (fq->nelts-1));
- if (1 || elt->valid)
- {
- fqt->n_vectors[elix] = elt->n_vectors;
- }
- }
+ for (elix = 0; elix < fqt->nelts; elix++)
+ {
+ elt = fq->elts + ((fq->head + 1 + elix) & (fq->nelts - 1));
+ if (1 || elt->valid)
+ {
+ fqt->n_vectors[elix] = elt->n_vectors;
+ }
+ }
fqt->written = 1;
}
while (1)
{
if (fq->head == fq->tail)
- {
- fq->head_hint = fq->head;
- return processed;
- }
+ {
+ fq->head_hint = fq->head;
+ return processed;
+ }
- elt = fq->elts + ((fq->head+1) & (fq->nelts-1));
+ elt = fq->elts + ((fq->head + 1) & (fq->nelts - 1));
if (!elt->valid)
- {
- fq->head_hint = fq->head;
- return processed;
- }
+ {
+ fq->head_hint = fq->head;
+ return processed;
+ }
from = elt->buffer_index;
msg_type = elt->msg_type;
@@ -1234,23 +1271,23 @@ static inline int vlib_frame_queue_dequeue_internal (vlib_main_t *vm)
n_left_to_node = elt->n_vectors;
while (n_left_to_node >= 4)
- {
- to[0] = from[0];
- to[1] = from[1];
- to[2] = from[2];
- to[3] = from[3];
- to += 4;
- from += 4;
- n_left_to_node -= 4;
- }
+ {
+ to[0] = from[0];
+ to[1] = from[1];
+ to[2] = from[2];
+ to[3] = from[3];
+ to += 4;
+ from += 4;
+ n_left_to_node -= 4;
+ }
while (n_left_to_node > 0)
- {
- to[0] = from[0];
- to++;
- from++;
- n_left_to_node--;
- }
+ {
+ to[0] = from[0];
+ to++;
+ from++;
+ n_left_to_node--;
+ }
vectors += elt->n_vectors;
f->n_vectors = elt->n_vectors;
@@ -1259,7 +1296,7 @@ static inline int vlib_frame_queue_dequeue_internal (vlib_main_t *vm)
elt->valid = 0;
elt->n_vectors = 0;
elt->msg_type = 0xfefefefe;
- CLIB_MEMORY_BARRIER();
+ CLIB_MEMORY_BARRIER ();
fq->head++;
processed++;
@@ -1267,19 +1304,19 @@ static inline int vlib_frame_queue_dequeue_internal (vlib_main_t *vm)
* Limit the number of packets pushed into the graph
*/
if (vectors >= fq->vector_threshold)
- {
- fq->head_hint = fq->head;
- return processed;
- }
+ {
+ fq->head_hint = fq->head;
+ return processed;
+ }
}
- ASSERT(0);
+ ASSERT (0);
return processed;
}
static_always_inline void
-vlib_worker_thread_internal (vlib_main_t *vm)
+vlib_worker_thread_internal (vlib_main_t * vm)
{
- vlib_node_main_t * nm = &vm->node_main;
+ vlib_node_main_t *nm = &vm->node_main;
u64 cpu_time_now = clib_cpu_time_now ();
while (1)
@@ -1288,27 +1325,28 @@ vlib_worker_thread_internal (vlib_main_t *vm)
vlib_frame_queue_dequeue_internal (vm);
- vlib_node_runtime_t * n;
+ vlib_node_runtime_t *n;
vec_foreach (n, nm->nodes_by_type[VLIB_NODE_TYPE_INPUT])
- {
- cpu_time_now = dispatch_node (vm, n, VLIB_NODE_TYPE_INPUT,
- VLIB_NODE_STATE_POLLING, /* frame */ 0,
- cpu_time_now);
- }
+ {
+ cpu_time_now = dispatch_node (vm, n, VLIB_NODE_TYPE_INPUT,
+ VLIB_NODE_STATE_POLLING, /* frame */ 0,
+ cpu_time_now);
+ }
if (_vec_len (nm->pending_frames))
- {
- int i;
- cpu_time_now = clib_cpu_time_now ();
- for (i = 0; i < _vec_len (nm->pending_frames); i++) {
- vlib_pending_frame_t *p;
-
- p = nm->pending_frames + i;
-
- cpu_time_now = dispatch_pending_node (vm, p, cpu_time_now);
- }
- _vec_len (nm->pending_frames) = 0;
- }
+ {
+ int i;
+ cpu_time_now = clib_cpu_time_now ();
+ for (i = 0; i < _vec_len (nm->pending_frames); i++)
+ {
+ vlib_pending_frame_t *p;
+
+ p = nm->pending_frames + i;
+
+ cpu_time_now = dispatch_pending_node (vm, p, cpu_time_now);
+ }
+ _vec_len (nm->pending_frames) = 0;
+ }
vlib_increment_main_loop_counter (vm);
/* Record time stamp in case there are no enabled nodes and above
@@ -1317,13 +1355,14 @@ vlib_worker_thread_internal (vlib_main_t *vm)
}
}
-void vlib_worker_thread_fn (void * arg)
+void
+vlib_worker_thread_fn (void *arg)
{
- vlib_worker_thread_t * w = (vlib_worker_thread_t *) arg;
- vlib_thread_main_t * tm = vlib_get_thread_main();
- vlib_main_t * vm = vlib_get_main();
+ vlib_worker_thread_t *w = (vlib_worker_thread_t *) arg;
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
+ vlib_main_t *vm = vlib_get_main ();
- ASSERT(vm->cpu_index == os_get_cpu_number());
+ ASSERT (vm->cpu_index == os_get_cpu_number ());
vlib_worker_thread_init (w);
clib_time_init (&vm->clib_time);
@@ -1333,18 +1372,21 @@ void vlib_worker_thread_fn (void * arg)
while (tm->worker_thread_release == 0)
vlib_worker_thread_barrier_check ();
- vlib_worker_thread_internal(vm);
+ vlib_worker_thread_internal (vm);
}
+/* *INDENT-OFF* */
VLIB_REGISTER_THREAD (worker_thread_reg, static) = {
.name = "workers",
.short_name = "wk",
.function = vlib_worker_thread_fn,
};
+/* *INDENT-ON* */
-clib_error_t *threads_init (vlib_main_t *vm)
+clib_error_t *
+threads_init (vlib_main_t * vm)
{
- vlib_thread_main_t * tm = vlib_get_thread_main();
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
tm->handoff_dispatch_node_index = ~0;
@@ -1352,3 +1394,11 @@ clib_error_t *threads_init (vlib_main_t *vm)
}
VLIB_INIT_FUNCTION (threads_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/threads.h b/vlib/vlib/threads.h
index e3b902ae518..4283b70a61d 100644
--- a/vlib/vlib/threads.h
+++ b/vlib/vlib/threads.h
@@ -19,20 +19,20 @@
vlib_main_t **vlib_mains;
-void
-vlib_set_thread_name (char *name);
+void vlib_set_thread_name (char *name);
/* arg is actually a vlib__thread_t * */
-typedef void (vlib_thread_function_t) (void * arg);
+typedef void (vlib_thread_function_t) (void *arg);
-typedef struct vlib_thread_registration_ {
+typedef struct vlib_thread_registration_
+{
/* constructor generated list of thread registrations */
- struct vlib_thread_registration_ * next;
+ struct vlib_thread_registration_ *next;
/* config parameters */
- char * name;
- char * short_name;
- vlib_thread_function_t * function;
+ char *name;
+ char *short_name;
+ vlib_thread_function_t *function;
uword mheap_size;
int fixed_count;
u32 count;
@@ -42,7 +42,7 @@ typedef struct vlib_thread_registration_ {
/* All threads of this type run on pthreads */
int use_pthreads;
u32 first_index;
- uword * coremask;
+ uword *coremask;
} vlib_thread_registration_t;
/*
@@ -58,19 +58,21 @@ typedef struct vlib_thread_registration_ {
#error Please increase number of per-cpu mheaps
#endif
-#define VLIB_CPU_MASK (VLIB_MAX_CPUS - 1) /* 0x3f, max */
+#define VLIB_CPU_MASK (VLIB_MAX_CPUS - 1) /* 0x3f, max */
#define VLIB_OFFSET_MASK (~VLIB_CPU_MASK)
#define VLIB_LOG2_THREAD_STACK_SIZE (20)
#define VLIB_THREAD_STACK_SIZE (1<<VLIB_LOG2_THREAD_STACK_SIZE)
-typedef enum {
- VLIB_FRAME_QUEUE_ELT_DISPATCH_FRAME,
+typedef enum
+{
+ VLIB_FRAME_QUEUE_ELT_DISPATCH_FRAME,
} vlib_frame_queue_msg_type_t;
-typedef struct {
+typedef struct
+{
volatile u32 valid;
- u32 msg_type;
+ u32 msg_type;
u32 n_vectors;
u32 last_n_vectors;
@@ -78,10 +80,12 @@ typedef struct {
u32 buffer_index[VLIB_FRAME_SIZE];
/* Pad to a cache line boundary */
- u8 pad[CLIB_CACHE_LINE_BYTES - 4 * sizeof(u32)];
-} vlib_frame_queue_elt_t;
+ u8 pad[CLIB_CACHE_LINE_BYTES - 4 * sizeof (u32)];
+}
+vlib_frame_queue_elt_t;
-typedef struct {
+typedef struct
+{
/* First cache line */
volatile u32 *wait_at_barrier;
volatile u32 *workers_at_barrier;
@@ -89,11 +93,11 @@ typedef struct {
/* Second Cache Line */
void *thread_mheap;
- u8 * thread_stack;
- void (*thread_function)(void *);
- void * thread_function_arg;
- i64 recursion_level;
- elog_track_t elog_track;
+ u8 *thread_stack;
+ void (*thread_function) (void *);
+ void *thread_function_arg;
+ i64 recursion_level;
+ elog_track_t elog_track;
u32 instance_id;
vlib_thread_registration_t *registration;
u8 *name;
@@ -105,7 +109,8 @@ typedef struct {
vlib_worker_thread_t *vlib_worker_threads;
-typedef struct {
+typedef struct
+{
/* enqueue side */
volatile u64 tail;
u64 enqueues;
@@ -113,9 +118,7 @@ typedef struct {
u64 enqueue_vectors;
u32 enqueue_full_events;
u32 enqueue_efd_discards;
- u8 pad2[CLIB_CACHE_LINE_BYTES
- - (2 * sizeof(u32))
- - (4 * sizeof(u64))];
+ u8 pad2[CLIB_CACHE_LINE_BYTES - (2 * sizeof (u32)) - (4 * sizeof (u64))];
/* dequeue side */
volatile u64 head;
@@ -124,48 +127,45 @@ typedef struct {
u64 dequeue_vectors;
u64 trace;
u64 vector_threshold;
- u8 pad4[CLIB_CACHE_LINE_BYTES
- - (6 * sizeof(u64))];
+ u8 pad4[CLIB_CACHE_LINE_BYTES - (6 * sizeof (u64))];
/* dequeue hint to enqueue side */
volatile u64 head_hint;
- u8 pad5 [CLIB_CACHE_LINE_BYTES - sizeof(u64)];
+ u8 pad5[CLIB_CACHE_LINE_BYTES - sizeof (u64)];
/* read-only, constant, shared */
vlib_frame_queue_elt_t *elts;
u32 nelts;
-} vlib_frame_queue_t;
+}
+vlib_frame_queue_t;
vlib_frame_queue_t **vlib_frame_queues;
/* Called early, in thread 0's context */
-clib_error_t * vlib_thread_init (vlib_main_t * vm);
+clib_error_t *vlib_thread_init (vlib_main_t * vm);
-vlib_worker_thread_t * vlib_alloc_thread (vlib_main_t * vm);
+vlib_worker_thread_t *vlib_alloc_thread (vlib_main_t * vm);
-int vlib_frame_queue_enqueue (vlib_main_t *vm, u32 node_runtime_index,
- u32 frame_queue_index, vlib_frame_t *frame,
- vlib_frame_queue_msg_type_t type);
+int vlib_frame_queue_enqueue (vlib_main_t * vm, u32 node_runtime_index,
+ u32 frame_queue_index, vlib_frame_t * frame,
+ vlib_frame_queue_msg_type_t type);
-int vlib_frame_queue_dequeue (int thread_id,
- vlib_main_t *vm,
- vlib_node_main_t *nm);
+int vlib_frame_queue_dequeue (int thread_id,
+ vlib_main_t * vm, vlib_node_main_t * nm);
u64 dispatch_node (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_node_type_t type,
- vlib_node_state_t dispatch_state,
- vlib_frame_t * frame,
- u64 last_time_stamp);
+ vlib_node_runtime_t * node,
+ vlib_node_type_t type,
+ vlib_node_state_t dispatch_state,
+ vlib_frame_t * frame, u64 last_time_stamp);
u64 dispatch_pending_node (vlib_main_t * vm,
- vlib_pending_frame_t * p,
- u64 last_time_stamp);
+ vlib_pending_frame_t * p, u64 last_time_stamp);
-void vlib_worker_thread_node_runtime_update(void);
+void vlib_worker_thread_node_runtime_update (void);
-void vlib_create_worker_threads (vlib_main_t *vm, int n,
- void (*thread_function)(void *));
+void vlib_create_worker_threads (vlib_main_t * vm, int n,
+ void (*thread_function) (void *));
void vlib_worker_thread_init (vlib_worker_thread_t * w);
@@ -179,33 +179,36 @@ void vlib_worker_thread_init (vlib_worker_thread_t * w);
#define BARRIER_SYNC_TIMEOUT (1.0)
#endif
-void vlib_worker_thread_barrier_sync(vlib_main_t *vm);
-void vlib_worker_thread_barrier_release(vlib_main_t *vm);
+void vlib_worker_thread_barrier_sync (vlib_main_t * vm);
+void vlib_worker_thread_barrier_release (vlib_main_t * vm);
-always_inline void vlib_smp_unsafe_warning (void)
+always_inline void
+vlib_smp_unsafe_warning (void)
{
if (CLIB_DEBUG > 0)
{
- if (os_get_cpu_number())
- fformat(stderr, "%s: SMP unsafe warning...\n", __FUNCTION__);
+ if (os_get_cpu_number ())
+ fformat (stderr, "%s: SMP unsafe warning...\n", __FUNCTION__);
}
}
-typedef enum {
- VLIB_WORKER_THREAD_FORK_FIXUP_ILLEGAL = 0,
- VLIB_WORKER_THREAD_FORK_FIXUP_NEW_SW_IF_INDEX,
+typedef enum
+{
+ VLIB_WORKER_THREAD_FORK_FIXUP_ILLEGAL = 0,
+ VLIB_WORKER_THREAD_FORK_FIXUP_NEW_SW_IF_INDEX,
} vlib_fork_fixup_t;
void vlib_worker_thread_fork_fixup (vlib_fork_fixup_t which);
-static inline void vlib_worker_thread_barrier_check (void)
+static inline void
+vlib_worker_thread_barrier_check (void)
{
- if (PREDICT_FALSE(*vlib_worker_threads->wait_at_barrier))
+ if (PREDICT_FALSE (*vlib_worker_threads->wait_at_barrier))
{
- clib_smp_atomic_add (vlib_worker_threads->workers_at_barrier, 1);
- while (*vlib_worker_threads->wait_at_barrier)
- ;
- clib_smp_atomic_add (vlib_worker_threads->workers_at_barrier, -1);
+ clib_smp_atomic_add (vlib_worker_threads->workers_at_barrier, 1);
+ while (*vlib_worker_threads->wait_at_barrier)
+ ;
+ clib_smp_atomic_add (vlib_worker_threads->workers_at_barrier, -1);
}
}
@@ -244,29 +247,31 @@ do { \
#define VLIB_EFD_DEF_WORKER_HI_THRESH_PCT 90
/* EFD worker thread settings */
-typedef struct vlib_efd_t {
+typedef struct vlib_efd_t
+{
u16 enabled;
u16 queue_hi_thresh;
- u8 ip_prec_bitmap;
- u8 mpls_exp_bitmap;
- u8 vlan_cos_bitmap;
- u8 pad;
+ u8 ip_prec_bitmap;
+ u8 mpls_exp_bitmap;
+ u8 vlan_cos_bitmap;
+ u8 pad;
} vlib_efd_t;
-typedef struct {
+typedef struct
+{
/* Link list of registrations, built by constructors */
- vlib_thread_registration_t * next;
-
+ vlib_thread_registration_t *next;
+
/* Vector of registrations, w/ non-data-structure clones at the top */
- vlib_thread_registration_t ** registrations;
+ vlib_thread_registration_t **registrations;
- uword * thread_registrations_by_name;
+ uword *thread_registrations_by_name;
- vlib_worker_thread_t * worker_threads;
+ vlib_worker_thread_t *worker_threads;
- /*
- * Launch all threads as pthreads,
- * not eal_rte_launch (strict affinity) threads
+ /*
+ * Launch all threads as pthreads,
+ * not eal_rte_launch (strict affinity) threads
*/
int use_pthreads;
@@ -292,10 +297,10 @@ typedef struct {
u8 main_lcore;
/* Bitmap of available CPU cores */
- uword * cpu_core_bitmap;
+ uword *cpu_core_bitmap;
/* Bitmap of available CPU sockets (NUMA nodes) */
- uword * cpu_socket_bitmap;
+ uword *cpu_socket_bitmap;
vlib_efd_t efd;
@@ -303,7 +308,7 @@ typedef struct {
u32 handoff_dispatch_node_index;
/* for frame queue tracing */
- frame_queue_trace_t *frame_queue_traces;
+ frame_queue_trace_t *frame_queue_traces;
frame_queue_nelt_counter_t *frame_queue_histogram;
/* worker thread initialization barrier */
@@ -323,6 +328,14 @@ static void __vlib_add_thread_registration_##x (void) \
x.next = tm->next; \
tm->next = &x; \
} \
-__VA_ARGS__ vlib_thread_registration_t x
+__VA_ARGS__ vlib_thread_registration_t x
#endif /* included_vlib_threads_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/threads_cli.c b/vlib/vlib/threads_cli.c
index 26cb2213d95..919baac5640 100644
--- a/vlib/vlib/threads_cli.c
+++ b/vlib/vlib/threads_cli.c
@@ -20,55 +20,53 @@
static clib_error_t *
show_threads_fn (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_worker_thread_t * w;
+ vlib_worker_thread_t *w;
int i;
vlib_cli_output (vm, "%-7s%-20s%-12s%-8s%-7s%-7s%-7s%-10s",
- "ID", "Name", "Type", "LWP",
- "lcore", "Core", "Socket", "State");
+ "ID", "Name", "Type", "LWP",
+ "lcore", "Core", "Socket", "State");
#if !defined(__powerpc64__)
- for (i = 0; i < vec_len(vlib_worker_threads); i++)
+ for (i = 0; i < vec_len (vlib_worker_threads); i++)
{
w = vlib_worker_threads + i;
- u8 * line = NULL;
+ u8 *line = NULL;
- line = format(line, "%-7d%-20s%-12s%-8d",
- i,
- w->name ? w->name : (u8 *) "",
- w->registration ? w->registration->name : "",
- w->lwp);
+ line = format (line, "%-7d%-20s%-12s%-8d",
+ i,
+ w->name ? w->name : (u8 *) "",
+ w->registration ? w->registration->name : "", w->lwp);
#if DPDK==1
int lcore = w->dpdk_lcore_id;
if (lcore > -1)
- {
- line = format(line, "%-7u%-7u%-7u",
- lcore,
- lcore_config[lcore].core_id,
- lcore_config[lcore].socket_id);
-
- switch(lcore_config[lcore].state)
- {
- case WAIT:
- line = format(line, "wait");
- break;
- case RUNNING:
- line = format(line, "running");
- break;
- case FINISHED:
- line = format(line, "finished");
- break;
- default:
- line = format(line, "unknown");
- }
- }
+ {
+ line = format (line, "%-7u%-7u%-7u",
+ lcore,
+ lcore_config[lcore].core_id,
+ lcore_config[lcore].socket_id);
+
+ switch (lcore_config[lcore].state)
+ {
+ case WAIT:
+ line = format (line, "wait");
+ break;
+ case RUNNING:
+ line = format (line, "running");
+ break;
+ case FINISHED:
+ line = format (line, "finished");
+ break;
+ default:
+ line = format (line, "unknown");
+ }
+ }
#endif
- vlib_cli_output(vm, "%v", line);
- vec_free(line);
+ vlib_cli_output (vm, "%v", line);
+ vec_free (line);
}
#endif
@@ -76,64 +74,76 @@ show_threads_fn (vlib_main_t * vm,
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_threads_command, static) = {
.path = "show threads",
.short_help = "Show threads",
.function = show_threads_fn,
};
+/* *INDENT-ON* */
/*
* Trigger threads to grab frame queue trace data
*/
static clib_error_t *
-trace_frame_queue (vlib_main_t *vm, unformat_input_t *input,
- vlib_cli_command_t *cmd)
+trace_frame_queue (vlib_main_t * vm, unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
- clib_error_t * error = NULL;
+ clib_error_t *error = NULL;
frame_queue_trace_t *fqt;
frame_queue_nelt_counter_t *fqh;
- vlib_thread_main_t *tm = vlib_get_thread_main();
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
u32 num_fq;
u32 fqix;
u32 enable = 0;
- if (unformat(input, "on")) {
- enable = 1;
- } else if (unformat(input, "off")) {
- enable = 0;
- } else {
- return clib_error_return(0, "expecting on or off");
- }
+ if (unformat (input, "on"))
+ {
+ enable = 1;
+ }
+ else if (unformat (input, "off"))
+ {
+ enable = 0;
+ }
+ else
+ {
+ return clib_error_return (0, "expecting on or off");
+ }
- num_fq = vec_len(vlib_frame_queues);
+ num_fq = vec_len (vlib_frame_queues);
if (num_fq == 0)
{
- vlib_cli_output(vm, "No frame queues exist\n");
+ vlib_cli_output (vm, "No frame queues exist\n");
return error;
}
// Allocate storage for trace if necessary
- vec_validate_aligned(tm->frame_queue_traces, num_fq-1, CLIB_CACHE_LINE_BYTES);
- vec_validate_aligned(tm->frame_queue_histogram, num_fq-1, CLIB_CACHE_LINE_BYTES);
-
- for (fqix=0; fqix<num_fq; fqix++) {
- fqt = &tm->frame_queue_traces[fqix];
- fqh = &tm->frame_queue_histogram[fqix];
-
- memset(fqt->n_vectors, 0xff, sizeof(fqt->n_vectors));
- fqt->written = 0;
- memset(fqh, 0, sizeof(*fqh));
- vlib_frame_queues[fqix]->trace = enable;
- }
+ vec_validate_aligned (tm->frame_queue_traces, num_fq - 1,
+ CLIB_CACHE_LINE_BYTES);
+ vec_validate_aligned (tm->frame_queue_histogram, num_fq - 1,
+ CLIB_CACHE_LINE_BYTES);
+
+ for (fqix = 0; fqix < num_fq; fqix++)
+ {
+ fqt = &tm->frame_queue_traces[fqix];
+ fqh = &tm->frame_queue_histogram[fqix];
+
+ memset (fqt->n_vectors, 0xff, sizeof (fqt->n_vectors));
+ fqt->written = 0;
+ memset (fqh, 0, sizeof (*fqh));
+ vlib_frame_queues[fqix]->trace = enable;
+ }
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cmd_trace_frame_queue,static) = {
.path = "trace frame-queue",
.short_help = "trace frame-queue (on|off)",
.function = trace_frame_queue,
.is_mp_safe = 1,
};
+/* *INDENT-ON* */
/*
@@ -141,222 +151,258 @@ VLIB_CLI_COMMAND (cmd_trace_frame_queue,static) = {
* Round up, e.g. 0.000001 => 1%
*/
static u32
-compute_percent (u64 *two_counters, u64 total)
+compute_percent (u64 * two_counters, u64 total)
{
- if (total == 0)
- {
- return 0;
- }
- else
- {
- return (((two_counters[0] + two_counters[1]) * 100) + (total-1)) / total;
- }
+ if (total == 0)
+ {
+ return 0;
+ }
+ else
+ {
+ return (((two_counters[0] + two_counters[1]) * 100) +
+ (total - 1)) / total;
+ }
}
/*
* Display frame queue trace data gathered by threads.
*/
static clib_error_t *
-show_frame_queue_internal (vlib_main_t *vm,
- u32 histogram)
+show_frame_queue_internal (vlib_main_t * vm, u32 histogram)
{
- vlib_thread_main_t *tm = vlib_get_thread_main();
- clib_error_t * error = NULL;
+ vlib_thread_main_t *tm = vlib_get_thread_main ();
+ clib_error_t *error = NULL;
frame_queue_trace_t *fqt;
frame_queue_nelt_counter_t *fqh;
u32 num_fq;
u32 fqix;
- num_fq = vec_len(tm->frame_queue_traces);
+ num_fq = vec_len (tm->frame_queue_traces);
if (num_fq == 0)
{
- vlib_cli_output(vm, "No trace data for frame queues\n");
+ vlib_cli_output (vm, "No trace data for frame queues\n");
return error;
}
if (histogram)
{
- vlib_cli_output(vm, "0-1 2-3 4-5 6-7 8-9 10-11 12-13 14-15 "
- "16-17 18-19 20-21 22-23 24-25 26-27 28-29 30-31\n");
+ vlib_cli_output (vm, "0-1 2-3 4-5 6-7 8-9 10-11 12-13 14-15 "
+ "16-17 18-19 20-21 22-23 24-25 26-27 28-29 30-31\n");
}
- for (fqix=0; fqix<num_fq; fqix++) {
- fqt = &(tm->frame_queue_traces[fqix]);
-
- vlib_cli_output(vm, "Thread %d %v\n", fqix, vlib_worker_threads[fqix].name);
-
- if (fqt->written == 0)
- {
- vlib_cli_output(vm, " no trace data\n");
- continue;
- }
-
- if (histogram)
- {
- fqh = &(tm->frame_queue_histogram[fqix]);
- u32 nelt;
- u64 total = 0;
-
- for (nelt=0; nelt<FRAME_QUEUE_MAX_NELTS; nelt++) {
- total += fqh->count[nelt];
- }
-
- /*
- * Print in pairs to condense the output.
- * Allow entries with 0 counts to be clearly identified, by rounding up.
- * Any non-zero value will be displayed as at least one percent. This
- * also means the sum of percentages can be > 100, but that is fine. The
- * histogram is counted from the last time "trace frame on" was issued.
- */
- vlib_cli_output(vm,
- "%3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%% "
- "%3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%%\n",
- compute_percent(&fqh->count[ 0], total),
- compute_percent(&fqh->count[ 2], total),
- compute_percent(&fqh->count[ 4], total),
- compute_percent(&fqh->count[ 6], total),
- compute_percent(&fqh->count[ 8], total),
- compute_percent(&fqh->count[10], total),
- compute_percent(&fqh->count[12], total),
- compute_percent(&fqh->count[14], total),
- compute_percent(&fqh->count[16], total),
- compute_percent(&fqh->count[18], total),
- compute_percent(&fqh->count[20], total),
- compute_percent(&fqh->count[22], total),
- compute_percent(&fqh->count[24], total),
- compute_percent(&fqh->count[26], total),
- compute_percent(&fqh->count[28], total),
- compute_percent(&fqh->count[30], total));
- }
- else
- {
- vlib_cli_output(vm, " vector-threshold %d ring size %d in use %d\n",
- fqt->threshold, fqt->nelts, fqt->n_in_use);
- vlib_cli_output(vm, " head %12d head_hint %12d tail %12d\n",
- fqt->head, fqt->head_hint, fqt->tail);
- vlib_cli_output(vm, " %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
- fqt->n_vectors[0], fqt->n_vectors[1], fqt->n_vectors[2], fqt->n_vectors[3],
- fqt->n_vectors[4], fqt->n_vectors[5], fqt->n_vectors[6], fqt->n_vectors[7],
- fqt->n_vectors[8], fqt->n_vectors[9], fqt->n_vectors[10], fqt->n_vectors[11],
- fqt->n_vectors[12], fqt->n_vectors[13], fqt->n_vectors[14], fqt->n_vectors[15]);
-
- if (fqt->nelts > 16)
- {
- vlib_cli_output(vm, " %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
- fqt->n_vectors[16], fqt->n_vectors[17], fqt->n_vectors[18], fqt->n_vectors[19],
- fqt->n_vectors[20], fqt->n_vectors[21], fqt->n_vectors[22], fqt->n_vectors[23],
- fqt->n_vectors[24], fqt->n_vectors[25], fqt->n_vectors[26], fqt->n_vectors[27],
- fqt->n_vectors[28], fqt->n_vectors[29], fqt->n_vectors[30], fqt->n_vectors[31]);
- }
- }
-
- }
+ for (fqix = 0; fqix < num_fq; fqix++)
+ {
+ fqt = &(tm->frame_queue_traces[fqix]);
+
+ vlib_cli_output (vm, "Thread %d %v\n", fqix,
+ vlib_worker_threads[fqix].name);
+
+ if (fqt->written == 0)
+ {
+ vlib_cli_output (vm, " no trace data\n");
+ continue;
+ }
+
+ if (histogram)
+ {
+ fqh = &(tm->frame_queue_histogram[fqix]);
+ u32 nelt;
+ u64 total = 0;
+
+ for (nelt = 0; nelt < FRAME_QUEUE_MAX_NELTS; nelt++)
+ {
+ total += fqh->count[nelt];
+ }
+
+ /*
+ * Print in pairs to condense the output.
+ * Allow entries with 0 counts to be clearly identified, by rounding up.
+ * Any non-zero value will be displayed as at least one percent. This
+ * also means the sum of percentages can be > 100, but that is fine. The
+ * histogram is counted from the last time "trace frame on" was issued.
+ */
+ vlib_cli_output (vm,
+ "%3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%% "
+ "%3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%% %3d%%\n",
+ compute_percent (&fqh->count[0], total),
+ compute_percent (&fqh->count[2], total),
+ compute_percent (&fqh->count[4], total),
+ compute_percent (&fqh->count[6], total),
+ compute_percent (&fqh->count[8], total),
+ compute_percent (&fqh->count[10], total),
+ compute_percent (&fqh->count[12], total),
+ compute_percent (&fqh->count[14], total),
+ compute_percent (&fqh->count[16], total),
+ compute_percent (&fqh->count[18], total),
+ compute_percent (&fqh->count[20], total),
+ compute_percent (&fqh->count[22], total),
+ compute_percent (&fqh->count[24], total),
+ compute_percent (&fqh->count[26], total),
+ compute_percent (&fqh->count[28], total),
+ compute_percent (&fqh->count[30], total));
+ }
+ else
+ {
+ vlib_cli_output (vm,
+ " vector-threshold %d ring size %d in use %d\n",
+ fqt->threshold, fqt->nelts, fqt->n_in_use);
+ vlib_cli_output (vm, " head %12d head_hint %12d tail %12d\n",
+ fqt->head, fqt->head_hint, fqt->tail);
+ vlib_cli_output (vm,
+ " %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
+ fqt->n_vectors[0], fqt->n_vectors[1],
+ fqt->n_vectors[2], fqt->n_vectors[3],
+ fqt->n_vectors[4], fqt->n_vectors[5],
+ fqt->n_vectors[6], fqt->n_vectors[7],
+ fqt->n_vectors[8], fqt->n_vectors[9],
+ fqt->n_vectors[10], fqt->n_vectors[11],
+ fqt->n_vectors[12], fqt->n_vectors[13],
+ fqt->n_vectors[14], fqt->n_vectors[15]);
+
+ if (fqt->nelts > 16)
+ {
+ vlib_cli_output (vm,
+ " %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
+ fqt->n_vectors[16], fqt->n_vectors[17],
+ fqt->n_vectors[18], fqt->n_vectors[19],
+ fqt->n_vectors[20], fqt->n_vectors[21],
+ fqt->n_vectors[22], fqt->n_vectors[23],
+ fqt->n_vectors[24], fqt->n_vectors[25],
+ fqt->n_vectors[26], fqt->n_vectors[27],
+ fqt->n_vectors[28], fqt->n_vectors[29],
+ fqt->n_vectors[30], fqt->n_vectors[31]);
+ }
+ }
+
+ }
return error;
}
static clib_error_t *
-show_frame_queue_trace (vlib_main_t *vm, unformat_input_t *input,
- vlib_cli_command_t *cmd)
+show_frame_queue_trace (vlib_main_t * vm, unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
return show_frame_queue_internal (vm, 0);
}
static clib_error_t *
-show_frame_queue_histogram (vlib_main_t *vm, unformat_input_t *input,
- vlib_cli_command_t *cmd)
+show_frame_queue_histogram (vlib_main_t * vm, unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
return show_frame_queue_internal (vm, 1);
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cmd_show_frame_queue_trace,static) = {
.path = "show frame-queue",
.short_help = "show frame-queue trace",
.function = show_frame_queue_trace,
};
+/* *INDENT-ON* */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cmd_show_frame_queue_histogram,static) = {
.path = "show frame-queue histogram",
.short_help = "show frame-queue histogram",
.function = show_frame_queue_histogram,
};
+/* *INDENT-ON* */
/*
* Modify the number of elements on the frame_queues
*/
static clib_error_t *
-test_frame_queue_nelts (vlib_main_t *vm, unformat_input_t *input,
- vlib_cli_command_t *cmd)
+test_frame_queue_nelts (vlib_main_t * vm, unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
- clib_error_t * error = NULL;
+ clib_error_t *error = NULL;
u32 num_fq;
u32 fqix;
u32 nelts = 0;
- unformat(input, "%d", &nelts);
- if ((nelts != 4) && (nelts != 8) && (nelts != 16) && (nelts != 32)) {
- return clib_error_return(0, "expecting 4,8,16,32");
- }
+ unformat (input, "%d", &nelts);
+ if ((nelts != 4) && (nelts != 8) && (nelts != 16) && (nelts != 32))
+ {
+ return clib_error_return (0, "expecting 4,8,16,32");
+ }
- num_fq = vec_len(vlib_frame_queues);
+ num_fq = vec_len (vlib_frame_queues);
if (num_fq == 0)
{
- vlib_cli_output(vm, "No frame queues exist\n");
+ vlib_cli_output (vm, "No frame queues exist\n");
return error;
}
- for (fqix=0; fqix<num_fq; fqix++) {
- vlib_frame_queues[fqix]->nelts = nelts;
- }
+ for (fqix = 0; fqix < num_fq; fqix++)
+ {
+ vlib_frame_queues[fqix]->nelts = nelts;
+ }
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cmd_test_frame_queue_nelts,static) = {
.path = "test frame-queue nelts",
.short_help = "test frame-queue nelts (4,8,16,32)",
.function = test_frame_queue_nelts,
};
+/* *INDENT-ON* */
/*
* Modify the max number of packets pulled off the frame queues
*/
static clib_error_t *
-test_frame_queue_threshold (vlib_main_t *vm, unformat_input_t *input,
- vlib_cli_command_t *cmd)
+test_frame_queue_threshold (vlib_main_t * vm, unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
- clib_error_t * error = NULL;
+ clib_error_t *error = NULL;
u32 num_fq;
u32 fqix;
u32 threshold = 0;
- if (unformat(input, "%d", &threshold)) {
- } else {
- vlib_cli_output(vm, "expecting threshold value\n");
+ if (unformat (input, "%d", &threshold))
+ {
+ }
+ else
+ {
+ vlib_cli_output (vm, "expecting threshold value\n");
return error;
- }
+ }
if (threshold == 0)
threshold = ~0;
- num_fq = vec_len(vlib_frame_queues);
+ num_fq = vec_len (vlib_frame_queues);
if (num_fq == 0)
{
- vlib_cli_output(vm, "No frame queues exist\n");
+ vlib_cli_output (vm, "No frame queues exist\n");
return error;
}
- for (fqix=0; fqix<num_fq; fqix++) {
- vlib_frame_queues[fqix]->vector_threshold = threshold;
- }
+ for (fqix = 0; fqix < num_fq; fqix++)
+ {
+ vlib_frame_queues[fqix]->vector_threshold = threshold;
+ }
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cmd_test_frame_queue_threshold,static) = {
.path = "test frame-queue threshold",
.short_help = "test frame-queue threshold N (0=no limit)",
.function = test_frame_queue_threshold,
};
+/* *INDENT-ON* */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/trace.c b/vlib/vlib/trace.c
index 86a04aa64d1..5b64c55a01d 100644
--- a/vlib/vlib/trace.c
+++ b/vlib/vlib/trace.c
@@ -49,16 +49,16 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
uword next_buffer_stride,
uword n_buffer_data_bytes_in_trace)
{
- u32 n_left, * from;
+ u32 n_left, *from;
n_left = n_buffers;
from = buffers;
-
+
while (n_left >= 4)
{
u32 bi0, bi1;
- vlib_buffer_t * b0, * b1;
- u8 * t0, * t1;
+ vlib_buffer_t *b0, *b1;
+ u8 *t0, *t1;
/* Prefetch next iteration. */
vlib_prefetch_buffer_with_index (vm, from[2], LOAD);
@@ -74,13 +74,13 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
{
t0 = vlib_add_trace (vm, node, b0, n_buffer_data_bytes_in_trace);
clib_memcpy (t0, b0->data + b0->current_data,
- n_buffer_data_bytes_in_trace);
+ n_buffer_data_bytes_in_trace);
}
if (b1->flags & VLIB_BUFFER_IS_TRACED)
{
t1 = vlib_add_trace (vm, node, b1, n_buffer_data_bytes_in_trace);
clib_memcpy (t1, b1->data + b1->current_data,
- n_buffer_data_bytes_in_trace);
+ n_buffer_data_bytes_in_trace);
}
from += 2;
n_left -= 2;
@@ -89,8 +89,8 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
while (n_left >= 1)
{
u32 bi0;
- vlib_buffer_t * b0;
- u8 * t0;
+ vlib_buffer_t *b0;
+ u8 *t0;
bi0 = from[0];
@@ -100,7 +100,7 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
{
t0 = vlib_add_trace (vm, node, b0, n_buffer_data_bytes_in_trace);
clib_memcpy (t0, b0->data + b0->current_data,
- n_buffer_data_bytes_in_trace);
+ n_buffer_data_bytes_in_trace);
}
from += 1;
n_left -= 1;
@@ -112,8 +112,9 @@ always_inline void
clear_trace_buffer (void)
{
int i;
- vlib_trace_main_t * tm;
+ vlib_trace_main_t *tm;
+ /* *INDENT-OFF* */
foreach_vlib_main (
({
void *mainheap;
@@ -129,17 +130,19 @@ clear_trace_buffer (void)
pool_free (tm->trace_buffer_pool);
clib_mem_set_heap (mainheap);
}));
+ /* *INDENT-ON* */
}
-static u8 * format_vlib_trace (u8 * s, va_list * va)
+static u8 *
+format_vlib_trace (u8 * s, va_list * va)
{
- vlib_main_t * vm = va_arg (*va, vlib_main_t *);
- vlib_trace_header_t * h = va_arg (*va, vlib_trace_header_t *);
- vlib_trace_header_t * e = vec_end (h);
- vlib_node_t * node, * prev_node;
- clib_time_t * ct = &vm->clib_time;
+ vlib_main_t *vm = va_arg (*va, vlib_main_t *);
+ vlib_trace_header_t *h = va_arg (*va, vlib_trace_header_t *);
+ vlib_trace_header_t *e = vec_end (h);
+ vlib_node_t *node, *prev_node;
+ clib_time_t *ct = &vm->clib_time;
f64 t;
-
+
prev_node = 0;
while (h < e)
{
@@ -147,19 +150,18 @@ static u8 * format_vlib_trace (u8 * s, va_list * va)
if (node != prev_node)
{
- t = (h->time - vm->cpu_time_main_loop_start) * ct->seconds_per_clock;
- s = format (s, "\n%U: %v",
- format_time_interval, "h:m:s:u", t,
- node->name);
+ t =
+ (h->time - vm->cpu_time_main_loop_start) * ct->seconds_per_clock;
+ s =
+ format (s, "\n%U: %v", format_time_interval, "h:m:s:u", t,
+ node->name);
}
prev_node = node;
if (node->format_trace)
- s = format (s, "\n %U",
- node->format_trace, vm, node, h->data);
+ s = format (s, "\n %U", node->format_trace, vm, node, h->data);
else
- s = format (s, "\n %U",
- node->format_buffer, h->data);
+ s = format (s, "\n %U", node->format_buffer, h->data);
h = vlib_trace_header_next (h);
}
@@ -168,16 +170,18 @@ static u8 * format_vlib_trace (u8 * s, va_list * va)
}
/* Root of all trace cli commands. */
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (trace_cli_command,static) = {
.path = "trace",
.short_help = "Packet tracer commands",
};
+/* *INDENT-ON* */
static int
-trace_cmp (void * a1, void * a2)
+trace_cmp (void *a1, void *a2)
{
- vlib_trace_header_t ** t1 = a1;
- vlib_trace_header_t ** t2 = a2;
+ vlib_trace_header_t **t1 = a1;
+ vlib_trace_header_t **t2 = a2;
i64 dt = t1[0]->time - t2[0]->time;
return dt < 0 ? -1 : (dt > 0 ? +1 : 0);
}
@@ -185,32 +189,34 @@ trace_cmp (void * a1, void * a2)
/*
* Return 1 if this packet passes the trace filter, or 0 otherwise
*/
-u32 filter_accept (vlib_trace_main_t * tm, vlib_trace_header_t * h)
+u32
+filter_accept (vlib_trace_main_t * tm, vlib_trace_header_t * h)
{
- vlib_trace_header_t * e = vec_end (h);
+ vlib_trace_header_t *e = vec_end (h);
- if (tm->filter_flag == 0) return 1;
+ if (tm->filter_flag == 0)
+ return 1;
if (tm->filter_flag == FILTER_FLAG_INCLUDE)
{
while (h < e)
- {
- if (h->node_index == tm->filter_node_index)
- return 1;
- h = vlib_trace_header_next (h);
- }
+ {
+ if (h->node_index == tm->filter_node_index)
+ return 1;
+ h = vlib_trace_header_next (h);
+ }
return 0;
- }
- else /* FILTER_FLAG_EXCLUDE */
+ }
+ else /* FILTER_FLAG_EXCLUDE */
{
while (h < e)
- {
- if (h->node_index == tm->filter_node_index)
- return 0;
- h = vlib_trace_header_next (h);
- }
+ {
+ if (h->node_index == tm->filter_node_index)
+ return 0;
+ h = vlib_trace_header_next (h);
+ }
return 1;
- }
+ }
return 0;
}
@@ -218,11 +224,12 @@ u32 filter_accept (vlib_trace_main_t * tm, vlib_trace_header_t * h)
/*
* Remove traces from the trace buffer pool that don't pass the filter
*/
-void trace_apply_filter (vlib_main_t * vm)
+void
+trace_apply_filter (vlib_main_t * vm)
{
- vlib_trace_main_t * tm = &vm->trace_main;
- vlib_trace_header_t ** h;
- vlib_trace_header_t *** traces_to_remove = 0;
+ vlib_trace_main_t *tm = &vm->trace_main;
+ vlib_trace_header_t **h;
+ vlib_trace_header_t ***traces_to_remove = 0;
u32 index;
u32 trace_index;
u32 n_accepted;
@@ -237,6 +244,7 @@ void trace_apply_filter (vlib_main_t * vm)
* of any N traces.
*/
n_accepted = 0;
+ /* *INDENT-OFF* */
pool_foreach (h, tm->trace_buffer_pool,
({
accept = filter_accept(tm, h[0]);
@@ -246,9 +254,10 @@ void trace_apply_filter (vlib_main_t * vm)
else
n_accepted++;
}));
+ /* *INDENT-ON* */
/* remove all traces that we don't want to keep */
- for (index=0; index<vec_len(traces_to_remove); index++)
+ for (index = 0; index < vec_len (traces_to_remove); index++)
{
trace_index = traces_to_remove[index] - tm->trace_buffer_pool;
_vec_len (tm->trace_buffer_pool[trace_index]) = 0;
@@ -260,14 +269,13 @@ void trace_apply_filter (vlib_main_t * vm)
static clib_error_t *
cli_show_trace_buffer (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_trace_main_t * tm;
- vlib_trace_header_t ** h, ** traces;
+ vlib_trace_main_t *tm;
+ vlib_trace_header_t **h, **traces;
u32 i, index = 0;
- char * fmt;
- u8 * s = 0;
+ char *fmt;
+ u8 *s = 0;
u32 max;
/*
@@ -275,18 +283,19 @@ cli_show_trace_buffer (vlib_main_t * vm,
* specify a max. This prevents unexpectedly huge outputs.
*/
max = 50;
- while (unformat_check_input(input) != (uword)UNFORMAT_END_OF_INPUT)
+ while (unformat_check_input (input) != (uword) UNFORMAT_END_OF_INPUT)
{
if (unformat (input, "max %d", &max))
- ;
+ ;
else
- return clib_error_create ("expected 'max COUNT', got `%U'",
- format_unformat_error, input);
+ return clib_error_create ("expected 'max COUNT', got `%U'",
+ format_unformat_error, input);
}
/* Get active traces from pool. */
+ /* *INDENT-OFF* */
foreach_vlib_main (
({
void *mainheap;
@@ -301,21 +310,21 @@ cli_show_trace_buffer (vlib_main_t * vm,
trace_apply_filter(this_vlib_main);
traces = 0;
- pool_foreach (h, tm->trace_buffer_pool,
+ pool_foreach (h, tm->trace_buffer_pool,
({
vec_add1 (traces, h[0]);
}));
-
+
if (vec_len (traces) == 0)
{
clib_mem_set_heap (mainheap);
s = format (s, "No packets in trace buffer\n");
goto done;
}
-
+
/* Sort them by increasing time. */
vec_sort_with_function (traces, trace_cmp);
-
+
for (i = 0; i < vec_len (traces); i++)
{
if (i == max)
@@ -326,44 +335,47 @@ cli_show_trace_buffer (vlib_main_t * vm,
}
clib_mem_set_heap (mainheap);
-
+
s = format (s, "Packet %d\n%U\n\n", i + 1,
format_vlib_trace, vm, traces[i]);
mainheap = clib_mem_set_heap (this_vlib_main->heap_base);
}
-
+
done:
vec_free (traces);
clib_mem_set_heap (mainheap);
index++;
}));
+ /* *INDENT-ON* */
vlib_cli_output (vm, (char *) s);
vec_free (s);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_trace_cli,static) = {
.path = "show trace",
.short_help = "Show trace buffer [max COUNT]",
.function = cli_show_trace_buffer,
};
+/* *INDENT-ON* */
static clib_error_t *
cli_add_trace_buffer (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_trace_main_t * tm;
- vlib_trace_node_t * tn;
+ vlib_trace_main_t *tm;
+ vlib_trace_node_t *tn;
u32 node_index, add;
u8 verbose = 0;
- while (unformat_check_input(input) != (uword)UNFORMAT_END_OF_INPUT)
+ while (unformat_check_input (input) != (uword) UNFORMAT_END_OF_INPUT)
{
- if (unformat (input, "%U %d", unformat_vlib_node, vm, &node_index, &add))
+ if (unformat
+ (input, "%U %d", unformat_vlib_node, vm, &node_index, &add))
;
else if (unformat (input, "verbose"))
verbose = 1;
@@ -372,30 +384,29 @@ cli_add_trace_buffer (vlib_main_t * vm,
format_unformat_error, input);
}
- foreach_vlib_main (
- ({
- void *oldheap;
- tm = &this_vlib_main->trace_main;
-
- tm->trace_active_hint = 1;
- tm->verbose = verbose;
-
- oldheap = clib_mem_set_heap (this_vlib_main->heap_base);
-
- vec_validate (tm->nodes, node_index);
- tn = tm->nodes + node_index;
- tn->limit += add;
- clib_mem_set_heap (oldheap);
- }));
+ foreach_vlib_main ((
+ {
+ void *oldheap;
+ tm = &this_vlib_main->trace_main;
+ tm->trace_active_hint = 1;
+ tm->verbose = verbose;
+ oldheap =
+ clib_mem_set_heap (this_vlib_main->heap_base);
+ vec_validate (tm->nodes, node_index);
+ tn = tm->nodes + node_index;
+ tn->limit += add; clib_mem_set_heap (oldheap);
+ }));
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (add_trace_cli,static) = {
.path = "trace add",
.short_help = "Trace given number of packets",
.function = cli_add_trace_buffer,
};
+/* *INDENT-ON* */
/*
@@ -437,22 +448,22 @@ VLIB_CLI_COMMAND (add_trace_cli,static) = {
*/
static clib_error_t *
cli_filter_trace (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- vlib_trace_main_t * tm = &vm->trace_main;
+ vlib_trace_main_t *tm = &vm->trace_main;
u32 filter_node_index;
u32 filter_flag;
u32 filter_count;
void *mainheap;
if (unformat (input, "include %U %d",
- unformat_vlib_node, vm, &filter_node_index, &filter_count))
+ unformat_vlib_node, vm, &filter_node_index, &filter_count))
{
filter_flag = FILTER_FLAG_INCLUDE;
}
else if (unformat (input, "exclude %U %d",
- unformat_vlib_node, vm, &filter_node_index, &filter_count))
+ unformat_vlib_node, vm, &filter_node_index,
+ &filter_count))
{
filter_flag = FILTER_FLAG_EXCLUDE;
}
@@ -463,11 +474,14 @@ cli_filter_trace (vlib_main_t * vm,
filter_count = 0;
}
else
- return clib_error_create ("expected 'include NODE COUNT' or 'exclude NODE COUNT' or 'none', got `%U'",
- format_unformat_error, input);
+ return
+ clib_error_create
+ ("expected 'include NODE COUNT' or 'exclude NODE COUNT' or 'none', got `%U'",
+ format_unformat_error, input);
+ /* *INDENT-OFF* */
foreach_vlib_main (
- ({
+ ({
tm = &this_vlib_main->trace_main;
tm->filter_node_index = filter_node_index;
tm->filter_flag = filter_flag;
@@ -481,30 +495,45 @@ cli_filter_trace (vlib_main_t * vm,
vec_free (tm->nodes);
clib_mem_set_heap (mainheap);
}));
+ /* *INDENT-ON* */
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (filter_trace_cli,static) = {
.path = "trace filter",
.short_help = "filter trace output - include NODE COUNT | exclude NODE COUNT | none",
.function = cli_filter_trace,
};
+/* *INDENT-ON* */
static clib_error_t *
cli_clear_trace_buffer (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
clear_trace_buffer ();
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (clear_trace_cli,static) = {
.path = "clear trace",
.short_help = "Clear trace buffer and free memory",
.function = cli_clear_trace_buffer,
};
+/* *INDENT-ON* */
/* Dummy function to get us linked in. */
-void vlib_trace_cli_reference (void) {}
+void
+vlib_trace_cli_reference (void)
+{
+}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/trace.h b/vlib/vlib/trace.h
index 6e9ed495734..fc0fc5c8ed4 100644
--- a/vlib/vlib/trace.h
+++ b/vlib/vlib/trace.h
@@ -42,7 +42,8 @@
#include <vppinfra/pool.h>
-typedef struct {
+typedef struct
+{
/* CPU time stamp trace was made. */
u64 time;
@@ -56,7 +57,8 @@ typedef struct {
u8 data[0];
} vlib_trace_header_t;
-typedef struct {
+typedef struct
+{
/* Current number of traces in buffer. */
u32 count;
@@ -64,9 +66,10 @@ typedef struct {
u32 limit;
} vlib_trace_node_t;
-typedef struct {
+typedef struct
+{
/* Pool of trace buffers. */
- vlib_trace_header_t ** trace_buffer_pool;
+ vlib_trace_header_t **trace_buffer_pool;
u32 last_main_loop_count;
u32 filter_node_index;
@@ -80,10 +83,18 @@ typedef struct {
u32 trace_active_hint;
/* Per node trace counts. */
- vlib_trace_node_t * nodes;
+ vlib_trace_node_t *nodes;
/* verbosity */
int verbose;
} vlib_trace_main_t;
#endif /* included_vlib_trace_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/trace_funcs.h b/vlib/vlib/trace_funcs.h
index 1da46b41964..5280eae9904 100644
--- a/vlib/vlib/trace_funcs.h
+++ b/vlib/vlib/trace_funcs.h
@@ -43,22 +43,20 @@
always_inline void
vlib_validate_trace (vlib_trace_main_t * tm, vlib_buffer_t * b)
{
- /*
- * this assert seems right, but goes off constantly.
+ /*
+ * this assert seems right, but goes off constantly.
* disabling it appears to make the pain go away
*/
ASSERT (1 || b->flags & VLIB_BUFFER_IS_TRACED);
- ASSERT (! pool_is_free_index (tm->trace_buffer_pool, b->trace_index));
+ ASSERT (!pool_is_free_index (tm->trace_buffer_pool, b->trace_index));
}
always_inline void *
vlib_add_trace (vlib_main_t * vm,
- vlib_node_runtime_t * r,
- vlib_buffer_t * b,
- u32 n_data_bytes)
+ vlib_node_runtime_t * r, vlib_buffer_t * b, u32 n_data_bytes)
{
- vlib_trace_main_t * tm = &vm->trace_main;
- vlib_trace_header_t * h;
+ vlib_trace_main_t *tm = &vm->trace_main;
+ vlib_trace_header_t *h;
u32 n_data_words;
vlib_validate_trace (tm, b);
@@ -66,8 +64,7 @@ vlib_add_trace (vlib_main_t * vm,
n_data_bytes = round_pow2 (n_data_bytes, sizeof (h[0]));
n_data_words = n_data_bytes / sizeof (h[0]);
vec_add2_aligned (tm->trace_buffer_pool[b->trace_index], h,
- 1 + n_data_words,
- sizeof (h[0]));
+ 1 + n_data_words, sizeof (h[0]));
h->time = vm->cpu_time_last_node_dispatch;
h->n_data = n_data_words;
@@ -75,15 +72,17 @@ vlib_add_trace (vlib_main_t * vm,
return h->data;
}
-
+
always_inline vlib_trace_header_t *
vlib_trace_header_next (vlib_trace_header_t * h)
-{ return h + 1 + h->n_data; }
+{
+ return h + 1 + h->n_data;
+}
always_inline void
vlib_free_trace (vlib_main_t * vm, vlib_buffer_t * b)
{
- vlib_trace_main_t * tm = &vm->trace_main;
+ vlib_trace_main_t *tm = &vm->trace_main;
vlib_validate_trace (tm, b);
_vec_len (tm->trace_buffer_pool[b->trace_index]) = 0;
pool_put_index (tm->trace_buffer_pool, b->trace_index);
@@ -91,10 +90,9 @@ vlib_free_trace (vlib_main_t * vm, vlib_buffer_t * b)
always_inline void
vlib_trace_next_frame (vlib_main_t * vm,
- vlib_node_runtime_t * r,
- u32 next_index)
+ vlib_node_runtime_t * r, u32 next_index)
{
- vlib_next_frame_t * nf;
+ vlib_next_frame_t *nf;
nf = vlib_node_runtime_get_next_frame (vm, r, next_index);
nf->flags |= VLIB_FRAME_TRACE;
}
@@ -105,12 +103,10 @@ void trace_apply_filter (vlib_main_t * vm);
always_inline void
vlib_trace_buffer (vlib_main_t * vm,
vlib_node_runtime_t * r,
- u32 next_index,
- vlib_buffer_t * b,
- int follow_chain)
+ u32 next_index, vlib_buffer_t * b, int follow_chain)
{
- vlib_trace_main_t * tm = &vm->trace_main;
- vlib_trace_header_t ** h;
+ vlib_trace_main_t *tm = &vm->trace_main;
+ vlib_trace_header_t **h;
/*
* Apply filter to existing traces to keep number of allocated traces low.
@@ -126,16 +122,19 @@ vlib_trace_buffer (vlib_main_t * vm,
pool_get (tm->trace_buffer_pool, h);
- do {
- b->flags |= VLIB_BUFFER_IS_TRACED;
- b->trace_index = h - tm->trace_buffer_pool;
- } while (follow_chain && (b = vlib_get_next_buffer (vm, b)));
+ do
+ {
+ b->flags |= VLIB_BUFFER_IS_TRACED;
+ b->trace_index = h - tm->trace_buffer_pool;
+ }
+ while (follow_chain && (b = vlib_get_next_buffer (vm, b)));
}
always_inline void
-vlib_buffer_copy_trace_flag (vlib_main_t * vm, vlib_buffer_t * b, u32 bi_target)
+vlib_buffer_copy_trace_flag (vlib_main_t * vm, vlib_buffer_t * b,
+ u32 bi_target)
{
- vlib_buffer_t * b_target = vlib_get_buffer (vm, bi_target);
+ vlib_buffer_t *b_target = vlib_get_buffer (vm, bi_target);
b_target->flags |= b->flags & VLIB_BUFFER_IS_TRACED;
b_target->trace_index = b->trace_index;
}
@@ -143,8 +142,8 @@ vlib_buffer_copy_trace_flag (vlib_main_t * vm, vlib_buffer_t * b, u32 bi_target)
always_inline u32
vlib_get_trace_count (vlib_main_t * vm, vlib_node_runtime_t * rt)
{
- vlib_trace_main_t * tm = &vm->trace_main;
- vlib_trace_node_t * tn;
+ vlib_trace_main_t *tm = &vm->trace_main;
+ vlib_trace_node_t *tn;
int n;
if (rt->node_index >= vec_len (tm->nodes))
@@ -157,11 +156,10 @@ vlib_get_trace_count (vlib_main_t * vm, vlib_node_runtime_t * rt)
}
always_inline void
-vlib_set_trace_count (vlib_main_t * vm, vlib_node_runtime_t * rt,
- u32 count)
+vlib_set_trace_count (vlib_main_t * vm, vlib_node_runtime_t * rt, u32 count)
{
- vlib_trace_main_t * tm = &vm->trace_main;
- vlib_trace_node_t * tn = vec_elt_at_index (tm->nodes, rt->node_index);
+ vlib_trace_main_t *tm = &vm->trace_main;
+ vlib_trace_node_t *tn = vec_elt_at_index (tm->nodes, rt->node_index);
ASSERT (count <= tn->limit);
tn->count = tn->limit - count;
@@ -177,3 +175,11 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
uword n_buffer_data_bytes_in_trace);
#endif /* included_vlib_trace_funcs_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/cj.c b/vlib/vlib/unix/cj.c
index 782ddce3099..553b450ffaa 100644
--- a/vlib/vlib/unix/cj.c
+++ b/vlib/vlib/unix/cj.c
@@ -1,4 +1,4 @@
-/*
+/*
*------------------------------------------------------------------
* cj.c
*
@@ -25,65 +25,68 @@
cj_main_t cj_main;
void
-cj_log (u32 type, void * data0, void * data1)
+cj_log (u32 type, void *data0, void *data1)
{
u64 new_tail;
- cj_main_t * cjm = &cj_main;
- cj_record_t * r;
+ cj_main_t *cjm = &cj_main;
+ cj_record_t *r;
if (cjm->enable == 0)
return;
new_tail = __sync_add_and_fetch (&cjm->tail, 1);
- r = (cj_record_t *) &(cjm->records[new_tail & (cjm->num_records - 1)]);
+ r = (cj_record_t *) & (cjm->records[new_tail & (cjm->num_records - 1)]);
r->time = vlib_time_now (cjm->vlib_main);
- r->cpu = os_get_cpu_number();
+ r->cpu = os_get_cpu_number ();
r->type = type;
- r->data[0] = pointer_to_uword(data0);
- r->data[1] = pointer_to_uword(data1);
+ r->data[0] = pointer_to_uword (data0);
+ r->data[1] = pointer_to_uword (data1);
}
-void cj_stop(void)
+void
+cj_stop (void)
{
- cj_main_t * cjm = &cj_main;
+ cj_main_t *cjm = &cj_main;
cjm->enable = 0;
}
-clib_error_t * cj_init (vlib_main_t * vm)
+clib_error_t *
+cj_init (vlib_main_t * vm)
{
- cj_main_t * cjm = &cj_main;
+ cj_main_t *cjm = &cj_main;
cjm->vlib_main = vm;
return 0;
}
+
VLIB_INIT_FUNCTION (cj_init);
static clib_error_t *
cj_config (vlib_main_t * vm, unformat_input_t * input)
{
- cj_main_t * cjm = &cj_main;
+ cj_main_t *cjm = &cj_main;
int matched = 0;
int enable = 0;
- while (unformat_check_input(input) != UNFORMAT_END_OF_INPUT)
+ while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
if (unformat (input, "records %d", &cjm->num_records))
- matched = 1;
+ matched = 1;
else if (unformat (input, "on"))
- enable = 1;
+ enable = 1;
else
- return clib_error_return (0, "cj_config: unknown input '%U'",
- format_unformat_error, input);
+ return clib_error_return (0, "cj_config: unknown input '%U'",
+ format_unformat_error, input);
}
if (matched == 0)
return 0;
cjm->num_records = max_pow2 (cjm->num_records);
- vec_validate (cjm->records, cjm->num_records-1);
+ vec_validate (cjm->records, cjm->num_records - 1);
memset (cjm->records, 0xff, cjm->num_records * sizeof (cj_record_t));
cjm->tail = ~0;
cjm->enable = enable;
@@ -93,112 +96,119 @@ cj_config (vlib_main_t * vm, unformat_input_t * input)
VLIB_CONFIG_FUNCTION (cj_config, "cj");
-void cj_enable_disable (int is_enable)
+void
+cj_enable_disable (int is_enable)
{
- cj_main_t * cjm = &cj_main;
-
+ cj_main_t *cjm = &cj_main;
+
if (cjm->num_records)
cjm->enable = is_enable;
else
vlib_cli_output (cjm->vlib_main, "CJ not configured...");
}
-static inline void cj_dump_one_record (cj_record_t * r)
+static inline void
+cj_dump_one_record (cj_record_t * r)
{
fprintf (stderr, "[%d]: %10.6f T%02d %llx %llx\n",
- r->cpu, r->time, r->type, (long long unsigned int) r->data[0],
- (long long unsigned int) r->data[1]);
+ r->cpu, r->time, r->type, (long long unsigned int) r->data[0],
+ (long long unsigned int) r->data[1]);
}
-static void cj_dump_internal (u8 filter0_enable, u64 filter0,
- u8 filter1_enable, u64 filter1)
+static void
+cj_dump_internal (u8 filter0_enable, u64 filter0,
+ u8 filter1_enable, u64 filter1)
{
- cj_main_t * cjm = &cj_main;
- cj_record_t * r;
+ cj_main_t *cjm = &cj_main;
+ cj_record_t *r;
u32 i, index;
-
+
if (cjm->num_records == 0)
{
fprintf (stderr, "CJ not configured...\n");
return;
}
- if (cjm->tail == (u64)~0)
+ if (cjm->tail == (u64) ~ 0)
{
fprintf (stderr, "No data collected...\n");
return;
}
/* Has the trace wrapped? */
- index = (cjm->tail+1) & (cjm->num_records - 1);
+ index = (cjm->tail + 1) & (cjm->num_records - 1);
r = &(cjm->records[index]);
- if (r->cpu != (u32)~0)
+ if (r->cpu != (u32) ~ 0)
{
- /* Yes, dump from tail + 1 to the end */
+ /* Yes, dump from tail + 1 to the end */
for (i = index; i < cjm->num_records; i++)
- {
- if (filter0_enable && (r->data[0] != filter0))
- goto skip;
- if (filter1_enable && (r->data[1] != filter1))
- goto skip;
- cj_dump_one_record (r);
- skip:
- r++;
- }
+ {
+ if (filter0_enable && (r->data[0] != filter0))
+ goto skip;
+ if (filter1_enable && (r->data[1] != filter1))
+ goto skip;
+ cj_dump_one_record (r);
+ skip:
+ r++;
+ }
}
/* dump from the beginning through the final tail */
r = cjm->records;
for (i = 0; i <= cjm->tail; i++)
{
if (filter0_enable && (r->data[0] != filter0))
- goto skip2;
+ goto skip2;
if (filter1_enable && (r->data[1] != filter1))
- goto skip2;
+ goto skip2;
cj_dump_one_record (r);
skip2:
r++;
}
}
-void cj_dump (void)
+void
+cj_dump (void)
{
cj_dump_internal (0, 0, 0, 0);
}
-void cj_dump_filter_data0 (u64 filter0)
+void
+cj_dump_filter_data0 (u64 filter0)
{
- cj_dump_internal (1/* enable f0 */, filter0, 0, 0);
+ cj_dump_internal (1 /* enable f0 */ , filter0, 0, 0);
}
-void cj_dump_filter_data1 (u64 filter1)
+void
+cj_dump_filter_data1 (u64 filter1)
{
- cj_dump_internal (0, 0, 1 /* enable f1 */, filter1);
+ cj_dump_internal (0, 0, 1 /* enable f1 */ , filter1);
}
-void cj_dump_filter_data12 (u64 filter0, u64 filter1)
+void
+cj_dump_filter_data12 (u64 filter0, u64 filter1)
{
cj_dump_internal (1, filter0, 1, filter1);
}
static clib_error_t *
cj_command_fn (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
int is_enable = -1;
int is_dump = -1;
- while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) {
- if (unformat (input, "enable") || unformat (input, "on"))
- is_enable = 1;
- else if (unformat (input, "disable") || unformat (input, "off"))
- is_enable = 0;
- else if (unformat (input, "dump"))
- is_dump = 1;
- else
- return clib_error_return (0, "unknown input `%U'",
- format_unformat_error, input);
+ while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (input, "enable") || unformat (input, "on"))
+ is_enable = 1;
+ else if (unformat (input, "disable") || unformat (input, "off"))
+ is_enable = 0;
+ else if (unformat (input, "dump"))
+ is_dump = 1;
+ else
+ return clib_error_return (0, "unknown input `%U'",
+ format_unformat_error, input);
}
if (is_enable >= 0)
@@ -210,9 +220,19 @@ cj_command_fn (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cj_command,static) = {
.path = "cj",
.short_help = "cj",
.function = cj_command_fn,
};
+/* *INDENT-ON* */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/cj.h b/vlib/vlib/unix/cj.h
index 3c37f2bf22f..67626afee2b 100644
--- a/vlib/vlib/unix/cj.h
+++ b/vlib/vlib/unix/cj.h
@@ -1,4 +1,4 @@
-/*
+/*
*------------------------------------------------------------------
* cj.h
*
@@ -20,25 +20,27 @@
#ifndef __included_cj_h__
#define __included_cj_h__
-typedef struct {
+typedef struct
+{
f64 time;
u32 cpu;
u32 type;
u64 data[2];
} cj_record_t;
-typedef struct {
+typedef struct
+{
volatile u64 tail;
- cj_record_t * records;
+ cj_record_t *records;
u32 num_records;
volatile u32 enable;
-
- vlib_main_t * vlib_main;
+
+ vlib_main_t *vlib_main;
} cj_main_t;
-void cj_log (u32 type, void * data0, void * data1);
+void cj_log (u32 type, void *data0, void *data1);
-/*
+/*
* Supply in application main, so we can log from any library...
* Declare a weak reference in the library, off you go.
*/
@@ -60,9 +62,18 @@ cj_global_log (unsigned type, void * data0, void * data1) \
}
#define CJ_GLOBAL_LOG_PROTOTYPE
-void cj_global_log (unsigned type, void * data0, void * data1) \
- __attribute__ ((weak)); \
+void
+cj_global_log (unsigned type, void *data0, void *data1)
+__attribute__ ((weak));
-void cj_stop(void);
+void cj_stop (void);
#endif /* __included_cj_h__ */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/cli.c b/vlib/vlib/unix/cli.c
index 5136da516fc..58aa6dfc6bf 100644
--- a/vlib/vlib/unix/cli.c
+++ b/vlib/vlib/unix/cli.c
@@ -92,32 +92,36 @@
/** A CLI banner line. */
-typedef struct {
- u8 * line; /**< The line to print. */
- u32 length; /**< The length of the line without terminating NUL. */
+typedef struct
+{
+ u8 *line; /**< The line to print. */
+ u32 length; /**< The length of the line without terminating NUL. */
} unix_cli_banner_t;
#define _(a) { .line = (u8 *)(a), .length = sizeof(a) - 1 }
/** Plain welcome banner. */
static unix_cli_banner_t unix_cli_banner[] = {
-_(" _______ _ _ _____ ___ \n"),
-_(" __/ __/ _ \\ (_)__ | | / / _ \\/ _ \\\n"),
-_(" _/ _// // / / / _ \\ | |/ / ___/ ___/\n"),
-_(" /_/ /____(_)_/\\___/ |___/_/ /_/ \n"),
-_("\n")
+ _(" _______ _ _ _____ ___ \n"),
+ _(" __/ __/ _ \\ (_)__ | | / / _ \\/ _ \\\n"),
+ _(" _/ _// // / / / _ \\ | |/ / ___/ ___/\n"),
+ _(" /_/ /____(_)_/\\___/ |___/_/ /_/ \n"),
+ _("\n")
};
+
/** ANSI color welcome banner. */
static unix_cli_banner_t unix_cli_banner_color[] = {
-_(ANSI_BRED " _______ _ " ANSI_RESET " _ _____ ___ \n"),
-_(ANSI_BRED " __/ __/ _ \\ (_)__ " ANSI_RESET " | | / / _ \\/ _ \\\n"),
-_(ANSI_BRED " _/ _// // / / / _ \\" ANSI_RESET " | |/ / ___/ ___/\n"),
-_(ANSI_BRED " /_/ /____(_)_/\\___/" ANSI_RESET " |___/_/ /_/ \n"),
-_("\n")
+ _(ANSI_BRED " _______ _ " ANSI_RESET " _ _____ ___ \n"),
+ _(ANSI_BRED " __/ __/ _ \\ (_)__ " ANSI_RESET " | | / / _ \\/ _ \\\n"),
+ _(ANSI_BRED " _/ _// // / / / _ \\" ANSI_RESET " | |/ / ___/ ___/\n"),
+ _(ANSI_BRED " /_/ /____(_)_/\\___/" ANSI_RESET " |___/_/ /_/ \n"),
+ _("\n")
};
+
#undef _
/** Pager line index */
-typedef struct {
+typedef struct
+{
/** Index into pager_vector */
u32 line;
@@ -130,20 +134,21 @@ typedef struct {
/** Unix CLI session. */
-typedef struct {
+typedef struct
+{
/** The file index held by unix.c */
u32 unix_file_index;
/** Vector of output pending write to file descriptor. */
- u8 * output_vector;
+ u8 *output_vector;
/** Vector of input saved by Unix input node to be processed by
CLI process. */
- u8 * input_vector;
+ u8 *input_vector;
u8 has_history;
- u8 ** command_history;
- u8 * current_command;
+ u8 **command_history;
+ u8 *current_command;
i32 excursion;
/** Maximum number of history entries this session will store. */
@@ -152,7 +157,7 @@ typedef struct {
/** Current command line counter */
u32 command_number;
- u8 * search_key;
+ u8 *search_key;
int search_mode;
/** Position of the insert cursor on the current input line */
@@ -174,10 +179,10 @@ typedef struct {
u8 no_pager;
/** Pager buffer */
- u8 ** pager_vector;
+ u8 **pager_vector;
/** Index of line fragments in the pager buffer */
- unix_cli_pager_index_t * pager_index;
+ unix_cli_pager_index_t *pager_index;
/** Line number of top of page */
u32 pager_start;
@@ -196,9 +201,9 @@ typedef struct {
* @param f The CLI session whose pager needs to be reset.
*/
always_inline void
-unix_cli_pager_reset (unix_cli_file_t *f)
+unix_cli_pager_reset (unix_cli_file_t * f)
{
- u8 ** p;
+ u8 **p;
f->pager_start = 0;
@@ -206,9 +211,9 @@ unix_cli_pager_reset (unix_cli_file_t *f)
f->pager_index = 0;
vec_foreach (p, f->pager_vector)
- {
- vec_free (*p);
- }
+ {
+ vec_free (*p);
+ }
vec_free (f->pager_vector);
f->pager_vector = 0;
}
@@ -225,14 +230,15 @@ unix_cli_file_free (unix_cli_file_t * f)
}
/** CLI actions */
-typedef enum {
+typedef enum
+{
UNIX_CLI_PARSE_ACTION_NOACTION = 0, /**< No action */
- UNIX_CLI_PARSE_ACTION_CRLF, /**< Carriage return, newline or enter */
- UNIX_CLI_PARSE_ACTION_TAB, /**< Tab key */
- UNIX_CLI_PARSE_ACTION_ERASE, /**< Erase cursor left */
+ UNIX_CLI_PARSE_ACTION_CRLF, /**< Carriage return, newline or enter */
+ UNIX_CLI_PARSE_ACTION_TAB, /**< Tab key */
+ UNIX_CLI_PARSE_ACTION_ERASE, /**< Erase cursor left */
UNIX_CLI_PARSE_ACTION_ERASERIGHT, /**< Erase cursor right */
- UNIX_CLI_PARSE_ACTION_UP, /**< Up arrow */
- UNIX_CLI_PARSE_ACTION_DOWN, /**< Down arrow */
+ UNIX_CLI_PARSE_ACTION_UP, /**< Up arrow */
+ UNIX_CLI_PARSE_ACTION_DOWN, /**< Down arrow */
UNIX_CLI_PARSE_ACTION_LEFT,
UNIX_CLI_PARSE_ACTION_RIGHT,
UNIX_CLI_PARSE_ACTION_HOME,
@@ -267,9 +273,10 @@ typedef enum {
* @note This won't work as a hash since we need to be able to do
* partial matches on the string.
*/
-typedef struct {
- u8 *input; /**< Input string to match. */
- u32 len; /**< Length of input without final NUL. */
+typedef struct
+{
+ u8 *input; /**< Input string to match. */
+ u32 len; /**< Length of input without final NUL. */
unix_cli_parse_action_t action; /**< Action to take when matched. */
} unix_cli_parse_actions_t;
@@ -290,61 +297,61 @@ typedef struct {
* @showinitializer
*/
static unix_cli_parse_actions_t unix_cli_parse_strings[] = {
- /* Line handling */
- _( "\r\n", UNIX_CLI_PARSE_ACTION_CRLF ), /* Must be before '\r' */
- _( "\n", UNIX_CLI_PARSE_ACTION_CRLF ),
- _( "\r\0", UNIX_CLI_PARSE_ACTION_CRLF ), /* Telnet does this */
- _( "\r", UNIX_CLI_PARSE_ACTION_CRLF ),
-
- /* Unix shell control codes */
- _( CTL('B'), UNIX_CLI_PARSE_ACTION_LEFT ),
- _( CTL('F'), UNIX_CLI_PARSE_ACTION_RIGHT ),
- _( CTL('P'), UNIX_CLI_PARSE_ACTION_UP ),
- _( CTL('N'), UNIX_CLI_PARSE_ACTION_DOWN ),
- _( CTL('A'), UNIX_CLI_PARSE_ACTION_HOME ),
- _( CTL('E'), UNIX_CLI_PARSE_ACTION_END ),
- _( CTL('D'), UNIX_CLI_PARSE_ACTION_ERASERIGHT ),
- _( CTL('U'), UNIX_CLI_PARSE_ACTION_ERASELINELEFT ),
- _( CTL('K'), UNIX_CLI_PARSE_ACTION_ERASELINERIGHT ),
- _( CTL('Y'), UNIX_CLI_PARSE_ACTION_YANK ),
- _( CTL('L'), UNIX_CLI_PARSE_ACTION_CLEAR ),
- _( ESC "b", UNIX_CLI_PARSE_ACTION_WORDLEFT ), /* Alt-B */
- _( ESC "f", UNIX_CLI_PARSE_ACTION_WORDRIGHT ), /* Alt-F */
- _( "\b", UNIX_CLI_PARSE_ACTION_ERASE ), /* ^H */
- _( "\x7f", UNIX_CLI_PARSE_ACTION_ERASE ), /* Backspace */
- _( "\t", UNIX_CLI_PARSE_ACTION_TAB ), /* ^I */
-
- /* VT100 Normal mode - Broadest support */
- _( CSI "A", UNIX_CLI_PARSE_ACTION_UP ),
- _( CSI "B", UNIX_CLI_PARSE_ACTION_DOWN ),
- _( CSI "C", UNIX_CLI_PARSE_ACTION_RIGHT ),
- _( CSI "D", UNIX_CLI_PARSE_ACTION_LEFT ),
- _( CSI "H", UNIX_CLI_PARSE_ACTION_HOME ),
- _( CSI "F", UNIX_CLI_PARSE_ACTION_END ),
- _( CSI "3~", UNIX_CLI_PARSE_ACTION_ERASERIGHT ), /* Delete */
- _( CSI "1;5D", UNIX_CLI_PARSE_ACTION_WORDLEFT ), /* C-Left */
- _( CSI "1;5C", UNIX_CLI_PARSE_ACTION_WORDRIGHT ),/* C-Right */
+ /* Line handling */
+ _("\r\n", UNIX_CLI_PARSE_ACTION_CRLF), /* Must be before '\r' */
+ _("\n", UNIX_CLI_PARSE_ACTION_CRLF),
+ _("\r\0", UNIX_CLI_PARSE_ACTION_CRLF), /* Telnet does this */
+ _("\r", UNIX_CLI_PARSE_ACTION_CRLF),
+
+ /* Unix shell control codes */
+ _(CTL ('B'), UNIX_CLI_PARSE_ACTION_LEFT),
+ _(CTL ('F'), UNIX_CLI_PARSE_ACTION_RIGHT),
+ _(CTL ('P'), UNIX_CLI_PARSE_ACTION_UP),
+ _(CTL ('N'), UNIX_CLI_PARSE_ACTION_DOWN),
+ _(CTL ('A'), UNIX_CLI_PARSE_ACTION_HOME),
+ _(CTL ('E'), UNIX_CLI_PARSE_ACTION_END),
+ _(CTL ('D'), UNIX_CLI_PARSE_ACTION_ERASERIGHT),
+ _(CTL ('U'), UNIX_CLI_PARSE_ACTION_ERASELINELEFT),
+ _(CTL ('K'), UNIX_CLI_PARSE_ACTION_ERASELINERIGHT),
+ _(CTL ('Y'), UNIX_CLI_PARSE_ACTION_YANK),
+ _(CTL ('L'), UNIX_CLI_PARSE_ACTION_CLEAR),
+ _(ESC "b", UNIX_CLI_PARSE_ACTION_WORDLEFT), /* Alt-B */
+ _(ESC "f", UNIX_CLI_PARSE_ACTION_WORDRIGHT), /* Alt-F */
+ _("\b", UNIX_CLI_PARSE_ACTION_ERASE), /* ^H */
+ _("\x7f", UNIX_CLI_PARSE_ACTION_ERASE), /* Backspace */
+ _("\t", UNIX_CLI_PARSE_ACTION_TAB), /* ^I */
+
+ /* VT100 Normal mode - Broadest support */
+ _(CSI "A", UNIX_CLI_PARSE_ACTION_UP),
+ _(CSI "B", UNIX_CLI_PARSE_ACTION_DOWN),
+ _(CSI "C", UNIX_CLI_PARSE_ACTION_RIGHT),
+ _(CSI "D", UNIX_CLI_PARSE_ACTION_LEFT),
+ _(CSI "H", UNIX_CLI_PARSE_ACTION_HOME),
+ _(CSI "F", UNIX_CLI_PARSE_ACTION_END),
+ _(CSI "3~", UNIX_CLI_PARSE_ACTION_ERASERIGHT), /* Delete */
+ _(CSI "1;5D", UNIX_CLI_PARSE_ACTION_WORDLEFT), /* C-Left */
+ _(CSI "1;5C", UNIX_CLI_PARSE_ACTION_WORDRIGHT), /* C-Right */
/* VT100 Application mode - Some Gnome Terminal functions use these */
- _( ESC "OA", UNIX_CLI_PARSE_ACTION_UP ),
- _( ESC "OB", UNIX_CLI_PARSE_ACTION_DOWN ),
- _( ESC "OC", UNIX_CLI_PARSE_ACTION_RIGHT ),
- _( ESC "OD", UNIX_CLI_PARSE_ACTION_LEFT ),
- _( ESC "OH", UNIX_CLI_PARSE_ACTION_HOME ),
- _( ESC "OF", UNIX_CLI_PARSE_ACTION_END ),
-
- /* ANSI X3.41-1974 - sent by Microsoft Telnet and PuTTY */
- _( CSI "1~", UNIX_CLI_PARSE_ACTION_HOME ),
- _( CSI "4~", UNIX_CLI_PARSE_ACTION_END ),
-
- /* Emacs-ish history search */
- _( CTL('S'), UNIX_CLI_PARSE_ACTION_FWDSEARCH ),
- _( CTL('R'), UNIX_CLI_PARSE_ACTION_REVSEARCH ),
-
- /* Other protocol things */
- _( "\xff", UNIX_CLI_PARSE_ACTION_TELNETIAC ), /* IAC */
- _( "\0", UNIX_CLI_PARSE_ACTION_NOACTION ), /* NUL */
- _( NULL, UNIX_CLI_PARSE_ACTION_NOMATCH )
+ _(ESC "OA", UNIX_CLI_PARSE_ACTION_UP),
+ _(ESC "OB", UNIX_CLI_PARSE_ACTION_DOWN),
+ _(ESC "OC", UNIX_CLI_PARSE_ACTION_RIGHT),
+ _(ESC "OD", UNIX_CLI_PARSE_ACTION_LEFT),
+ _(ESC "OH", UNIX_CLI_PARSE_ACTION_HOME),
+ _(ESC "OF", UNIX_CLI_PARSE_ACTION_END),
+
+ /* ANSI X3.41-1974 - sent by Microsoft Telnet and PuTTY */
+ _(CSI "1~", UNIX_CLI_PARSE_ACTION_HOME),
+ _(CSI "4~", UNIX_CLI_PARSE_ACTION_END),
+
+ /* Emacs-ish history search */
+ _(CTL ('S'), UNIX_CLI_PARSE_ACTION_FWDSEARCH),
+ _(CTL ('R'), UNIX_CLI_PARSE_ACTION_REVSEARCH),
+
+ /* Other protocol things */
+ _("\xff", UNIX_CLI_PARSE_ACTION_TELNETIAC), /* IAC */
+ _("\0", UNIX_CLI_PARSE_ACTION_NOACTION), /* NUL */
+ _(NULL, UNIX_CLI_PARSE_ACTION_NOMATCH)
};
/**
@@ -352,60 +359,63 @@ static unix_cli_parse_actions_t unix_cli_parse_strings[] = {
* @showinitializer
*/
static unix_cli_parse_actions_t unix_cli_parse_pager[] = {
- /* Line handling */
- _( "\r\n", UNIX_CLI_PARSE_ACTION_PAGER_CRLF ), /* Must be before '\r' */
- _( "\n", UNIX_CLI_PARSE_ACTION_PAGER_CRLF ),
- _( "\r\0", UNIX_CLI_PARSE_ACTION_PAGER_CRLF ), /* Telnet does this */
- _( "\r", UNIX_CLI_PARSE_ACTION_PAGER_CRLF ),
-
- /* Pager commands */
- _( " ", UNIX_CLI_PARSE_ACTION_PAGER_NEXT ),
- _( "q", UNIX_CLI_PARSE_ACTION_PAGER_QUIT ),
- _( CTL('L'), UNIX_CLI_PARSE_ACTION_PAGER_REDRAW ),
- _( CTL('R'), UNIX_CLI_PARSE_ACTION_PAGER_REDRAW ),
- _( "/", UNIX_CLI_PARSE_ACTION_PAGER_SEARCH ),
-
- /* VT100 */
- _( CSI "A", UNIX_CLI_PARSE_ACTION_PAGER_UP ),
- _( CSI "B", UNIX_CLI_PARSE_ACTION_PAGER_DN ),
- _( CSI "H", UNIX_CLI_PARSE_ACTION_PAGER_TOP ),
- _( CSI "F", UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM ),
-
- /* VT100 Application mode */
- _( ESC "OA", UNIX_CLI_PARSE_ACTION_PAGER_UP ),
- _( ESC "OB", UNIX_CLI_PARSE_ACTION_PAGER_DN ),
- _( ESC "OH", UNIX_CLI_PARSE_ACTION_PAGER_TOP ),
- _( ESC "OF", UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM ),
-
- /* ANSI X3.41-1974 */
- _( CSI "1~", UNIX_CLI_PARSE_ACTION_PAGER_TOP ),
- _( CSI "4~", UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM ),
- _( CSI "5~", UNIX_CLI_PARSE_ACTION_PAGER_PGUP ),
- _( CSI "6~", UNIX_CLI_PARSE_ACTION_PAGER_PGDN ),
-
- /* Other protocol things */
- _( "\xff", UNIX_CLI_PARSE_ACTION_TELNETIAC ), /* IAC */
- _( "\0", UNIX_CLI_PARSE_ACTION_NOACTION ), /* NUL */
- _( NULL, UNIX_CLI_PARSE_ACTION_NOMATCH )
+ /* Line handling */
+ _("\r\n", UNIX_CLI_PARSE_ACTION_PAGER_CRLF), /* Must be before '\r' */
+ _("\n", UNIX_CLI_PARSE_ACTION_PAGER_CRLF),
+ _("\r\0", UNIX_CLI_PARSE_ACTION_PAGER_CRLF), /* Telnet does this */
+ _("\r", UNIX_CLI_PARSE_ACTION_PAGER_CRLF),
+
+ /* Pager commands */
+ _(" ", UNIX_CLI_PARSE_ACTION_PAGER_NEXT),
+ _("q", UNIX_CLI_PARSE_ACTION_PAGER_QUIT),
+ _(CTL ('L'), UNIX_CLI_PARSE_ACTION_PAGER_REDRAW),
+ _(CTL ('R'), UNIX_CLI_PARSE_ACTION_PAGER_REDRAW),
+ _("/", UNIX_CLI_PARSE_ACTION_PAGER_SEARCH),
+
+ /* VT100 */
+ _(CSI "A", UNIX_CLI_PARSE_ACTION_PAGER_UP),
+ _(CSI "B", UNIX_CLI_PARSE_ACTION_PAGER_DN),
+ _(CSI "H", UNIX_CLI_PARSE_ACTION_PAGER_TOP),
+ _(CSI "F", UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM),
+
+ /* VT100 Application mode */
+ _(ESC "OA", UNIX_CLI_PARSE_ACTION_PAGER_UP),
+ _(ESC "OB", UNIX_CLI_PARSE_ACTION_PAGER_DN),
+ _(ESC "OH", UNIX_CLI_PARSE_ACTION_PAGER_TOP),
+ _(ESC "OF", UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM),
+
+ /* ANSI X3.41-1974 */
+ _(CSI "1~", UNIX_CLI_PARSE_ACTION_PAGER_TOP),
+ _(CSI "4~", UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM),
+ _(CSI "5~", UNIX_CLI_PARSE_ACTION_PAGER_PGUP),
+ _(CSI "6~", UNIX_CLI_PARSE_ACTION_PAGER_PGDN),
+
+ /* Other protocol things */
+ _("\xff", UNIX_CLI_PARSE_ACTION_TELNETIAC), /* IAC */
+ _("\0", UNIX_CLI_PARSE_ACTION_NOACTION), /* NUL */
+ _(NULL, UNIX_CLI_PARSE_ACTION_NOMATCH)
};
+
#undef _
/** CLI session events. */
-typedef enum {
+typedef enum
+{
UNIX_CLI_PROCESS_EVENT_READ_READY, /**< A file descriptor has data to be read. */
- UNIX_CLI_PROCESS_EVENT_QUIT, /**< A CLI session wants to close. */
+ UNIX_CLI_PROCESS_EVENT_QUIT, /**< A CLI session wants to close. */
} unix_cli_process_event_type_t;
/** CLI global state. */
-typedef struct {
+typedef struct
+{
/** Prompt string for CLI. */
- u8 * cli_prompt;
+ u8 *cli_prompt;
/** Vec pool of CLI sessions. */
- unix_cli_file_t * cli_file_pool;
+ unix_cli_file_t *cli_file_pool;
/** Vec pool of unused session indices. */
- u32 * unused_cli_process_node_indices;
+ u32 *unused_cli_process_node_indices;
/** The session index of the stdin cli */
u32 stdin_cli_file_index;
@@ -441,72 +451,69 @@ static unix_cli_main_t unix_cli_main;
* match at all.
*/
static unix_cli_parse_action_t
-unix_cli_match_action(unix_cli_parse_actions_t *a,
- u8 *input, u32 ilen, i32 *matched)
+unix_cli_match_action (unix_cli_parse_actions_t * a,
+ u8 * input, u32 ilen, i32 * matched)
{
u8 partial = 0;
while (a->input)
{
- if (ilen >= a->len)
- {
- /* see if the start of the input buffer exactly matches the current
- * action string. */
- if (memcmp(input, a->input, a->len) == 0)
- {
- *matched = a->len;
- return a->action;
- }
- }
- else
- {
- /* if the first ilen characters match, flag this as a partial -
- * meaning keep collecting bytes in case of a future match */
- if (memcmp(input, a->input, ilen) == 0)
- partial = 1;
- }
-
- /* check next action */
- a ++;
+ if (ilen >= a->len)
+ {
+ /* see if the start of the input buffer exactly matches the current
+ * action string. */
+ if (memcmp (input, a->input, a->len) == 0)
+ {
+ *matched = a->len;
+ return a->action;
+ }
+ }
+ else
+ {
+ /* if the first ilen characters match, flag this as a partial -
+ * meaning keep collecting bytes in case of a future match */
+ if (memcmp (input, a->input, ilen) == 0)
+ partial = 1;
+ }
+
+ /* check next action */
+ a++;
}
return partial ?
- UNIX_CLI_PARSE_ACTION_PARTIALMATCH :
- UNIX_CLI_PARSE_ACTION_NOMATCH;
+ UNIX_CLI_PARSE_ACTION_PARTIALMATCH : UNIX_CLI_PARSE_ACTION_NOMATCH;
}
static void
unix_cli_add_pending_output (unix_file_t * uf,
unix_cli_file_t * cf,
- u8 * buffer,
- uword buffer_bytes)
+ u8 * buffer, uword buffer_bytes)
{
- unix_main_t * um = &unix_main;
+ unix_main_t *um = &unix_main;
vec_add (cf->output_vector, buffer, buffer_bytes);
if (vec_len (cf->output_vector) > 0)
{
int skip_update = 0 != (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
uf->flags |= UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
- if (! skip_update)
+ if (!skip_update)
um->file_update (uf, UNIX_FILE_UPDATE_MODIFY);
}
}
static void
unix_cli_del_pending_output (unix_file_t * uf,
- unix_cli_file_t * cf,
- uword n_bytes)
+ unix_cli_file_t * cf, uword n_bytes)
{
- unix_main_t * um = &unix_main;
+ unix_main_t *um = &unix_main;
vec_delete (cf->output_vector, n_bytes, 0);
if (vec_len (cf->output_vector) <= 0)
{
int skip_update = 0 == (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
uf->flags &= ~UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
- if (! skip_update)
+ if (!skip_update)
um->file_update (uf, UNIX_FILE_UPDATE_MODIFY);
}
}
@@ -525,15 +532,16 @@ unix_cli_del_pending_output (unix_file_t * uf,
* @return The index of the first occurence of \c chr. If \c chr is not
* found then \c len instead.
*/
-always_inline word unix_vlib_findchr(u8 chr, u8 *str, word len)
+always_inline word
+unix_vlib_findchr (u8 chr, u8 * str, word len)
{
- word i = 0;
- for (i = 0; i < len; i++, str++)
- {
- if (*str == chr)
- return i;
- }
- return len;
+ word i = 0;
+ for (i = 0; i < len; i++, str++)
+ {
+ if (*str == chr)
+ return i;
+ }
+ return len;
}
/** \brief Send a buffer to the CLI stream if possible, enqueue it otherwise.
@@ -551,15 +559,14 @@ always_inline word unix_vlib_findchr(u8 chr, u8 *str, word len)
* @param buffer Pointer to the buffer that needs to be written.
* @param buffer_bytes The number of bytes from \c buffer to write.
*/
-static void unix_vlib_cli_output_raw(unix_cli_file_t * cf,
- unix_file_t * uf,
- u8 * buffer,
- uword buffer_bytes)
+static void
+unix_vlib_cli_output_raw (unix_cli_file_t * cf,
+ unix_file_t * uf, u8 * buffer, uword buffer_bytes)
{
int n = 0;
if (vec_len (cf->output_vector) == 0)
- n = write (uf->file_descriptor, buffer, buffer_bytes);
+ n = write (uf->file_descriptor, buffer, buffer_bytes);
if (n < 0 && errno != EAGAIN)
{
@@ -569,7 +576,8 @@ static void unix_vlib_cli_output_raw(unix_cli_file_t * cf,
{
/* We got EAGAIN or we already have stuff in the buffer;
* queue up whatever didn't get sent for later. */
- if (n < 0) n = 0;
+ if (n < 0)
+ n = 0;
unix_cli_add_pending_output (uf, cf, buffer + n, buffer_bytes - n);
}
}
@@ -581,130 +589,134 @@ static void unix_vlib_cli_output_raw(unix_cli_file_t * cf,
* @param buffer Pointer to the buffer that needs to be written.
* @param buffer_bytes The number of bytes from \c buffer to write.
*/
-static void unix_vlib_cli_output_cooked(unix_cli_file_t * cf,
- unix_file_t * uf,
- u8 * buffer,
- uword buffer_bytes)
+static void
+unix_vlib_cli_output_cooked (unix_cli_file_t * cf,
+ unix_file_t * uf,
+ u8 * buffer, uword buffer_bytes)
{
word end = 0, start = 0;
while (end < buffer_bytes)
{
if (cf->crlf_mode)
- {
- /* iterate the line on \n's so we can insert a \r before it */
- end = unix_vlib_findchr('\n',
- buffer + start,
- buffer_bytes - start) + start;
- }
+ {
+ /* iterate the line on \n's so we can insert a \r before it */
+ end = unix_vlib_findchr ('\n',
+ buffer + start,
+ buffer_bytes - start) + start;
+ }
else
- {
- /* otherwise just send the whole buffer */
- end = buffer_bytes;
- }
+ {
+ /* otherwise just send the whole buffer */
+ end = buffer_bytes;
+ }
- unix_vlib_cli_output_raw(cf, uf, buffer + start, end - start);
+ unix_vlib_cli_output_raw (cf, uf, buffer + start, end - start);
if (cf->crlf_mode)
- {
- if (end < buffer_bytes)
- {
- unix_vlib_cli_output_raw(cf, uf, (u8 *)"\r\n", 2);
- end ++; /* skip the \n that we already sent */
- }
- start = end;
- }
+ {
+ if (end < buffer_bytes)
+ {
+ unix_vlib_cli_output_raw (cf, uf, (u8 *) "\r\n", 2);
+ end++; /* skip the \n that we already sent */
+ }
+ start = end;
+ }
}
}
/** \brief Output the CLI prompt */
-static void unix_cli_cli_prompt(unix_cli_file_t * cf, unix_file_t * uf)
+static void
+unix_cli_cli_prompt (unix_cli_file_t * cf, unix_file_t * uf)
{
- unix_cli_main_t * cm = &unix_cli_main;
+ unix_cli_main_t *cm = &unix_cli_main;
unix_vlib_cli_output_raw (cf, uf, cm->cli_prompt, vec_len (cm->cli_prompt));
}
/** \brief Output a pager prompt and show number of buffered lines */
-static void unix_cli_pager_prompt(unix_cli_file_t * cf, unix_file_t * uf)
+static void
+unix_cli_pager_prompt (unix_cli_file_t * cf, unix_file_t * uf)
{
- u8 * prompt;
+ u8 *prompt;
u32 h;
h = cf->pager_start + (cf->height - 1);
if (h > vec_len (cf->pager_index))
h = vec_len (cf->pager_index);
- prompt = format(0, "\r%s-- more -- (%d-%d/%d)%s",
- cf->ansi_capable ? ANSI_BOLD : "",
- cf->pager_start + 1,
- h,
- vec_len (cf->pager_index),
- cf->ansi_capable ? ANSI_RESET: "");
+ prompt = format (0, "\r%s-- more -- (%d-%d/%d)%s",
+ cf->ansi_capable ? ANSI_BOLD : "",
+ cf->pager_start + 1,
+ h,
+ vec_len (cf->pager_index),
+ cf->ansi_capable ? ANSI_RESET : "");
- unix_vlib_cli_output_cooked(cf, uf, prompt, vec_len(prompt));
+ unix_vlib_cli_output_cooked (cf, uf, prompt, vec_len (prompt));
- vec_free(prompt);
+ vec_free (prompt);
}
/** \brief Output a pager "skipping" message */
-static void unix_cli_pager_message(unix_cli_file_t * cf, unix_file_t * uf,
- char *message, char *postfix)
+static void
+unix_cli_pager_message (unix_cli_file_t * cf, unix_file_t * uf,
+ char *message, char *postfix)
{
- u8 * prompt;
+ u8 *prompt;
- prompt = format(0, "\r%s-- %s --%s%s",
- cf->ansi_capable ? ANSI_BOLD : "",
- message,
- cf->ansi_capable ? ANSI_RESET: "",
- postfix);
+ prompt = format (0, "\r%s-- %s --%s%s",
+ cf->ansi_capable ? ANSI_BOLD : "",
+ message, cf->ansi_capable ? ANSI_RESET : "", postfix);
- unix_vlib_cli_output_cooked(cf, uf, prompt, vec_len(prompt));
+ unix_vlib_cli_output_cooked (cf, uf, prompt, vec_len (prompt));
- vec_free(prompt);
+ vec_free (prompt);
}
/** \brief Erase the printed pager prompt */
-static void unix_cli_pager_prompt_erase(unix_cli_file_t * cf, unix_file_t * uf)
+static void
+unix_cli_pager_prompt_erase (unix_cli_file_t * cf, unix_file_t * uf)
{
if (cf->ansi_capable)
{
- unix_vlib_cli_output_cooked(cf, uf, (u8 *)"\r", 1);
- unix_vlib_cli_output_cooked(cf, uf,
- (u8 *)ANSI_CLEARLINE, sizeof(ANSI_CLEARLINE) - 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\r", 1);
+ unix_vlib_cli_output_cooked (cf, uf,
+ (u8 *) ANSI_CLEARLINE,
+ sizeof (ANSI_CLEARLINE) - 1);
}
else
{
int i;
- unix_vlib_cli_output_cooked(cf, uf, (u8 *)"\r", 1);
- for (i = 0; i < cf->width - 1; i ++)
- unix_vlib_cli_output_cooked(cf, uf, (u8 *)" ", 1);
- unix_vlib_cli_output_cooked(cf, uf, (u8 *)"\r", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\r", 1);
+ for (i = 0; i < cf->width - 1; i++)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\r", 1);
}
}
/** \brief Uses an ANSI escape sequence to move the cursor */
-static void unix_cli_ansi_cursor(unix_cli_file_t * cf, unix_file_t * uf,
- u16 x, u16 y)
+static void
+unix_cli_ansi_cursor (unix_cli_file_t * cf, unix_file_t * uf, u16 x, u16 y)
{
- u8 * str;
+ u8 *str;
- str = format(0, "%s%d;%dH", CSI, y, x);
+ str = format (0, "%s%d;%dH", CSI, y, x);
- unix_vlib_cli_output_cooked(cf, uf, str, vec_len(str));
+ unix_vlib_cli_output_cooked (cf, uf, str, vec_len (str));
- vec_free(str);
+ vec_free (str);
}
/** Redraw the currently displayed page of text.
* @param cf CLI session to redraw the pager buffer of.
* @param uf Unix file of the CLI session.
*/
-static void unix_cli_pager_redraw(unix_cli_file_t * cf, unix_file_t * uf)
+static void
+unix_cli_pager_redraw (unix_cli_file_t * cf, unix_file_t * uf)
{
- unix_cli_pager_index_t * pi = NULL;
- u8 * line = NULL;
+ unix_cli_pager_index_t *pi = NULL;
+ u8 *line = NULL;
word i;
/* No active pager? Do nothing. */
@@ -715,7 +727,8 @@ static void unix_cli_pager_redraw(unix_cli_file_t * cf, unix_file_t * uf)
{
/* If we have ANSI, send the clear screen sequence */
unix_vlib_cli_output_cooked (cf, uf,
- (u8 *)ANSI_CLEAR, sizeof(ANSI_CLEAR) - 1);
+ (u8 *) ANSI_CLEAR,
+ sizeof (ANSI_CLEAR) - 1);
}
else
{
@@ -725,8 +738,7 @@ static void unix_cli_pager_redraw(unix_cli_file_t * cf, unix_file_t * uf)
/* (Re-)send the current page of content */
for (i = 0; i < cf->height - 1 &&
- i + cf->pager_start < vec_len (cf->pager_index);
- i ++)
+ i + cf->pager_start < vec_len (cf->pager_index); i++)
{
pi = &cf->pager_index[cf->pager_start + i];
line = cf->pager_vector[pi->line] + pi->offset;
@@ -735,7 +747,7 @@ static void unix_cli_pager_redraw(unix_cli_file_t * cf, unix_file_t * uf)
}
/* if the last line didn't end in newline, add a newline */
if (pi && line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
unix_cli_pager_prompt (cf, uf);
}
@@ -761,15 +773,14 @@ static void unix_cli_pager_redraw(unix_cli_file_t * cf, unix_file_t * uf)
* value provides the index in the pager buffer of an
* existing string to be indexed.
*/
-static void unix_cli_pager_add_line (unix_cli_file_t * cf,
- u8 * line,
- word len_or_index)
+static void
+unix_cli_pager_add_line (unix_cli_file_t * cf, u8 * line, word len_or_index)
{
- u8 * p;
+ u8 *p;
word i, j, k;
word line_index, len;
u32 width = cf->width;
- unix_cli_pager_index_t * pi;
+ unix_cli_pager_index_t *pi;
if (line == NULL)
{
@@ -795,10 +806,10 @@ static void unix_cli_pager_add_line (unix_cli_file_t * cf,
{
/* Find the next line, or run to terminal width, or run to EOL */
int l = len - i;
- j = unix_vlib_findchr((u8)'\n', p, l < width ? l : width);
+ j = unix_vlib_findchr ((u8) '\n', p, l < width ? l : width);
- if (j < l && p[j] == '\n') /* incl \n */
- j ++;
+ if (j < l && p[j] == '\n') /* incl \n */
+ j++;
/* Add the line to the index */
k = vec_len (cf->pager_index);
@@ -823,10 +834,11 @@ static void unix_cli_pager_add_line (unix_cli_file_t * cf,
*
* @param cf The CLI session whose pager buffer should be reindexed.
*/
-static void unix_cli_pager_reindex (unix_cli_file_t * cf)
+static void
+unix_cli_pager_reindex (unix_cli_file_t * cf)
{
word i, old_line, old_offset;
- unix_cli_pager_index_t * pi;
+ unix_cli_pager_index_t *pi;
/* If there is nothing in the pager buffer then make sure the index
* is empty and move on.
@@ -846,25 +858,24 @@ static void unix_cli_pager_reindex (unix_cli_file_t * cf)
/* Re-add the buffered lines to the index */
vec_reset_length (cf->pager_index);
- vec_foreach_index(i, cf->pager_vector)
- {
- unix_cli_pager_add_line(cf, NULL, i);
- }
+ vec_foreach_index (i, cf->pager_vector)
+ {
+ unix_cli_pager_add_line (cf, NULL, i);
+ }
/* Attempt to re-locate the previously stored page start line */
- vec_foreach_index(i, cf->pager_index)
- {
- pi = &cf->pager_index[i];
-
- if (pi->line == old_line &&
- (pi->offset <= old_offset ||
- pi->offset + pi->length > old_offset))
- {
- /* Found it! */
- cf->pager_start = i;
- break;
- }
- }
+ vec_foreach_index (i, cf->pager_index)
+ {
+ pi = &cf->pager_index[i];
+
+ if (pi->line == old_line &&
+ (pi->offset <= old_offset || pi->offset + pi->length > old_offset))
+ {
+ /* Found it! */
+ cf->pager_start = i;
+ break;
+ }
+ }
/* In case the start line was not found (rare), ensure the pager start
* index is within bounds
@@ -872,9 +883,9 @@ static void unix_cli_pager_reindex (unix_cli_file_t * cf)
if (cf->pager_start >= vec_len (cf->pager_index))
{
if (!cf->height || vec_len (cf->pager_index) < (cf->height - 1))
- cf->pager_start = 0;
+ cf->pager_start = 0;
else
- cf->pager_start = vec_len (cf->pager_index) - (cf->height - 1);
+ cf->pager_start = vec_len (cf->pager_index) - (cf->height - 1);
}
}
@@ -896,14 +907,13 @@ static void unix_cli_pager_reindex (unix_cli_file_t * cf)
* @param buffer String of printabe bytes to be output.
* @param buffer_bytes The number of bytes in @c buffer to be output.
*/
-static void unix_vlib_cli_output (uword cli_file_index,
- u8 * buffer,
- uword buffer_bytes)
+static void
+unix_vlib_cli_output (uword cli_file_index, u8 * buffer, uword buffer_bytes)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
- unix_file_t * uf;
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
+ unix_file_t *uf;
cf = pool_elt_at_index (cm->cli_file_pool, cli_file_index);
uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
@@ -915,8 +925,8 @@ static void unix_vlib_cli_output (uword cli_file_index,
else
{
word row = vec_len (cf->pager_index);
- u8 * line;
- unix_cli_pager_index_t * pi;
+ u8 *line;
+ unix_cli_pager_index_t *pi;
/* Index and add the output lines to the pager buffer. */
unix_cli_pager_add_line (cf, buffer, buffer_bytes);
@@ -925,49 +935,49 @@ static void unix_vlib_cli_output (uword cli_file_index,
* If we reach the bottom of the page, display a prompt.
*/
while (row < vec_len (cf->pager_index))
- {
- if (row < cf->height - 1)
- {
- /* output this line */
- pi = &cf->pager_index[row];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
-
- /* if the last line didn't end in newline, and we're at the
- * bottom of the page, add a newline */
- if (line[pi->length - 1] != '\n' && row == cf->height - 2)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- }
- else
- {
- /* Display the pager prompt every 10 lines */
- if (!(row % 10))
- unix_cli_pager_prompt(cf, uf);
- }
- row ++;
- }
+ {
+ if (row < cf->height - 1)
+ {
+ /* output this line */
+ pi = &cf->pager_index[row];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+
+ /* if the last line didn't end in newline, and we're at the
+ * bottom of the page, add a newline */
+ if (line[pi->length - 1] != '\n' && row == cf->height - 2)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ }
+ else
+ {
+ /* Display the pager prompt every 10 lines */
+ if (!(row % 10))
+ unix_cli_pager_prompt (cf, uf);
+ }
+ row++;
+ }
/* Check if we went over the pager buffer limit */
if (vec_len (cf->pager_index) > um->cli_pager_buffer_limit)
- {
- /* Stop using the pager for the remainder of this CLI command */
- cf->no_pager = 2;
-
- /* If we likely printed the prompt, erase it */
- if (vec_len (cf->pager_index) > cf->height - 1)
- unix_cli_pager_prompt_erase (cf, uf);
-
- /* Dump out the contents of the buffer */
- for (row = cf->pager_start + (cf->height - 1);
- row < vec_len (cf->pager_index); row ++)
- {
- pi = &cf->pager_index[row];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- }
-
- unix_cli_pager_reset (cf);
- }
+ {
+ /* Stop using the pager for the remainder of this CLI command */
+ cf->no_pager = 2;
+
+ /* If we likely printed the prompt, erase it */
+ if (vec_len (cf->pager_index) > cf->height - 1)
+ unix_cli_pager_prompt_erase (cf, uf);
+
+ /* Dump out the contents of the buffer */
+ for (row = cf->pager_start + (cf->height - 1);
+ row < vec_len (cf->pager_index); row++)
+ {
+ pi = &cf->pager_index[row];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ }
+
+ unix_cli_pager_reset (cf);
+ }
}
}
@@ -984,7 +994,8 @@ static void unix_vlib_cli_output (uword cli_file_index,
* @return @c 1 if the terminal type is recognized as supporting ANSI
* terminal sequences; @c 0 otherwise.
*/
-static u8 unix_cli_terminal_type(u8 * term, uword len)
+static u8
+unix_cli_terminal_type (u8 * term, uword len)
{
/* This may later be better done as a hash of some sort. */
#define _(a) do { \
@@ -993,19 +1004,20 @@ static u8 unix_cli_terminal_type(u8 * term, uword len)
_("xterm");
_("xterm-color");
- _("xterm-256color"); /* iTerm on Mac */
+ _("xterm-256color"); /* iTerm on Mac */
_("screen");
- _("ansi"); /* Microsoft Telnet */
+ _("ansi"); /* Microsoft Telnet */
#undef _
return 0;
}
/** \brief Emit initial welcome banner and prompt on a connection. */
-static void unix_cli_file_welcome(unix_cli_main_t * cm, unix_cli_file_t * cf)
+static void
+unix_cli_file_welcome (unix_cli_main_t * cm, unix_cli_file_t * cf)
{
- unix_main_t * um = &unix_main;
- unix_file_t * uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ unix_main_t *um = &unix_main;
+ unix_file_t *uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
unix_cli_banner_t *banner;
int i, len;
@@ -1014,28 +1026,27 @@ static void unix_cli_file_welcome(unix_cli_main_t * cm, unix_cli_file_t * cf)
* queued until everything is ready. (oterwise initial prompt can appear
* mid way through VPP initialization)
*/
- unix_cli_add_pending_output (uf, cf, (u8 *)"\r", 1);
+ unix_cli_add_pending_output (uf, cf, (u8 *) "\r", 1);
if (!um->cli_no_banner)
{
if (cf->ansi_capable)
- {
- banner = unix_cli_banner_color;
- len = ARRAY_LEN(unix_cli_banner_color);
- }
+ {
+ banner = unix_cli_banner_color;
+ len = ARRAY_LEN (unix_cli_banner_color);
+ }
else
- {
- banner = unix_cli_banner;
- len = ARRAY_LEN(unix_cli_banner);
- }
+ {
+ banner = unix_cli_banner;
+ len = ARRAY_LEN (unix_cli_banner);
+ }
for (i = 0; i < len; i++)
- {
- unix_vlib_cli_output_cooked(cf, uf,
- banner[i].line,
- banner[i].length);
- }
- }
+ {
+ unix_vlib_cli_output_cooked (cf, uf,
+ banner[i].line, banner[i].length);
+ }
+ }
/* Prompt. */
unix_cli_cli_prompt (cf, uf);
@@ -1045,20 +1056,21 @@ static void unix_cli_file_welcome(unix_cli_main_t * cm, unix_cli_file_t * cf)
/** \brief A failsafe triggered on a timer to ensure we send the prompt
* to telnet sessions that fail to negotiate the terminal type. */
-static void unix_cli_file_welcome_timer(any arg, f64 delay)
+static void
+unix_cli_file_welcome_timer (any arg, f64 delay)
{
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
- (void)delay;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
+ (void) delay;
/* Check the connection didn't close already */
- if (pool_is_free_index (cm->cli_file_pool, (uword)arg))
+ if (pool_is_free_index (cm->cli_file_pool, (uword) arg))
return;
- cf = pool_elt_at_index (cm->cli_file_pool, (uword)arg);
+ cf = pool_elt_at_index (cm->cli_file_pool, (uword) arg);
if (!cf->started)
- unix_cli_file_welcome(cm, cf);
+ unix_cli_file_welcome (cm, cf);
}
/** \brief A mostly no-op Telnet state machine.
@@ -1069,11 +1081,10 @@ static void unix_cli_file_welcome_timer(any arg, f64 delay)
* bytes to consume from the input_vector, not including the initial
* IAC byte.
*/
-static i32 unix_cli_process_telnet(unix_main_t * um,
- unix_cli_file_t * cf,
- unix_file_t * uf,
- u8 * input_vector,
- uword len)
+static i32
+unix_cli_process_telnet (unix_main_t * um,
+ unix_cli_file_t * cf,
+ unix_file_t * uf, u8 * input_vector, uword len)
{
/* Input_vector starts at IAC byte.
* See if we have a complete message; if not, return -1 so we wait for more.
@@ -1082,124 +1093,126 @@ static i32 unix_cli_process_telnet(unix_main_t * um,
i32 consume = 0;
if (len == 1)
- return -1; /* want more bytes */
+ return -1; /* want more bytes */
switch (input_vector[1])
{
- case IAC:
- /* two IAC's in a row means to pass through 0xff.
- * since that makes no sense here, just consume it.
- */
- consume = 1;
- break;
-
- case WILL:
- case WONT:
- case DO:
- case DONT:
- /* Expect 3 bytes */
- if (vec_len(input_vector) < 3)
- return -1; /* want more bytes */
-
- consume = 2;
- break;
-
- case SB:
- {
- /* Sub option - search ahead for IAC SE to end it */
- i32 i;
- for (i = 3; i < len && i < UNIX_CLI_MAX_DEPTH_TELNET; i++)
- {
- if (input_vector[i - 1] == IAC && input_vector[i] == SE)
- {
- /* We have a complete message; see if we care about it */
- switch (input_vector[2])
- {
- case TELOPT_TTYPE:
- if (input_vector[3] != 0)
- break;
- /* See if the terminal type is ANSI capable */
- cf->ansi_capable =
- unix_cli_terminal_type(input_vector + 4, i - 5);
- /* If session not started, we can release the pause */
- if (!cf->started)
- /* Send the welcome banner and initial prompt */
- unix_cli_file_welcome(&unix_cli_main, cf);
- break;
-
- case TELOPT_NAWS:
- /* Window size */
- if (i != 8) /* check message is correct size */
- break;
- cf->width = clib_net_to_host_u16(*((u16 *)(input_vector + 3)));
- cf->height = clib_net_to_host_u16(*((u16 *)(input_vector + 5)));
- /* reindex pager buffer */
- unix_cli_pager_reindex (cf);
- /* redraw page */
- unix_cli_pager_redraw (cf, uf);
- break;
-
- default:
- break;
- }
- /* Consume it all */
- consume = i;
- break;
- }
- }
-
- if (i == UNIX_CLI_MAX_DEPTH_TELNET)
- consume = 1; /* hit max search depth, advance one byte */
-
- if (consume == 0)
- return -1; /* want more bytes */
-
- break;
- }
-
- case GA:
- case EL:
- case EC:
- case AO:
- case IP:
- case BREAK:
- case DM:
- case NOP:
- case SE:
- case EOR:
- case ABORT:
- case SUSP:
- case xEOF:
- /* Simple one-byte messages */
- consume = 1;
- break;
-
- case AYT:
- /* Are You There - trigger a visible response */
- consume = 1;
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "fd.io VPP\n", 10);
- break;
-
- default:
- /* Unknown command! Eat the IAC byte */
- break;
+ case IAC:
+ /* two IAC's in a row means to pass through 0xff.
+ * since that makes no sense here, just consume it.
+ */
+ consume = 1;
+ break;
+
+ case WILL:
+ case WONT:
+ case DO:
+ case DONT:
+ /* Expect 3 bytes */
+ if (vec_len (input_vector) < 3)
+ return -1; /* want more bytes */
+
+ consume = 2;
+ break;
+
+ case SB:
+ {
+ /* Sub option - search ahead for IAC SE to end it */
+ i32 i;
+ for (i = 3; i < len && i < UNIX_CLI_MAX_DEPTH_TELNET; i++)
+ {
+ if (input_vector[i - 1] == IAC && input_vector[i] == SE)
+ {
+ /* We have a complete message; see if we care about it */
+ switch (input_vector[2])
+ {
+ case TELOPT_TTYPE:
+ if (input_vector[3] != 0)
+ break;
+ /* See if the terminal type is ANSI capable */
+ cf->ansi_capable =
+ unix_cli_terminal_type (input_vector + 4, i - 5);
+ /* If session not started, we can release the pause */
+ if (!cf->started)
+ /* Send the welcome banner and initial prompt */
+ unix_cli_file_welcome (&unix_cli_main, cf);
+ break;
+
+ case TELOPT_NAWS:
+ /* Window size */
+ if (i != 8) /* check message is correct size */
+ break;
+ cf->width =
+ clib_net_to_host_u16 (*((u16 *) (input_vector + 3)));
+ cf->height =
+ clib_net_to_host_u16 (*((u16 *) (input_vector + 5)));
+ /* reindex pager buffer */
+ unix_cli_pager_reindex (cf);
+ /* redraw page */
+ unix_cli_pager_redraw (cf, uf);
+ break;
+
+ default:
+ break;
+ }
+ /* Consume it all */
+ consume = i;
+ break;
+ }
+ }
+
+ if (i == UNIX_CLI_MAX_DEPTH_TELNET)
+ consume = 1; /* hit max search depth, advance one byte */
+
+ if (consume == 0)
+ return -1; /* want more bytes */
+
+ break;
+ }
+
+ case GA:
+ case EL:
+ case EC:
+ case AO:
+ case IP:
+ case BREAK:
+ case DM:
+ case NOP:
+ case SE:
+ case EOR:
+ case ABORT:
+ case SUSP:
+ case xEOF:
+ /* Simple one-byte messages */
+ consume = 1;
+ break;
+
+ case AYT:
+ /* Are You There - trigger a visible response */
+ consume = 1;
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "fd.io VPP\n", 10);
+ break;
+
+ default:
+ /* Unknown command! Eat the IAC byte */
+ break;
}
- return consume;
+ return consume;
}
/** \brief Process actionable input.
* Based on the \c action process the input; this typically involves
* searching the command history or editing the current command line.
*/
-static int unix_cli_line_process_one(unix_cli_main_t * cm,
- unix_main_t * um,
- unix_cli_file_t * cf,
- unix_file_t * uf,
- u8 input,
- unix_cli_parse_action_t action)
+static int
+unix_cli_line_process_one (unix_cli_main_t * cm,
+ unix_main_t * um,
+ unix_cli_file_t * cf,
+ unix_file_t * uf,
+ u8 input, unix_cli_parse_action_t action)
{
- u8 * prev;
+ u8 *prev;
int j, delta;
switch (action)
@@ -1210,31 +1223,31 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_REVSEARCH:
case UNIX_CLI_PARSE_ACTION_FWDSEARCH:
if (!cf->has_history || !cf->history_limit)
- break;
+ break;
if (cf->search_mode == 0)
- {
- /* Erase the current command (if any) */
- for (j = 0; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
-
- vec_reset_length (cf->search_key);
- vec_reset_length (cf->current_command);
- if (action == UNIX_CLI_PARSE_ACTION_REVSEARCH)
- cf->search_mode = -1;
- else
- cf->search_mode = 1;
- cf->cursor = 0;
- }
+ {
+ /* Erase the current command (if any) */
+ for (j = 0; j < (vec_len (cf->current_command)); j++)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
+
+ vec_reset_length (cf->search_key);
+ vec_reset_length (cf->current_command);
+ if (action == UNIX_CLI_PARSE_ACTION_REVSEARCH)
+ cf->search_mode = -1;
+ else
+ cf->search_mode = 1;
+ cf->cursor = 0;
+ }
else
- {
- if (action == UNIX_CLI_PARSE_ACTION_REVSEARCH)
- cf->search_mode = -1;
- else
- cf->search_mode = 1;
-
- cf->excursion += cf->search_mode;
- goto search_again;
- }
+ {
+ if (action == UNIX_CLI_PARSE_ACTION_REVSEARCH)
+ cf->search_mode = -1;
+ else
+ cf->search_mode = 1;
+
+ cf->excursion += cf->search_mode;
+ goto search_again;
+ }
break;
case UNIX_CLI_PARSE_ACTION_ERASELINELEFT:
@@ -1243,25 +1256,23 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
/* Shimmy forwards to the new end of line position */
delta = vec_len (cf->current_command) - cf->cursor;
for (j = cf->cursor; j > delta; j--)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
/* Zap from here to the end of what is currently displayed */
for (; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
/* Get back to the start of the line */
for (j = 0; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- j = vec_len(cf->current_command) - cf->cursor;
- memmove(cf->current_command,
- cf->current_command + cf->cursor,
- j);
- _vec_len(cf->current_command) = j;
+ j = vec_len (cf->current_command) - cf->cursor;
+ memmove (cf->current_command, cf->current_command + cf->cursor, j);
+ _vec_len (cf->current_command) = j;
/* Print the new contents */
unix_vlib_cli_output_cooked (cf, uf, cf->current_command, j);
/* Shimmy back to the start */
for (j = 0; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
cf->cursor = 0;
cf->search_mode = 0;
@@ -1272,34 +1283,35 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
/* Zap from cursor to end of what is currently displayed */
for (j = cf->cursor; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
/* Get back to where we were */
for (j = cf->cursor; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
/* Truncate the line at the cursor */
- _vec_len(cf->current_command) = cf->cursor;
+ _vec_len (cf->current_command) = cf->cursor;
cf->search_mode = 0;
break;
case UNIX_CLI_PARSE_ACTION_LEFT:
if (cf->cursor > 0)
- {
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- cf->cursor --;
- }
+ {
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ cf->cursor--;
+ }
cf->search_mode = 0;
break;
case UNIX_CLI_PARSE_ACTION_RIGHT:
- if (cf->cursor < vec_len(cf->current_command))
- {
- /* have to emit the character under the cursor */
- unix_vlib_cli_output_cooked (cf, uf, cf->current_command + cf->cursor, 1);
- cf->cursor ++;
- }
+ if (cf->cursor < vec_len (cf->current_command))
+ {
+ /* have to emit the character under the cursor */
+ unix_vlib_cli_output_cooked (cf, uf,
+ cf->current_command + cf->cursor, 1);
+ cf->cursor++;
+ }
cf->search_mode = 0;
break;
@@ -1307,123 +1319,124 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_UP:
case UNIX_CLI_PARSE_ACTION_DOWN:
if (!cf->has_history || !cf->history_limit)
- break;
+ break;
cf->search_mode = 0;
/* Erase the command */
for (j = cf->cursor; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) " ", 1);
for (j = 0; j < (vec_len (cf->current_command)); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
vec_reset_length (cf->current_command);
if (vec_len (cf->command_history))
- {
- if (action == UNIX_CLI_PARSE_ACTION_UP)
- delta = -1;
- else
- delta = 1;
-
- cf->excursion += delta;
-
- if (cf->excursion == vec_len (cf->command_history))
- {
- /* down-arrowed to last entry - want a blank line */
- _vec_len (cf->current_command) = 0;
- }
- else if (cf->excursion < 0)
- {
- /* up-arrowed over the start to the end, want a blank line */
- cf->excursion = vec_len (cf->command_history);
- _vec_len (cf->current_command) = 0;
- }
- else
- {
- if (cf->excursion > (i32) vec_len (cf->command_history) -1)
- /* down-arrowed past end - wrap to start */
- cf->excursion = 0;
-
- /* Print the command at the current position */
- prev = cf->command_history [cf->excursion];
- vec_validate (cf->current_command, vec_len(prev)-1);
-
- clib_memcpy (cf->current_command, prev, vec_len(prev));
- _vec_len (cf->current_command) = vec_len(prev);
- unix_vlib_cli_output_cooked (cf, uf, cf->current_command,
- vec_len (cf->current_command));
- }
- cf->cursor = vec_len(cf->current_command);
-
- break;
- }
+ {
+ if (action == UNIX_CLI_PARSE_ACTION_UP)
+ delta = -1;
+ else
+ delta = 1;
+
+ cf->excursion += delta;
+
+ if (cf->excursion == vec_len (cf->command_history))
+ {
+ /* down-arrowed to last entry - want a blank line */
+ _vec_len (cf->current_command) = 0;
+ }
+ else if (cf->excursion < 0)
+ {
+ /* up-arrowed over the start to the end, want a blank line */
+ cf->excursion = vec_len (cf->command_history);
+ _vec_len (cf->current_command) = 0;
+ }
+ else
+ {
+ if (cf->excursion > (i32) vec_len (cf->command_history) - 1)
+ /* down-arrowed past end - wrap to start */
+ cf->excursion = 0;
+
+ /* Print the command at the current position */
+ prev = cf->command_history[cf->excursion];
+ vec_validate (cf->current_command, vec_len (prev) - 1);
+
+ clib_memcpy (cf->current_command, prev, vec_len (prev));
+ _vec_len (cf->current_command) = vec_len (prev);
+ unix_vlib_cli_output_cooked (cf, uf, cf->current_command,
+ vec_len (cf->current_command));
+ }
+ cf->cursor = vec_len (cf->current_command);
+
+ break;
+ }
break;
case UNIX_CLI_PARSE_ACTION_HOME:
if (vec_len (cf->current_command) && cf->cursor > 0)
- {
- while (cf->cursor)
- {
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- cf->cursor --;
- }
- }
+ {
+ while (cf->cursor)
+ {
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ cf->cursor--;
+ }
+ }
cf->search_mode = 0;
break;
case UNIX_CLI_PARSE_ACTION_END:
if (vec_len (cf->current_command) &&
- cf->cursor < vec_len(cf->current_command))
- {
- unix_vlib_cli_output_cooked (cf, uf,
- cf->current_command + cf->cursor,
- vec_len(cf->current_command) - cf->cursor);
- cf->cursor = vec_len(cf->current_command);
- }
+ cf->cursor < vec_len (cf->current_command))
+ {
+ unix_vlib_cli_output_cooked (cf, uf,
+ cf->current_command + cf->cursor,
+ vec_len (cf->current_command) -
+ cf->cursor);
+ cf->cursor = vec_len (cf->current_command);
+ }
cf->search_mode = 0;
break;
case UNIX_CLI_PARSE_ACTION_WORDLEFT:
if (vec_len (cf->current_command) && cf->cursor > 0)
- {
- j = cf->cursor;
-
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- j --;
-
- while (j && isspace(cf->current_command[j]))
- {
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- j --;
- }
- while (j && !isspace(cf->current_command[j]))
- {
- if (isspace(cf->current_command[j - 1]))
- break;
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- j --;
- }
-
- cf->cursor = j;
- }
+ {
+ j = cf->cursor;
+
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ j--;
+
+ while (j && isspace (cf->current_command[j]))
+ {
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ j--;
+ }
+ while (j && !isspace (cf->current_command[j]))
+ {
+ if (isspace (cf->current_command[j - 1]))
+ break;
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ j--;
+ }
+
+ cf->cursor = j;
+ }
cf->search_mode = 0;
break;
case UNIX_CLI_PARSE_ACTION_WORDRIGHT:
if (vec_len (cf->current_command) &&
- cf->cursor < vec_len(cf->current_command))
- {
- int e = vec_len(cf->current_command);
- j = cf->cursor;
- while (j < e && !isspace(cf->current_command[j]))
- j ++;
- while (j < e && isspace(cf->current_command[j]))
- j ++;
- unix_vlib_cli_output_cooked (cf, uf,
- cf->current_command + cf->cursor,
- j - cf->cursor);
- cf->cursor = j;
- }
+ cf->cursor < vec_len (cf->current_command))
+ {
+ int e = vec_len (cf->current_command);
+ j = cf->cursor;
+ while (j < e && !isspace (cf->current_command[j]))
+ j++;
+ while (j < e && isspace (cf->current_command[j]))
+ j++;
+ unix_vlib_cli_output_cooked (cf, uf,
+ cf->current_command + cf->cursor,
+ j - cf->cursor);
+ cf->cursor = j;
+ }
cf->search_mode = 0;
break;
@@ -1431,32 +1444,32 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_ERASE:
if (vec_len (cf->current_command))
- {
- if (cf->cursor == vec_len(cf->current_command))
- {
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
- _vec_len (cf->current_command)--;
- cf->cursor --;
- }
- else if (cf->cursor > 0)
- {
- /* shift everything at & to the right of the cursor left by 1 */
- j = vec_len (cf->current_command) - cf->cursor;
- memmove (cf->current_command + cf->cursor - 1,
- cf->current_command + cf->cursor,
- j);
- _vec_len (cf->current_command)--;
- cf->cursor --;
- /* redraw the rest of the line */
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- unix_vlib_cli_output_cooked (cf, uf,
- cf->current_command + cf->cursor, j);
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) " \b\b", 3);
- /* and shift the terminal cursor back where it should be */
- while (-- j)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- }
- }
+ {
+ if (cf->cursor == vec_len (cf->current_command))
+ {
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
+ _vec_len (cf->current_command)--;
+ cf->cursor--;
+ }
+ else if (cf->cursor > 0)
+ {
+ /* shift everything at & to the right of the cursor left by 1 */
+ j = vec_len (cf->current_command) - cf->cursor;
+ memmove (cf->current_command + cf->cursor - 1,
+ cf->current_command + cf->cursor, j);
+ _vec_len (cf->current_command)--;
+ cf->cursor--;
+ /* redraw the rest of the line */
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ unix_vlib_cli_output_cooked (cf, uf,
+ cf->current_command + cf->cursor,
+ j);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) " \b\b", 3);
+ /* and shift the terminal cursor back where it should be */
+ while (--j)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ }
+ }
cf->search_mode = 0;
cf->excursion = 0;
vec_reset_length (cf->search_key);
@@ -1464,37 +1477,37 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_ERASERIGHT:
if (vec_len (cf->current_command))
- {
- if (cf->cursor < vec_len(cf->current_command))
- {
- /* shift everything to the right of the cursor left by 1 */
- j = vec_len (cf->current_command) - cf->cursor - 1;
- memmove (cf->current_command + cf->cursor,
- cf->current_command + cf->cursor + 1,
- j);
- _vec_len (cf->current_command)--;
- /* redraw the rest of the line */
- unix_vlib_cli_output_cooked (cf, uf,
- cf->current_command + cf->cursor, j);
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) " \b", 2);
- /* and shift the terminal cursor back where it should be */
- if (j)
- {
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- while (-- j)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
- }
- }
- }
+ {
+ if (cf->cursor < vec_len (cf->current_command))
+ {
+ /* shift everything to the right of the cursor left by 1 */
+ j = vec_len (cf->current_command) - cf->cursor - 1;
+ memmove (cf->current_command + cf->cursor,
+ cf->current_command + cf->cursor + 1, j);
+ _vec_len (cf->current_command)--;
+ /* redraw the rest of the line */
+ unix_vlib_cli_output_cooked (cf, uf,
+ cf->current_command + cf->cursor,
+ j);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) " \b", 2);
+ /* and shift the terminal cursor back where it should be */
+ if (j)
+ {
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ while (--j)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ }
+ }
+ }
else if (input == 'D' - '@')
- {
- /* ^D with no command entered = quit */
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "quit\n", 5);
- vlib_process_signal_event (um->vlib_main,
- vlib_current_process (um->vlib_main),
- UNIX_CLI_PROCESS_EVENT_QUIT,
- cf - cm->cli_file_pool);
- }
+ {
+ /* ^D with no command entered = quit */
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "quit\n", 5);
+ vlib_process_signal_event (um->vlib_main,
+ vlib_current_process (um->vlib_main),
+ UNIX_CLI_PROCESS_EVENT_QUIT,
+ cf - cm->cli_file_pool);
+ }
cf->search_mode = 0;
cf->excursion = 0;
vec_reset_length (cf->search_key);
@@ -1506,20 +1519,19 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
* the cursor back where it was in that line.
*/
if (cf->ansi_capable)
- unix_vlib_cli_output_cooked (cf, uf,
- (u8 *) ANSI_CLEAR,
- sizeof(ANSI_CLEAR)-1);
+ unix_vlib_cli_output_cooked (cf, uf,
+ (u8 *) ANSI_CLEAR,
+ sizeof (ANSI_CLEAR) - 1);
else
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
unix_vlib_cli_output_raw (cf, uf,
- cm->cli_prompt,
- vec_len (cm->cli_prompt));
+ cm->cli_prompt, vec_len (cm->cli_prompt));
unix_vlib_cli_output_raw (cf, uf,
- cf->current_command,
- vec_len (cf->current_command));
- for (j = cf->cursor; j < vec_len(cf->current_command); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
+ cf->current_command,
+ vec_len (cf->current_command));
+ for (j = cf->cursor; j < vec_len (cf->current_command); j++)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b", 1);
break;
@@ -1540,171 +1552,178 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_PAGER_PGDN:
/* show next page of the buffer */
if (cf->height + cf->pager_start < vec_len (cf->pager_index))
- {
- u8 * line = NULL;
- unix_cli_pager_index_t * pi = NULL;
-
- int m = cf->pager_start + (cf->height - 1);
- unix_cli_pager_prompt_erase (cf, uf);
- for (j = m;
- j < vec_len (cf->pager_index) && cf->pager_start < m;
- j ++, cf->pager_start ++)
- {
- pi = &cf->pager_index[j];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- }
- /* if the last line didn't end in newline, add a newline */
- if (pi && line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- unix_cli_pager_prompt (cf, uf);
- }
+ {
+ u8 *line = NULL;
+ unix_cli_pager_index_t *pi = NULL;
+
+ int m = cf->pager_start + (cf->height - 1);
+ unix_cli_pager_prompt_erase (cf, uf);
+ for (j = m;
+ j < vec_len (cf->pager_index) && cf->pager_start < m;
+ j++, cf->pager_start++)
+ {
+ pi = &cf->pager_index[j];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ }
+ /* if the last line didn't end in newline, add a newline */
+ if (pi && line[pi->length - 1] != '\n')
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_cli_pager_prompt (cf, uf);
+ }
else
- {
- if (action == UNIX_CLI_PARSE_ACTION_PAGER_NEXT)
- /* no more in buffer, exit, but only if it was <space> */
- goto pager_quit;
- }
+ {
+ if (action == UNIX_CLI_PARSE_ACTION_PAGER_NEXT)
+ /* no more in buffer, exit, but only if it was <space> */
+ goto pager_quit;
+ }
break;
case UNIX_CLI_PARSE_ACTION_PAGER_DN:
case UNIX_CLI_PARSE_ACTION_PAGER_CRLF:
/* display the next line of the buffer */
if (cf->pager_start < vec_len (cf->pager_index) - (cf->height - 1))
- {
- u8 * line;
- unix_cli_pager_index_t * pi;
-
- unix_cli_pager_prompt_erase (cf, uf);
- pi = &cf->pager_index[cf->pager_start + (cf->height - 1)];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- cf->pager_start ++;
- /* if the last line didn't end in newline, add a newline */
- if (line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- unix_cli_pager_prompt (cf, uf);
- }
+ {
+ u8 *line;
+ unix_cli_pager_index_t *pi;
+
+ unix_cli_pager_prompt_erase (cf, uf);
+ pi = &cf->pager_index[cf->pager_start + (cf->height - 1)];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ cf->pager_start++;
+ /* if the last line didn't end in newline, add a newline */
+ if (line[pi->length - 1] != '\n')
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_cli_pager_prompt (cf, uf);
+ }
else
- {
- if (action == UNIX_CLI_PARSE_ACTION_PAGER_CRLF)
- /* no more in buffer, exit, but only if it was <enter> */
- goto pager_quit;
- }
+ {
+ if (action == UNIX_CLI_PARSE_ACTION_PAGER_CRLF)
+ /* no more in buffer, exit, but only if it was <enter> */
+ goto pager_quit;
+ }
break;
case UNIX_CLI_PARSE_ACTION_PAGER_UP:
/* scroll the page back one line */
if (cf->pager_start > 0)
- {
- u8 * line = NULL;
- unix_cli_pager_index_t * pi = NULL;
-
- cf->pager_start --;
- if (cf->ansi_capable)
- {
- pi = &cf->pager_index[cf->pager_start];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_cli_pager_prompt_erase (cf, uf);
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)ANSI_SCROLLDN, sizeof(ANSI_SCROLLDN) - 1);
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)ANSI_SAVECURSOR, sizeof(ANSI_SAVECURSOR) - 1);
- unix_cli_ansi_cursor(cf, uf, 1, 1);
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)ANSI_CLEARLINE, sizeof(ANSI_CLEARLINE) - 1);
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)ANSI_RESTCURSOR, sizeof(ANSI_RESTCURSOR) - 1);
- unix_cli_pager_prompt_erase (cf, uf);
- unix_cli_pager_prompt (cf, uf);
- }
- else
- {
- int m = cf->pager_start + (cf->height - 1);
- unix_cli_pager_prompt_erase (cf, uf);
- for (j = cf->pager_start; j < vec_len (cf->pager_index) && j < m; j ++)
- {
- pi = &cf->pager_index[j];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- }
- /* if the last line didn't end in newline, add a newline */
- if (pi && line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- unix_cli_pager_prompt (cf, uf);
- }
- }
+ {
+ u8 *line = NULL;
+ unix_cli_pager_index_t *pi = NULL;
+
+ cf->pager_start--;
+ if (cf->ansi_capable)
+ {
+ pi = &cf->pager_index[cf->pager_start];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_cli_pager_prompt_erase (cf, uf);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) ANSI_SCROLLDN,
+ sizeof (ANSI_SCROLLDN) - 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) ANSI_SAVECURSOR,
+ sizeof (ANSI_SAVECURSOR) - 1);
+ unix_cli_ansi_cursor (cf, uf, 1, 1);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) ANSI_CLEARLINE,
+ sizeof (ANSI_CLEARLINE) - 1);
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) ANSI_RESTCURSOR,
+ sizeof (ANSI_RESTCURSOR) - 1);
+ unix_cli_pager_prompt_erase (cf, uf);
+ unix_cli_pager_prompt (cf, uf);
+ }
+ else
+ {
+ int m = cf->pager_start + (cf->height - 1);
+ unix_cli_pager_prompt_erase (cf, uf);
+ for (j = cf->pager_start;
+ j < vec_len (cf->pager_index) && j < m; j++)
+ {
+ pi = &cf->pager_index[j];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ }
+ /* if the last line didn't end in newline, add a newline */
+ if (pi && line[pi->length - 1] != '\n')
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_cli_pager_prompt (cf, uf);
+ }
+ }
break;
case UNIX_CLI_PARSE_ACTION_PAGER_TOP:
/* back to the first page of the buffer */
if (cf->pager_start > 0)
- {
- u8 * line = NULL;
- unix_cli_pager_index_t * pi = NULL;
-
- cf->pager_start = 0;
- int m = cf->pager_start + (cf->height - 1);
- unix_cli_pager_prompt_erase (cf, uf);
- for (j = cf->pager_start; j < vec_len (cf->pager_index) && j < m; j ++)
- {
- pi = &cf->pager_index[j];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- }
- /* if the last line didn't end in newline, add a newline */
- if (pi && line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- unix_cli_pager_prompt (cf, uf);
- }
+ {
+ u8 *line = NULL;
+ unix_cli_pager_index_t *pi = NULL;
+
+ cf->pager_start = 0;
+ int m = cf->pager_start + (cf->height - 1);
+ unix_cli_pager_prompt_erase (cf, uf);
+ for (j = cf->pager_start; j < vec_len (cf->pager_index) && j < m;
+ j++)
+ {
+ pi = &cf->pager_index[j];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ }
+ /* if the last line didn't end in newline, add a newline */
+ if (pi && line[pi->length - 1] != '\n')
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_cli_pager_prompt (cf, uf);
+ }
break;
case UNIX_CLI_PARSE_ACTION_PAGER_BOTTOM:
/* skip to the last page of the buffer */
if (cf->pager_start < vec_len (cf->pager_index) - (cf->height - 1))
- {
- u8 * line = NULL;
- unix_cli_pager_index_t * pi = NULL;
-
- cf->pager_start = vec_len (cf->pager_index) - (cf->height - 1);
- unix_cli_pager_prompt_erase (cf, uf);
- unix_cli_pager_message (cf, uf, "skipping", "\n");
- for (j = cf->pager_start; j < vec_len (cf->pager_index); j ++)
- {
- pi = &cf->pager_index[j];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- }
- /* if the last line didn't end in newline, add a newline */
- if (pi && line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- unix_cli_pager_prompt (cf, uf);
- }
+ {
+ u8 *line = NULL;
+ unix_cli_pager_index_t *pi = NULL;
+
+ cf->pager_start = vec_len (cf->pager_index) - (cf->height - 1);
+ unix_cli_pager_prompt_erase (cf, uf);
+ unix_cli_pager_message (cf, uf, "skipping", "\n");
+ for (j = cf->pager_start; j < vec_len (cf->pager_index); j++)
+ {
+ pi = &cf->pager_index[j];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ }
+ /* if the last line didn't end in newline, add a newline */
+ if (pi && line[pi->length - 1] != '\n')
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_cli_pager_prompt (cf, uf);
+ }
break;
case UNIX_CLI_PARSE_ACTION_PAGER_PGUP:
/* wander back one page in the buffer */
if (cf->pager_start > 0)
- {
- u8 * line = NULL;
- unix_cli_pager_index_t * pi = NULL;
- int m;
-
- if (cf->pager_start >= cf->height)
- cf->pager_start -= cf->height - 1;
- else
- cf->pager_start = 0;
- m = cf->pager_start + cf->height - 1;
- unix_cli_pager_prompt_erase (cf, uf);
- for (j = cf->pager_start; j < vec_len (cf->pager_index) && j < m; j ++)
- {
- pi = &cf->pager_index[j];
- line = cf->pager_vector[pi->line] + pi->offset;
- unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
- }
- /* if the last line didn't end in newline, add a newline */
- if (pi && line[pi->length - 1] != '\n')
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\n", 1);
- unix_cli_pager_prompt (cf, uf);
- }
+ {
+ u8 *line = NULL;
+ unix_cli_pager_index_t *pi = NULL;
+ int m;
+
+ if (cf->pager_start >= cf->height)
+ cf->pager_start -= cf->height - 1;
+ else
+ cf->pager_start = 0;
+ m = cf->pager_start + cf->height - 1;
+ unix_cli_pager_prompt_erase (cf, uf);
+ for (j = cf->pager_start; j < vec_len (cf->pager_index) && j < m;
+ j++)
+ {
+ pi = &cf->pager_index[j];
+ line = cf->pager_vector[pi->line] + pi->offset;
+ unix_vlib_cli_output_cooked (cf, uf, line, pi->length);
+ }
+ /* if the last line didn't end in newline, add a newline */
+ if (pi && line[pi->length - 1] != '\n')
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
+ unix_cli_pager_prompt (cf, uf);
+ }
break;
case UNIX_CLI_PARSE_ACTION_PAGER_REDRAW:
@@ -1722,31 +1741,33 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\n", 1);
if (cf->has_history && cf->history_limit)
- {
- if (cf->command_history && vec_len(cf->command_history) >= cf->history_limit)
- {
- vec_free (cf->command_history[0]);
- vec_delete (cf->command_history, 1, 0);
- }
- /* Don't add blank lines to the cmd history */
- if (vec_len (cf->current_command))
- {
- /* Don't duplicate the previous command */
- j = vec_len(cf->command_history);
- if (j == 0 ||
- (vec_len (cf->current_command) != vec_len (cf->command_history[j - 1]) ||
- memcmp(cf->current_command, cf->command_history[j - 1],
- vec_len (cf->current_command)) != 0))
- {
- /* copy the command to the history */
- u8 * c = 0;
- vec_append(c, cf->current_command);
- vec_add1 (cf->command_history, c);
- cf->command_number ++;
- }
- }
- cf->excursion = vec_len (cf->command_history);
- }
+ {
+ if (cf->command_history
+ && vec_len (cf->command_history) >= cf->history_limit)
+ {
+ vec_free (cf->command_history[0]);
+ vec_delete (cf->command_history, 1, 0);
+ }
+ /* Don't add blank lines to the cmd history */
+ if (vec_len (cf->current_command))
+ {
+ /* Don't duplicate the previous command */
+ j = vec_len (cf->command_history);
+ if (j == 0 ||
+ (vec_len (cf->current_command) !=
+ vec_len (cf->command_history[j - 1])
+ || memcmp (cf->current_command, cf->command_history[j - 1],
+ vec_len (cf->current_command)) != 0))
+ {
+ /* copy the command to the history */
+ u8 *c = 0;
+ vec_append (c, cf->current_command);
+ vec_add1 (cf->command_history, c);
+ cf->command_number++;
+ }
+ }
+ cf->excursion = vec_len (cf->command_history);
+ }
cf->search_mode = 0;
vec_reset_length (cf->search_key);
@@ -1757,101 +1778,100 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_PARTIALMATCH:
case UNIX_CLI_PARSE_ACTION_NOMATCH:
if (vec_len (cf->pager_index))
- {
- /* no-op for now */
- }
- else if (cf->has_history && cf->search_mode && isprint(input))
- {
- int k, limit, offset;
- u8 * item;
-
- vec_add1 (cf->search_key, input);
-
- search_again:
- for (j = 0; j < vec_len(cf->command_history); j++)
- {
- if (cf->excursion > (i32) vec_len (cf->command_history) -1)
- cf->excursion = 0;
- else if (cf->excursion < 0)
- cf->excursion = vec_len (cf->command_history) -1;
-
- item = cf->command_history[cf->excursion];
-
- limit = (vec_len(cf->search_key) > vec_len (item)) ?
- vec_len(item) : vec_len (cf->search_key);
-
- for (offset = 0; offset <= vec_len(item) - limit; offset++)
- {
- for (k = 0; k < limit; k++)
- {
- if (item[k+offset] != cf->search_key[k])
- goto next_offset;
- }
- goto found_at_offset;
-
- next_offset:
- ;
- }
- goto next;
-
- found_at_offset:
- for (j = 0; j < vec_len (cf->current_command); j++)
- unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
-
- vec_validate (cf->current_command, vec_len(item)-1);
- clib_memcpy (cf->current_command, item, vec_len(item));
- _vec_len (cf->current_command) = vec_len(item);
-
- unix_vlib_cli_output_cooked (cf, uf, cf->current_command,
- vec_len (cf->current_command));
- cf->cursor = vec_len (cf->current_command);
- goto found;
-
- next:
- cf->excursion += cf->search_mode;
- }
-
- unix_vlib_cli_output_cooked (cf, uf, (u8 *)"\nNo match...", 12);
- vec_reset_length (cf->search_key);
- vec_reset_length (cf->current_command);
- cf->search_mode = 0;
- cf->cursor = 0;
- goto crlf;
- }
- else if (isprint(input)) /* skip any errant control codes */
- {
- if (cf->cursor == vec_len(cf->current_command))
- {
- /* Append to end */
- vec_add1 (cf->current_command, input);
- cf->cursor ++;
-
- /* Echo the character back to the client */
- unix_vlib_cli_output_raw (cf, uf, &input, 1);
- }
- else
- {
- /* Insert at cursor: resize +1 byte, move everything over */
- j = vec_len (cf->current_command) - cf->cursor;
- vec_add1 (cf->current_command, (u8)'A');
- memmove (cf->current_command + cf->cursor + 1,
- cf->current_command + cf->cursor,
- j);
- cf->current_command[cf->cursor] = input;
- /* Redraw the line */
- j ++;
- unix_vlib_cli_output_raw (cf, uf,
- cf->current_command + cf->cursor, j);
- /* Put terminal cursor back */
- while (-- j)
- unix_vlib_cli_output_raw (cf, uf, (u8 *)"\b", 1);
- cf->cursor ++;
- }
- }
+ {
+ /* no-op for now */
+ }
+ else if (cf->has_history && cf->search_mode && isprint (input))
+ {
+ int k, limit, offset;
+ u8 *item;
+
+ vec_add1 (cf->search_key, input);
+
+ search_again:
+ for (j = 0; j < vec_len (cf->command_history); j++)
+ {
+ if (cf->excursion > (i32) vec_len (cf->command_history) - 1)
+ cf->excursion = 0;
+ else if (cf->excursion < 0)
+ cf->excursion = vec_len (cf->command_history) - 1;
+
+ item = cf->command_history[cf->excursion];
+
+ limit = (vec_len (cf->search_key) > vec_len (item)) ?
+ vec_len (item) : vec_len (cf->search_key);
+
+ for (offset = 0; offset <= vec_len (item) - limit; offset++)
+ {
+ for (k = 0; k < limit; k++)
+ {
+ if (item[k + offset] != cf->search_key[k])
+ goto next_offset;
+ }
+ goto found_at_offset;
+
+ next_offset:
+ ;
+ }
+ goto next;
+
+ found_at_offset:
+ for (j = 0; j < vec_len (cf->current_command); j++)
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\b \b", 3);
+
+ vec_validate (cf->current_command, vec_len (item) - 1);
+ clib_memcpy (cf->current_command, item, vec_len (item));
+ _vec_len (cf->current_command) = vec_len (item);
+
+ unix_vlib_cli_output_cooked (cf, uf, cf->current_command,
+ vec_len (cf->current_command));
+ cf->cursor = vec_len (cf->current_command);
+ goto found;
+
+ next:
+ cf->excursion += cf->search_mode;
+ }
+
+ unix_vlib_cli_output_cooked (cf, uf, (u8 *) "\nNo match...", 12);
+ vec_reset_length (cf->search_key);
+ vec_reset_length (cf->current_command);
+ cf->search_mode = 0;
+ cf->cursor = 0;
+ goto crlf;
+ }
+ else if (isprint (input)) /* skip any errant control codes */
+ {
+ if (cf->cursor == vec_len (cf->current_command))
+ {
+ /* Append to end */
+ vec_add1 (cf->current_command, input);
+ cf->cursor++;
+
+ /* Echo the character back to the client */
+ unix_vlib_cli_output_raw (cf, uf, &input, 1);
+ }
+ else
+ {
+ /* Insert at cursor: resize +1 byte, move everything over */
+ j = vec_len (cf->current_command) - cf->cursor;
+ vec_add1 (cf->current_command, (u8) 'A');
+ memmove (cf->current_command + cf->cursor + 1,
+ cf->current_command + cf->cursor, j);
+ cf->current_command[cf->cursor] = input;
+ /* Redraw the line */
+ j++;
+ unix_vlib_cli_output_raw (cf, uf,
+ cf->current_command + cf->cursor, j);
+ /* Put terminal cursor back */
+ while (--j)
+ unix_vlib_cli_output_raw (cf, uf, (u8 *) "\b", 1);
+ cf->cursor++;
+ }
+ }
else
- {
- /* no-op - not printable or otherwise not actionable */
- }
+ {
+ /* no-op - not printable or otherwise not actionable */
+ }
found:
@@ -1860,16 +1880,16 @@ static int unix_cli_line_process_one(unix_cli_main_t * cm,
case UNIX_CLI_PARSE_ACTION_TELNETIAC:
break;
}
- return 1;
+ return 1;
}
/** \brief Process input bytes on a stream to provide line editing and
* command history in the CLI. */
-static int unix_cli_line_edit (unix_cli_main_t * cm,
- unix_main_t * um,
- unix_cli_file_t * cf)
+static int
+unix_cli_line_edit (unix_cli_main_t * cm,
+ unix_main_t * um, unix_cli_file_t * cf)
{
- unix_file_t * uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ unix_file_t *uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
int i;
for (i = 0; i < vec_len (cf->input_vector); i++)
@@ -1879,78 +1899,82 @@ static int unix_cli_line_edit (unix_cli_main_t * cm,
unix_cli_parse_actions_t *a;
/* If we're in the pager mode, search the pager actions */
- a = vec_len (cf->pager_index) ? unix_cli_parse_pager : unix_cli_parse_strings;
+ a =
+ vec_len (cf->pager_index) ? unix_cli_parse_pager :
+ unix_cli_parse_strings;
/* See if the input buffer is some sort of control code */
- action = unix_cli_match_action(a, &cf->input_vector[i],
- vec_len (cf->input_vector) - i, &matched);
+ action = unix_cli_match_action (a, &cf->input_vector[i],
+ vec_len (cf->input_vector) - i,
+ &matched);
switch (action)
- {
- case UNIX_CLI_PARSE_ACTION_PARTIALMATCH:
- if (i)
- {
- /* There was a partial match which means we need more bytes
- * than the input buffer currently has.
- * Since the bytes before here have been processed, shift
- * the remaining contents to the start of the input buffer.
- */
- vec_delete (cf->input_vector, i, 0);
- }
- return 1; /* wait for more */
-
- case UNIX_CLI_PARSE_ACTION_TELNETIAC:
- /* process telnet options */
- matched = unix_cli_process_telnet(um, cf, uf,
- cf->input_vector + i, vec_len(cf->input_vector) - i);
- if (matched < 0)
- {
- if (i)
- {
- /* There was a partial match which means we need more bytes
- * than the input buffer currently has.
- * Since the bytes before here have been processed, shift
- * the remaining contents to the start of the input buffer.
- */
- vec_delete (cf->input_vector, i, 0);
- }
- return 1; /* wait for more */
- }
- break;
-
- default:
- /* process the action */
- if (!unix_cli_line_process_one(cm, um, cf, uf,
- cf->input_vector[i], action))
- {
- /* CRLF found. Consume the bytes from the input_vector */
- vec_delete (cf->input_vector, i + matched, 0);
- /* And tell our caller to execute cf->input_command */
- return 0;
- }
- }
+ {
+ case UNIX_CLI_PARSE_ACTION_PARTIALMATCH:
+ if (i)
+ {
+ /* There was a partial match which means we need more bytes
+ * than the input buffer currently has.
+ * Since the bytes before here have been processed, shift
+ * the remaining contents to the start of the input buffer.
+ */
+ vec_delete (cf->input_vector, i, 0);
+ }
+ return 1; /* wait for more */
+
+ case UNIX_CLI_PARSE_ACTION_TELNETIAC:
+ /* process telnet options */
+ matched = unix_cli_process_telnet (um, cf, uf,
+ cf->input_vector + i,
+ vec_len (cf->input_vector) - i);
+ if (matched < 0)
+ {
+ if (i)
+ {
+ /* There was a partial match which means we need more bytes
+ * than the input buffer currently has.
+ * Since the bytes before here have been processed, shift
+ * the remaining contents to the start of the input buffer.
+ */
+ vec_delete (cf->input_vector, i, 0);
+ }
+ return 1; /* wait for more */
+ }
+ break;
+
+ default:
+ /* process the action */
+ if (!unix_cli_line_process_one (cm, um, cf, uf,
+ cf->input_vector[i], action))
+ {
+ /* CRLF found. Consume the bytes from the input_vector */
+ vec_delete (cf->input_vector, i + matched, 0);
+ /* And tell our caller to execute cf->input_command */
+ return 0;
+ }
+ }
i += matched;
}
- vec_reset_length(cf->input_vector);
+ vec_reset_length (cf->input_vector);
return 1;
}
/** \brief Process input to a CLI session. */
-static void unix_cli_process_input (unix_cli_main_t * cm,
- uword cli_file_index)
+static void
+unix_cli_process_input (unix_cli_main_t * cm, uword cli_file_index)
{
- unix_main_t * um = &unix_main;
- unix_file_t * uf;
- unix_cli_file_t * cf = pool_elt_at_index (cm->cli_file_pool, cli_file_index);
+ unix_main_t *um = &unix_main;
+ unix_file_t *uf;
+ unix_cli_file_t *cf = pool_elt_at_index (cm->cli_file_pool, cli_file_index);
unformat_input_t input;
int vlib_parse_eval (u8 *);
more:
/* Try vlibplex first. Someday... */
if (0 && vlib_parse_eval (cf->input_vector) == 0)
- goto done;
+ goto done;
if (cf->line_mode)
{
@@ -1961,23 +1985,21 @@ more:
{
/* Line edit, echo, etc. */
if (unix_cli_line_edit (cm, um, cf))
- /* want more input */
- return;
+ /* want more input */
+ return;
}
if (um->log_fd)
{
- static u8 * lv;
+ static u8 *lv;
vec_reset_length (lv);
- lv = format (lv, "%U[%d]: %v",
- format_timeval,
- 0 /* current bat-time */,
- 0 /* current bat-format */,
- cli_file_index,
- cf->input_vector);
+ lv = format (lv, "%U[%d]: %v",
+ format_timeval, 0 /* current bat-time */ ,
+ 0 /* current bat-format */ ,
+ cli_file_index, cf->input_vector);
{
- int rv __attribute__((unused)) =
- write (um->log_fd, lv, vec_len(lv));
+ int rv __attribute__ ((unused)) =
+ write (um->log_fd, lv, vec_len (lv));
}
}
@@ -1988,10 +2010,11 @@ more:
(void) unformat (&input, "");
cm->current_input_file_index = cli_file_index;
- cf->pager_start = 0; /* start a new pager session */
+ cf->pager_start = 0; /* start a new pager session */
if (unformat_check_input (&input) != UNFORMAT_END_OF_INPUT)
- vlib_cli_input (um->vlib_main, &input, unix_vlib_cli_output, cli_file_index);
+ vlib_cli_input (um->vlib_main, &input, unix_vlib_cli_output,
+ cli_file_index);
/* Zero buffer since otherwise unformat_free will call vec_free on it. */
input.buffer = 0;
@@ -2016,7 +2039,8 @@ done:
cf->no_pager = um->cli_no_pager;
}
- if (vec_len (cf->pager_index) == 0 || vec_len (cf->pager_index) < cf->height)
+ if (vec_len (cf->pager_index) == 0
+ || vec_len (cf->pager_index) < cf->height)
{
/* There was no need for the pager */
unix_cli_pager_reset (cf);
@@ -2027,19 +2051,20 @@ done:
else
{
/* Display the pager prompt */
- unix_cli_pager_prompt(cf, uf);
+ unix_cli_pager_prompt (cf, uf);
}
- /* Any residual data in the input vector? */
- if (vec_len (cf->input_vector))
- goto more;
+ /* Any residual data in the input vector? */
+ if (vec_len (cf->input_vector))
+ goto more;
}
-static void unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
+static void
+unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
{
- unix_main_t * um = &unix_main;
- unix_cli_file_t * cf;
- unix_file_t * uf;
+ unix_main_t *um = &unix_main;
+ unix_cli_file_t *cf;
+ unix_file_t *uf;
int i;
cf = pool_elt_at_index (cm->cli_file_pool, cli_file_index);
@@ -2053,7 +2078,7 @@ static void unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
vec_free (cf->search_key);
for (i = 0; i < vec_len (cf->command_history); i++)
- vec_free (cf->command_history[i]);
+ vec_free (cf->command_history[i]);
vec_free (cf->command_history);
@@ -2065,11 +2090,10 @@ static void unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
static uword
unix_cli_process (vlib_main_t * vm,
- vlib_node_runtime_t * rt,
- vlib_frame_t * f)
+ vlib_node_runtime_t * rt, vlib_frame_t * f)
{
- unix_cli_main_t * cm = &unix_cli_main;
- uword i, * data = 0;
+ unix_cli_main_t *cm = &unix_cli_main;
+ uword i, *data = 0;
while (1)
{
@@ -2095,7 +2119,7 @@ unix_cli_process (vlib_main_t * vm,
_vec_len (data) = 0;
}
- done:
+done:
vec_free (data);
vlib_node_set_state (vm, rt->node_index, VLIB_NODE_STATE_DISABLED);
@@ -2106,10 +2130,11 @@ unix_cli_process (vlib_main_t * vm,
return 0;
}
-static clib_error_t * unix_cli_write_ready (unix_file_t * uf)
+static clib_error_t *
+unix_cli_write_ready (unix_file_t * uf)
{
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
int n;
cf = pool_elt_at_index (cm->cli_file_pool, uf->private_data);
@@ -2127,18 +2152,20 @@ static clib_error_t * unix_cli_write_ready (unix_file_t * uf)
return /* no error */ 0;
}
-static clib_error_t * unix_cli_read_ready (unix_file_t * uf)
+static clib_error_t *
+unix_cli_read_ready (unix_file_t * uf)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
uword l;
int n, n_read, n_try;
cf = pool_elt_at_index (cm->cli_file_pool, uf->private_data);
n = n_try = 4096;
- while (n == n_try) {
+ while (n == n_try)
+ {
l = vec_len (cf->input_vector);
vec_resize (cf->input_vector, l + n_try);
@@ -2146,13 +2173,13 @@ static clib_error_t * unix_cli_read_ready (unix_file_t * uf)
/* Error? */
if (n < 0 && errno != EAGAIN)
- return clib_error_return_unix (0, "read");
-
+ return clib_error_return_unix (0, "read");
+
n_read = n < 0 ? 0 : n;
_vec_len (cf->input_vector) = l + n_read;
- }
+ }
- if (! (n < 0))
+ if (!(n < 0))
vlib_process_signal_event (um->vlib_main,
cf->process_node_index,
(n_read == 0
@@ -2168,13 +2195,14 @@ static clib_error_t * unix_cli_read_ready (unix_file_t * uf)
* @param fd The file descriptor for the session I/O.
* @return The session ID.
*/
-static u32 unix_cli_file_add (unix_cli_main_t * cm, char * name, int fd)
+static u32
+unix_cli_file_add (unix_cli_main_t * cm, char *name, int fd)
{
- unix_main_t * um = &unix_main;
- unix_cli_file_t * cf;
- unix_file_t template = {0};
- vlib_main_t * vm = um->vlib_main;
- vlib_node_t * n;
+ unix_main_t *um = &unix_main;
+ unix_cli_file_t *cf;
+ unix_file_t template = { 0 };
+ vlib_main_t *vm = um->vlib_main;
+ vlib_node_t *n;
name = (char *) format (0, "unix-cli-%s", name);
@@ -2221,7 +2249,7 @@ static u32 unix_cli_file_add (unix_cli_main_t * cm, char * name, int fd)
vlib_start_process (vm, n->runtime_index);
- vlib_process_t * p = vlib_get_process_from_node(vm, n);
+ vlib_process_t *p = vlib_get_process_from_node (vm, n);
p->output_function = unix_vlib_cli_output;
p->output_function_arg = cf - cm->cli_file_pool;
@@ -2229,15 +2257,16 @@ static u32 unix_cli_file_add (unix_cli_main_t * cm, char * name, int fd)
}
/** Telnet listening socket has a new connection. */
-static clib_error_t * unix_cli_listen_read_ready (unix_file_t * uf)
+static clib_error_t *
+unix_cli_listen_read_ready (unix_file_t * uf)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
- clib_socket_t * s = &um->cli_listen_socket;
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
+ clib_socket_t *s = &um->cli_listen_socket;
clib_socket_t client;
- char * client_name;
- clib_error_t * error;
- unix_cli_file_t * cf;
+ char *client_name;
+ clib_error_t *error;
+ unix_cli_file_t *cf;
u32 cf_index;
error = clib_socket_accept (s, &client);
@@ -2262,16 +2291,16 @@ static clib_error_t * unix_cli_listen_read_ready (unix_file_t * uf)
* Technically these should be negotiated, but this works.
*/
u8 charmode_option[] = {
- IAC, WONT, TELOPT_LINEMODE, /* server will do char-by-char */
- IAC, DONT, TELOPT_LINEMODE, /* client should do char-by-char */
- IAC, WILL, TELOPT_SGA, /* server willl supress GA */
- IAC, DO, TELOPT_SGA, /* client should supress Go Ahead */
- IAC, WILL, TELOPT_ECHO, /* server will do echo */
- IAC, DONT, TELOPT_ECHO, /* client should not echo */
- IAC, DO, TELOPT_TTYPE, /* client should tell us its term type */
- IAC, SB, TELOPT_TTYPE, 1, IAC, SE, /* now tell me ttype */
- IAC, DO, TELOPT_NAWS, /* client should tell us its window sz */
- IAC, SB, TELOPT_NAWS, 1, IAC, SE, /* now tell me window size */
+ IAC, WONT, TELOPT_LINEMODE, /* server will do char-by-char */
+ IAC, DONT, TELOPT_LINEMODE, /* client should do char-by-char */
+ IAC, WILL, TELOPT_SGA, /* server willl supress GA */
+ IAC, DO, TELOPT_SGA, /* client should supress Go Ahead */
+ IAC, WILL, TELOPT_ECHO, /* server will do echo */
+ IAC, DONT, TELOPT_ECHO, /* client should not echo */
+ IAC, DO, TELOPT_TTYPE, /* client should tell us its term type */
+ IAC, SB, TELOPT_TTYPE, 1, IAC, SE, /* now tell me ttype */
+ IAC, DO, TELOPT_NAWS, /* client should tell us its window sz */
+ IAC, SB, TELOPT_NAWS, 1, IAC, SE, /* now tell me window size */
};
/* Enable history on this CLI */
@@ -2291,7 +2320,7 @@ static clib_error_t * unix_cli_listen_read_ready (unix_file_t * uf)
/* Send the telnet options */
unix_vlib_cli_output_raw (cf, uf, charmode_option,
- ARRAY_LEN(charmode_option));
+ ARRAY_LEN (charmode_option));
/* In case the client doesn't negotiate terminal type, use
* a timer to kick off the initial prompt. */
@@ -2307,16 +2336,16 @@ static clib_error_t * unix_cli_listen_read_ready (unix_file_t * uf)
static void
unix_cli_resize_interrupt (int signum)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf = pool_elt_at_index (cm->cli_file_pool,
- cm->stdin_cli_file_index);
- unix_file_t * uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf = pool_elt_at_index (cm->cli_file_pool,
+ cm->stdin_cli_file_index);
+ unix_file_t *uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
struct winsize ws;
- (void)signum;
+ (void) signum;
/* Terminal resized, fetch the new size */
- ioctl(UNIX_CLI_STDIN_FD, TIOCGWINSZ, &ws);
+ ioctl (UNIX_CLI_STDIN_FD, TIOCGWINSZ, &ws);
cf->width = ws.ws_col;
cf->height = ws.ws_row;
@@ -2331,16 +2360,16 @@ unix_cli_resize_interrupt (int signum)
static clib_error_t *
unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
int flags;
- clib_error_t * error = 0;
- unix_cli_file_t * cf;
+ clib_error_t *error = 0;
+ unix_cli_file_t *cf;
u32 cf_index;
struct termios tio;
struct sigaction sa;
struct winsize ws;
- u8 * term;
+ u8 *term;
/* We depend on unix flags being set. */
if ((error = vlib_call_config_function (vm, unix_config)))
@@ -2350,7 +2379,7 @@ unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
{
/* Set stdin to be non-blocking. */
if ((flags = fcntl (UNIX_CLI_STDIN_FD, F_GETFL, 0)) < 0)
- flags = 0;
+ flags = 0;
fcntl (UNIX_CLI_STDIN_FD, F_SETFL, flags | O_NONBLOCK);
cf_index = unix_cli_file_add (cm, "stdin", UNIX_CLI_STDIN_FD);
@@ -2359,85 +2388,87 @@ unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
/* If stdin is a tty and we are using chacracter mode, enable
* history on the CLI and set the tty line discipline accordingly. */
- if (isatty(UNIX_CLI_STDIN_FD) && um->cli_line_mode == 0)
- {
- /* Capture terminal resize events */
- sa.sa_handler = unix_cli_resize_interrupt;
- sa.sa_flags = 0;
- if (sigaction (SIGWINCH, &sa, 0) < 0)
- clib_panic ("sigaction");
-
- /* Retrieve the current terminal size */
- ioctl(UNIX_CLI_STDIN_FD, TIOCGWINSZ, &ws);
- cf->width = ws.ws_col;
- cf->height = ws.ws_row;
-
- if (cf->width == 0 || cf->height == 0)
- /* We have a tty, but no size. Stick to line mode. */
- goto notty;
-
- /* Setup the history */
- cf->history_limit = um->cli_history_limit;
- cf->has_history = cf->history_limit != 0;
-
- /* Setup the pager */
- cf->no_pager = um->cli_no_pager;
-
- /* We're going to be in char by char mode */
- cf->line_mode = 0;
-
- /* Save the original tty state so we can restore it later */
- tcgetattr(UNIX_CLI_STDIN_FD, &um->tio_stdin);
- um->tio_isset = 1;
-
- /* Tweak the tty settings */
- tio = um->tio_stdin;
- /* echo off, canonical mode off, ext'd input processing off */
- tio.c_lflag &= ~(ECHO | ICANON | IEXTEN);
- tio.c_cc[VMIN] = 1; /* 1 byte at a time */
- tio.c_cc[VTIME] = 0; /* no timer */
- tcsetattr(UNIX_CLI_STDIN_FD, TCSAFLUSH, &tio);
-
- /* See if we can do ANSI/VT100 output */
- term = (u8 *)getenv("TERM");
- if (term != NULL)
- cf->ansi_capable = unix_cli_terminal_type(term,
- strlen((char *)term));
- }
+ if (isatty (UNIX_CLI_STDIN_FD) && um->cli_line_mode == 0)
+ {
+ /* Capture terminal resize events */
+ sa.sa_handler = unix_cli_resize_interrupt;
+ sa.sa_flags = 0;
+ if (sigaction (SIGWINCH, &sa, 0) < 0)
+ clib_panic ("sigaction");
+
+ /* Retrieve the current terminal size */
+ ioctl (UNIX_CLI_STDIN_FD, TIOCGWINSZ, &ws);
+ cf->width = ws.ws_col;
+ cf->height = ws.ws_row;
+
+ if (cf->width == 0 || cf->height == 0)
+ /* We have a tty, but no size. Stick to line mode. */
+ goto notty;
+
+ /* Setup the history */
+ cf->history_limit = um->cli_history_limit;
+ cf->has_history = cf->history_limit != 0;
+
+ /* Setup the pager */
+ cf->no_pager = um->cli_no_pager;
+
+ /* We're going to be in char by char mode */
+ cf->line_mode = 0;
+
+ /* Save the original tty state so we can restore it later */
+ tcgetattr (UNIX_CLI_STDIN_FD, &um->tio_stdin);
+ um->tio_isset = 1;
+
+ /* Tweak the tty settings */
+ tio = um->tio_stdin;
+ /* echo off, canonical mode off, ext'd input processing off */
+ tio.c_lflag &= ~(ECHO | ICANON | IEXTEN);
+ tio.c_cc[VMIN] = 1; /* 1 byte at a time */
+ tio.c_cc[VTIME] = 0; /* no timer */
+ tcsetattr (UNIX_CLI_STDIN_FD, TCSAFLUSH, &tio);
+
+ /* See if we can do ANSI/VT100 output */
+ term = (u8 *) getenv ("TERM");
+ if (term != NULL)
+ cf->ansi_capable = unix_cli_terminal_type (term,
+ strlen ((char *)
+ term));
+ }
else
- {
- notty:
- /* No tty, so make sure these things are off */
- cf->no_pager = 1;
- cf->history_limit = 0;
- cf->has_history = 0;
- cf->line_mode = 1;
- }
+ {
+ notty:
+ /* No tty, so make sure these things are off */
+ cf->no_pager = 1;
+ cf->history_limit = 0;
+ cf->has_history = 0;
+ cf->line_mode = 1;
+ }
/* Send banner and initial prompt */
- unix_cli_file_welcome(cm, cf);
+ unix_cli_file_welcome (cm, cf);
}
/* If we have socket config, LISTEN, otherwise, don't */
- clib_socket_t * s = &um->cli_listen_socket;
- if(s->config && s->config[0] != 0) {
- /* CLI listen. */
- unix_file_t template = {0};
+ clib_socket_t *s = &um->cli_listen_socket;
+ if (s->config && s->config[0] != 0)
+ {
+ /* CLI listen. */
+ unix_file_t template = { 0 };
- s->flags = SOCKET_IS_SERVER; /* listen, don't connect */
- error = clib_socket_init (s);
+ s->flags = SOCKET_IS_SERVER; /* listen, don't connect */
+ error = clib_socket_init (s);
- if (error)
- return error;
+ if (error)
+ return error;
- template.read_function = unix_cli_listen_read_ready;
- template.file_descriptor = s->fd;
+ template.read_function = unix_cli_listen_read_ready;
+ template.file_descriptor = s->fd;
- unix_file_add (um, &template);
- }
+ unix_file_add (um, &template);
+ }
/* Set CLI prompt. */
- if (! cm->cli_prompt)
+ if (!cm->cli_prompt)
cm->cli_prompt = format (0, "VLIB: ");
return 0;
@@ -2451,11 +2482,11 @@ VLIB_CONFIG_FUNCTION (unix_cli_config, "unix-cli");
static clib_error_t *
unix_cli_exit (vlib_main_t * vm)
{
- unix_main_t * um = &unix_main;
+ unix_main_t *um = &unix_main;
/* If stdin is a tty and we saved the tty state, reset the tty state */
- if (isatty(UNIX_CLI_STDIN_FD) && um->tio_isset)
- tcsetattr(UNIX_CLI_STDIN_FD, TCSAFLUSH, &um->tio_stdin);
+ if (isatty (UNIX_CLI_STDIN_FD) && um->tio_isset)
+ tcsetattr (UNIX_CLI_STDIN_FD, TCSAFLUSH, &um->tio_stdin);
return 0;
}
@@ -2467,10 +2498,11 @@ VLIB_MAIN_LOOP_EXIT_FUNCTION (unix_cli_exit);
* @note This setting is global; it impacts all current
* and future CLI sessions.
*/
-void vlib_unix_cli_set_prompt (char * prompt)
+void
+vlib_unix_cli_set_prompt (char *prompt)
{
- char * fmt = (prompt[strlen(prompt)-1] == ' ') ? "%s" : "%s ";
- unix_cli_main_t * cm = &unix_cli_main;
+ char *fmt = (prompt[strlen (prompt) - 1] == ' ') ? "%s" : "%s ";
+ unix_cli_main_t *cm = &unix_cli_main;
if (cm->cli_prompt)
vec_free (cm->cli_prompt);
cm->cli_prompt = format (0, fmt, prompt);
@@ -2482,10 +2514,9 @@ void vlib_unix_cli_set_prompt (char * prompt)
*/
static clib_error_t *
unix_cli_quit (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- unix_cli_main_t * cm = &unix_cli_main;
+ unix_cli_main_t *cm = &unix_cli_main;
vlib_process_signal_event (vm,
vlib_current_process (vm),
@@ -2494,28 +2525,29 @@ unix_cli_quit (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (unix_cli_quit_command, static) = {
.path = "quit",
.short_help = "Exit CLI",
.function = unix_cli_quit,
};
+/* *INDENT-ON* */
/** CLI command to execute a VPP command script. */
static clib_error_t *
unix_cli_exec (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- char * file_name;
+ char *file_name;
int fd;
unformat_input_t sub_input;
- clib_error_t * error;
+ clib_error_t *error;
file_name = 0;
fd = -1;
error = 0;
- if (! unformat (input, "%s", &file_name))
+ if (!unformat (input, "%s", &file_name))
{
error = clib_error_return (0, "expecting file name, got `%U'",
format_unformat_error, input);
@@ -2538,8 +2570,8 @@ unix_cli_exec (vlib_main_t * vm,
error = clib_error_return_unix (0, "failed to stat `%s'", file_name);
goto done;
}
-
- if (! (S_ISREG (s.st_mode) || S_ISLNK (s.st_mode)))
+
+ if (!(S_ISREG (s.st_mode) || S_ISLNK (s.st_mode)))
{
error = clib_error_return (0, "not a regular file `%s'", file_name);
goto done;
@@ -2551,7 +2583,7 @@ unix_cli_exec (vlib_main_t * vm,
vlib_cli_input (vm, &sub_input, 0, 0);
unformat_free (&sub_input);
- done:
+done:
if (fd > 0)
close (fd);
vec_free (file_name);
@@ -2559,45 +2591,51 @@ unix_cli_exec (vlib_main_t * vm,
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_exec, static) = {
.path = "exec",
.short_help = "Execute commands from file",
.function = unix_cli_exec,
.is_mp_safe = 1,
};
+/* *INDENT-ON* */
/** CLI command to show various unix error statistics. */
static clib_error_t *
unix_show_errors (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- unix_main_t * um = &unix_main;
- clib_error_t * error = 0;
+ unix_main_t *um = &unix_main;
+ clib_error_t *error = 0;
int i, n_errors_to_show;
- unix_error_history_t * unix_errors = 0;
+ unix_error_history_t *unix_errors = 0;
n_errors_to_show = 1 << 30;
if (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
- if (! unformat (input, "%d", &n_errors_to_show))
+ if (!unformat (input, "%d", &n_errors_to_show))
{
- error = clib_error_return (0, "expecting integer number of errors to show, got `%U'",
- format_unformat_error, input);
+ error =
+ clib_error_return (0,
+ "expecting integer number of errors to show, got `%U'",
+ format_unformat_error, input);
goto done;
}
}
- n_errors_to_show = clib_min (ARRAY_LEN (um->error_history), n_errors_to_show);
+ n_errors_to_show =
+ clib_min (ARRAY_LEN (um->error_history), n_errors_to_show);
- i = um->error_history_index > 0 ? um->error_history_index - 1 : ARRAY_LEN (um->error_history) - 1;
+ i =
+ um->error_history_index >
+ 0 ? um->error_history_index - 1 : ARRAY_LEN (um->error_history) - 1;
while (n_errors_to_show > 0)
{
- unix_error_history_t * eh = um->error_history + i;
+ unix_error_history_t *eh = um->error_history + i;
- if (! eh->error)
+ if (!eh->error)
break;
vec_add1 (unix_errors, eh[0]);
@@ -2615,7 +2653,7 @@ unix_show_errors (vlib_main_t * vm,
vlib_cli_output (vm, "%Ld total errors seen", um->n_total_errors);
for (i = vec_len (unix_errors) - 1; i >= 0; i--)
{
- unix_error_history_t * eh = vec_elt_at_index (unix_errors, i);
+ unix_error_history_t *eh = vec_elt_at_index (unix_errors, i);
vlib_cli_output (vm, "%U: %U",
format_time_interval, "h:m:s:u", eh->time,
format_clib_error, eh->error);
@@ -2624,34 +2662,35 @@ unix_show_errors (vlib_main_t * vm,
format_time_interval, "h:m:s:u", vlib_time_now (vm));
}
- done:
+done:
vec_free (unix_errors);
return error;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_unix_show_errors, static) = {
.path = "show unix-errors",
.short_help = "Show Unix system call error history",
.function = unix_show_errors,
};
+/* *INDENT-ON* */
/** CLI command to show session command history. */
static clib_error_t *
unix_cli_show_history (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
int i, j;
cf = pool_elt_at_index (cm->cli_file_pool, cm->current_input_file_index);
if (cf->has_history && cf->history_limit)
{
- i = 1 + cf->command_number - vec_len(cf->command_history);
+ i = 1 + cf->command_number - vec_len (cf->command_history);
for (j = 0; j < vec_len (cf->command_history); j++)
- vlib_cli_output (vm, "%d %v\n", i + j, cf->command_history[j]);
+ vlib_cli_output (vm, "%d %v\n", i + j, cf->command_history[j]);
}
else
{
@@ -2661,153 +2700,166 @@ unix_cli_show_history (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_unix_cli_show_history, static) = {
.path = "history",
.short_help = "Show current session command history",
.function = unix_cli_show_history,
};
+/* *INDENT-ON* */
/** CLI command to show terminal status. */
static clib_error_t *
unix_cli_show_terminal (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
- vlib_node_t * n;
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
+ vlib_node_t *n;
cf = pool_elt_at_index (cm->cli_file_pool, cm->current_input_file_index);
n = vlib_get_node (vm, cf->process_node_index);
vlib_cli_output (vm, "Terminal name: %v\n", n->name);
- vlib_cli_output (vm, "Terminal mode: %s\n", cf->line_mode ?
- "line-by-line" :
- "char-by-char");
+ vlib_cli_output (vm, "Terminal mode: %s\n", cf->line_mode ?
+ "line-by-line" : "char-by-char");
vlib_cli_output (vm, "Terminal width: %d\n", cf->width);
vlib_cli_output (vm, "Terminal height: %d\n", cf->height);
- vlib_cli_output (vm, "ANSI capable: %s\n", cf->ansi_capable ? "yes" : "no");
+ vlib_cli_output (vm, "ANSI capable: %s\n",
+ cf->ansi_capable ? "yes" : "no");
vlib_cli_output (vm, "History enabled: %s%s\n",
- cf->has_history ? "yes" : "no",
- !cf->has_history || cf->history_limit ? "" : " (disabled by history limit)");
+ cf->has_history ? "yes" : "no", !cf->has_history
+ || cf->history_limit ? "" :
+ " (disabled by history limit)");
if (cf->has_history)
vlib_cli_output (vm, "History limit: %d\n", cf->history_limit);
vlib_cli_output (vm, "Pager enabled: %s%s%s\n",
- cf->no_pager ? "no" : "yes",
- cf->no_pager || cf->height ? "" : " (disabled by terminal height)",
- cf->no_pager || um->cli_pager_buffer_limit ? "" : " (disabled by buffer limit)");
+ cf->no_pager ? "no" : "yes",
+ cf->no_pager
+ || cf->height ? "" : " (disabled by terminal height)",
+ cf->no_pager
+ || um->cli_pager_buffer_limit ? "" :
+ " (disabled by buffer limit)");
if (!cf->no_pager)
vlib_cli_output (vm, "Pager limit: %d\n", um->cli_pager_buffer_limit);
- vlib_cli_output (vm, "CRLF mode: %s\n", cf->crlf_mode ? "CR+LF" : "LF");
+ vlib_cli_output (vm, "CRLF mode: %s\n",
+ cf->crlf_mode ? "CR+LF" : "LF");
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_unix_cli_show_terminal, static) = {
.path = "show terminal",
.short_help = "Show current session terminal settings",
.function = unix_cli_show_terminal,
};
+/* *INDENT-ON* */
/** CLI command to set terminal pager settings. */
static clib_error_t *
unix_cli_set_terminal_pager (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
- unix_main_t * um = &unix_main;
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
- unformat_input_t _line_input, * line_input = &_line_input;
+ unix_main_t *um = &unix_main;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
+ unformat_input_t _line_input, *line_input = &_line_input;
- if (! unformat_user (input, unformat_line_input, line_input))
+ if (!unformat_user (input, unformat_line_input, line_input))
return 0;
cf = pool_elt_at_index (cm->cli_file_pool, cm->current_input_file_index);
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
{
- if (unformat (line_input, "on"))
- cf->no_pager = 0;
- else if (unformat (line_input, "off"))
- cf->no_pager = 1;
- else if (unformat (line_input, "limit %u", &um->cli_pager_buffer_limit))
- vlib_cli_output (vm, "Pager limit set to %u lines; note, this is global.\n",
- um->cli_pager_buffer_limit);
- else
- return clib_error_return (0, "unknown parameter: `%U`",
- format_unformat_error, line_input);
- }
+ if (unformat (line_input, "on"))
+ cf->no_pager = 0;
+ else if (unformat (line_input, "off"))
+ cf->no_pager = 1;
+ else if (unformat (line_input, "limit %u", &um->cli_pager_buffer_limit))
+ vlib_cli_output (vm,
+ "Pager limit set to %u lines; note, this is global.\n",
+ um->cli_pager_buffer_limit);
+ else
+ return clib_error_return (0, "unknown parameter: `%U`",
+ format_unformat_error, line_input);
+ }
- unformat_free(line_input);
+ unformat_free (line_input);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_unix_cli_set_terminal_pager, static) = {
.path = "set terminal pager",
.short_help = "set terminal pager [on|off] [limit <lines>]",
.function = unix_cli_set_terminal_pager,
};
+/* *INDENT-ON* */
/** CLI command to set terminal history settings. */
static clib_error_t *
unix_cli_set_terminal_history (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
- unformat_input_t _line_input, * line_input = &_line_input;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
+ unformat_input_t _line_input, *line_input = &_line_input;
u32 limit;
- if (! unformat_user (input, unformat_line_input, line_input))
+ if (!unformat_user (input, unformat_line_input, line_input))
return 0;
cf = pool_elt_at_index (cm->cli_file_pool, cm->current_input_file_index);
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
{
- if (unformat (line_input, "on"))
- cf->has_history = 1;
- else if (unformat (line_input, "off"))
- cf->has_history = 0;
- else if (unformat (line_input, "limit %u", &cf->history_limit))
- ;
- else
- return clib_error_return (0, "unknown parameter: `%U`",
- format_unformat_error, line_input);
-
- /* If we reduced history size, or turned it off, purge the history */
- limit = cf->has_history ? cf->history_limit : 0;
-
- while (cf->command_history && vec_len(cf->command_history) >= limit)
- {
- vec_free (cf->command_history[0]);
- vec_delete (cf->command_history, 1, 0);
- }
- }
+ if (unformat (line_input, "on"))
+ cf->has_history = 1;
+ else if (unformat (line_input, "off"))
+ cf->has_history = 0;
+ else if (unformat (line_input, "limit %u", &cf->history_limit))
+ ;
+ else
+ return clib_error_return (0, "unknown parameter: `%U`",
+ format_unformat_error, line_input);
+
+ /* If we reduced history size, or turned it off, purge the history */
+ limit = cf->has_history ? cf->history_limit : 0;
- unformat_free(line_input);
+ while (cf->command_history && vec_len (cf->command_history) >= limit)
+ {
+ vec_free (cf->command_history[0]);
+ vec_delete (cf->command_history, 1, 0);
+ }
+ }
+
+ unformat_free (line_input);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_unix_cli_set_terminal_history, static) = {
.path = "set terminal history",
.short_help = "set terminal history [on|off] [limit <lines>]",
.function = unix_cli_set_terminal_history,
};
+/* *INDENT-ON* */
/** CLI command to set terminal ANSI settings. */
static clib_error_t *
unix_cli_set_terminal_ansi (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
{
- unix_cli_main_t * cm = &unix_cli_main;
- unix_cli_file_t * cf;
+ unix_cli_main_t *cm = &unix_cli_main;
+ unix_cli_file_t *cf;
cf = pool_elt_at_index (cm->cli_file_pool, cm->current_input_file_index);
@@ -2817,16 +2869,18 @@ unix_cli_set_terminal_ansi (vlib_main_t * vm,
cf->ansi_capable = 0;
else
return clib_error_return (0, "unknown parameter: `%U`",
- format_unformat_error, input);
+ format_unformat_error, input);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (cli_unix_cli_set_terminal_ansi, static) = {
.path = "set terminal ansi",
.short_help = "set terminal ansi [on|off]",
.function = unix_cli_set_terminal_ansi,
};
+/* *INDENT-ON* */
static clib_error_t *
unix_cli_init (vlib_main_t * vm)
@@ -2835,3 +2889,11 @@ unix_cli_init (vlib_main_t * vm)
}
VLIB_INIT_FUNCTION (unix_cli_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/input.c b/vlib/vlib/unix/input.c
index 543e2c000a7..b4f2ba537a4 100644
--- a/vlib/vlib/unix/input.c
+++ b/vlib/vlib/unix/input.c
@@ -48,9 +48,10 @@
#include <sys/epoll.h>
-typedef struct {
+typedef struct
+{
int epoll_fd;
- struct epoll_event * epoll_events;
+ struct epoll_event *epoll_events;
/* Statistics. */
u64 epoll_files_ready;
@@ -60,11 +61,10 @@ typedef struct {
static linux_epoll_main_t linux_epoll_main;
static void
-linux_epoll_file_update (unix_file_t * f,
- unix_file_update_type_t update_type)
+linux_epoll_file_update (unix_file_t * f, unix_file_update_type_t update_type)
{
- unix_main_t * um = &unix_main;
- linux_epoll_main_t * em = &linux_epoll_main;
+ unix_main_t *um = &unix_main;
+ linux_epoll_main_t *em = &linux_epoll_main;
struct epoll_event e;
memset (&e, 0, sizeof (e));
@@ -72,8 +72,8 @@ linux_epoll_file_update (unix_file_t * f,
e.events = EPOLLIN;
if (f->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE)
e.events |= EPOLLOUT;
- if (f->flags & UNIX_FILE_EVENT_EDGE_TRIGGERED)
- e.events |= EPOLLET;
+ if (f->flags & UNIX_FILE_EVENT_EDGE_TRIGGERED)
+ e.events |= EPOLLET;
e.data.u32 = f - um->file_pool;
if (epoll_ctl (em->epoll_fd,
@@ -81,24 +81,21 @@ linux_epoll_file_update (unix_file_t * f,
? EPOLL_CTL_ADD
: (update_type == UNIX_FILE_UPDATE_MODIFY
? EPOLL_CTL_MOD
- : EPOLL_CTL_DEL)),
- f->file_descriptor,
- &e) < 0)
+ : EPOLL_CTL_DEL)), f->file_descriptor, &e) < 0)
clib_warning ("epoll_ctl");
}
static uword
linux_epoll_input (vlib_main_t * vm,
- vlib_node_runtime_t * node,
- vlib_frame_t * frame)
+ vlib_node_runtime_t * node, vlib_frame_t * frame)
{
- unix_main_t * um = &unix_main;
- linux_epoll_main_t * em = &linux_epoll_main;
- struct epoll_event * e;
+ unix_main_t *um = &unix_main;
+ linux_epoll_main_t *em = &linux_epoll_main;
+ struct epoll_event *e;
int n_fds_ready;
{
- vlib_node_main_t * nm = &vm->node_main;
+ vlib_node_main_t *nm = &vm->node_main;
u64 t = nm->cpu_time_next_process_ready;
f64 timeout;
int timeout_ms, max_timeout_ms = 10;
@@ -114,9 +111,9 @@ linux_epoll_input (vlib_main_t * vm,
timeout =
(((i64) t - (i64) clib_cpu_time_now ())
* vm->clib_time.seconds_per_clock)
- /* subtract off some slop time */ - 50e-6;
+ /* subtract off some slop time */ - 50e-6;
timeout_ms = timeout * 1e3;
-
+
/* Must be between 1 and 10 ms. */
timeout_ms = clib_max (1, timeout_ms);
timeout_ms = clib_min (max_timeout_ms, timeout_ms);
@@ -127,9 +124,9 @@ linux_epoll_input (vlib_main_t * vm,
if (nm->input_node_counts_by_state[VLIB_NODE_STATE_POLLING] > 0)
timeout_ms = 0;
- /*
- * When busy: don't wait & only epoll for input
- * every 1024 times through main loop.
+ /*
+ * When busy: don't wait & only epoll for input
+ * every 1024 times through main loop.
*/
if (vector_rate > 1 || vm->api_queue_nonempty)
{
@@ -144,26 +141,24 @@ linux_epoll_input (vlib_main_t * vm,
{
static sigset_t unblock_all_signals;
n_fds_ready = epoll_pwait (em->epoll_fd,
- em->epoll_events,
- vec_len (em->epoll_events),
- timeout_ms,
- &unblock_all_signals);
-
+ em->epoll_events,
+ vec_len (em->epoll_events),
+ timeout_ms, &unblock_all_signals);
+
/* This kludge is necessary to run over absurdly old kernels */
if (n_fds_ready < 0 && errno == ENOSYS)
- {
- n_fds_ready = epoll_wait (em->epoll_fd,
- em->epoll_events,
- vec_len (em->epoll_events),
- timeout_ms);
- }
+ {
+ n_fds_ready = epoll_wait (em->epoll_fd,
+ em->epoll_events,
+ vec_len (em->epoll_events), timeout_ms);
+ }
}
}
if (n_fds_ready < 0)
{
if (unix_error_is_fatal (errno))
- vlib_panic_with_error (vm, clib_error_return_unix (0, "epoll_wait"));
+ vlib_panic_with_error (vm, clib_error_return_unix (0, "epoll_wait"));
/* non fatal error (e.g. EINTR). */
return 0;
@@ -175,11 +170,11 @@ linux_epoll_input (vlib_main_t * vm,
for (e = em->epoll_events; e < em->epoll_events + n_fds_ready; e++)
{
u32 i = e->data.u32;
- unix_file_t * f = pool_elt_at_index (um->file_pool, i);
- clib_error_t * errors[4];
+ unix_file_t *f = pool_elt_at_index (um->file_pool, i);
+ clib_error_t *errors[4];
int n_errors = 0;
- if (PREDICT_TRUE (! (e->events & EPOLLERR)))
+ if (PREDICT_TRUE (!(e->events & EPOLLERR)))
{
if (e->events & EPOLLIN)
{
@@ -194,13 +189,13 @@ linux_epoll_input (vlib_main_t * vm,
}
else
{
- if (f->error_function)
- {
- errors[n_errors] = f->error_function (f);
- n_errors += errors[n_errors] != 0;
- }
+ if (f->error_function)
+ {
+ errors[n_errors] = f->error_function (f);
+ n_errors += errors[n_errors] != 0;
+ }
else
- close(f->file_descriptor);
+ close (f->file_descriptor);
}
ASSERT (n_errors < ARRAY_LEN (errors));
@@ -213,18 +208,20 @@ linux_epoll_input (vlib_main_t * vm,
return 0;
}
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (linux_epoll_input_node,static) = {
.function = linux_epoll_input,
.type = VLIB_NODE_TYPE_PRE_INPUT,
.name = "unix-epoll-input",
};
+/* *INDENT-ON* */
clib_error_t *
linux_epoll_input_init (vlib_main_t * vm)
{
- linux_epoll_main_t * em = &linux_epoll_main;
- unix_main_t * um = &unix_main;
-
+ linux_epoll_main_t *em = &linux_epoll_main;
+ unix_main_t *um = &unix_main;
+
/* Allocate some events. */
vec_resize (em->epoll_events, VLIB_FRAME_SIZE);
@@ -248,3 +245,11 @@ unix_input_init (vlib_main_t * vm)
}
VLIB_INIT_FUNCTION (unix_input_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/main.c b/vlib/vlib/unix/main.c
index 9049644f5b3..b8753f4df93 100644
--- a/vlib/vlib/unix/main.c
+++ b/vlib/vlib/unix/main.c
@@ -59,21 +59,21 @@ unix_main_t unix_main;
static clib_error_t *
unix_main_init (vlib_main_t * vm)
{
- unix_main_t * um = &unix_main;
+ unix_main_t *um = &unix_main;
um->vlib_main = vm;
return vlib_call_init_function (vm, unix_input_init);
}
VLIB_INIT_FUNCTION (unix_main_init);
-static void unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc)
+static void
+unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc)
{
uword fatal;
- u8 * msg = 0;
+ u8 *msg = 0;
msg = format (msg, "received signal %U, PC %U",
- format_signal, signum,
- format_ucontext_pc, uc);
+ format_signal, signum, format_ucontext_pc, uc);
if (signum == SIGSEGV)
msg = format (msg, ", faulting address %p", si->si_addr);
@@ -82,13 +82,13 @@ static void unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc)
{
/* these (caught) signals cause the application to exit */
case SIGTERM:
- if (unix_main.vlib_main->main_loop_exit_set)
- {
- syslog (LOG_ERR | LOG_DAEMON, "received SIGTERM, exiting...");
+ if (unix_main.vlib_main->main_loop_exit_set)
+ {
+ syslog (LOG_ERR | LOG_DAEMON, "received SIGTERM, exiting...");
- clib_longjmp (&unix_main.vlib_main->main_loop_exit,
- VLIB_MAIN_LOOP_EXIT_CLI);
- }
+ clib_longjmp (&unix_main.vlib_main->main_loop_exit,
+ VLIB_MAIN_LOOP_EXIT_CLI);
+ }
case SIGQUIT:
case SIGINT:
case SIGILL:
@@ -133,21 +133,21 @@ setup_signal_handlers (unix_main_t * um)
switch (i)
{
- /* these signals take the default action */
- case SIGABRT:
+ /* these signals take the default action */
+ case SIGABRT:
case SIGKILL:
case SIGSTOP:
- case SIGUSR1:
- case SIGUSR2:
+ case SIGUSR1:
+ case SIGUSR2:
continue;
- /* ignore SIGPIPE, SIGCHLD */
+ /* ignore SIGPIPE, SIGCHLD */
case SIGPIPE:
case SIGCHLD:
sa.sa_sigaction = (void *) SIG_IGN;
break;
- /* catch and handle all other signals */
+ /* catch and handle all other signals */
default:
break;
}
@@ -159,9 +159,10 @@ setup_signal_handlers (unix_main_t * um)
return 0;
}
-static void unix_error_handler (void * arg, u8 * msg, int msg_len)
+static void
+unix_error_handler (void *arg, u8 * msg, int msg_len)
{
- unix_main_t * um = arg;
+ unix_main_t *um = arg;
/* Echo to stderr when interactive. */
if (um->flags & UNIX_FLAG_INTERACTIVE)
@@ -173,46 +174,46 @@ static void unix_error_handler (void * arg, u8 * msg, int msg_len)
char save = msg[msg_len - 1];
/* Null Terminate. */
- msg[msg_len-1] = 0;
+ msg[msg_len - 1] = 0;
syslog (LOG_ERR | LOG_DAEMON, "%s", msg);
- msg[msg_len-1] = save;
+ msg[msg_len - 1] = save;
}
}
-void vlib_unix_error_report (vlib_main_t * vm, clib_error_t * error)
+void
+vlib_unix_error_report (vlib_main_t * vm, clib_error_t * error)
{
- unix_main_t * um = &unix_main;
+ unix_main_t *um = &unix_main;
- if (um->flags & UNIX_FLAG_INTERACTIVE || error == 0)
- return;
+ if (um->flags & UNIX_FLAG_INTERACTIVE || error == 0)
+ return;
- {
- char save;
- u8 * msg;
- u32 msg_len;
+ {
+ char save;
+ u8 *msg;
+ u32 msg_len;
- msg = error->what;
- msg_len = vec_len(msg);
+ msg = error->what;
+ msg_len = vec_len (msg);
- /* Null Terminate. */
- save = msg[msg_len-1];
- msg[msg_len-1] = 0;
+ /* Null Terminate. */
+ save = msg[msg_len - 1];
+ msg[msg_len - 1] = 0;
- syslog (LOG_ERR | LOG_DAEMON, "%s", msg);
+ syslog (LOG_ERR | LOG_DAEMON, "%s", msg);
- msg[msg_len-1] = save;
- }
+ msg[msg_len - 1] = save;
+ }
}
static uword
startup_config_process (vlib_main_t * vm,
- vlib_node_runtime_t * rt,
- vlib_frame_t * f)
+ vlib_node_runtime_t * rt, vlib_frame_t * f)
{
- unix_main_t * um = &unix_main;
- u8 * buf = 0;
+ unix_main_t *um = &unix_main;
+ u8 *buf = 0;
uword l, n = 1;
vlib_process_suspend (vm, 2.0);
@@ -220,91 +221,95 @@ startup_config_process (vlib_main_t * vm,
while (um->unix_config_complete == 0)
vlib_process_suspend (vm, 0.1);
- if (um->startup_config_filename) {
- unformat_input_t sub_input;
- int fd;
- struct stat s;
- char *fn = (char *)um->startup_config_filename;
-
- fd = open (fn, O_RDONLY);
- if (fd < 0) {
- clib_warning ("failed to open `%s'", fn);
- return 0;
- }
+ if (um->startup_config_filename)
+ {
+ unformat_input_t sub_input;
+ int fd;
+ struct stat s;
+ char *fn = (char *) um->startup_config_filename;
- if (fstat (fd, &s) < 0) {
- clib_warning ("failed to stat `%s'", fn);
- bail:
- close(fd);
- return 0;
- }
-
- if (! (S_ISREG (s.st_mode) || S_ISLNK (s.st_mode))) {
- clib_warning ("not a regular file: `%s'", fn);
- goto bail;
- }
+ fd = open (fn, O_RDONLY);
+ if (fd < 0)
+ {
+ clib_warning ("failed to open `%s'", fn);
+ return 0;
+ }
- while (n > 0)
- {
- l = vec_len (buf);
- vec_resize (buf, 4096);
- n = read (fd, buf + l, 4096);
- if (n > 0)
- {
- _vec_len (buf) = l + n;
- if (n < 4096)
- break;
- }
- else
- break;
- }
- if (um->log_fd && vec_len (buf))
- {
- u8 * lv = 0;
- lv = format (lv, "%U: ***** Startup Config *****\n%v",
- format_timeval,
- 0 /* current bat-time */,
- 0 /* current bat-format */,
- buf);
+ if (fstat (fd, &s) < 0)
{
- int rv __attribute__((unused)) =
- write (um->log_fd, lv, vec_len(lv));
+ clib_warning ("failed to stat `%s'", fn);
+ bail:
+ close (fd);
+ return 0;
}
- vec_reset_length (lv);
- lv = format (lv, "%U: ***** End Startup Config *****\n",
- format_timeval,
- 0 /* current bat-time */,
- 0 /* current bat-format */);
+
+ if (!(S_ISREG (s.st_mode) || S_ISLNK (s.st_mode)))
{
- int rv __attribute__((unused)) =
- write (um->log_fd, lv, vec_len(lv));
+ clib_warning ("not a regular file: `%s'", fn);
+ goto bail;
}
- vec_free (lv);
- }
-
- if (vec_len(buf))
- {
- unformat_init_vector (&sub_input, buf);
- vlib_cli_input (vm, &sub_input, 0, 0);
- /* frees buf for us */
- unformat_free (&sub_input);
- }
- close(fd);
- }
+
+ while (n > 0)
+ {
+ l = vec_len (buf);
+ vec_resize (buf, 4096);
+ n = read (fd, buf + l, 4096);
+ if (n > 0)
+ {
+ _vec_len (buf) = l + n;
+ if (n < 4096)
+ break;
+ }
+ else
+ break;
+ }
+ if (um->log_fd && vec_len (buf))
+ {
+ u8 *lv = 0;
+ lv = format (lv, "%U: ***** Startup Config *****\n%v",
+ format_timeval, 0 /* current bat-time */ ,
+ 0 /* current bat-format */ ,
+ buf);
+ {
+ int rv __attribute__ ((unused)) =
+ write (um->log_fd, lv, vec_len (lv));
+ }
+ vec_reset_length (lv);
+ lv = format (lv, "%U: ***** End Startup Config *****\n",
+ format_timeval, 0 /* current bat-time */ ,
+ 0 /* current bat-format */ );
+ {
+ int rv __attribute__ ((unused)) =
+ write (um->log_fd, lv, vec_len (lv));
+ }
+ vec_free (lv);
+ }
+
+ if (vec_len (buf))
+ {
+ unformat_init_vector (&sub_input, buf);
+ vlib_cli_input (vm, &sub_input, 0, 0);
+ /* frees buf for us */
+ unformat_free (&sub_input);
+ }
+ close (fd);
+ }
return 0;
}
+/* *INDENT-OFF* */
VLIB_REGISTER_NODE (startup_config_node,static) = {
.function = startup_config_process,
.type = VLIB_NODE_TYPE_PROCESS,
.name = "startup-config-process",
};
+/* *INDENT-ON* */
static clib_error_t *
unix_config (vlib_main_t * vm, unformat_input_t * input)
{
- unix_main_t * um = &unix_main;
- clib_error_t * error = 0;
+ unix_main_t *um = &unix_main;
+ clib_error_t *error = 0;
/* Defaults */
um->cli_pager_buffer_limit = UNIX_CLI_DEFAULT_PAGER_LIMIT;
@@ -312,76 +317,76 @@ unix_config (vlib_main_t * vm, unformat_input_t * input)
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
- char * cli_prompt;
+ char *cli_prompt;
if (unformat (input, "interactive"))
um->flags |= UNIX_FLAG_INTERACTIVE;
else if (unformat (input, "nodaemon"))
- um->flags |= UNIX_FLAG_NODAEMON;
+ um->flags |= UNIX_FLAG_NODAEMON;
else if (unformat (input, "cli-prompt %s", &cli_prompt))
vlib_unix_cli_set_prompt (cli_prompt);
- else if (unformat (input, "cli-listen %s", &um->cli_listen_socket.config))
+ else
+ if (unformat (input, "cli-listen %s", &um->cli_listen_socket.config))
;
else if (unformat (input, "cli-line-mode"))
- um->cli_line_mode = 1;
+ um->cli_line_mode = 1;
else if (unformat (input, "cli-no-banner"))
- um->cli_no_banner = 1;
+ um->cli_no_banner = 1;
else if (unformat (input, "cli-no-pager"))
- um->cli_no_pager = 1;
+ um->cli_no_pager = 1;
else if (unformat (input, "cli-pager-buffer-limit %d",
- &um->cli_pager_buffer_limit))
- ;
- else if (unformat (input, "cli-history-limit %d", &um->cli_history_limit))
- ;
+ &um->cli_pager_buffer_limit))
+ ;
+ else
+ if (unformat (input, "cli-history-limit %d", &um->cli_history_limit))
+ ;
else if (unformat (input, "full-coredump"))
- {
- int fd;
-
- fd = open ("/proc/self/coredump_filter", O_WRONLY);
- if (fd > 0)
- {
- if (write (fd, "0x6f\n", 5) != 5)
- clib_unix_warning ("coredump filter write failed!");
- close(fd);
- }
- else
- clib_unix_warning ("couldn't open /proc/self/coredump_filter");
- }
- else if (unformat (input, "startup-config %s",
- &um->startup_config_filename))
- ;
- else if (unformat (input, "exec %s",
- &um->startup_config_filename))
- ;
+ {
+ int fd;
+
+ fd = open ("/proc/self/coredump_filter", O_WRONLY);
+ if (fd > 0)
+ {
+ if (write (fd, "0x6f\n", 5) != 5)
+ clib_unix_warning ("coredump filter write failed!");
+ close (fd);
+ }
+ else
+ clib_unix_warning ("couldn't open /proc/self/coredump_filter");
+ }
+ else if (unformat (input, "startup-config %s",
+ &um->startup_config_filename))
+ ;
+ else if (unformat (input, "exec %s", &um->startup_config_filename))
+ ;
else if (unformat (input, "log %s", &um->log_filename))
- {
- um->log_fd = open ((char *) um->log_filename,
- O_CREAT | O_WRONLY | O_APPEND, 0644);
- if (um->log_fd < 0)
- {
- clib_warning ("couldn't open log '%s'\n", um->log_filename);
- um->log_fd = 0;
- }
- else
- {
- u8 * lv = 0;
- lv = format (0, "%U: ***** Start: PID %d *****\n",
- format_timeval,
- 0 /* current bat-time */,
- 0 /* current bat-format */,
- getpid());
+ {
+ um->log_fd = open ((char *) um->log_filename,
+ O_CREAT | O_WRONLY | O_APPEND, 0644);
+ if (um->log_fd < 0)
+ {
+ clib_warning ("couldn't open log '%s'\n", um->log_filename);
+ um->log_fd = 0;
+ }
+ else
+ {
+ u8 *lv = 0;
+ lv = format (0, "%U: ***** Start: PID %d *****\n",
+ format_timeval, 0 /* current bat-time */ ,
+ 0 /* current bat-format */ ,
+ getpid ());
{
- int rv __attribute__((unused)) =
- write (um->log_fd, lv, vec_len(lv));
+ int rv __attribute__ ((unused)) =
+ write (um->log_fd, lv, vec_len (lv));
}
- vec_free (lv);
- }
- }
+ vec_free (lv);
+ }
+ }
else
return clib_error_return (0, "unknown input `%U'",
format_unformat_error, input);
}
- if (! (um->flags & UNIX_FLAG_INTERACTIVE))
+ if (!(um->flags & UNIX_FLAG_INTERACTIVE))
{
error = setup_signal_handlers (um);
if (error)
@@ -390,9 +395,9 @@ unix_config (vlib_main_t * vm, unformat_input_t * input)
openlog (vm->name, LOG_CONS | LOG_PERROR | LOG_PID, LOG_DAEMON);
clib_error_register_handler (unix_error_handler, um);
- if (! (um->flags & UNIX_FLAG_NODAEMON)
- && daemon (/* chdir to / */ 0,
- /* stdin/stdout/stderr -> /dev/null */ 0) < 0)
+ if (!(um->flags & UNIX_FLAG_NODAEMON) && daemon ( /* chdir to / */ 0,
+ /* stdin/stdout/stderr -> /dev/null */
+ 0) < 0)
clib_error_return (0, "daemon () fails");
}
um->unix_config_complete = 1;
@@ -415,54 +420,56 @@ VLIB_MAIN_LOOP_EXIT_FUNCTION (unix_exit);
u8 **vlib_thread_stacks;
-static uword thread0 (uword arg)
+static uword
+thread0 (uword arg)
{
- vlib_main_t * vm = (vlib_main_t *)arg;
+ vlib_main_t *vm = (vlib_main_t *) arg;
unformat_input_t input;
int i;
-
- unformat_init_command_line (&input, (char **)vm->argv);
+
+ unformat_init_command_line (&input, (char **) vm->argv);
i = vlib_main (vm, &input);
unformat_free (&input);
-
+
return i;
- }
+}
-int vlib_unix_main (int argc, char * argv[])
+int
+vlib_unix_main (int argc, char *argv[])
{
- vlib_main_t * vm = &vlib_global_main; /* one and only time for this! */
-
- clib_smp_main_t * sm = &clib_smp_main;
- vlib_thread_main_t * tm = &vlib_thread_main;
+ vlib_main_t *vm = &vlib_global_main; /* one and only time for this! */
+
+ clib_smp_main_t *sm = &clib_smp_main;
+ vlib_thread_main_t *tm = &vlib_thread_main;
unformat_input_t input;
- u8 * thread_stacks;
- clib_error_t * e;
+ u8 *thread_stacks;
+ clib_error_t *e;
int i;
- vm->argv = (u8 **)argv;
+ vm->argv = (u8 **) argv;
vm->name = argv[0];
vm->heap_base = clib_mem_get_heap ();
- ASSERT(vm->heap_base);
+ ASSERT (vm->heap_base);
i = vlib_plugin_early_init (vm);
if (i)
return i;
-
- unformat_init_command_line (&input, (char **)vm->argv);
+
+ unformat_init_command_line (&input, (char **) vm->argv);
if (vm->init_functions_called == 0)
- vm->init_functions_called = hash_create (0, /* value bytes */ 0);
- e = vlib_call_all_config_functions (vm, &input, 1 /* early */);
+ vm->init_functions_called = hash_create (0, /* value bytes */ 0);
+ e = vlib_call_all_config_functions (vm, &input, 1 /* early */ );
if (e != 0)
{
- clib_error_report(e);
+ clib_error_report (e);
return 1;
}
unformat_free (&input);
/* allocate N x 1mb stacks, aligned e.g. to a 16mb boundary */
- thread_stacks = clib_mem_alloc_aligned
- (tm->n_thread_stacks * VLIB_THREAD_STACK_SIZE,
- (VLIB_MAX_CPUS << VLIB_LOG2_THREAD_STACK_SIZE));
+ thread_stacks = clib_mem_alloc_aligned
+ (tm->n_thread_stacks * VLIB_THREAD_STACK_SIZE,
+ (VLIB_MAX_CPUS << VLIB_LOG2_THREAD_STACK_SIZE));
sm->vm_base = thread_stacks;
sm->log2_n_per_cpu_vm_bytes = VLIB_LOG2_THREAD_STACK_SIZE;
@@ -472,17 +479,26 @@ int vlib_unix_main (int argc, char * argv[])
{
vlib_thread_stacks[i] = thread_stacks;
- /*
+ /*
* Disallow writes to the bottom page of the stack, to
* catch stack overflows.
*/
- if (mprotect (thread_stacks, clib_mem_get_page_size(), PROT_READ) < 0)
- clib_unix_warning ("thread stack");
+ if (mprotect (thread_stacks, clib_mem_get_page_size (), PROT_READ) < 0)
+ clib_unix_warning ("thread stack");
thread_stacks += VLIB_THREAD_STACK_SIZE;
}
-
- i = clib_calljmp (thread0, (uword) vm,
- (void *)(vlib_thread_stacks[0] + VLIB_THREAD_STACK_SIZE));
+
+ i = clib_calljmp (thread0, (uword) vm,
+ (void *) (vlib_thread_stacks[0] +
+ VLIB_THREAD_STACK_SIZE));
return i;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/mc_socket.c b/vlib/vlib/unix/mc_socket.c
index be68a13c1e2..2077fd7c519 100644
--- a/vlib/vlib/unix/mc_socket.c
+++ b/vlib/vlib/unix/mc_socket.c
@@ -19,10 +19,11 @@
#include <vlib/unix/mc_socket.h>
#include <sys/ioctl.h> /* for FIONBIO */
-#include <netinet/tcp.h> /* for TCP_NODELAY */
+#include <netinet/tcp.h> /* for TCP_NODELAY */
#include <net/if.h> /* for struct ifreq */
-static u8 * format_socket_peer_id (u8 * s, va_list * args)
+static u8 *
+format_socket_peer_id (u8 * s, va_list * args)
{
u64 peer_id_as_u64 = va_arg (*args, u64);
mc_peer_id_t peer_id;
@@ -30,36 +31,34 @@ static u8 * format_socket_peer_id (u8 * s, va_list * args)
u32 a = mc_socket_peer_id_get_address (peer_id);
u32 p = mc_socket_peer_id_get_port (peer_id);
- s = format (s, "%U:%04x", format_network_address, AF_INET, &a,
- ntohs (p));
+ s = format (s, "%U:%04x", format_network_address, AF_INET, &a, ntohs (p));
return s;
}
-typedef void (mc_msg_handler_t) (mc_main_t * mcm, void * msg, u32 buffer_index);
+typedef void (mc_msg_handler_t) (mc_main_t * mcm, void *msg,
+ u32 buffer_index);
-always_inline void msg_handler (mc_main_t * mcm,
- u32 buffer_index,
- u32 handler_frees_buffer,
- void * _h)
+always_inline void
+msg_handler (mc_main_t * mcm,
+ u32 buffer_index, u32 handler_frees_buffer, void *_h)
{
- vlib_main_t * vm = mcm->vlib_main;
- mc_msg_handler_t * h = _h;
- vlib_buffer_t * b = vlib_get_buffer (vm, buffer_index);
- void * the_msg = vlib_buffer_get_current (b);
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_msg_handler_t *h = _h;
+ vlib_buffer_t *b = vlib_get_buffer (vm, buffer_index);
+ void *the_msg = vlib_buffer_get_current (b);
h (mcm, the_msg, buffer_index);
- if (! handler_frees_buffer)
+ if (!handler_frees_buffer)
vlib_buffer_free_one (vm, buffer_index);
}
static uword
append_buffer_index_to_iovec (vlib_main_t * vm,
- u32 buffer_index,
- struct iovec ** iovs_return)
+ u32 buffer_index, struct iovec **iovs_return)
{
- struct iovec * i;
- vlib_buffer_t * b;
+ struct iovec *i;
+ vlib_buffer_t *b;
u32 bi = buffer_index;
u32 l = 0;
@@ -70,7 +69,7 @@ append_buffer_index_to_iovec (vlib_main_t * vm,
i->iov_base = vlib_buffer_get_current (b);
i->iov_len = b->current_length;
l += i->iov_len;
- if (! (b->flags & VLIB_BUFFER_NEXT_PRESENT))
+ if (!(b->flags & VLIB_BUFFER_NEXT_PRESENT))
break;
bi = b->next_buffer;
}
@@ -80,11 +79,9 @@ append_buffer_index_to_iovec (vlib_main_t * vm,
static clib_error_t *
sendmsg_helper (mc_socket_main_t * msm,
- int socket,
- struct sockaddr_in * tx_addr,
- u32 buffer_index)
+ int socket, struct sockaddr_in *tx_addr, u32 buffer_index)
{
- vlib_main_t * vm = msm->mc_main.vlib_main;
+ vlib_main_t *vm = msm->mc_main.vlib_main;
struct msghdr h;
word n_bytes, n_bytes_tx, n_retries;
@@ -105,7 +102,7 @@ sendmsg_helper (mc_socket_main_t * msm,
n_retries = 0;
while ((n_bytes_tx = sendmsg (socket, &h, /* flags */ 0)) != n_bytes
- && errno == EAGAIN)
+ && errno == EAGAIN)
n_retries++;
if (n_bytes_tx != n_bytes)
{
@@ -114,11 +111,13 @@ sendmsg_helper (mc_socket_main_t * msm,
}
if (n_retries)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "sendmsg-helper: %d retries",
- .format_args = "i4",
- };
- struct { u32 retries; } * ed = 0;
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "sendmsg-helper: %d retries",.format_args = "i4",};
+ struct
+ {
+ u32 retries;
+ } *ed = 0;
ed = ELOG_DATA (&vm->elog_main, e);
ed->retries = n_retries;
@@ -127,12 +126,12 @@ sendmsg_helper (mc_socket_main_t * msm,
}
static clib_error_t *
-tx_buffer (void * transport, mc_transport_type_t type, u32 buffer_index)
+tx_buffer (void *transport, mc_transport_type_t type, u32 buffer_index)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)transport;
- vlib_main_t * vm = msm->mc_main.vlib_main;
- mc_multicast_socket_t * ms = &msm->multicast_sockets[type];
- clib_error_t * error;
+ mc_socket_main_t *msm = (mc_socket_main_t *) transport;
+ vlib_main_t *vm = msm->mc_main.vlib_main;
+ mc_multicast_socket_t *ms = &msm->multicast_sockets[type];
+ clib_error_t *error;
error = sendmsg_helper (msm, ms->socket, &ms->tx_addr, buffer_index);
if (type != MC_TRANSPORT_USER_REQUEST_TO_RELAY)
vlib_buffer_free_one (vm, buffer_index);
@@ -143,9 +142,9 @@ static clib_error_t *
tx_ack (void *transport, mc_peer_id_t dest_peer_id, u32 buffer_index)
{
struct sockaddr_in tx_addr;
- mc_socket_main_t *msm = (mc_socket_main_t *)transport;
- vlib_main_t * vm = msm->mc_main.vlib_main;
- clib_error_t * error;
+ mc_socket_main_t *msm = (mc_socket_main_t *) transport;
+ vlib_main_t *vm = msm->mc_main.vlib_main;
+ clib_error_t *error;
memset (&tx_addr, 0, sizeof (tx_addr));
tx_addr.sin_family = AF_INET;
@@ -160,12 +159,11 @@ tx_ack (void *transport, mc_peer_id_t dest_peer_id, u32 buffer_index)
static clib_error_t *
recvmsg_helper (mc_socket_main_t * msm,
int socket,
- struct sockaddr_in * rx_addr,
- u32 * buffer_index,
- u32 drop_message)
+ struct sockaddr_in *rx_addr,
+ u32 * buffer_index, u32 drop_message)
{
- vlib_main_t * vm = msm->mc_main.vlib_main;
- vlib_buffer_t * b;
+ vlib_main_t *vm = msm->mc_main.vlib_main;
+ vlib_buffer_t *b;
uword n_left, n_alloc, n_mtu, i, i_rx;
const uword buffer_size = VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES;
word n_bytes_left;
@@ -177,7 +175,8 @@ recvmsg_helper (mc_socket_main_t * msm,
{
uword max_alloc = 8 * n_mtu;
vec_validate (msm->rx_buffers, max_alloc - 1);
- n_alloc = vlib_buffer_alloc (vm, msm->rx_buffers + n_left, max_alloc - n_left);
+ n_alloc =
+ vlib_buffer_alloc (vm, msm->rx_buffers + n_left, max_alloc - n_left);
_vec_len (msm->rx_buffers) = n_left + n_alloc;
}
@@ -225,7 +224,8 @@ recvmsg_helper (mc_socket_main_t * msm,
b->flags = 0;
b->current_data = 0;
- b->current_length = n_bytes_left < buffer_size ? n_bytes_left : buffer_size;
+ b->current_length =
+ n_bytes_left < buffer_size ? n_bytes_left : buffer_size;
n_bytes_left -= buffer_size;
@@ -239,19 +239,22 @@ recvmsg_helper (mc_socket_main_t * msm,
_vec_len (msm->rx_buffers) = i_rx;
- return 0 /* no error */;
+ return 0 /* no error */ ;
}
-static clib_error_t * mastership_socket_read_ready (unix_file_t * uf)
+static clib_error_t *
+mastership_socket_read_ready (unix_file_t * uf)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- mc_main_t * mcm = &msm->mc_main;
- mc_multicast_socket_t * ms = &msm->multicast_sockets[MC_TRANSPORT_MASTERSHIP];
- clib_error_t * error;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ mc_main_t *mcm = &msm->mc_main;
+ mc_multicast_socket_t *ms =
+ &msm->multicast_sockets[MC_TRANSPORT_MASTERSHIP];
+ clib_error_t *error;
u32 bi;
- error = recvmsg_helper (msm, ms->socket, /* rx_addr */ 0, &bi, /* drop_message */ 0);
- if (! error)
+ error = recvmsg_helper (msm, ms->socket, /* rx_addr */ 0, &bi, /* drop_message */
+ 0);
+ if (!error)
msg_handler (mcm, bi,
/* handler_frees_buffer */ 0,
mc_msg_master_assert_handler);
@@ -259,45 +262,53 @@ static clib_error_t * mastership_socket_read_ready (unix_file_t * uf)
return error;
}
-static clib_error_t * to_relay_socket_read_ready (unix_file_t * uf)
+static clib_error_t *
+to_relay_socket_read_ready (unix_file_t * uf)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
- vlib_main_t * vm = msm->mc_main.vlib_main;
- mc_multicast_socket_t * ms_to_relay = &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_TO_RELAY];
- mc_multicast_socket_t * ms_from_relay = &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY];
- clib_error_t * error;
+ vlib_main_t *vm = msm->mc_main.vlib_main;
+ mc_multicast_socket_t *ms_to_relay =
+ &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_TO_RELAY];
+ mc_multicast_socket_t *ms_from_relay =
+ &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY];
+ clib_error_t *error;
u32 bi;
u32 is_master = mcm->relay_state == MC_RELAY_STATE_MASTER;
/* Not the ordering master? Turf the msg */
error = recvmsg_helper (msm, ms_to_relay->socket, /* rx_addr */ 0, &bi,
- /* drop_message */ ! is_master);
+ /* drop_message */ !is_master);
/* If we are the master, number and rebroadcast the msg. */
- if (! error && is_master)
+ if (!error && is_master)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, bi);
- mc_msg_user_request_t * mp = vlib_buffer_get_current (b);
+ vlib_buffer_t *b = vlib_get_buffer (vm, bi);
+ mc_msg_user_request_t *mp = vlib_buffer_get_current (b);
mp->global_sequence = clib_host_to_net_u32 (mcm->relay_global_sequence);
mcm->relay_global_sequence++;
- error = sendmsg_helper (msm, ms_from_relay->socket, &ms_from_relay->tx_addr, bi);
+ error =
+ sendmsg_helper (msm, ms_from_relay->socket, &ms_from_relay->tx_addr,
+ bi);
vlib_buffer_free_one (vm, bi);
}
return error;
}
-static clib_error_t * from_relay_socket_read_ready (unix_file_t * uf)
+static clib_error_t *
+from_relay_socket_read_ready (unix_file_t * uf)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- mc_main_t * mcm = &msm->mc_main;
- mc_multicast_socket_t * ms = &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY];
- clib_error_t * error;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ mc_main_t *mcm = &msm->mc_main;
+ mc_multicast_socket_t *ms =
+ &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY];
+ clib_error_t *error;
u32 bi;
- error = recvmsg_helper (msm, ms->socket, /* rx_addr */ 0, &bi, /* drop_message */ 0);
- if (! error)
+ error = recvmsg_helper (msm, ms->socket, /* rx_addr */ 0, &bi, /* drop_message */
+ 0);
+ if (!error)
{
msg_handler (mcm, bi, /* handler_frees_buffer */ 1,
mc_msg_user_request_handler);
@@ -305,20 +316,22 @@ static clib_error_t * from_relay_socket_read_ready (unix_file_t * uf)
return error;
}
-static clib_error_t * join_socket_read_ready (unix_file_t * uf)
+static clib_error_t *
+join_socket_read_ready (unix_file_t * uf)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- mc_main_t * mcm = &msm->mc_main;
- vlib_main_t * vm = mcm->vlib_main;
- mc_multicast_socket_t * ms = &msm->multicast_sockets[MC_TRANSPORT_JOIN];
- clib_error_t * error;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ mc_main_t *mcm = &msm->mc_main;
+ vlib_main_t *vm = mcm->vlib_main;
+ mc_multicast_socket_t *ms = &msm->multicast_sockets[MC_TRANSPORT_JOIN];
+ clib_error_t *error;
u32 bi;
- error = recvmsg_helper (msm, ms->socket, /* rx_addr */ 0, &bi, /* drop_message */ 0);
- if (! error)
+ error = recvmsg_helper (msm, ms->socket, /* rx_addr */ 0, &bi, /* drop_message */
+ 0);
+ if (!error)
{
- vlib_buffer_t * b = vlib_get_buffer (vm, bi);
- mc_msg_join_or_leave_request_t * mp = vlib_buffer_get_current (b);
+ vlib_buffer_t *b = vlib_get_buffer (vm, bi);
+ mc_msg_join_or_leave_request_t *mp = vlib_buffer_get_current (b);
switch (clib_host_to_net_u32 (mp->type))
{
@@ -340,23 +353,25 @@ static clib_error_t * join_socket_read_ready (unix_file_t * uf)
return error;
}
-static clib_error_t * ack_socket_read_ready (unix_file_t * uf)
+static clib_error_t *
+ack_socket_read_ready (unix_file_t * uf)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- mc_main_t * mcm = &msm->mc_main;
- clib_error_t * error;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ mc_main_t *mcm = &msm->mc_main;
+ clib_error_t *error;
u32 bi;
- error = recvmsg_helper (msm, msm->ack_socket, /* rx_addr */ 0, &bi, /* drop_message */ 0);
- if (! error)
+ error = recvmsg_helper (msm, msm->ack_socket, /* rx_addr */ 0, &bi,
+ /* drop_message */ 0);
+ if (!error)
msg_handler (mcm, bi, /* handler_frees_buffer */ 0,
mc_msg_user_ack_handler);
return error;
}
-static void catchup_cleanup (mc_socket_main_t *msm,
- mc_socket_catchup_t *c,
- unix_main_t *um, unix_file_t *uf)
+static void
+catchup_cleanup (mc_socket_main_t * msm,
+ mc_socket_catchup_t * c, unix_main_t * um, unix_file_t * uf)
{
hash_unset (msm->catchup_index_by_file_descriptor, uf->file_descriptor);
unix_file_del (um, uf);
@@ -366,23 +381,29 @@ static void catchup_cleanup (mc_socket_main_t *msm,
}
static mc_socket_catchup_t *
-find_catchup_from_file_descriptor (mc_socket_main_t * msm, int file_descriptor)
+find_catchup_from_file_descriptor (mc_socket_main_t * msm,
+ int file_descriptor)
{
- uword * p = hash_get (msm->catchup_index_by_file_descriptor, file_descriptor);
+ uword *p =
+ hash_get (msm->catchup_index_by_file_descriptor, file_descriptor);
return p ? pool_elt_at_index (msm->catchups, p[0]) : 0;
}
-static clib_error_t * catchup_socket_read_ready (unix_file_t * uf, int is_server)
+static clib_error_t *
+catchup_socket_read_ready (unix_file_t * uf, int is_server)
{
- unix_main_t * um = &unix_main;
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
+ unix_main_t *um = &unix_main;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
- mc_socket_catchup_t * c = find_catchup_from_file_descriptor (msm, uf->file_descriptor);
+ mc_socket_catchup_t *c =
+ find_catchup_from_file_descriptor (msm, uf->file_descriptor);
word l, n, is_eof;
l = vec_len (c->input_vector);
vec_resize (c->input_vector, 4096);
- n = read (uf->file_descriptor, c->input_vector + l, vec_len (c->input_vector) - l);
+ n =
+ read (uf->file_descriptor, c->input_vector + l,
+ vec_len (c->input_vector) - l);
is_eof = n == 0;
if (n < 0)
@@ -402,43 +423,50 @@ static clib_error_t * catchup_socket_read_ready (unix_file_t * uf, int is_server
{
if (is_server)
{
- mc_msg_catchup_request_handler (mcm, (void *) c->input_vector, c - msm->catchups);
+ mc_msg_catchup_request_handler (mcm, (void *) c->input_vector,
+ c - msm->catchups);
_vec_len (c->input_vector) = 0;
}
else
{
- mc_msg_catchup_reply_handler (mcm, (void *) c->input_vector, c - msm->catchups);
+ mc_msg_catchup_reply_handler (mcm, (void *) c->input_vector,
+ c - msm->catchups);
c->input_vector = 0; /* reply handler is responsible for freeing vector */
catchup_cleanup (msm, c, um, uf);
}
}
- return 0 /* no error */;
+ return 0 /* no error */ ;
}
-static clib_error_t * catchup_server_read_ready (unix_file_t * uf)
-{ return catchup_socket_read_ready (uf, /* is_server */ 1); }
+static clib_error_t *
+catchup_server_read_ready (unix_file_t * uf)
+{
+ return catchup_socket_read_ready (uf, /* is_server */ 1);
+}
-static clib_error_t * catchup_client_read_ready (unix_file_t * uf)
-{
- if (MC_EVENT_LOGGING)
- {
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- vlib_main_t * vm = msm->mc_main.vlib_main;
-
- ELOG_TYPE (e, "catchup_client_read_ready");
- ELOG (&vm->elog_main, e, 0);
- }
- return catchup_socket_read_ready (uf, /* is_server */ 0);
+static clib_error_t *
+catchup_client_read_ready (unix_file_t * uf)
+{
+ if (MC_EVENT_LOGGING)
+ {
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ vlib_main_t *vm = msm->mc_main.vlib_main;
+
+ ELOG_TYPE (e, "catchup_client_read_ready");
+ ELOG (&vm->elog_main, e, 0);
+ }
+ return catchup_socket_read_ready (uf, /* is_server */ 0);
}
-static clib_error_t *
+static clib_error_t *
catchup_socket_write_ready (unix_file_t * uf, int is_server)
{
- unix_main_t * um = &unix_main;
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- mc_socket_catchup_t *c = find_catchup_from_file_descriptor (msm, uf->file_descriptor);
- clib_error_t * error = 0;
+ unix_main_t *um = &unix_main;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ mc_socket_catchup_t *c =
+ find_catchup_from_file_descriptor (msm, uf->file_descriptor);
+ clib_error_t *error = 0;
int n;
if (c->connect_in_progress)
@@ -447,50 +475,54 @@ catchup_socket_write_ready (unix_file_t * uf, int is_server)
c->connect_in_progress = 0;
len = sizeof (value);
- if (getsockopt (c->socket, SOL_SOCKET,
- SO_ERROR, &value, &len) < 0)
+ if (getsockopt (c->socket, SOL_SOCKET, SO_ERROR, &value, &len) < 0)
{
error = clib_error_return_unix (0, "getsockopt SO_ERROR");
goto error_quit;
}
if (value != 0)
{
- error = clib_error_return_code (0, value, CLIB_ERROR_ERRNO_VALID, "connect fails");
+ error =
+ clib_error_return_code (0, value, CLIB_ERROR_ERRNO_VALID,
+ "connect fails");
goto error_quit;
}
}
- while (1)
+ while (1)
{
u32 n_this_write;
-
- n_this_write =
- clib_min (vec_len (c->output_vector) - c->output_vector_n_written,
- msm->rx_mtu_n_bytes - 64 /* ip + tcp + option allowance */);
+
+ n_this_write =
+ clib_min (vec_len (c->output_vector) - c->output_vector_n_written,
+ msm->rx_mtu_n_bytes -
+ 64 /* ip + tcp + option allowance */ );
if (n_this_write <= 0)
- break;
-
- do {
- n = write (uf->file_descriptor,
- c->output_vector + c->output_vector_n_written,
- n_this_write);
- } while (n < 0 && errno == EAGAIN);
-
+ break;
+
+ do
+ {
+ n = write (uf->file_descriptor,
+ c->output_vector + c->output_vector_n_written,
+ n_this_write);
+ }
+ while (n < 0 && errno == EAGAIN);
+
if (n < 0)
- {
- error = clib_error_return_unix (0, "write");
- goto error_quit;
- }
+ {
+ error = clib_error_return_unix (0, "write");
+ goto error_quit;
+ }
c->output_vector_n_written += n;
- }
+ }
if (c->output_vector_n_written >= vec_len (c->output_vector))
{
- if (! is_server)
+ if (!is_server)
{
- uf->flags &= ~UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
- unix_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
+ uf->flags &= ~UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
+ unix_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
/* Send EOF to other side. */
shutdown (uf->file_descriptor, SHUT_WR);
return error;
@@ -504,41 +536,48 @@ catchup_socket_write_ready (unix_file_t * uf, int is_server)
return error;
}
-static clib_error_t *
+static clib_error_t *
catchup_server_write_ready (unix_file_t * uf)
-{ return catchup_socket_write_ready (uf, /* is_server */ 1); }
+{
+ return catchup_socket_write_ready (uf, /* is_server */ 1);
+}
-static clib_error_t *
+static clib_error_t *
catchup_client_write_ready (unix_file_t * uf)
-{ return catchup_socket_write_ready (uf, /* is_server */ 0); }
+{
+ return catchup_socket_write_ready (uf, /* is_server */ 0);
+}
-static clib_error_t *catchup_socket_error_ready (unix_file_t *uf)
+static clib_error_t *
+catchup_socket_error_ready (unix_file_t * uf)
{
unix_main_t *um = &unix_main;
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
- mc_socket_catchup_t *c = find_catchup_from_file_descriptor (msm, uf->file_descriptor);
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
+ mc_socket_catchup_t *c =
+ find_catchup_from_file_descriptor (msm, uf->file_descriptor);
catchup_cleanup (msm, c, um, uf);
return clib_error_return (0, "error");
}
-static clib_error_t *catchup_listen_read_ready (unix_file_t * uf)
+static clib_error_t *
+catchup_listen_read_ready (unix_file_t * uf)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)uf->private_data;
+ mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
struct sockaddr_in client_addr;
int client_len;
mc_socket_catchup_t *c;
- unix_file_t template = {0};
+ unix_file_t template = { 0 };
pool_get (msm->catchups, c);
- memset(c, 0, sizeof (c[0]));
+ memset (c, 0, sizeof (c[0]));
+
+ client_len = sizeof (client_addr);
- client_len = sizeof(client_addr);
-
/* Acquires the non-blocking attrib from the server socket. */
- c->socket = accept (uf->file_descriptor,
- (struct sockaddr *)&client_addr,
- (socklen_t *)&client_len);
-
+ c->socket = accept (uf->file_descriptor,
+ (struct sockaddr *) &client_addr,
+ (socklen_t *) & client_len);
+
if (c->socket < 0)
{
pool_put (msm->catchups, c);
@@ -547,26 +586,29 @@ static clib_error_t *catchup_listen_read_ready (unix_file_t * uf)
if (MC_EVENT_LOGGING)
{
- mc_main_t * mcm = &msm->mc_main;
- vlib_main_t * vm = mcm->vlib_main;
+ mc_main_t *mcm = &msm->mc_main;
+ vlib_main_t *vm = mcm->vlib_main;
- ELOG_TYPE_DECLARE (e) = {
- .format = "catchup accepted from 0x%lx",
- .format_args = "i4",
- };
- struct { u32 addr; } * ed = 0;
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "catchup accepted from 0x%lx",.format_args = "i4",};
+ struct
+ {
+ u32 addr;
+ } *ed = 0;
ed = ELOG_DATA (&vm->elog_main, e);
- ed->addr = ntohl(client_addr.sin_addr.s_addr);
+ ed->addr = ntohl (client_addr.sin_addr.s_addr);
}
/* Disable the Nagle algorithm, ship catchup pkts immediately */
{
int one = 1;
- if ((setsockopt(c->socket, IPPROTO_TCP,
- TCP_NODELAY, (void *)&one, sizeof(one))) < 0) {
- clib_unix_warning("catchup socket: set TCP_NODELAY");
- }
+ if ((setsockopt (c->socket, IPPROTO_TCP,
+ TCP_NODELAY, (void *) &one, sizeof (one))) < 0)
+ {
+ clib_unix_warning ("catchup socket: set TCP_NODELAY");
+ }
}
template.read_function = catchup_server_read_ready;
@@ -575,19 +617,21 @@ static clib_error_t *catchup_listen_read_ready (unix_file_t * uf)
template.file_descriptor = c->socket;
template.private_data = pointer_to_uword (msm);
c->unix_file_index = unix_file_add (&unix_main, &template);
- hash_set (msm->catchup_index_by_file_descriptor, c->socket, c - msm->catchups);
+ hash_set (msm->catchup_index_by_file_descriptor, c->socket,
+ c - msm->catchups);
return 0;
}
/* Return and bind to an unused port. */
-static word find_and_bind_to_free_port (word sock, word port)
+static word
+find_and_bind_to_free_port (word sock, word port)
{
for (; port < 1 << 16; port++)
{
struct sockaddr_in a;
- memset (&a, 0, sizeof(a)); /* Warnings be gone */
+ memset (&a, 0, sizeof (a)); /* Warnings be gone */
a.sin_family = PF_INET;
a.sin_addr.s_addr = INADDR_ANY;
@@ -596,54 +640,57 @@ static word find_and_bind_to_free_port (word sock, word port)
if (bind (sock, (struct sockaddr *) &a, sizeof (a)) >= 0)
break;
}
-
+
return port < 1 << 16 ? port : -1;
}
static clib_error_t *
setup_mutlicast_socket (mc_socket_main_t * msm,
mc_multicast_socket_t * ms,
- char * type,
- uword udp_port)
+ char *type, uword udp_port)
{
int one = 1;
struct ip_mreq mcast_req;
- if (! msm->multicast_ttl)
+ if (!msm->multicast_ttl)
msm->multicast_ttl = 1;
/* mastership (multicast) TX socket */
if ((ms->socket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
- return clib_error_return_unix(0, "%s socket", type);
+ return clib_error_return_unix (0, "%s socket", type);
{
u8 ttl = msm->multicast_ttl;
- if ((setsockopt(ms->socket, IPPROTO_IP,
- IP_MULTICAST_TTL, (void *)&ttl, sizeof(ttl))) < 0)
- return clib_error_return_unix(0, "%s set multicast ttl", type);
+ if ((setsockopt (ms->socket, IPPROTO_IP,
+ IP_MULTICAST_TTL, (void *) &ttl, sizeof (ttl))) < 0)
+ return clib_error_return_unix (0, "%s set multicast ttl", type);
}
- if (setsockopt(ms->socket, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0)
+ if (setsockopt (ms->socket, SOL_SOCKET, SO_REUSEADDR, &one, sizeof (one)) <
+ 0)
return clib_error_return_unix (0, "%s setsockopt SO_REUSEADDR", type);
memset (&ms->tx_addr, 0, sizeof (ms->tx_addr));
ms->tx_addr.sin_family = AF_INET;
- ms->tx_addr.sin_addr.s_addr = htonl (msm->multicast_tx_ip4_address_host_byte_order);
+ ms->tx_addr.sin_addr.s_addr =
+ htonl (msm->multicast_tx_ip4_address_host_byte_order);
ms->tx_addr.sin_port = htons (udp_port);
-
- if (bind(ms->socket, (struct sockaddr *)&ms->tx_addr,
- sizeof (ms->tx_addr)) < 0)
- return clib_error_return_unix(0, "%s bind", type);
+
+ if (bind (ms->socket, (struct sockaddr *) &ms->tx_addr,
+ sizeof (ms->tx_addr)) < 0)
+ return clib_error_return_unix (0, "%s bind", type);
memset (&mcast_req, 0, sizeof (mcast_req));
- mcast_req.imr_multiaddr.s_addr = htonl (msm->multicast_tx_ip4_address_host_byte_order);
+ mcast_req.imr_multiaddr.s_addr =
+ htonl (msm->multicast_tx_ip4_address_host_byte_order);
mcast_req.imr_interface.s_addr = msm->if_ip4_address_net_byte_order;
- if ((setsockopt(ms->socket, IPPROTO_IP,
- IP_ADD_MEMBERSHIP, (void *)&mcast_req,
- sizeof (mcast_req))) < 0)
- return clib_error_return_unix(0, "%s IP_ADD_MEMBERSHIP setsockopt", type);
+ if ((setsockopt (ms->socket, IPPROTO_IP,
+ IP_ADD_MEMBERSHIP, (void *) &mcast_req,
+ sizeof (mcast_req))) < 0)
+ return clib_error_return_unix (0, "%s IP_ADD_MEMBERSHIP setsockopt",
+ type);
if (ioctl (ms->socket, FIONBIO, &one) < 0)
return clib_error_return_unix (0, "%s set FIONBIO", type);
@@ -652,7 +699,7 @@ setup_mutlicast_socket (mc_socket_main_t * msm,
{
u32 len = 1 << 20;
socklen_t sl = sizeof (len);
- if (setsockopt(ms->socket, SOL_SOCKET, SO_SNDBUF, &len, sl) < 0)
+ if (setsockopt (ms->socket, SOL_SOCKET, SO_SNDBUF, &len, sl) < 0)
clib_unix_error ("setsockopt");
}
@@ -660,92 +707,96 @@ setup_mutlicast_socket (mc_socket_main_t * msm,
}
static clib_error_t *
-socket_setup (mc_socket_main_t *msm)
+socket_setup (mc_socket_main_t * msm)
{
int one = 1;
- clib_error_t * error;
+ clib_error_t *error;
u32 port;
- if (! msm->base_multicast_udp_port_host_byte_order)
- msm->base_multicast_udp_port_host_byte_order =
- 0xffff - ((MC_N_TRANSPORT_TYPE + 2 /* ack socket, catchup socket */)
- - 1);
+ if (!msm->base_multicast_udp_port_host_byte_order)
+ msm->base_multicast_udp_port_host_byte_order =
+ 0xffff - ((MC_N_TRANSPORT_TYPE + 2 /* ack socket, catchup socket */ )
+ - 1);
port = msm->base_multicast_udp_port_host_byte_order;
error = setup_mutlicast_socket (msm,
- &msm->multicast_sockets[MC_TRANSPORT_MASTERSHIP],
- "mastership",
+ &msm->multicast_sockets
+ [MC_TRANSPORT_MASTERSHIP], "mastership",
port++);
if (error)
return error;
error = setup_mutlicast_socket (msm,
&msm->multicast_sockets[MC_TRANSPORT_JOIN],
- "join",
- port++);
+ "join", port++);
if (error)
return error;
error = setup_mutlicast_socket (msm,
- &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_TO_RELAY],
- "to relay",
- port++);
+ &msm->multicast_sockets
+ [MC_TRANSPORT_USER_REQUEST_TO_RELAY],
+ "to relay", port++);
if (error)
return error;
error = setup_mutlicast_socket (msm,
- &msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY],
- "from relay",
- port++);
+ &msm->multicast_sockets
+ [MC_TRANSPORT_USER_REQUEST_FROM_RELAY],
+ "from relay", port++);
if (error)
return error;
/* ACK rx socket */
msm->ack_socket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (msm->ack_socket < 0)
- return clib_error_return_unix(0, "ack socket");
+ return clib_error_return_unix (0, "ack socket");
msm->ack_udp_port = find_and_bind_to_free_port (msm->ack_socket, port++);
if (ioctl (msm->ack_socket, FIONBIO, &one) < 0)
return clib_error_return_unix (0, "ack socket FIONBIO");
- msm->catchup_server_socket = socket(AF_INET, SOCK_STREAM, 0);
+ msm->catchup_server_socket = socket (AF_INET, SOCK_STREAM, 0);
if (msm->catchup_server_socket < 0)
return clib_error_return_unix (0, "catchup server socket");
-
- msm->catchup_tcp_port = find_and_bind_to_free_port (msm->catchup_server_socket, port++);
+
+ msm->catchup_tcp_port =
+ find_and_bind_to_free_port (msm->catchup_server_socket, port++);
if (ioctl (msm->catchup_server_socket, FIONBIO, &one) < 0)
return clib_error_return_unix (0, "catchup server socket FIONBIO");
- if (listen(msm->catchup_server_socket, 5) < 0)
+ if (listen (msm->catchup_server_socket, 5) < 0)
return clib_error_return_unix (0, "catchup server socket listen");
-
+
/* epoll setup for multicast mastership socket */
{
- unix_file_t template = {0};
+ unix_file_t template = { 0 };
template.read_function = mastership_socket_read_ready;
- template.file_descriptor = msm->multicast_sockets[MC_TRANSPORT_MASTERSHIP].socket;
+ template.file_descriptor =
+ msm->multicast_sockets[MC_TRANSPORT_MASTERSHIP].socket;
template.private_data = (uword) msm;
unix_file_add (&unix_main, &template);
/* epoll setup for multicast to_relay socket */
template.read_function = to_relay_socket_read_ready;
- template.file_descriptor = msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_TO_RELAY].socket;
+ template.file_descriptor =
+ msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_TO_RELAY].socket;
template.private_data = (uword) msm;
unix_file_add (&unix_main, &template);
/* epoll setup for multicast from_relay socket */
template.read_function = from_relay_socket_read_ready;
- template.file_descriptor = msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY].socket;
+ template.file_descriptor =
+ msm->multicast_sockets[MC_TRANSPORT_USER_REQUEST_FROM_RELAY].socket;
template.private_data = (uword) msm;
unix_file_add (&unix_main, &template);
template.read_function = join_socket_read_ready;
- template.file_descriptor = msm->multicast_sockets[MC_TRANSPORT_JOIN].socket;
+ template.file_descriptor =
+ msm->multicast_sockets[MC_TRANSPORT_JOIN].socket;
template.private_data = (uword) msm;
unix_file_add (&unix_main, &template);
@@ -766,11 +817,12 @@ socket_setup (mc_socket_main_t *msm)
}
static void *
-catchup_add_pending_output (mc_socket_catchup_t * c, uword n_bytes, u8 * set_output_vector)
+catchup_add_pending_output (mc_socket_catchup_t * c, uword n_bytes,
+ u8 * set_output_vector)
{
- unix_file_t * uf = pool_elt_at_index (unix_main.file_pool,
- c->unix_file_index);
- u8 * result=0;
+ unix_file_t *uf = pool_elt_at_index (unix_main.file_pool,
+ c->unix_file_index);
+ u8 *result = 0;
if (set_output_vector)
c->output_vector = set_output_vector;
@@ -780,19 +832,19 @@ catchup_add_pending_output (mc_socket_catchup_t * c, uword n_bytes, u8 * set_out
{
int skip_update = 0 != (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
uf->flags |= UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
- if (! skip_update)
+ if (!skip_update)
unix_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
}
return result;
}
-static uword catchup_request_fun (void *transport_main,
- u32 stream_index,
- mc_peer_id_t catchup_peer_id)
+static uword
+catchup_request_fun (void *transport_main,
+ u32 stream_index, mc_peer_id_t catchup_peer_id)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)transport_main;
- mc_main_t * mcm = &msm->mc_main;
- vlib_main_t * vm = mcm->vlib_main;
+ mc_socket_main_t *msm = (mc_socket_main_t *) transport_main;
+ mc_main_t *mcm = &msm->mc_main;
+ vlib_main_t *vm = mcm->vlib_main;
mc_socket_catchup_t *c;
struct sockaddr_in addr;
unix_main_t *um = &unix_main;
@@ -801,7 +853,7 @@ static uword catchup_request_fun (void *transport_main,
pool_get (msm->catchups, c);
memset (c, 0, sizeof (*c));
- c->socket = socket(AF_INET, SOCK_STREAM, 0);
+ c->socket = socket (AF_INET, SOCK_STREAM, 0);
if (c->socket < 0)
{
clib_unix_warning ("socket");
@@ -814,35 +866,37 @@ static uword catchup_request_fun (void *transport_main,
return 0;
}
- memset(&addr, 0, sizeof(addr));
+ memset (&addr, 0, sizeof (addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = mc_socket_peer_id_get_address (catchup_peer_id);
addr.sin_port = mc_socket_peer_id_get_port (catchup_peer_id);
-
+
c->connect_in_progress = 1;
if (MC_EVENT_LOGGING)
{
- ELOG_TYPE_DECLARE (e) = {
- .format = "connecting to peer 0x%Lx",
- .format_args = "i8",
- };
- struct { u64 peer; } * ed;
+ ELOG_TYPE_DECLARE (e) =
+ {
+ .format = "connecting to peer 0x%Lx",.format_args = "i8",};
+ struct
+ {
+ u64 peer;
+ } *ed;
ed = ELOG_DATA (&vm->elog_main, e);
ed->peer = catchup_peer_id.as_u64;
}
-
- if (connect(c->socket, (const void *)&addr,sizeof(addr))
+
+ if (connect (c->socket, (const void *) &addr, sizeof (addr))
< 0 && errno != EINPROGRESS)
{
clib_unix_warning ("connect to %U fails",
format_socket_peer_id, catchup_peer_id);
return 0;
}
-
+
{
- unix_file_t template = {0};
-
+ unix_file_t template = { 0 };
+
template.read_function = catchup_client_read_ready;
template.write_function = catchup_client_write_ready;
template.error_function = catchup_socket_error_ready;
@@ -850,13 +904,15 @@ static uword catchup_request_fun (void *transport_main,
template.private_data = (uword) msm;
c->unix_file_index = unix_file_add (um, &template);
- hash_set (msm->catchup_index_by_file_descriptor, c->socket, c - msm->catchups);
+ hash_set (msm->catchup_index_by_file_descriptor, c->socket,
+ c - msm->catchups);
}
{
- mc_msg_catchup_request_t * mp;
- mp = catchup_add_pending_output (c, sizeof (mp[0]), /* set_output_vector */ 0);
- mp->peer_id = msm->mc_main.transport.our_catchup_peer_id;
+ mc_msg_catchup_request_t *mp;
+ mp = catchup_add_pending_output (c, sizeof (mp[0]), /* set_output_vector */
+ 0);
+ mp->peer_id = msm->mc_main.transport.our_catchup_peer_id;
mp->stream_index = stream_index;
mc_byte_swap_msg_catchup_request (mp);
}
@@ -864,33 +920,36 @@ static uword catchup_request_fun (void *transport_main,
return c - msm->catchups;
}
-static void catchup_send_fun (void *transport_main, uword opaque, u8 * data)
+static void
+catchup_send_fun (void *transport_main, uword opaque, u8 * data)
{
- mc_socket_main_t *msm = (mc_socket_main_t *)transport_main;
+ mc_socket_main_t *msm = (mc_socket_main_t *) transport_main;
mc_socket_catchup_t *c = pool_elt_at_index (msm->catchups, opaque);
catchup_add_pending_output (c, 0, data);
}
static int
-find_interface_ip4_address (char * if_name, u32 * ip4_address, u32 * mtu)
+find_interface_ip4_address (char *if_name, u32 * ip4_address, u32 * mtu)
{
int fd;
struct ifreq ifr;
- struct sockaddr_in * sa;
+ struct sockaddr_in *sa;
/* Dig up our IP address */
fd = socket (PF_INET, AF_INET, 0);
- if (fd < 0) {
- clib_unix_error ("socket");
- return -1;
- }
+ if (fd < 0)
+ {
+ clib_unix_error ("socket");
+ return -1;
+ }
ifr.ifr_addr.sa_family = AF_INET;
- strncpy (ifr.ifr_name, if_name, sizeof(ifr.ifr_name)-1);
- if (ioctl (fd, SIOCGIFADDR, &ifr) < 0) {
- clib_unix_error ("ioctl(SIOCFIGADDR)");
- return -1;
- }
+ strncpy (ifr.ifr_name, if_name, sizeof (ifr.ifr_name) - 1);
+ if (ioctl (fd, SIOCGIFADDR, &ifr) < 0)
+ {
+ clib_unix_error ("ioctl(SIOCFIGADDR)");
+ return -1;
+ }
sa = (void *) &ifr.ifr_addr;
clib_memcpy (ip4_address, &sa->sin_addr.s_addr, sizeof (ip4_address[0]));
@@ -898,7 +957,7 @@ find_interface_ip4_address (char * if_name, u32 * ip4_address, u32 * mtu)
if (ioctl (fd, SIOCGIFMTU, &ifr) < 0)
return -1;
if (mtu)
- *mtu = ifr.ifr_mtu - (/* IP4 header */ 20 + /* UDP header */ 8);
+ *mtu = ifr.ifr_mtu - ( /* IP4 header */ 20 + /* UDP header */ 8);
close (fd);
@@ -907,16 +966,16 @@ find_interface_ip4_address (char * if_name, u32 * ip4_address, u32 * mtu)
clib_error_t *
mc_socket_main_init (mc_socket_main_t * msm, char **intfc_probe_list,
- int n_intfcs_to_probe)
+ int n_intfcs_to_probe)
{
- clib_error_t * error;
- mc_main_t * mcm;
+ clib_error_t *error;
+ mc_main_t *mcm;
u32 mtu;
mcm = &msm->mc_main;
/* 239.255.0.7 */
- if (! msm->multicast_tx_ip4_address_host_byte_order)
+ if (!msm->multicast_tx_ip4_address_host_byte_order)
msm->multicast_tx_ip4_address_host_byte_order = 0xefff0007;
{
@@ -925,12 +984,14 @@ mc_socket_main_init (mc_socket_main_t * msm, char **intfc_probe_list,
win = 0;
if (msm->multicast_interface_name)
{
- win = ! find_interface_ip4_address (msm->multicast_interface_name, &a, &mtu);
+ win =
+ !find_interface_ip4_address (msm->multicast_interface_name, &a,
+ &mtu);
}
else
{
for (i = 0; i < n_intfcs_to_probe; i++)
- if (! find_interface_ip4_address (intfc_probe_list[i], &a, &mtu))
+ if (!find_interface_ip4_address (intfc_probe_list[i], &a, &mtu))
{
win = 1;
msm->multicast_interface_name = intfc_probe_list[i];
@@ -938,25 +999,29 @@ mc_socket_main_init (mc_socket_main_t * msm, char **intfc_probe_list,
}
}
- if (! win)
+ if (!win)
return clib_error_return (0, "can't find interface ip4 address");
msm->if_ip4_address_net_byte_order = a;
}
msm->rx_mtu_n_bytes = mtu;
- msm->rx_mtu_n_buffers = msm->rx_mtu_n_bytes / VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES;
- msm->rx_mtu_n_buffers += (msm->rx_mtu_n_bytes % VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES) != 0;
+ msm->rx_mtu_n_buffers =
+ msm->rx_mtu_n_bytes / VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES;
+ msm->rx_mtu_n_buffers +=
+ (msm->rx_mtu_n_bytes % VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES) != 0;
error = socket_setup (msm);
if (error)
return error;
mcm->transport.our_ack_peer_id =
- mc_socket_set_peer_id (msm->if_ip4_address_net_byte_order, msm->ack_udp_port);
+ mc_socket_set_peer_id (msm->if_ip4_address_net_byte_order,
+ msm->ack_udp_port);
mcm->transport.our_catchup_peer_id =
- mc_socket_set_peer_id (msm->if_ip4_address_net_byte_order, msm->catchup_tcp_port);
+ mc_socket_set_peer_id (msm->if_ip4_address_net_byte_order,
+ msm->catchup_tcp_port);
mcm->transport.tx_buffer = tx_buffer;
mcm->transport.tx_ack = tx_ack;
@@ -970,3 +1035,11 @@ mc_socket_main_init (mc_socket_main_t * msm, char **intfc_probe_list,
return error;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/mc_socket.h b/vlib/vlib/unix/mc_socket.h
index 7dd6b5e27b1..273c9ad430b 100644
--- a/vlib/vlib/unix/mc_socket.h
+++ b/vlib/vlib/unix/mc_socket.h
@@ -21,24 +21,27 @@
#include <vlib/unix/unix.h>
#include <netinet/in.h>
-typedef struct {
+typedef struct
+{
int socket;
struct sockaddr_in tx_addr;
} mc_multicast_socket_t;
/* TCP catchup socket */
-typedef struct {
+typedef struct
+{
int socket;
u32 unix_file_index;
- u8 * input_vector;
- u8 * output_vector;
+ u8 *input_vector;
+ u8 *output_vector;
u32 output_vector_n_written;
u32 connect_in_progress;
} mc_socket_catchup_t;
-typedef struct mc_socket_main_t {
+typedef struct mc_socket_main_t
+{
mc_main_t mc_main;
/* Multicast mastership/to-relay/from-relay sockets. */
@@ -53,7 +56,7 @@ typedef struct mc_socket_main_t {
/* Pool of stream-private catchup sockets */
mc_socket_catchup_t *catchups;
- uword * catchup_index_by_file_descriptor;
+ uword *catchup_index_by_file_descriptor;
u32 rx_mtu_n_bytes;
@@ -61,19 +64,19 @@ typedef struct mc_socket_main_t {
u32 rx_mtu_n_buffers;
/* Vector of RX VLIB buffers. */
- u32 * rx_buffers;
+ u32 *rx_buffers;
/* Vector of scatter/gather descriptors for sending/receiving VLIB buffers
via kernel. */
- struct iovec * iovecs;
+ struct iovec *iovecs;
/* IP address of interface to use for multicast. */
u32 if_ip4_address_net_byte_order;
-
+
u32 ack_udp_port;
u32 catchup_tcp_port;
/* Interface on which to listen for multicasts. */
- char * multicast_interface_name;
+ char *multicast_interface_name;
/* Multicast address to use (e.g. 0xefff0000).
Host byte order. */
@@ -92,15 +95,15 @@ always_inline u32
mc_socket_peer_id_get_address (mc_peer_id_t i)
{
u32 a = ((i.as_u8[0] << 24)
- | (i.as_u8[1] << 16)
- | (i.as_u8[2] << 8)
- | (i.as_u8[3] << 0));
+ | (i.as_u8[1] << 16) | (i.as_u8[2] << 8) | (i.as_u8[3] << 0));
return clib_host_to_net_u32 (a);
}
always_inline u32
mc_socket_peer_id_get_port (mc_peer_id_t i)
-{ return clib_host_to_net_u16 ((i.as_u8[4] << 8) | i.as_u8[5]); }
+{
+ return clib_host_to_net_u16 ((i.as_u8[4] << 8) | i.as_u8[5]);
+}
static_always_inline mc_peer_id_t
mc_socket_set_peer_id (u32 address_net_byte_order, u32 port_host_byte_order)
@@ -110,17 +113,25 @@ mc_socket_set_peer_id (u32 address_net_byte_order, u32 port_host_byte_order)
u32 p = port_host_byte_order;
i.as_u8[0] = (a >> 24) & 0xff;
i.as_u8[1] = (a >> 16) & 0xff;
- i.as_u8[2] = (a >> 8) & 0xff;
- i.as_u8[3] = (a >> 0) & 0xff;
- i.as_u8[4] = (p >> 8) & 0xff;
- i.as_u8[5] = (p >> 0) & 0xff;
+ i.as_u8[2] = (a >> 8) & 0xff;
+ i.as_u8[3] = (a >> 0) & 0xff;
+ i.as_u8[4] = (p >> 8) & 0xff;
+ i.as_u8[5] = (p >> 0) & 0xff;
i.as_u8[6] = 0;
i.as_u8[7] = 0;
return i;
}
-clib_error_t *
-mc_socket_main_init (mc_socket_main_t * msm, char **intfc_probe_list,
- int n_intfcs_to_probe);
+clib_error_t *mc_socket_main_init (mc_socket_main_t * msm,
+ char **intfc_probe_list,
+ int n_intfcs_to_probe);
#endif /* __included_mc_socket_h__ */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/physmem.c b/vlib/vlib/unix/physmem.c
index d3155e0c7c9..80ab7b9d6f8 100644
--- a/vlib/vlib/unix/physmem.c
+++ b/vlib/vlib/unix/physmem.c
@@ -42,11 +42,12 @@
static physmem_main_t physmem_main;
static void *
-unix_physmem_alloc_aligned (vlib_physmem_main_t * vpm, uword n_bytes, uword alignment)
+unix_physmem_alloc_aligned (vlib_physmem_main_t * vpm, uword n_bytes,
+ uword alignment)
{
- physmem_main_t * pm = &physmem_main;
+ physmem_main_t *pm = &physmem_main;
uword lo_offset, hi_offset;
- uword * to_free = 0;
+ uword *to_free = 0;
#if DPDK > 0
clib_warning ("unsafe alloc!");
@@ -74,7 +75,7 @@ unix_physmem_alloc_aligned (vlib_physmem_main_t * vpm, uword n_bytes, uword alig
break;
/* Allocation would span chunk boundary, queue it to be freed as soon as
- we find suitable chunk. */
+ we find suitable chunk. */
vec_add1 (to_free, lo_offset);
}
@@ -89,43 +90,46 @@ unix_physmem_alloc_aligned (vlib_physmem_main_t * vpm, uword n_bytes, uword alig
return lo_offset != ~0 ? pm->heap + lo_offset : 0;
}
-static void unix_physmem_free (void * x)
+static void
+unix_physmem_free (void *x)
{
- physmem_main_t * pm = &physmem_main;
+ physmem_main_t *pm = &physmem_main;
/* Return object to region's heap. */
mheap_put (pm->heap, x - pm->heap);
}
-static void htlb_shutdown(void)
+static void
+htlb_shutdown (void)
{
- physmem_main_t * pm = &physmem_main;
-
- if (! pm->shmid)
+ physmem_main_t *pm = &physmem_main;
+
+ if (!pm->shmid)
return;
shmctl (pm->shmid, IPC_RMID, 0);
pm->shmid = 0;
}
/* try to use huge TLB pgs if possible */
-static int htlb_init (vlib_main_t * vm)
+static int
+htlb_init (vlib_main_t * vm)
{
- vlib_physmem_main_t * vpm = &vm->physmem_main;
- physmem_main_t * pm = &physmem_main;
+ vlib_physmem_main_t *vpm = &vm->physmem_main;
+ physmem_main_t *pm = &physmem_main;
u64 hugepagesize, pagesize;
u64 pfn, seek_loc;
u64 cur, physaddr, ptbits;
int fd, i;
- pm->shmid = shmget (11 /* key, my amp goes to 11 */, pm->mem_size,
- IPC_CREAT | SHM_HUGETLB | SHM_R | SHM_W);
+ pm->shmid = shmget (11 /* key, my amp goes to 11 */ , pm->mem_size,
+ IPC_CREAT | SHM_HUGETLB | SHM_R | SHM_W);
if (pm->shmid < 0)
{
clib_unix_warning ("shmget");
return 0;
}
- pm->mem = shmat (pm->shmid, NULL, 0 /* flags */);
+ pm->mem = shmat (pm->shmid, NULL, 0 /* flags */ );
if (pm->mem == 0)
{
shmctl (pm->shmid, IPC_RMID, 0);
@@ -135,8 +139,8 @@ static int htlb_init (vlib_main_t * vm)
memset (pm->mem, 0, pm->mem_size);
/* $$$ get page size info from /proc/meminfo */
- hugepagesize = 2<<20;
- pagesize = 4<<10;
+ hugepagesize = 2 << 20;
+ pagesize = 4 << 10;
vpm->log2_n_bytes_per_page = min_log2 (hugepagesize);
vec_resize (vpm->page_table, pm->mem_size / hugepagesize);
@@ -145,71 +149,72 @@ static int htlb_init (vlib_main_t * vm)
vpm->virtual.size = pm->mem_size;
vpm->virtual.end = vpm->virtual.start + vpm->virtual.size;
- fd = open("/proc/self/pagemap", O_RDONLY);
+ fd = open ("/proc/self/pagemap", O_RDONLY);
- if (fd < 0)
+ if (fd < 0)
{
(void) shmdt (pm->mem);
return 0;
}
-
- pm->heap = mheap_alloc_with_flags
- (pm->mem, pm->mem_size,
- /* Don't want mheap mmap/munmap with IO memory. */
- MHEAP_FLAG_DISABLE_VM);
-
- cur = pointer_to_uword(pm->mem);
+
+ pm->heap = mheap_alloc_with_flags (pm->mem, pm->mem_size,
+ /* Don't want mheap mmap/munmap with IO memory. */
+ MHEAP_FLAG_DISABLE_VM);
+
+ cur = pointer_to_uword (pm->mem);
i = 0;
- while (cur < pointer_to_uword(pm->mem) + pm->mem_size)
+ while (cur < pointer_to_uword (pm->mem) + pm->mem_size)
{
pfn = (u64) cur / pagesize;
seek_loc = pfn * sizeof (u64);
if (lseek (fd, seek_loc, SEEK_SET) != seek_loc)
- {
- clib_unix_warning ("lseek to 0x%llx", seek_loc);
- shmctl (pm->shmid, IPC_RMID, 0);
- close(fd);
- return 0;
- }
- if (read (fd, &ptbits, sizeof (ptbits)) != (sizeof(ptbits)))
- {
- clib_unix_warning ("read ptbits");
- shmctl (pm->shmid, IPC_RMID, 0);
- close(fd);
- return 0;
- }
-
+ {
+ clib_unix_warning ("lseek to 0x%llx", seek_loc);
+ shmctl (pm->shmid, IPC_RMID, 0);
+ close (fd);
+ return 0;
+ }
+ if (read (fd, &ptbits, sizeof (ptbits)) != (sizeof (ptbits)))
+ {
+ clib_unix_warning ("read ptbits");
+ shmctl (pm->shmid, IPC_RMID, 0);
+ close (fd);
+ return 0;
+ }
+
/* bits 0-54 are the physical page number */
physaddr = (ptbits & 0x7fffffffffffffULL) * pagesize;
if (CLIB_DEBUG > 1)
- fformat(stderr, "pm: virtual 0x%llx physical 0x%llx\n",
- cur, physaddr);
+ fformat (stderr, "pm: virtual 0x%llx physical 0x%llx\n",
+ cur, physaddr);
vpm->page_table[i++] = physaddr;
cur += hugepagesize;
}
- close(fd);
+ close (fd);
atexit (htlb_shutdown);
return 1;
}
-int vlib_app_physmem_init (vlib_main_t * vm,
- physmem_main_t * pm, int) __attribute__ ((weak));
-int vlib_app_physmem_init (vlib_main_t * vm, physmem_main_t * pm, int x)
+int vlib_app_physmem_init (vlib_main_t * vm,
+ physmem_main_t * pm, int) __attribute__ ((weak));
+int
+vlib_app_physmem_init (vlib_main_t * vm, physmem_main_t * pm, int x)
{
return 0;
}
-clib_error_t * unix_physmem_init (vlib_main_t * vm, int physical_memory_required)
+clib_error_t *
+unix_physmem_init (vlib_main_t * vm, int physical_memory_required)
{
- vlib_physmem_main_t * vpm = &vm->physmem_main;
- physmem_main_t * pm = &physmem_main;
- clib_error_t * error = 0;
+ vlib_physmem_main_t *vpm = &vm->physmem_main;
+ physmem_main_t *pm = &physmem_main;
+ clib_error_t *error = 0;
/* Avoid multiple calls. */
if (vm->os_physmem_alloc_aligned)
- return error;
+ return error;
vm->os_physmem_alloc_aligned = unix_physmem_alloc_aligned;
vm->os_physmem_free = unix_physmem_free;
@@ -220,15 +225,17 @@ clib_error_t * unix_physmem_init (vlib_main_t * vm, int physical_memory_required
/* OK, Mr. App, you tell us */
if (vlib_app_physmem_init (vm, pm, physical_memory_required))
- return 0;
+ return 0;
- if (!pm->no_hugepages && htlb_init(vm))
+ if (!pm->no_hugepages && htlb_init (vm))
{
- fformat(stderr, "%s: use huge pages\n", __FUNCTION__);
+ fformat (stderr, "%s: use huge pages\n", __FUNCTION__);
return 0;
}
- pm->mem = mmap (0, pm->mem_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ pm->mem =
+ mmap (0, pm->mem_size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (pm->mem == MAP_FAILED)
{
error = clib_error_return_unix (0, "mmap");
@@ -247,9 +254,9 @@ clib_error_t * unix_physmem_init (vlib_main_t * vm, int physical_memory_required
vpm->virtual.end = vpm->virtual.start + vpm->virtual.size;
vpm->is_fake = 1;
- fformat(stderr, "%s: use fake dma pages\n", __FUNCTION__);
+ fformat (stderr, "%s: use fake dma pages\n", __FUNCTION__);
- done:
+done:
if (error)
{
if (pm->mem != MAP_FAILED)
@@ -260,32 +267,32 @@ clib_error_t * unix_physmem_init (vlib_main_t * vm, int physical_memory_required
static clib_error_t *
show_physmem (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
#if DPDK > 0
- vlib_cli_output (vm, "Not supported with DPDK drivers.");
+ vlib_cli_output (vm, "Not supported with DPDK drivers.");
#else
- physmem_main_t * pm = &physmem_main;
+ physmem_main_t *pm = &physmem_main;
if (pm->heap)
- vlib_cli_output (vm, "%U", format_mheap, pm->heap, /* verbose */ 1);
+ vlib_cli_output (vm, "%U", format_mheap, pm->heap, /* verbose */ 1);
else
- vlib_cli_output (vm, "No physmem allocated.");
+ vlib_cli_output (vm, "No physmem allocated.");
#endif
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_physmem_command, static) = {
.path = "show physmem",
.short_help = "Show physical memory allocation",
.function = show_physmem,
};
+/* *INDENT-ON* */
static clib_error_t *
show_affinity (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
cpu_set_t set;
cpu_set_t *setp = &set;
@@ -295,66 +302,67 @@ show_affinity (vlib_main_t * vm,
int last_set_bit_in_run = -1;
int output_done = 0;
- rv = sched_getaffinity (0 /* pid, 0 = this proc */,
- sizeof (*setp), setp);
+ rv = sched_getaffinity (0 /* pid, 0 = this proc */ ,
+ sizeof (*setp), setp);
if (rv < 0)
{
vlib_cli_output (vm, "Couldn't get affinity mask: %s\n",
- strerror(errno));
+ strerror (errno));
return 0;
}
-
+
for (i = 0; i < 64; i++)
{
- if (CPU_ISSET(i, setp))
- {
- if (first_set_bit_in_run == -1)
- {
- first_set_bit_in_run = i;
- last_set_bit_in_run = i;
- if (output_done)
- s = format (s, ",");
- s = format (s, "%d-", i);
- output_done = 1;
- }
- else
- {
- if (i == (last_set_bit_in_run+1))
- last_set_bit_in_run = i;
- }
- }
+ if (CPU_ISSET (i, setp))
+ {
+ if (first_set_bit_in_run == -1)
+ {
+ first_set_bit_in_run = i;
+ last_set_bit_in_run = i;
+ if (output_done)
+ s = format (s, ",");
+ s = format (s, "%d-", i);
+ output_done = 1;
+ }
+ else
+ {
+ if (i == (last_set_bit_in_run + 1))
+ last_set_bit_in_run = i;
+ }
+ }
else
- {
- if (first_set_bit_in_run != -1)
- {
- if (first_set_bit_in_run == (i-1))
- {
- _vec_len (s) -= 2 + ((first_set_bit_in_run/10));
- }
- s = format (s, "%d", last_set_bit_in_run);
- first_set_bit_in_run = -1;
- last_set_bit_in_run = -1;
- }
- }
+ {
+ if (first_set_bit_in_run != -1)
+ {
+ if (first_set_bit_in_run == (i - 1))
+ {
+ _vec_len (s) -= 2 + ((first_set_bit_in_run / 10));
+ }
+ s = format (s, "%d", last_set_bit_in_run);
+ first_set_bit_in_run = -1;
+ last_set_bit_in_run = -1;
+ }
+ }
}
-
- if (first_set_bit_in_run != -1)
+
+ if (first_set_bit_in_run != -1)
s = format (s, "%d", first_set_bit_in_run);
vlib_cli_output (vm, "Process runs on: %v", s);
return 0;
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (show_affinity_command, static) = {
.path = "show affinity",
.short_help = "Show process cpu affinity",
.function = show_affinity,
};
+/* *INDENT-ON* */
static clib_error_t *
set_affinity (vlib_main_t * vm,
- unformat_input_t * input,
- vlib_cli_command_t * cmd)
+ unformat_input_t * input, vlib_cli_command_t * cmd)
{
cpu_set_t set;
cpu_set_t *setp = &set;
@@ -364,81 +372,85 @@ set_affinity (vlib_main_t * vm,
memset (setp, 0, sizeof (*setp));
- do {
- another_round = 0;
- if (unformat (input, "%d-%d,", &first, &last))
- {
- if (first > 64 || last > 64)
- {
- barf1:
- vlib_cli_output (vm, "range %d-%d invalid", first, last);
- return 0;
- }
-
- for (i = first; i <= last; i++)
- CPU_SET(i, setp);
- another_round = 1;
- }
- else if (unformat (input, "%d-%d", &first, &last))
- {
- if (first > 64 || last > 64)
- goto barf1;
-
- for (i = first; i <= last; i++)
- CPU_SET(i, setp);
- }
- else if (unformat (input, "%d,", &first))
- {
- if (first > 64)
- {
- barf2:
- vlib_cli_output (vm, "cpu %d invalid", first);
- return 0;
- }
- CPU_SET(first, setp);
- another_round = 1;
- }
- else if (unformat (input, "%d", &first))
- {
- if (first > 64)
- goto barf2;
-
- CPU_SET(first, setp);
- }
- } while (another_round);
-
- rv = sched_setaffinity (0 /* pid, 0 = this proc */,
- sizeof (*setp), setp);
+ do
+ {
+ another_round = 0;
+ if (unformat (input, "%d-%d,", &first, &last))
+ {
+ if (first > 64 || last > 64)
+ {
+ barf1:
+ vlib_cli_output (vm, "range %d-%d invalid", first, last);
+ return 0;
+ }
+
+ for (i = first; i <= last; i++)
+ CPU_SET (i, setp);
+ another_round = 1;
+ }
+ else if (unformat (input, "%d-%d", &first, &last))
+ {
+ if (first > 64 || last > 64)
+ goto barf1;
+
+ for (i = first; i <= last; i++)
+ CPU_SET (i, setp);
+ }
+ else if (unformat (input, "%d,", &first))
+ {
+ if (first > 64)
+ {
+ barf2:
+ vlib_cli_output (vm, "cpu %d invalid", first);
+ return 0;
+ }
+ CPU_SET (first, setp);
+ another_round = 1;
+ }
+ else if (unformat (input, "%d", &first))
+ {
+ if (first > 64)
+ goto barf2;
+
+ CPU_SET (first, setp);
+ }
+ }
+ while (another_round);
+
+ rv = sched_setaffinity (0 /* pid, 0 = this proc */ ,
+ sizeof (*setp), setp);
if (rv < 0)
{
vlib_cli_output (vm, "Couldn't get affinity mask: %s\n",
- strerror(errno));
+ strerror (errno));
return 0;
}
return show_affinity (vm, input, cmd);
}
+/* *INDENT-OFF* */
VLIB_CLI_COMMAND (set_affinity_command, static) = {
.path = "set affinity",
.short_help = "Set process cpu affinity",
.function = set_affinity,
};
+/* *INDENT-ON* */
static clib_error_t *
vlib_physmem_configure (vlib_main_t * vm, unformat_input_t * input)
{
- physmem_main_t * pm = &physmem_main;
+ physmem_main_t *pm = &physmem_main;
u32 size_in_mb;
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
if (unformat (input, "no-huge") || unformat (input, "no-huge-pages"))
- pm->no_hugepages = 1;
+ pm->no_hugepages = 1;
- else if (unformat(input, "size-in-mb %d", &size_in_mb) ||
- unformat(input, "size %d", &size_in_mb))
- pm->mem_size = size_in_mb << 20;
+ else if (unformat (input, "size-in-mb %d", &size_in_mb) ||
+ unformat (input, "size %d", &size_in_mb))
+ pm->mem_size = size_in_mb << 20;
else
return unformat_parse_error (input);
}
@@ -448,3 +460,11 @@ vlib_physmem_configure (vlib_main_t * vm, unformat_input_t * input)
}
VLIB_EARLY_CONFIG_FUNCTION (vlib_physmem_configure, "physmem");
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/physmem.h b/vlib/vlib/unix/physmem.h
index adbd3478edb..5519a7d6f3e 100644
--- a/vlib/vlib/unix/physmem.h
+++ b/vlib/vlib/unix/physmem.h
@@ -16,7 +16,7 @@
#define __included_physmem_h__
/* Manage I/O physical memory. */
-#define _GNU_SOURCE
+#define _GNU_SOURCE
#include <sched.h>
#include <vppinfra/cache.h>
#include <vppinfra/error.h>
@@ -35,15 +35,16 @@
#include <sys/ipc.h>
#include <sys/shm.h>
-typedef struct {
+typedef struct
+{
/* Virtual memory via mmaped. */
- void * mem;
+ void *mem;
/* Size in bytes. */
uword mem_size;
/* Heap allocated out of virtual memory. */
- void * heap;
+ void *heap;
/* huge TLB segment id */
int shmid;
@@ -54,3 +55,11 @@ typedef struct {
} physmem_main_t;
#endif /* __included_physmem_h__ */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/plugin.c b/vlib/vlib/unix/plugin.c
index 93bfbb71b7c..1869953d723 100644
--- a/vlib/vlib/unix/plugin.c
+++ b/vlib/vlib/unix/plugin.c
@@ -21,44 +21,46 @@
plugin_main_t vlib_plugin_main;
-void vlib_set_get_handoff_structure_cb (void *cb)
+void
+vlib_set_get_handoff_structure_cb (void *cb)
{
- plugin_main_t * pm = &vlib_plugin_main;
+ plugin_main_t *pm = &vlib_plugin_main;
pm->handoff_structure_get_cb = cb;
}
-static void * vnet_get_handoff_structure (void)
+static void *
+vnet_get_handoff_structure (void)
{
- void * (*fp)(void);
+ void *(*fp) (void);
fp = vlib_plugin_main.handoff_structure_get_cb;
if (fp == 0)
return 0;
else
- return (*fp)();
+ return (*fp) ();
}
-static int
-load_one_plugin (plugin_main_t *pm, plugin_info_t *pi, int from_early_init)
+static int
+load_one_plugin (plugin_main_t * pm, plugin_info_t * pi, int from_early_init)
{
void *handle, *register_handle;
- clib_error_t * (*fp)(vlib_main_t *, void *, int);
- clib_error_t * error;
+ clib_error_t *(*fp) (vlib_main_t *, void *, int);
+ clib_error_t *error;
void *handoff_structure;
-
- handle = dlopen ((char *)pi->name, RTLD_LAZY);
- /*
+ handle = dlopen ((char *) pi->name, RTLD_LAZY);
+
+ /*
* Note: this can happen if the plugin has an undefined symbol reference,
* so print a warning. Otherwise, the poor slob won't know what happened.
* Ask me how I know that...
*/
if (handle == 0)
{
- clib_warning ("%s", dlerror());
+ clib_warning ("%s", dlerror ());
return -1;
}
-
+
pi->handle = handle;
@@ -66,18 +68,19 @@ load_one_plugin (plugin_main_t *pm, plugin_info_t *pi, int from_early_init)
if (register_handle == 0)
{
dlclose (handle);
- clib_warning("Plugin missing vlib_plugin_register: %s\n", (char *)pi->name);
+ clib_warning ("Plugin missing vlib_plugin_register: %s\n",
+ (char *) pi->name);
return 1;
}
fp = register_handle;
- handoff_structure = vnet_get_handoff_structure();
+ handoff_structure = vnet_get_handoff_structure ();
if (handoff_structure == 0)
error = clib_error_return (0, "handoff structure callback returned 0");
else
- error = (*fp)(pm->vlib_main, handoff_structure, from_early_init);
+ error = (*fp) (pm->vlib_main, handoff_structure, from_early_init);
if (error)
{
@@ -91,7 +94,8 @@ load_one_plugin (plugin_main_t *pm, plugin_info_t *pi, int from_early_init)
return 0;
}
-static u8 **split_plugin_path (plugin_main_t *pm)
+static u8 **
+split_plugin_path (plugin_main_t * pm)
{
int i;
u8 **rv = 0;
@@ -101,11 +105,11 @@ static u8 **split_plugin_path (plugin_main_t *pm)
for (i = 0; i < vec_len (pm->plugin_path); i++)
{
if (path[i] != ':')
- {
- vec_add1(this, path[i]);
- continue;
- }
- vec_add1(this, 0);
+ {
+ vec_add1 (this, path[i]);
+ continue;
+ }
+ vec_add1 (this, 0);
vec_add1 (rv, this);
this = 0;
}
@@ -117,7 +121,8 @@ static u8 **split_plugin_path (plugin_main_t *pm)
return rv;
}
-int vlib_load_new_plugins (plugin_main_t *pm, int from_early_init)
+int
+vlib_load_new_plugins (plugin_main_t * pm, int from_early_init)
{
DIR *dp;
struct dirent *entry;
@@ -128,76 +133,78 @@ int vlib_load_new_plugins (plugin_main_t *pm, int from_early_init)
int i;
plugin_path = split_plugin_path (pm);
-
+
for (i = 0; i < vec_len (plugin_path); i++)
{
- dp = opendir ((char *)plugin_path[i]);
-
+ dp = opendir ((char *) plugin_path[i]);
+
if (dp == 0)
- continue;
-
+ continue;
+
while ((entry = readdir (dp)))
- {
- u8 *plugin_name;
-
- if (pm->plugin_name_filter)
- {
- int j;
- for (j = 0; j < vec_len (pm->plugin_name_filter); j++)
- if (entry->d_name[j] != pm->plugin_name_filter[j])
- goto next;
- }
-
- plugin_name = format (0, "%s/%s%c", plugin_path[i],
- entry->d_name, 0);
+ {
+ u8 *plugin_name;
+
+ if (pm->plugin_name_filter)
+ {
+ int j;
+ for (j = 0; j < vec_len (pm->plugin_name_filter); j++)
+ if (entry->d_name[j] != pm->plugin_name_filter[j])
+ goto next;
+ }
+
+ plugin_name = format (0, "%s/%s%c", plugin_path[i],
+ entry->d_name, 0);
/* Only accept .so */
- char * ext = strrchr((const char *)plugin_name, '.');
- /* unreadable */
- if(!ext || (strcmp(ext, ".so") != 0) ||
- stat ((char *)plugin_name, &statb) < 0)
- {
- ignore:
- vec_free (plugin_name);
- continue;
- }
-
- /* a dir or other things which aren't plugins */
- if (!S_ISREG(statb.st_mode))
- goto ignore;
-
- p = hash_get_mem (pm->plugin_by_name_hash, plugin_name);
- if (p == 0)
- {
- vec_add2 (pm->plugin_info, pi, 1);
- pi->name = plugin_name;
- pi->file_info = statb;
-
- if (load_one_plugin (pm, pi, from_early_init))
- {
- vec_free (plugin_name);
- _vec_len (pm->plugin_info) = vec_len (pm->plugin_info) - 1;
- continue;
- }
- memset (pi, 0, sizeof (*pi));
- hash_set_mem (pm->plugin_by_name_hash, plugin_name,
- pi - pm->plugin_info);
- }
- next:
- ;
- }
+ char *ext = strrchr ((const char *) plugin_name, '.');
+ /* unreadable */
+ if (!ext || (strcmp (ext, ".so") != 0) ||
+ stat ((char *) plugin_name, &statb) < 0)
+ {
+ ignore:
+ vec_free (plugin_name);
+ continue;
+ }
+
+ /* a dir or other things which aren't plugins */
+ if (!S_ISREG (statb.st_mode))
+ goto ignore;
+
+ p = hash_get_mem (pm->plugin_by_name_hash, plugin_name);
+ if (p == 0)
+ {
+ vec_add2 (pm->plugin_info, pi, 1);
+ pi->name = plugin_name;
+ pi->file_info = statb;
+
+ if (load_one_plugin (pm, pi, from_early_init))
+ {
+ vec_free (plugin_name);
+ _vec_len (pm->plugin_info) = vec_len (pm->plugin_info) - 1;
+ continue;
+ }
+ memset (pi, 0, sizeof (*pi));
+ hash_set_mem (pm->plugin_by_name_hash, plugin_name,
+ pi - pm->plugin_info);
+ }
+ next:
+ ;
+ }
closedir (dp);
vec_free (plugin_path[i]);
}
vec_free (plugin_path);
return 0;
}
-char *vlib_plugin_path __attribute__((weak));
+
+char *vlib_plugin_path __attribute__ ((weak));
char *vlib_plugin_path = "";
-char *vlib_plugin_name_filter __attribute__((weak));
+char *vlib_plugin_name_filter __attribute__ ((weak));
char *vlib_plugin_name_filter = 0;
-int vlib_plugin_early_init (vlib_main_t *vm)
+int
+vlib_plugin_early_init (vlib_main_t * vm)
{
plugin_main_t *pm = &vlib_plugin_main;
@@ -210,6 +217,14 @@ int vlib_plugin_early_init (vlib_main_t *vm)
pm->plugin_by_name_hash = hash_create_string (0, sizeof (uword));
pm->vlib_main = vm;
-
- return vlib_load_new_plugins (pm, 1 /* from_early_init */);
+
+ return vlib_load_new_plugins (pm, 1 /* from_early_init */ );
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/plugin.h b/vlib/vlib/unix/plugin.h
index e7d75099ed9..e905263f232 100644
--- a/vlib/vlib/unix/plugin.h
+++ b/vlib/vlib/unix/plugin.h
@@ -28,12 +28,12 @@
* vlib plugin scheme
*
* Almost anything which can be made to work in a vlib unix
- * application will also work in a vlib plugin.
- *
- * The elf-section magic which registers static objects
+ * application will also work in a vlib plugin.
+ *
+ * The elf-section magic which registers static objects
* works so long as plugins are preset when the vlib unix process
- * starts. But wait: there's more...
- *
+ * starts. But wait: there's more...
+ *
* If an application calls vlib_load_new_plugins() -- possibly after
* changing vlib_plugin_main.plugin_path / vlib_plugin_main.plugin_name_filter,
* -- new plugins will be loaded. That, in turn, allows considerable
@@ -55,16 +55,18 @@
* An application can change these parameters at any time and call
* vlib_load_new_plugins().
*/
-
-typedef struct {
+
+typedef struct
+{
u8 *name;
struct stat file_info;
void *handle;
} plugin_info_t;
-typedef struct {
+typedef struct
+{
/* loaded plugin info */
plugin_info_t *plugin_info;
uword *plugin_by_name_hash;
@@ -82,7 +84,15 @@ typedef struct {
plugin_main_t vlib_plugin_main;
-int vlib_plugin_early_init (vlib_main_t *vm);
-int vlib_load_new_plugins (plugin_main_t *pm, int from_early_init);
+int vlib_plugin_early_init (vlib_main_t * vm);
+int vlib_load_new_plugins (plugin_main_t * pm, int from_early_init);
#endif /* __included_plugin_h__ */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/unix.h b/vlib/vlib/unix/unix.h
index 6c1f985aaba..510e3f196c5 100644
--- a/vlib/vlib/unix/unix.h
+++ b/vlib/vlib/unix/unix.h
@@ -44,9 +44,10 @@
#include <termios.h>
struct unix_file;
-typedef clib_error_t * (unix_file_function_t) (struct unix_file * f);
+typedef clib_error_t *(unix_file_function_t) (struct unix_file * f);
-typedef struct unix_file {
+typedef struct unix_file
+{
/* Unix file descriptor from open/socket. */
u32 file_descriptor;
@@ -58,23 +59,26 @@ typedef struct unix_file {
uword private_data;
/* Functions to be called when read/write data becomes ready. */
- unix_file_function_t * read_function, * write_function, * error_function;
+ unix_file_function_t *read_function, *write_function, *error_function;
} unix_file_t;
-typedef struct {
+typedef struct
+{
f64 time;
- clib_error_t * error;
+ clib_error_t *error;
} unix_error_history_t;
-typedef enum {
+typedef enum
+{
UNIX_FILE_UPDATE_ADD,
UNIX_FILE_UPDATE_MODIFY,
UNIX_FILE_UPDATE_DELETE,
} unix_file_update_type_t;
-typedef struct {
+typedef struct
+{
/* Back pointer to main structure. */
- vlib_main_t * vlib_main;
+ vlib_main_t *vlib_main;
u32 flags;
/* Run interactively or as daemon (background process). */
@@ -82,12 +86,13 @@ typedef struct {
#define UNIX_FLAG_NODAEMON (1 << 1)
/* Pool of files to poll for input/output. */
- unix_file_t * file_pool;
+ unix_file_t *file_pool;
/* CLI listen socket. */
clib_socket_t cli_listen_socket;
- void (* file_update) (unix_file_t * file, unix_file_update_type_t update_type);
+ void (*file_update) (unix_file_t * file,
+ unix_file_update_type_t update_type);
/* Circular buffer of last unix errors. */
unix_error_history_t error_history[128];
@@ -130,7 +135,7 @@ extern unix_main_t unix_main;
always_inline uword
unix_file_add (unix_main_t * um, unix_file_t * template)
{
- unix_file_t * f;
+ unix_file_t *f;
pool_get (um->file_pool, f);
f[0] = template[0];
um->file_update (f, UNIX_FILE_UPDATE_ADD);
@@ -147,9 +152,10 @@ unix_file_del (unix_main_t * um, unix_file_t * f)
}
always_inline uword
-unix_file_set_data_available_to_write (u32 unix_file_index, uword is_available)
+unix_file_set_data_available_to_write (u32 unix_file_index,
+ uword is_available)
{
- unix_file_t * uf = pool_elt_at_index (unix_main.file_pool, unix_file_index);
+ unix_file_t *uf = pool_elt_at_index (unix_main.file_pool, unix_file_index);
uword was_available = (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
if ((was_available != 0) != (is_available != 0))
{
@@ -162,7 +168,7 @@ unix_file_set_data_available_to_write (u32 unix_file_index, uword is_available)
always_inline void
unix_save_error (unix_main_t * um, clib_error_t * error)
{
- unix_error_history_t * eh = um->error_history + um->error_history_index;
+ unix_error_history_t *eh = um->error_history + um->error_history_index;
clib_error_free_vector (eh->error);
eh->error = error;
eh->time = vlib_time_now (um->vlib_main);
@@ -172,25 +178,26 @@ unix_save_error (unix_main_t * um, clib_error_t * error)
}
/* Main function for Unix VLIB. */
-int vlib_unix_main (int argc, char * argv[]);
+int vlib_unix_main (int argc, char *argv[]);
/* Call to allocate/initialize physical DMA memory subsystem.
This is not an init function so that users can explicitly enable/disable
physmem when its not needed. */
-clib_error_t * unix_physmem_init (vlib_main_t * vm,
- int fail_if_physical_memory_not_present);
+clib_error_t *unix_physmem_init (vlib_main_t * vm,
+ int fail_if_physical_memory_not_present);
static inline int
unix_physmem_is_fake (vlib_main_t * vm)
{
- vlib_physmem_main_t * vpm = &vm->physmem_main;
+ vlib_physmem_main_t *vpm = &vm->physmem_main;
return vpm->is_fake;
}
/* Set prompt for CLI. */
-void vlib_unix_cli_set_prompt (char * prompt);
+void vlib_unix_cli_set_prompt (char *prompt);
-static inline unix_main_t * vlib_unix_get_main (void)
+static inline unix_main_t *
+vlib_unix_get_main (void)
{
return &unix_main;
}
@@ -200,19 +207,24 @@ u8 **vlib_thread_stacks;
/* utils */
-clib_error_t *
-vlib_sysfs_write (char * file_name, char * fmt, ...);
+clib_error_t *vlib_sysfs_write (char *file_name, char *fmt, ...);
-clib_error_t *
-vlib_sysfs_read (char * file_name, char * fmt, ...);
+clib_error_t *vlib_sysfs_read (char *file_name, char *fmt, ...);
-u8 *
-vlib_sysfs_link_to_name(char * link);
+u8 *vlib_sysfs_link_to_name (char *link);
-clib_error_t *
-foreach_directory_file (char * dir_name,
- clib_error_t * (* f) (void * arg, u8 * path_name,
- u8 * file_name),
- void * arg, int scan_dirs);
+clib_error_t *foreach_directory_file (char *dir_name,
+ clib_error_t * (*f) (void *arg,
+ u8 * path_name,
+ u8 * file_name),
+ void *arg, int scan_dirs);
#endif /* included_unix_unix_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/unix/util.c b/vlib/vlib/unix/util.c
index 7a3a2bf9c47..f4a2c810dfc 100644
--- a/vlib/vlib/unix/util.c
+++ b/vlib/vlib/unix/util.c
@@ -46,21 +46,21 @@
#include <dirent.h>
clib_error_t *
-foreach_directory_file (char * dir_name,
- clib_error_t * (* f) (void * arg, u8 * path_name, u8 * file_name),
- void * arg,
+foreach_directory_file (char *dir_name,
+ clib_error_t * (*f) (void *arg, u8 * path_name,
+ u8 * file_name), void *arg,
int scan_dirs)
{
- DIR * d;
- struct dirent * e;
- clib_error_t * error = 0;
- u8 * s, * t;
+ DIR *d;
+ struct dirent *e;
+ clib_error_t *error = 0;
+ u8 *s, *t;
d = opendir (dir_name);
- if (! d)
+ if (!d)
{
if (errno == ENOENT)
- return 0;
+ return 0;
return clib_error_return_unix (0, "open `%s'", dir_name);
}
@@ -68,13 +68,12 @@ foreach_directory_file (char * dir_name,
while (1)
{
e = readdir (d);
- if (! e)
+ if (!e)
break;
if (scan_dirs)
{
if (e->d_type == DT_DIR
- && (! strcmp (e->d_name, ".")
- || ! strcmp (e->d_name, "..")))
+ && (!strcmp (e->d_name, ".") || !strcmp (e->d_name, "..")))
continue;
}
else
@@ -100,9 +99,9 @@ foreach_directory_file (char * dir_name,
}
clib_error_t *
-vlib_sysfs_write (char * file_name, char * fmt, ...)
+vlib_sysfs_write (char *file_name, char *fmt, ...)
{
- u8 * s;
+ u8 *s;
int fd;
fd = open (file_name, O_WRONLY);
@@ -123,10 +122,10 @@ vlib_sysfs_write (char * file_name, char * fmt, ...)
}
clib_error_t *
-vlib_sysfs_read (char * file_name, char * fmt, ...)
+vlib_sysfs_read (char *file_name, char *fmt, ...)
{
unformat_input_t input;
- u8 * s = 0;
+ u8 *s = 0;
int fd;
ssize_t sz;
uword result;
@@ -135,18 +134,18 @@ vlib_sysfs_read (char * file_name, char * fmt, ...)
if (fd < 0)
return clib_error_return_unix (0, "open `%s'", file_name);
- vec_validate(s, 4095);
+ vec_validate (s, 4095);
- sz = read(fd, s, vec_len (s));
+ sz = read (fd, s, vec_len (s));
if (sz < 0)
{
- close(fd);
- vec_free(s);
+ close (fd);
+ vec_free (s);
return clib_error_return_unix (0, "read `%s'", file_name);
}
- _vec_len(s) = sz;
- unformat_init_vector(&input, s);
+ _vec_len (s) = sz;
+ unformat_init_vector (&input, s);
va_list va;
va_start (va, fmt);
@@ -163,27 +162,35 @@ vlib_sysfs_read (char * file_name, char * fmt, ...)
}
u8 *
-vlib_sysfs_link_to_name(char * link)
+vlib_sysfs_link_to_name (char *link)
{
char *p, buffer[64];
unformat_input_t in;
u8 *s = 0;
int r;
- r = readlink(link, buffer, sizeof(buffer) - 1);
+ r = readlink (link, buffer, sizeof (buffer) - 1);
if (r < 0)
return 0;
buffer[r] = 0;
- p = strrchr(buffer, '/');
+ p = strrchr (buffer, '/');
if (!p)
return 0;
- unformat_init_string (&in, p+1, strlen (p+1));
- unformat(&in, "%s", &s);
+ unformat_init_string (&in, p + 1, strlen (p + 1));
+ unformat (&in, "%s", &s);
unformat_free (&in);
return s;
}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vlib/vlib/vlib.h b/vlib/vlib/vlib.h
index 74101f8d297..b146a49b7f2 100644
--- a/vlib/vlib/vlib.h
+++ b/vlib/vlib/vlib.h
@@ -76,3 +76,11 @@ struct vlib_main_t;
#include <vlib/buffer_node.h>
#endif /* included_vlib_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */