aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gb/gprs_ns2.c11
-rw-r--r--src/gb/gprs_ns2_fr.c6
-rw-r--r--src/gb/gprs_ns2_internal.h3
-rw-r--r--src/gb/gprs_ns2_udp.c8
4 files changed, 22 insertions, 6 deletions
diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c
index 813bd584..7c517aad 100644
--- a/src/gb/gprs_ns2.c
+++ b/src/gb/gprs_ns2.c
@@ -486,9 +486,10 @@ void ns2_prim_status_ind(struct gprs_ns2_nse *nse,
* \param[in] bind The 'bind' on which we operate
* \param[in] nse The NS Entity on which we operate
* \param[in] initiater - if this is an incoming remote (!initiater) or a local outgoing connection (initater)
+ * \param[in] id - human-readable identifier
* \return newly allocated NS-VC on success; NULL on error */
struct gprs_ns2_vc *ns2_vc_alloc(struct gprs_ns2_vc_bind *bind, struct gprs_ns2_nse *nse, bool initiater,
- enum gprs_ns2_vc_mode vc_mode)
+ enum gprs_ns2_vc_mode vc_mode, const char *id)
{
/* Sanity check */
OSMO_ASSERT(bind->ll == nse->ll);
@@ -511,7 +512,7 @@ struct gprs_ns2_vc *ns2_vc_alloc(struct gprs_ns2_vc_bind *bind, struct gprs_ns2_
nsvc->statg = osmo_stat_item_group_alloc(nsvc, &nsvc_statg_desc, bind->nsi->rate_ctr_idx);
if (!nsvc->statg)
goto err_group;
- if (!gprs_ns2_vc_fsm_alloc(nsvc, NULL, initiater))
+ if (!gprs_ns2_vc_fsm_alloc(nsvc, id, initiater))
goto err_statg;
bind->nsi->rate_ctr_idx++;
@@ -791,6 +792,7 @@ enum gprs_ns2_cs ns2_create_vc(struct gprs_ns2_vc_bind *bind,
enum gprs_ns2_vc_mode vc_mode;
uint16_t nsvci;
uint16_t nsei;
+ char idbuf[32];
int rc, tlv;
@@ -907,8 +909,11 @@ enum gprs_ns2_cs ns2_create_vc(struct gprs_ns2_vc_bind *bind,
return GPRS_NS2_CS_SKIPPED;
}
+ nsvci = tlvp_val16be(&tp, NS_IE_VCI);
vc_mode = gprs_ns2_dialect_to_vc_mode(dialect);
- nsvc = ns2_vc_alloc(bind, nse, false, vc_mode);
+ snprintf(idbuf, sizeof(idbuf), "%s-NSE%05u-NSVC%05u", gprs_ns2_lltype_str(nse->ll),
+ nse->nsei, nsvci);
+ nsvc = ns2_vc_alloc(bind, nse, false, vc_mode, idbuf);
if (!nsvc)
return GPRS_NS2_CS_SKIPPED;
diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c
index bb553812..c1bed6c6 100644
--- a/src/gb/gprs_ns2_fr.c
+++ b/src/gb/gprs_ns2_fr.c
@@ -737,13 +737,17 @@ struct gprs_ns2_vc *gprs_ns2_fr_connect(struct gprs_ns2_vc_bind *bind,
{
struct gprs_ns2_vc *nsvc = NULL;
struct priv_vc *priv = NULL;
+ struct priv_bind *bpriv = bind->priv;
+ char idbuf[64];
nsvc = gprs_ns2_fr_nsvc_by_dlci(bind, dlci);
if (nsvc) {
goto err;
}
- nsvc = ns2_vc_alloc(bind, nse, true, NS2_VC_MODE_BLOCKRESET);
+ snprintf(idbuf, sizeof(idbuf), "%s-%s-DLCI%u-NSE%05u-NSVC%05u", gprs_ns2_lltype_str(nse->ll),
+ bpriv->netif, dlci, nse->nsei, nsvci);
+ nsvc = ns2_vc_alloc(bind, nse, true, NS2_VC_MODE_BLOCKRESET, idbuf);
if (!nsvc)
goto err;
diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h
index c33f7f8a..5dbc349f 100644
--- a/src/gb/gprs_ns2_internal.h
+++ b/src/gb/gprs_ns2_internal.h
@@ -233,7 +233,8 @@ int ns2_recv_vc(struct gprs_ns2_vc *nsvc,
struct gprs_ns2_vc *ns2_vc_alloc(struct gprs_ns2_vc_bind *bind,
struct gprs_ns2_nse *nse,
bool initiater,
- enum gprs_ns2_vc_mode vc_mode);
+ enum gprs_ns2_vc_mode vc_mode,
+ const char *id);
struct msgb *gprs_ns2_msgb_alloc(void);
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index 370937f5..d93b66d5 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -394,6 +394,8 @@ struct gprs_ns2_vc *gprs_ns2_ip_bind_connect(struct gprs_ns2_vc_bind *bind,
struct gprs_ns2_vc *nsvc;
struct priv_vc *priv;
enum gprs_ns2_vc_mode vc_mode;
+ char *sockaddr_str;
+ char idbuf[64];
vc_mode = gprs_ns2_dialect_to_vc_mode(nse->dialect);
if ((int) vc_mode == -1) {
@@ -402,7 +404,11 @@ struct gprs_ns2_vc *gprs_ns2_ip_bind_connect(struct gprs_ns2_vc_bind *bind,
return NULL;
}
- nsvc = ns2_vc_alloc(bind, nse, true, vc_mode);
+ sockaddr_str = (char *)osmo_sockaddr_to_str(remote);
+ osmo_identifier_sanitize_buf(sockaddr_str, NULL, '_');
+ snprintf(idbuf, sizeof(idbuf), "%s-NSE%05u-remote-%s", gprs_ns2_lltype_str(nse->ll),
+ nse->nsei, sockaddr_str);
+ nsvc = ns2_vc_alloc(bind, nse, true, vc_mode, idbuf);
if (!nsvc)
return NULL;