DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ciara Power <ciara.power@intel.com>
To: kevin.laatz@intel.com
Cc: dev@dpdk.org, Ciara Power <ciara.power@intel.com>
Subject: [dpdk-dev] [PATCH 20.08] telemetry: add upper limit on connections
Date: Mon, 18 May 2020 17:12:32 +0100	[thread overview]
Message-ID: <20200518161232.58952-1-ciara.power@intel.com> (raw)

This patch limits the number of client connections to the new telemetry
socket. The limit is set at 10.

Signed-off-by: Ciara Power <ciara.power@intel.com>
---
 lib/librte_telemetry/telemetry.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lib/librte_telemetry/telemetry.c b/lib/librte_telemetry/telemetry.c
index 56a2fed3f5..5c9d7983e3 100644
--- a/lib/librte_telemetry/telemetry.c
+++ b/lib/librte_telemetry/telemetry.c
@@ -7,6 +7,7 @@
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <dlfcn.h>
+#include <semaphore.h>
 
 /* we won't link against libbsd, so just always use DPDKs-specific strlcpy */
 #undef RTE_USE_LIBBSD
@@ -23,6 +24,7 @@
 #define MAX_CMD_LEN 56
 #define MAX_HELP_LEN 64
 #define MAX_OUTPUT_LEN (1024 * 16)
+#define MAX_CONNECTIONS 10
 
 static void *
 client_handler(void *socket);
@@ -37,6 +39,7 @@ struct socket {
 	int sock;
 	char path[sizeof(((struct sockaddr_un *)0)->sun_path)];
 	handler fn;
+	sem_t *limit;
 };
 static struct socket v2_socket; /* socket for v2 telemetry */
 static struct socket v1_socket; /* socket for v1 telemetry */
@@ -46,6 +49,7 @@ static struct cmd_callback callbacks[TELEMETRY_MAX_CALLBACKS];
 static int num_callbacks; /* How many commands are registered */
 /* Used when accessing or modifying list of command callbacks */
 static rte_spinlock_t callback_sl = RTE_SPINLOCK_INITIALIZER;
+static sem_t v2_limit;
 
 int
 rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help)
@@ -263,6 +267,7 @@ client_handler(void *sock_id)
 		bytes = read(s, buffer, sizeof(buffer) - 1);
 	}
 	close(s);
+	sem_post(&v2_limit);
 	return NULL;
 }
 
@@ -272,6 +277,8 @@ socket_listener(void *socket)
 	while (1) {
 		pthread_t th;
 		struct socket *s = (struct socket *)socket;
+		if (s->limit != NULL)
+			sem_wait(s->limit);
 		int s_accepted = accept(s->sock, NULL, NULL);
 		if (s_accepted < 0) {
 			snprintf(telemetry_log_error,
@@ -372,6 +379,9 @@ telemetry_v2_init(const char *runtime_dir)
 {
 	pthread_t t_new;
 
+	RTE_BUILD_BUG_ON(_SC_SEM_VALUE_MAX < MAX_CONNECTIONS);
+	(void)sem_init(&v2_limit, 0, MAX_CONNECTIONS);
+	v2_socket.limit = &v2_limit;
 	rte_telemetry_register_cmd("/", list_commands,
 			"Returns list of available commands, Takes no parameters");
 	rte_telemetry_register_cmd("/info", json_info,
-- 
2.17.1


             reply	other threads:[~2020-05-18 16:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-18 16:12 Ciara Power [this message]
2020-05-19  0:07 ` Stephen Hemminger
2020-07-10 20:50   ` Thomas Monjalon
2020-07-13 10:22     ` Power, Ciara
2020-07-15 15:03 ` [dpdk-dev] [PATCH v2] " Ciara Power
2020-07-19 13:45   ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200518161232.58952-1-ciara.power@intel.com \
    --to=ciara.power@intel.com \
    --cc=dev@dpdk.org \
    --cc=kevin.laatz@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).