aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2015-12-26 23:43:48 +0100
committerHarald Welte <laforge@gnumonks.org>2015-12-26 23:43:48 +0100
commit2bc20f85c1192afefdeac5d4e00f0a775173b8e1 (patch)
tree2bf1a07a604a0425e48f982f4574df9a5065a5ec /src
parente311ae078aee4940bd8d5e1f264d0cf644a86501 (diff)
Dummy CN: Create a per-UE connection context and resolve it.
Diffstat (limited to 'src')
-rw-r--r--src/tests/dummy_cn_sua.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/tests/dummy_cn_sua.c b/src/tests/dummy_cn_sua.c
index 9e9b98c..721b7c9 100644
--- a/src/tests/dummy_cn_sua.c
+++ b/src/tests/dummy_cn_sua.c
@@ -20,6 +20,36 @@
int asn1_xer_print = 1;
+struct ue_conn_ctx {
+ struct llist_head list;
+ struct osmo_sua_link *link;
+ uint32_t conn_id;
+};
+
+static LLIST_HEAD(conn_ctx_list);
+
+struct ue_conn_ctx *ue_conn_ctx_alloc(struct osmo_sua_link *link, uint32_t conn_id)
+{
+ struct ue_conn_ctx *ctx = talloc_zero(NULL, struct ue_conn_ctx);
+
+ ctx->link = link;
+ ctx->conn_id = conn_id;
+ llist_add(&ctx->list, &conn_ctx_list);
+
+ return ctx;
+}
+
+struct ue_conn_ctx *ue_conn_ctx_find(struct osmo_sua_link *link, uint32_t conn_id)
+{
+ struct ue_conn_ctx *ctx;
+
+ llist_for_each_entry(ctx, &conn_ctx_list, list) {
+ if (ctx->link == link && ctx->conn_id == conn_id)
+ return ctx;
+ }
+ return NULL;
+}
+
/***********************************************************************
* RANAP handling
***********************************************************************/
@@ -195,7 +225,7 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *link)
struct osmo_prim_hdr *resp = NULL;
const uint8_t payload[] = { 0xb1, 0xb2, 0xb3 };
int rc;
- void *ue;
+ struct ue_conn_ctx *ue;
printf("sccp_sap_up(%s)\n", osmo_scu_prim_name(oph));
@@ -212,6 +242,7 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *link)
return 0;
}
/* FIXME: allocate UE context */
+ ue = ue_conn_ctx_alloc(link, prim->u.connect.conn_id);
/* first ensure the local SUA/SCCP socket is ACTIVE */
resp = make_conn_resp(&prim->u.connect);
osmo_sua_user_link_down(link, resp);
@@ -226,7 +257,8 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *link)
/* connection-oriented data received */
printf("N-DATA.ind(%u, %s)\n", prim->u.data.conn_id,
osmo_hexdump(msgb_l2(oph->msg), msgb_l2len(oph->msg)));
- /* FIXME: resolve UE context */
+ /* resolve UE context */
+ ue = ue_conn_ctx_find(link, prim->u.data.conn_id);
rc = cn_ranap_rx_co(ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
case OSMO_PRIM(OSMO_SCU_PRIM_N_UNITDATA, PRIM_OP_INDICATION):