pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-bsc/+/34244 )
Change subject: meas_feed: Increase wqueue max_len to 100 and make it vty-configurable
......................................................................
meas_feed: Increase wqueue max_len to 100 and make it vty-configurable
The previous amount of 10 messages may be small if the BSC is processing
lots of measurements from lots of BTS connected to it.
Increase it to 100 by default, and allow changing the write_queue length
through the VTY.
Related: SYS#6550
Change-Id: Ib2e3591498c038b8e59f3ad447ac1f65928d6da8
---
M include/osmocom/bsc/meas_feed.h
M src/osmo-bsc/bsc_vty.c
M src/osmo-bsc/meas_feed.c
3 files changed, 48 insertions(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
daniel: Looks good to me, but someone else must approve
fixeria: Looks good to me, approved
diff --git a/include/osmocom/bsc/meas_feed.h b/include/osmocom/bsc/meas_feed.h
index 353278e..f2bd4ba 100644
--- a/include/osmocom/bsc/meas_feed.h
+++ b/include/osmocom/bsc/meas_feed.h
@@ -35,9 +35,12 @@
};
#define MEAS_FEED_VERSION 1
+#define MEAS_FEED_WQUEUE_MAX_LEN_DEFAULT 100
int meas_feed_cfg_set(const char *dst_host, uint16_t dst_port);
void meas_feed_scenario_set(const char *name);
+void meas_feed_wqueue_max_length_set(unsigned int max_length);
void meas_feed_cfg_get(char **host, uint16_t *port);
const char *meas_feed_scenario_get(void);
+unsigned int meas_feed_wqueue_max_length_get(void);
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index 7918d81..02f708e 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -385,6 +385,7 @@
uint16_t meas_port;
char *meas_host;
const char *meas_scenario;
+ unsigned int max_len = meas_feed_wqueue_max_length_get();
meas_feed_cfg_get(&meas_host, &meas_port);
meas_scenario = meas_feed_scenario_get();
@@ -395,6 +396,9 @@
if (strlen(meas_scenario) > 0)
vty_out(vty, " meas-feed scenario %s%s",
meas_scenario, VTY_NEWLINE);
+ if (max_len != MEAS_FEED_WQUEUE_MAX_LEN_DEFAULT)
+ vty_out(vty, " meas-feed write-queue-max-length %u%s",
+ max_len, VTY_NEWLINE);
}
if (gsmnet->allow_unusable_timeslots)
@@ -2416,6 +2420,16 @@
return CMD_SUCCESS;
}
+DEFUN_ATTR(cfg_net_meas_feed_wqueue_max_len, cfg_net_meas_feed_wqueue_max_len_cmd,
+ "meas-feed write-queue-max-length <1-65535>",
+ MEAS_FEED_STR "Set the maximum length of the message write queue towards the UDP
socket\n"
+ "Maximum number of messages to be queued waiting for transmission\n",
+ CMD_ATTR_IMMEDIATE)
+{
+ meas_feed_wqueue_max_length_set(atoi(argv[0]));
+ return CMD_SUCCESS;
+}
+
static void legacy_timers(struct vty *vty, const char **T_arg)
{
if (!strcmp((*T_arg), "T993111") || !strcmp((*T_arg), "t993111")) {
@@ -3580,6 +3594,7 @@
install_element(GSMNET_NODE, &cfg_net_dyn_ts_allow_tch_f_cmd);
install_element(GSMNET_NODE, &cfg_net_meas_feed_dest_cmd);
install_element(GSMNET_NODE, &cfg_net_meas_feed_scenario_cmd);
+ install_element(GSMNET_NODE, &cfg_net_meas_feed_wqueue_max_len_cmd);
install_element(GSMNET_NODE, &cfg_net_timer_cmd);
install_element(GSMNET_NODE, &cfg_net_allow_unusable_timeslots_cmd);
install_element(GSMNET_NODE, &cfg_net_pcu_sock_cmd);
diff --git a/src/osmo-bsc/meas_feed.c b/src/osmo-bsc/meas_feed.c
index fbfd553..23b7d04 100644
--- a/src/osmo-bsc/meas_feed.c
+++ b/src/osmo-bsc/meas_feed.c
@@ -24,6 +24,7 @@
struct meas_feed_state {
struct osmo_wqueue wqueue;
+ unsigned int wqueue_max_len;
char scenario[31+1];
char *dst_host;
uint16_t dst_port;
@@ -31,6 +32,7 @@
static struct meas_feed_state g_mfs = {
.wqueue.bfd.fd = -1,
+ .wqueue_max_len = MEAS_FEED_WQUEUE_MAX_LEN_DEFAULT,
};
static int process_meas_rep(struct gsm_meas_rep *mr)
@@ -152,7 +154,7 @@
meas_feed_close();
}
- osmo_wqueue_init(&g_mfs.wqueue, 10);
+ osmo_wqueue_init(&g_mfs.wqueue, g_mfs.wqueue_max_len);
g_mfs.wqueue.write_cb = feed_write_cb;
g_mfs.wqueue.read_cb = feed_read_cb;
@@ -179,6 +181,18 @@
*host = g_mfs.dst_host;
}
+void meas_feed_wqueue_max_length_set(unsigned int max_length)
+{
+ g_mfs.wqueue_max_len = max_length;
+ if (g_mfs.wqueue.bfd.fd)
+ g_mfs.wqueue.max_length = max_length;
+}
+
+unsigned int meas_feed_wqueue_max_length_get(void)
+{
+ return g_mfs.wqueue_max_len;
+}
+
void meas_feed_scenario_set(const char *name)
{
osmo_strlcpy(g_mfs.scenario, name, sizeof(g_mfs.scenario));
--
To view, visit
https://gerrit.osmocom.org/c/osmo-bsc/+/34244
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ib2e3591498c038b8e59f3ad447ac1f65928d6da8
Gerrit-Change-Number: 34244
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged