aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-01-10 23:43:24 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-03-03 16:19:08 +0100
commit8b713f817d4516f0e8682a172eeb39d1397c8d3f (patch)
tree93ad3ac6155d04ba5080dc0fe37abcf225707c00 /openbsc
parentce3b41fdb6a46500fb4957688e3708bddd2327cc (diff)
generalize rab_act for ps and cs
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/iu.h3
-rw-r--r--openbsc/src/gprs/iu.c35
-rw-r--r--openbsc/src/gprs/sgsn_libgtp.c3
3 files changed, 29 insertions, 12 deletions
diff --git a/openbsc/include/openbsc/iu.h b/openbsc/include/openbsc/iu.h
index 93ab9eb7a..2fd87e89c 100644
--- a/openbsc/include/openbsc/iu.h
+++ b/openbsc/include/openbsc/iu.h
@@ -14,3 +14,6 @@ typedef int (* iu_recv_cb_t )(struct msgb *msg, struct gprs_ra_id *ra_id,
uint16_t *sai);
int iu_tx(struct msgb *msg, uint8_t sapi);
+
+int iu_rab_act_cs(struct ue_conn_ctx *ue_ctx, uint32_t rtp_ip, uint16_t rtp_port);
+int iu_rab_act_ps(struct ue_conn_ctx *ue_ctx, uint32_t gtp_ip, uint32_t gtp_tei);
diff --git a/openbsc/src/gprs/iu.c b/openbsc/src/gprs/iu.c
index 8eee5ed49..6e421511c 100644
--- a/openbsc/src/gprs/iu.c
+++ b/openbsc/src/gprs/iu.c
@@ -61,24 +61,37 @@ struct ue_conn_ctx *ue_conn_ctx_find(struct osmo_sua_link *link, uint32_t conn_i
* RANAP handling
***********************************************************************/
-int gprs_iu_rab_act(struct sgsn_mm_ctx *mm, uint32_t gtp_ip, uint32_t gtp_tei)
+static int iu_rab_act(struct ue_conn_ctx *ue_ctx, struct msgb *msg)
{
- struct ue_conn_ctx *uectx;
struct osmo_scu_prim *prim;
+
+ /* wrap RANAP message in SCCP N-DATA.req */
+ prim = (struct osmo_scu_prim *) msgb_push(msg, sizeof(*prim));
+ prim->u.data.conn_id = ue_ctx->conn_id;
+ osmo_prim_init(&prim->oph,
+ SCCP_SAP_USER,
+ OSMO_SCU_PRIM_N_DATA,
+ PRIM_OP_REQUEST,
+ msg);
+ return osmo_sua_user_link_down(ue_ctx->link, &prim->oph);
+}
+
+int iu_rab_act_cs(struct ue_conn_ctx *ue_ctx, uint32_t rtp_ip, uint16_t rtp_port)
+{
struct msgb *msg;
- uectx = mm->iu.ue_ctx;
+ msg = ranap_new_msg_rab_assign_voice(1, rtp_ip, rtp_port);
+ msg->l2h = msg->data;
+ iu_rab_act(ue_ctx, msg);
+}
+
+int iu_rab_act_ps(struct ue_conn_ctx *ue_ctx, uint32_t gtp_ip, uint32_t gtp_tei)
+{
+ struct msgb *msg;
msg = ranap_new_msg_rab_assign_data(1, gtp_ip, gtp_tei);
msg->l2h = msg->data;
-
- /* wrap RANAP message in SCCP N-DATA.req */
- prim = (struct osmo_scu_prim *) msgb_push(msg, sizeof(*prim));
- prim->u.data.conn_id = uectx->conn_id;
- osmo_prim_init(&prim->oph, SCCP_SAP_USER,
- OSMO_SCU_PRIM_N_DATA,
- PRIM_OP_REQUEST, msg);
- osmo_sua_user_link_down(uectx->link, &prim->oph);
+ iu_rab_act(ue_ctx, msg);
}
int gprs_iu_rab_deact(struct sgsn_mm_ctx *mm)
diff --git a/openbsc/src/gprs/sgsn_libgtp.c b/openbsc/src/gprs/sgsn_libgtp.c
index 6393b1a4a..b84d4ba40 100644
--- a/openbsc/src/gprs/sgsn_libgtp.c
+++ b/openbsc/src/gprs/sgsn_libgtp.c
@@ -47,6 +47,7 @@
#include <openbsc/gprs_sgsn.h>
#include <openbsc/gprs_gmm.h>
#include <openbsc/gsm_subscriber.h>
+#include <openbsc/iu.h>
#include <gtp.h>
#include <pdp.h>
@@ -354,7 +355,7 @@ static int create_pdp_conf(struct pdp_t *pdp, void *cbp, int cause)
} else {
/* Activate a radio bearer */
uint32_t ggsn_ip = 0xc0a80033; /* 192.168.0.51 */
- gprs_iu_rab_act(pctx->mm, ggsn_ip, pdp->teid_own);
+ iu_rab_act_ps(pctx->mm->iu.ue_ctx, ggsn_ip, pdp->teid_own);
}
/* Inform others about it */