summaryrefslogtreecommitdiffstats
path: root/src/vlib/unix
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2017-09-08 19:52:02 +0200
committerFlorin Coras <florin.coras@gmail.com>2017-09-09 20:11:03 +0000
commit56dd5438b04b869065d8e901c315496bb6777455 (patch)
tree517190c53cfd2725d716eda6dddf9a64ad814084 /src/vlib/unix
parent816122e303efb5012f6897bd53ff8fe28cd8fa1c (diff)
move unix_file_* code to vppinfra
This will allow us to use this code in client libraries without vlib. Change-Id: I8557b752496841ba588aa36b6082cbe2cd1867fe Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/vlib/unix')
-rw-r--r--src/vlib/unix/cli.c85
-rw-r--r--src/vlib/unix/input.c13
-rw-r--r--src/vlib/unix/main.c1
-rw-r--r--src/vlib/unix/mc_socket.c69
-rw-r--r--src/vlib/unix/mc_socket.h2
-rw-r--r--src/vlib/unix/unix.h76
6 files changed, 92 insertions, 154 deletions
diff --git a/src/vlib/unix/cli.c b/src/vlib/unix/cli.c
index 068a4e169dc..39368823b34 100644
--- a/src/vlib/unix/cli.c
+++ b/src/vlib/unix/cli.c
@@ -141,7 +141,7 @@ typedef struct
typedef struct
{
/** The file index held by unix.c */
- u32 unix_file_index;
+ u32 clib_file_index;
/** Vector of output pending write to file descriptor. */
u8 *output_vector;
@@ -502,11 +502,11 @@ unix_cli_match_action (unix_cli_parse_actions_t * a,
* are available to be sent.
*/
static void
-unix_cli_add_pending_output (unix_file_t * uf,
+unix_cli_add_pending_output (clib_file_t * uf,
unix_cli_file_t * cf,
u8 * buffer, uword buffer_bytes)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
vec_add (cf->output_vector, buffer, buffer_bytes);
if (vec_len (cf->output_vector) > 0)
@@ -514,7 +514,7 @@ unix_cli_add_pending_output (unix_file_t * uf,
int skip_update = 0 != (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
uf->flags |= UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
if (!skip_update)
- um->file_update (uf, UNIX_FILE_UPDATE_MODIFY);
+ fm->file_update (uf, UNIX_FILE_UPDATE_MODIFY);
}
}
@@ -522,10 +522,10 @@ unix_cli_add_pending_output (unix_file_t * uf,
* that no more bytes are available to be sent.
*/
static void
-unix_cli_del_pending_output (unix_file_t * uf,
+unix_cli_del_pending_output (clib_file_t * uf,
unix_cli_file_t * cf, uword n_bytes)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
vec_delete (cf->output_vector, n_bytes, 0);
if (vec_len (cf->output_vector) <= 0)
@@ -533,7 +533,7 @@ unix_cli_del_pending_output (unix_file_t * uf,
int skip_update = 0 == (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
uf->flags &= ~UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
if (!skip_update)
- um->file_update (uf, UNIX_FILE_UPDATE_MODIFY);
+ fm->file_update (uf, UNIX_FILE_UPDATE_MODIFY);
}
}
@@ -580,7 +580,7 @@ unix_vlib_findchr (u8 chr, u8 * str, word len)
*/
static void
unix_vlib_cli_output_raw (unix_cli_file_t * cf,
- unix_file_t * uf, u8 * buffer, uword buffer_bytes)
+ clib_file_t * uf, u8 * buffer, uword buffer_bytes)
{
int n = 0;
@@ -610,7 +610,7 @@ unix_vlib_cli_output_raw (unix_cli_file_t * cf,
*/
static void
unix_vlib_cli_output_cooked (unix_cli_file_t * cf,
- unix_file_t * uf,
+ clib_file_t * uf,
u8 * buffer, uword buffer_bytes)
{
word end = 0, start = 0;
@@ -646,7 +646,7 @@ unix_vlib_cli_output_cooked (unix_cli_file_t * cf,
/** @brief Output the CLI prompt */
static void
-unix_cli_cli_prompt (unix_cli_file_t * cf, unix_file_t * uf)
+unix_cli_cli_prompt (unix_cli_file_t * cf, clib_file_t * uf)
{
unix_cli_main_t *cm = &unix_cli_main;
@@ -655,7 +655,7 @@ unix_cli_cli_prompt (unix_cli_file_t * cf, unix_file_t * uf)
/** @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)
+unix_cli_pager_prompt (unix_cli_file_t * cf, clib_file_t * uf)
{
u8 *prompt;
u32 h;
@@ -678,7 +678,7 @@ unix_cli_pager_prompt (unix_cli_file_t * cf, unix_file_t * uf)
/** @brief Output a pager "skipping" message */
static void
-unix_cli_pager_message (unix_cli_file_t * cf, unix_file_t * uf,
+unix_cli_pager_message (unix_cli_file_t * cf, clib_file_t * uf,
char *message, char *postfix)
{
u8 *prompt;
@@ -694,7 +694,7 @@ unix_cli_pager_message (unix_cli_file_t * cf, unix_file_t * uf,
/** @brief Erase the printed pager prompt */
static void
-unix_cli_pager_prompt_erase (unix_cli_file_t * cf, unix_file_t * uf)
+unix_cli_pager_prompt_erase (unix_cli_file_t * cf, clib_file_t * uf)
{
if (cf->ansi_capable)
{
@@ -716,7 +716,7 @@ unix_cli_pager_prompt_erase (unix_cli_file_t * cf, unix_file_t * uf)
/** @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)
+unix_cli_ansi_cursor (unix_cli_file_t * cf, clib_file_t * uf, u16 x, u16 y)
{
u8 *str;
@@ -732,7 +732,7 @@ unix_cli_ansi_cursor (unix_cli_file_t * cf, unix_file_t * uf, u16 x, u16 y)
* @param uf Unix file of the CLI session.
*/
static void
-unix_cli_pager_redraw (unix_cli_file_t * cf, unix_file_t * uf)
+unix_cli_pager_redraw (unix_cli_file_t * cf, clib_file_t * uf)
{
unix_cli_pager_index_t *pi = NULL;
u8 *line = NULL;
@@ -930,12 +930,13 @@ static void
unix_vlib_cli_output (uword cli_file_index, u8 * buffer, uword buffer_bytes)
{
unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
unix_cli_main_t *cm = &unix_cli_main;
unix_cli_file_t *cf;
- unix_file_t *uf;
+ clib_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);
+ uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
if (cf->no_pager || um->cli_pager_buffer_limit == 0 || cf->height == 0)
{
@@ -1037,7 +1038,8 @@ 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);
+ clib_file_main_t *fm = &file_main;
+ clib_file_t *uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
unix_cli_banner_t *banner;
int i, len;
@@ -1104,7 +1106,7 @@ unix_cli_file_welcome_timer (any arg, f64 delay)
static i32
unix_cli_process_telnet (unix_main_t * um,
unix_cli_file_t * cf,
- unix_file_t * uf, u8 * input_vector, uword len)
+ clib_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.
@@ -1229,7 +1231,7 @@ 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,
+ clib_file_t * uf,
u8 input, unix_cli_parse_action_t action)
{
u8 *prev;
@@ -2059,10 +2061,10 @@ unix_cli_line_process_one (unix_cli_main_t * cm,
/** @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)
+unix_cli_line_edit (unix_cli_main_t * cm, unix_main_t * um,
+ clib_file_main_t * fm, unix_cli_file_t * cf)
{
- unix_file_t *uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ clib_file_t *uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
int i;
for (i = 0; i < vec_len (cf->input_vector); i++)
@@ -2139,7 +2141,8 @@ 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;
+ clib_file_main_t *fm = &file_main;
+ clib_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 *);
@@ -2157,7 +2160,7 @@ more:
else
{
/* Line edit, echo, etc. */
- if (unix_cli_line_edit (cm, um, cf))
+ if (unix_cli_line_edit (cm, um, fm, cf))
/* want more input */
return;
}
@@ -2196,7 +2199,7 @@ more:
/* Re-fetch pointer since pool may have moved. */
cf = pool_elt_at_index (cm->cli_file_pool, cli_file_index);
- uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
done:
/* reset vector; we'll re-use it later */
@@ -2240,12 +2243,13 @@ static void
unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
{
unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
unix_cli_file_t *cf;
- unix_file_t *uf;
+ clib_file_t *uf;
int i;
cf = pool_elt_at_index (cm->cli_file_pool, cli_file_index);
- uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
/* Quit/EOF on stdin means quit program. */
if (uf->file_descriptor == UNIX_CLI_STDIN_FD)
@@ -2259,7 +2263,7 @@ unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
vec_free (cf->command_history);
- unix_file_del (um, uf);
+ clib_file_del (fm, uf);
unix_cli_file_free (cf);
pool_put (cm->cli_file_pool, cf);
@@ -2311,7 +2315,7 @@ done:
/** Called when a CLI session file descriptor can be written to without
* blocking. */
static clib_error_t *
-unix_cli_write_ready (unix_file_t * uf)
+unix_cli_write_ready (clib_file_t * uf)
{
unix_cli_main_t *cm = &unix_cli_main;
unix_cli_file_t *cf;
@@ -2334,7 +2338,7 @@ unix_cli_write_ready (unix_file_t * uf)
/** Called when a CLI session file descriptor has data to be read. */
static clib_error_t *
-unix_cli_read_ready (unix_file_t * uf)
+unix_cli_read_ready (clib_file_t * uf)
{
unix_main_t *um = &unix_main;
unix_cli_main_t *cm = &unix_cli_main;
@@ -2380,8 +2384,9 @@ static u32
unix_cli_file_add (unix_cli_main_t * cm, char *name, int fd)
{
unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
unix_cli_file_t *cf;
- unix_file_t template = { 0 };
+ clib_file_t template = { 0 };
vlib_main_t *vm = um->vlib_main;
vlib_node_t *n;
@@ -2424,7 +2429,7 @@ unix_cli_file_add (unix_cli_main_t * cm, char *name, int fd)
template.private_data = cf - cm->cli_file_pool;
cf->process_node_index = n->index;
- cf->unix_file_index = unix_file_add (um, &template);
+ cf->clib_file_index = clib_file_add (fm, &template);
cf->output_vector = 0;
cf->input_vector = 0;
@@ -2439,9 +2444,10 @@ 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)
+unix_cli_listen_read_ready (clib_file_t * uf)
{
unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
unix_cli_main_t *cm = &unix_cli_main;
clib_socket_t *s = &um->cli_listen_socket;
clib_socket_t client;
@@ -2497,7 +2503,7 @@ unix_cli_listen_read_ready (unix_file_t * uf)
/* Setup the pager */
cf->no_pager = um->cli_no_pager;
- uf = pool_elt_at_index (um->file_pool, cf->unix_file_index);
+ uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
/* Send the telnet options */
unix_vlib_cli_output_raw (cf, uf, charmode_option,
@@ -2517,11 +2523,11 @@ unix_cli_listen_read_ready (unix_file_t * uf)
static void
unix_cli_resize_interrupt (int signum)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_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);
+ clib_file_t *uf = pool_elt_at_index (fm->file_pool, cf->clib_file_index);
struct winsize ws;
(void) signum;
@@ -2548,6 +2554,7 @@ static clib_error_t *
unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
{
unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
unix_cli_main_t *cm = &unix_cli_main;
int flags;
clib_error_t *error = 0;
@@ -2640,7 +2647,7 @@ unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
if (s->config && s->config[0] != 0)
{
/* CLI listen. */
- unix_file_t template = { 0 };
+ clib_file_t template = { 0 };
/* mkdir of file socketu, only under /run */
if (strncmp (s->config, "/run", 4) == 0)
@@ -2667,7 +2674,7 @@ unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
template.read_function = unix_cli_listen_read_ready;
template.file_descriptor = s->fd;
- unix_file_add (um, &template);
+ clib_file_add (fm, &template);
}
/* Set CLI prompt. */
diff --git a/src/vlib/unix/input.c b/src/vlib/unix/input.c
index 515dae94811..ecd317913e9 100644
--- a/src/vlib/unix/input.c
+++ b/src/vlib/unix/input.c
@@ -62,9 +62,9 @@ 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 (clib_file_t * f, unix_file_update_type_t update_type)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
linux_epoll_main_t *em = &linux_epoll_main;
struct epoll_event e;
int op;
@@ -76,7 +76,7 @@ linux_epoll_file_update (unix_file_t * f, unix_file_update_type_t update_type)
e.events |= EPOLLOUT;
if (f->flags & UNIX_FILE_EVENT_EDGE_TRIGGERED)
e.events |= EPOLLET;
- e.data.u32 = f - um->file_pool;
+ e.data.u32 = f - fm->file_pool;
op = -1;
@@ -108,6 +108,7 @@ linux_epoll_input (vlib_main_t * vm,
vlib_node_runtime_t * node, vlib_frame_t * frame)
{
unix_main_t *um = &unix_main;
+ clib_file_main_t *fm = &file_main;
linux_epoll_main_t *em = &linux_epoll_main;
struct epoll_event *e;
int n_fds_ready;
@@ -186,7 +187,7 @@ 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_file_t *f = pool_elt_at_index (fm->file_pool, i);
clib_error_t *errors[4];
int n_errors = 0;
@@ -236,7 +237,7 @@ 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;
+ clib_file_main_t *fm = &file_main;
/* Allocate some events. */
vec_resize (em->epoll_events, VLIB_FRAME_SIZE);
@@ -245,7 +246,7 @@ linux_epoll_input_init (vlib_main_t * vm)
if (em->epoll_fd < 0)
return clib_error_return_unix (0, "epoll_create");
- um->file_update = linux_epoll_file_update;
+ fm->file_update = linux_epoll_file_update;
return 0;
}
diff --git a/src/vlib/unix/main.c b/src/vlib/unix/main.c
index 3a92b2e3d12..ed0631ec871 100644
--- a/src/vlib/unix/main.c
+++ b/src/vlib/unix/main.c
@@ -60,6 +60,7 @@ char *vlib_default_runtime_dir __attribute__ ((weak));
char *vlib_default_runtime_dir = "vlib";
unix_main_t unix_main;
+clib_file_main_t file_main;
static clib_error_t *
unix_main_init (vlib_main_t * vm)
diff --git a/src/vlib/unix/mc_socket.c b/src/vlib/unix/mc_socket.c
index 9c12ad3b559..3f1cd99d382 100644
--- a/src/vlib/unix/mc_socket.c
+++ b/src/vlib/unix/mc_socket.c
@@ -243,7 +243,7 @@ recvmsg_helper (mc_socket_main_t * msm,
}
static clib_error_t *
-mastership_socket_read_ready (unix_file_t * uf)
+mastership_socket_read_ready (clib_file_t * uf)
{
mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
@@ -263,7 +263,7 @@ mastership_socket_read_ready (unix_file_t * uf)
}
static clib_error_t *
-to_relay_socket_read_ready (unix_file_t * uf)
+to_relay_socket_read_ready (clib_file_t * uf)
{
mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
@@ -297,7 +297,7 @@ to_relay_socket_read_ready (unix_file_t * uf)
}
static clib_error_t *
-from_relay_socket_read_ready (unix_file_t * uf)
+from_relay_socket_read_ready (clib_file_t * uf)
{
mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
@@ -317,7 +317,7 @@ from_relay_socket_read_ready (unix_file_t * uf)
}
static clib_error_t *
-join_socket_read_ready (unix_file_t * uf)
+join_socket_read_ready (clib_file_t * uf)
{
mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
@@ -354,7 +354,7 @@ join_socket_read_ready (unix_file_t * uf)
}
static clib_error_t *
-ack_socket_read_ready (unix_file_t * uf)
+ack_socket_read_ready (clib_file_t * uf)
{
mc_socket_main_t *msm = (mc_socket_main_t *) uf->private_data;
mc_main_t *mcm = &msm->mc_main;
@@ -371,10 +371,11 @@ ack_socket_read_ready (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)
+ mc_socket_catchup_t * c, clib_file_main_t * um,
+ clib_file_t * uf)
{
hash_unset (msm->catchup_index_by_file_descriptor, uf->file_descriptor);
- unix_file_del (um, uf);
+ clib_file_del (um, uf);
vec_free (c->input_vector);
vec_free (c->output_vector);
pool_put (msm->catchups, c);
@@ -390,9 +391,9 @@ find_catchup_from_file_descriptor (mc_socket_main_t * msm,
}
static clib_error_t *
-catchup_socket_read_ready (unix_file_t * uf, int is_server)
+catchup_socket_read_ready (clib_file_t * uf, int is_server)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *um = &file_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 =
@@ -440,13 +441,13 @@ catchup_socket_read_ready (unix_file_t * uf, int is_server)
}
static clib_error_t *
-catchup_server_read_ready (unix_file_t * uf)
+catchup_server_read_ready (clib_file_t * uf)
{
return catchup_socket_read_ready (uf, /* is_server */ 1);
}
static clib_error_t *
-catchup_client_read_ready (unix_file_t * uf)
+catchup_client_read_ready (clib_file_t * uf)
{
if (MC_EVENT_LOGGING)
{
@@ -460,9 +461,9 @@ catchup_client_read_ready (unix_file_t * uf)
}
static clib_error_t *
-catchup_socket_write_ready (unix_file_t * uf, int is_server)
+catchup_socket_write_ready (clib_file_t * uf, int is_server)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *um = &file_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);
@@ -522,7 +523,7 @@ catchup_socket_write_ready (unix_file_t * uf, int is_server)
if (!is_server)
{
uf->flags &= ~UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
- unix_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
+ file_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
/* Send EOF to other side. */
shutdown (uf->file_descriptor, SHUT_WR);
return error;
@@ -537,21 +538,21 @@ catchup_socket_write_ready (unix_file_t * uf, int is_server)
}
static clib_error_t *
-catchup_server_write_ready (unix_file_t * uf)
+catchup_server_write_ready (clib_file_t * uf)
{
return catchup_socket_write_ready (uf, /* is_server */ 1);
}
static clib_error_t *
-catchup_client_write_ready (unix_file_t * uf)
+catchup_client_write_ready (clib_file_t * uf)
{
return catchup_socket_write_ready (uf, /* is_server */ 0);
}
static clib_error_t *
-catchup_socket_error_ready (unix_file_t * uf)
+catchup_socket_error_ready (clib_file_t * uf)
{
- unix_main_t *um = &unix_main;
+ clib_file_main_t *um = &file_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);
@@ -560,13 +561,13 @@ catchup_socket_error_ready (unix_file_t * uf)
}
static clib_error_t *
-catchup_listen_read_ready (unix_file_t * uf)
+catchup_listen_read_ready (clib_file_t * uf)
{
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 };
+ clib_file_t template = { 0 };
pool_get (msm->catchups, c);
memset (c, 0, sizeof (c[0]));
@@ -616,7 +617,7 @@ catchup_listen_read_ready (unix_file_t * uf)
template.error_function = catchup_socket_error_ready;
template.file_descriptor = c->socket;
template.private_data = pointer_to_uword (msm);
- c->unix_file_index = unix_file_add (&unix_main, &template);
+ c->clib_file_index = clib_file_add (&file_main, &template);
hash_set (msm->catchup_index_by_file_descriptor, c->socket,
c - msm->catchups);
@@ -772,45 +773,45 @@ socket_setup (mc_socket_main_t * msm)
/* epoll setup for multicast mastership socket */
{
- unix_file_t template = { 0 };
+ clib_file_t template = { 0 };
template.read_function = mastership_socket_read_ready;
template.file_descriptor =
msm->multicast_sockets[MC_TRANSPORT_MASTERSHIP].socket;
template.private_data = (uword) msm;
- unix_file_add (&unix_main, &template);
+ clib_file_add (&file_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.private_data = (uword) msm;
- unix_file_add (&unix_main, &template);
+ clib_file_add (&file_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.private_data = (uword) msm;
- unix_file_add (&unix_main, &template);
+ clib_file_add (&file_main, &template);
template.read_function = join_socket_read_ready;
template.file_descriptor =
msm->multicast_sockets[MC_TRANSPORT_JOIN].socket;
template.private_data = (uword) msm;
- unix_file_add (&unix_main, &template);
+ clib_file_add (&file_main, &template);
/* epoll setup for ack rx socket */
template.read_function = ack_socket_read_ready;
template.file_descriptor = msm->ack_socket;
template.private_data = (uword) msm;
- unix_file_add (&unix_main, &template);
+ clib_file_add (&file_main, &template);
/* epoll setup for TCP catchup server */
template.read_function = catchup_listen_read_ready;
template.file_descriptor = msm->catchup_server_socket;
template.private_data = (uword) msm;
- unix_file_add (&unix_main, &template);
+ clib_file_add (&file_main, &template);
}
return 0;
@@ -820,8 +821,8 @@ static void *
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);
+ clib_file_t *uf = pool_elt_at_index (file_main.file_pool,
+ c->clib_file_index);
u8 *result = 0;
if (set_output_vector)
@@ -833,7 +834,7 @@ catchup_add_pending_output (mc_socket_catchup_t * c, uword n_bytes,
int skip_update = 0 != (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
uf->flags |= UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
if (!skip_update)
- unix_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
+ file_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
}
return result;
}
@@ -847,7 +848,7 @@ catchup_request_fun (void *transport_main,
vlib_main_t *vm = mcm->vlib_main;
mc_socket_catchup_t *c;
struct sockaddr_in addr;
- unix_main_t *um = &unix_main;
+ clib_file_main_t *um = &file_main;
int one = 1;
pool_get (msm->catchups, c);
@@ -895,14 +896,14 @@ catchup_request_fun (void *transport_main,
}
{
- unix_file_t template = { 0 };
+ clib_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;
template.file_descriptor = c->socket;
template.private_data = (uword) msm;
- c->unix_file_index = unix_file_add (um, &template);
+ c->clib_file_index = clib_file_add (um, &template);
hash_set (msm->catchup_index_by_file_descriptor, c->socket,
c - msm->catchups);
diff --git a/src/vlib/unix/mc_socket.h b/src/vlib/unix/mc_socket.h
index 273c9ad430b..3686c824a2d 100644
--- a/src/vlib/unix/mc_socket.h
+++ b/src/vlib/unix/mc_socket.h
@@ -31,7 +31,7 @@ typedef struct
typedef struct
{
int socket;
- u32 unix_file_index;
+ u32 clib_file_index;
u8 *input_vector;
u8 *output_vector;
diff --git a/src/vlib/unix/unix.h b/src/vlib/unix/unix.h
index 1b0d8b9d384..4c8566b7ee8 100644
--- a/src/vlib/unix/unix.h
+++ b/src/vlib/unix/unix.h
@@ -40,42 +40,16 @@
#ifndef included_unix_unix_h
#define included_unix_unix_h
+#include <vppinfra/file.h>
#include <vppinfra/socket.h>
#include <termios.h>
-
-struct unix_file;
-typedef clib_error_t *(unix_file_function_t) (struct unix_file * f);
-
-typedef struct unix_file
-{
- /* Unix file descriptor from open/socket. */
- u32 file_descriptor;
-
- u32 flags;
-#define UNIX_FILE_DATA_AVAILABLE_TO_WRITE (1 << 0)
-#define UNIX_FILE_EVENT_EDGE_TRIGGERED (1 << 1)
-
- /* Data available for function's use. */
- 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_t;
-
typedef struct
{
f64 time;
clib_error_t *error;
} unix_error_history_t;
-typedef enum
-{
- UNIX_FILE_UPDATE_ADD,
- UNIX_FILE_UPDATE_MODIFY,
- UNIX_FILE_UPDATE_DELETE,
-} unix_file_update_type_t;
-
typedef struct
{
/* Back pointer to main structure. */
@@ -86,15 +60,9 @@ typedef struct
#define UNIX_FLAG_INTERACTIVE (1 << 0)
#define UNIX_FLAG_NODAEMON (1 << 1)
- /* Pool of files to poll for input/output. */
- 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);
-
/* Circular buffer of last unix errors. */
unix_error_history_t error_history[128];
u32 error_history_index;
@@ -138,47 +106,7 @@ typedef struct
/* Global main structure. */
extern unix_main_t unix_main;
-
-always_inline uword
-unix_file_add (unix_main_t * um, unix_file_t * template)
-{
- unix_file_t *f;
- pool_get (um->file_pool, f);
- f[0] = template[0];
- um->file_update (f, UNIX_FILE_UPDATE_ADD);
- return f - um->file_pool;
-}
-
-always_inline void
-unix_file_del (unix_main_t * um, unix_file_t * f)
-{
- um->file_update (f, UNIX_FILE_UPDATE_DELETE);
- close (f->file_descriptor);
- f->file_descriptor = ~0;
- pool_put (um->file_pool, f);
-}
-
-always_inline void
-unix_file_del_by_index (unix_main_t * um, uword index)
-{
- unix_file_t *uf;
- uf = pool_elt_at_index (um->file_pool, index);
- unix_file_del (um, uf);
-}
-
-always_inline uword
-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);
- uword was_available = (uf->flags & UNIX_FILE_DATA_AVAILABLE_TO_WRITE);
- if ((was_available != 0) != (is_available != 0))
- {
- uf->flags ^= UNIX_FILE_DATA_AVAILABLE_TO_WRITE;
- unix_main.file_update (uf, UNIX_FILE_UPDATE_MODIFY);
- }
- return was_available != 0;
-}
+extern clib_file_main_t file_main;
always_inline void
unix_save_error (unix_main_t * um, clib_error_t * error)