aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2017-08-08 15:03:50 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2017-08-09 12:17:39 +0200
commitc4178e55ea5a0ac480f11e3352a3579cdb78025a (patch)
treeee80ac629621f921ce2363396bb0be36a96640d5
parent0cd8e4eadea3fc4ec709b102e428f7a47836a7e3 (diff)
Add pcu-socket vty config
osmo-bts already supports configuring a different path for the bts<->pcu socket by using the 'pcu-socket' config field. Change-Id: I9b3e1171da467519750b201849ec892a1e318129
-rw-r--r--include/osmocom/pcu/pcuif_proto.h2
-rw-r--r--src/bts.h3
-rw-r--r--src/osmobts_sock.cpp3
-rw-r--r--src/pcu_main.cpp2
-rw-r--r--src/pcu_vty.c21
5 files changed, 30 insertions, 1 deletions
diff --git a/include/osmocom/pcu/pcuif_proto.h b/include/osmocom/pcu/pcuif_proto.h
index 88dc09ec..39103ee2 100644
--- a/include/osmocom/pcu/pcuif_proto.h
+++ b/include/osmocom/pcu/pcuif_proto.h
@@ -3,6 +3,8 @@
#include <osmocom/gsm/l1sap.h>
+#define PCU_SOCK_DEFAULT "/tmp/pcu_bts"
+
#define PCU_IF_VERSION 0x07
#define TXT_MAX_LEN 128
diff --git a/src/bts.h b/src/bts.h
index 25193f97..cff0020a 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -233,6 +233,9 @@ struct gprs_rlcmac_bts {
* period.
*/
struct BTS *bts;
+
+ /* Path to be used for the pcu-bts socket */
+ char *pcu_sock_path;
};
#ifdef __cplusplus
diff --git a/src/osmobts_sock.cpp b/src/osmobts_sock.cpp
index d7e55e7c..e9b85ab7 100644
--- a/src/osmobts_sock.cpp
+++ b/src/osmobts_sock.cpp
@@ -223,6 +223,7 @@ int pcu_l1if_open(void)
struct sockaddr_un local;
unsigned int namelen;
int rc;
+ struct gprs_rlcmac_bts *bts = bts_main_data();
LOGP(DL1IF, LOGL_INFO, "Opening OsmoPCU L1 interface to OsmoBTS\n");
@@ -244,7 +245,7 @@ int pcu_l1if_open(void)
}
local.sun_family = AF_UNIX;
- strncpy(local.sun_path, "/tmp/pcu_bts", sizeof(local.sun_path));
+ strncpy(local.sun_path, bts->pcu_sock_path, sizeof(local.sun_path));
local.sun_path[sizeof(local.sun_path) - 1] = '\0';
/* we use the same magic that X11 uses in Xtranssock.c for
diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
index b69e446b..8e7cde80 100644
--- a/src/pcu_main.cpp
+++ b/src/pcu_main.cpp
@@ -216,6 +216,8 @@ int main(int argc, char *argv[])
*/
bts->dl_arq_type = EGPRS_ARQ1;
+ bts->pcu_sock_path = talloc_strdup(tall_pcu_ctx, PCU_SOCK_DEFAULT);
+
msgb_talloc_ctx_init(tall_pcu_ctx, 0);
osmo_init_logging(&gprs_log_info);
diff --git a/src/pcu_vty.c b/src/pcu_vty.c
index cd22e38c..68d2f556 100644
--- a/src/pcu_vty.c
+++ b/src/pcu_vty.c
@@ -9,6 +9,7 @@
#include <osmocom/vty/misc.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/rate_ctr.h>
+#include <osmocom/pcu/pcuif_proto.h>
#include "pcu_vty.h"
#include "gprs_rlcmac.h"
#include "bts.h"
@@ -233,6 +234,8 @@ static int config_write_pcu(struct vty *vty)
if (bts->dl_tbf_idle_msec)
vty_out(vty, " dl-tbf-idle-time %d%s", bts->dl_tbf_idle_msec,
VTY_NEWLINE);
+ if (strcmp(bts->pcu_sock_path, PCU_SOCK_DEFAULT))
+ vty_out(vty, " pcu-socket %s%s", bts->pcu_sock_path, VTY_NEWLINE);
for (i = 0; i < 32; i++) {
unsigned int cs = (1 << i);
@@ -966,6 +969,23 @@ DEFUN(cfg_pcu_cs_lqual_ranges,
return CMD_SUCCESS;
}
+DEFUN(cfg_pcu_sock,
+ cfg_pcu_sock_cmd,
+ "pcu-socket PATH",
+ "Configure the osmo-bts PCU socket file/path name\n"
+ "Path of the socket to connect to\n")
+{
+ struct gprs_rlcmac_bts *bts = bts_main_data();
+
+ if (bts->pcu_sock_path) {
+ /* FIXME: close the interface? */
+ talloc_free(bts->pcu_sock_path);
+ }
+ bts->pcu_sock_path = talloc_strdup(tall_pcu_ctx, argv[0]);
+ /* FIXME: re-open the interface? */
+
+ return CMD_SUCCESS;
+}
DEFUN(show_tbf,
show_tbf_cmd,
@@ -1096,6 +1116,7 @@ int pcu_vty_init(const struct log_info *cat)
install_element(PCU_NODE, &cfg_pcu_no_ms_idle_time_cmd);
install_element(PCU_NODE, &cfg_pcu_gsmtap_categ_cmd);
install_element(PCU_NODE, &cfg_pcu_no_gsmtap_categ_cmd);
+ install_element(PCU_NODE, &cfg_pcu_sock_cmd);
install_element_ve(&show_bts_stats_cmd);
install_element_ve(&show_tbf_cmd);