[dpdk-dev,v2] examples/ip_pipeline: Support quitting CLI connection

Message ID 1525867817-6427-1-git-send-email-cnliuhb@gmail.com (mailing list archive)
State Rejected, archived
Delegated to: Cristian Dumitrescu
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Hongbo Liu May 9, 2018, 12:10 p.m. UTC
  When detecting input "quit", ip_pipeline should close connection fd.
It is convenient when using command "telnet 0 8086".

Signed-off-by: Liu Hongbo <cnliuhb@gmail.com>
---
 examples/ip_pipeline/conn.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Cristian Dumitrescu May 9, 2018, 1:30 p.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Liu Hongbo
> Sent: Wednesday, May 9, 2018 1:10 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v2] examples/ip_pipeline: Support quitting CLI
> connection
> 
> When detecting input "quit", ip_pipeline should close connection fd.
> It is convenient when using command "telnet 0 8086".
> 
> Signed-off-by: Liu Hongbo <cnliuhb@gmail.com>
> ---
>  examples/ip_pipeline/conn.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/examples/ip_pipeline/conn.c b/examples/ip_pipeline/conn.c
> index 9338942..44d7ff8 100644
> --- a/examples/ip_pipeline/conn.c
> +++ b/examples/ip_pipeline/conn.c
> @@ -222,6 +222,8 @@ data_event_handle(struct conn *conn,
>  	}
>  	if (len == 0)
>  		return 0;
> +	if (!strncmp(conn->buf, "quit", strlen("quit")))
> +		return -2;
> 
>  	/* Handle input messages */
>  	for (i = 0; i < len; i++) {
> @@ -316,7 +318,7 @@ conn_poll_for_msg(struct conn *conn)
>  		status_data = data_event_handle(conn, fd_client);
> 
>  	/* Control events */
> -	if (event.events & (EPOLLRDHUP | EPOLLERR | EPOLLHUP))
> +	if (status_data == -2 || event.events & (EPOLLRDHUP | EPOLLERR |
> EPOLLHUP))
>  		status_control = control_event_handle(conn, fd_client);
> 
>  	if (status_data || status_control)
> --
> 2.7.4

Hi Liu,

Thanks for suggesting this, but the quit command is not necessary in the latest IP Pipeline app.

The app is a server waiting for commands from external clients, which can be any decent TCP client such as telnet, netcat, Perl/Python script, etc. The client can be terminated at any time, but the server continues to live on and listen for more client connections. For example, you can kill the telnet client and then later on start another telnet session to the same app. It does not make sense for the client to be able to kill the server.

Regards,
Cristian
  

Patch

diff --git a/examples/ip_pipeline/conn.c b/examples/ip_pipeline/conn.c
index 9338942..44d7ff8 100644
--- a/examples/ip_pipeline/conn.c
+++ b/examples/ip_pipeline/conn.c
@@ -222,6 +222,8 @@  data_event_handle(struct conn *conn,
 	}
 	if (len == 0)
 		return 0;
+	if (!strncmp(conn->buf, "quit", strlen("quit")))
+		return -2;
 
 	/* Handle input messages */
 	for (i = 0; i < len; i++) {
@@ -316,7 +318,7 @@  conn_poll_for_msg(struct conn *conn)
 		status_data = data_event_handle(conn, fd_client);
 
 	/* Control events */
-	if (event.events & (EPOLLRDHUP | EPOLLERR | EPOLLHUP))
+	if (status_data == -2 || event.events & (EPOLLRDHUP | EPOLLERR | EPOLLHUP))
 		status_control = control_event_handle(conn, fd_client);
 
 	if (status_data || status_control)