This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
dexter gerrit-no-reply at lists.osmocom.orgHello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/2183
to look at the new patch set (#4).
gsm0808: Add create functions for BSS_MAP_MSG_PAGING
gsm0808.h/c lacks functionality to generate BSS_MAP_MSG_PAGING messages. These
messages are required if the code is used in an MSC implementation.
This commit adds a gsm0808_create_paging() function, that generates an A/AoiP
BSS_MAP_MSG_PAGING message.
Change-Id: I9afecf0109305ca5153bf081bb29cd94071dd2b7
---
M include/osmocom/gsm/gsm0808.h
M src/gsm/gsm0808.c
M src/gsm/libosmogsm.map
M tests/gsm0808/gsm0808_test.c
M tests/gsm0808/gsm0808_test.ok
5 files changed, 99 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/83/2183/4
diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h
index 7e7cd46..db9a505 100644
--- a/include/osmocom/gsm/gsm0808.h
+++ b/include/osmocom/gsm/gsm0808.h
@@ -62,6 +62,9 @@
*scl);
struct msgb *gsm0808_create_assignment_failure(uint8_t cause, uint8_t *rr_cause);
struct msgb *gsm0808_create_clear_rqst(uint8_t cause);
+struct msgb *gsm0808_create_paging(char *imsi, uint32_t *tmsi,
+ struct gsm0808_cell_id_list *cil,
+ uint8_t *chan_needed);
struct msgb *gsm0808_create_dtap(struct msgb *msg, uint8_t link_id);
void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id);
diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c
index b71a0a1..01d54ef 100644
--- a/src/gsm/gsm0808.c
+++ b/src/gsm/gsm0808.c
@@ -360,6 +360,58 @@
return msg;
}
+struct msgb *gsm0808_create_paging(char *imsi, uint32_t *tmsi,
+ struct gsm0808_cell_id_list *cil,
+ uint8_t *chan_needed)
+{
+ struct msgb *msg;
+ uint8_t mid_buf[GSM48_MI_SIZE + 2];
+ int mid_len;
+ uint32_t tmsi_sw;
+
+ /* Mandatory emelents! */
+ OSMO_ASSERT(imsi);
+ OSMO_ASSERT(cil);
+
+ /* Malformed IMSI */
+ OSMO_ASSERT(strlen(imsi) <= GSM48_MI_SIZE);
+
+ msg =
+ msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM, "paging");
+ if (!msg)
+ return NULL;
+
+ /* Message Type 3.2.2.1 */
+ msgb_v_put(msg, BSS_MAP_MSG_PAGING);
+
+ /* IMSI 3.2.2.6 */
+ mid_len = gsm48_generate_mid_from_imsi(mid_buf, imsi);
+ msgb_tlv_put(msg, GSM0808_IE_IMSI, mid_len - 2, mid_buf + 2);
+
+ /* TMSI 3.2.2.7 */
+ if (tmsi) {
+ tmsi_sw = htonl(*tmsi);
+ msgb_tlv_put(msg, GSM0808_IE_TMSI, sizeof(*tmsi),
+ (uint8_t *) & tmsi_sw);
+ }
+
+ /* Cell Identifier List 3.2.2.27 */
+ if (cil)
+ gsm0808_enc_cell_id_list(msg, cil);
+
+ /* Channel Needed 3.2.2.36 */
+ if (chan_needed) {
+ msgb_tv_put(msg, GSM0808_IE_CHANNEL_NEEDED,
+ (*chan_needed) & 0x03);
+ }
+
+ /* pre-pend the header */
+ msg->l3h =
+ msgb_tv_push(msg, BSSAP_MSG_BSS_MANAGEMENT, msgb_length(msg));
+
+ return msg;
+}
+
void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id)
{
uint8_t *hh = msgb_push(msg, 3);
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index 2826cd8..fb06bff 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -135,6 +135,7 @@
gsm0808_create_clear_command;
gsm0808_create_clear_complete;
gsm0808_create_clear_rqst;
+gsm0808_create_paging;
gsm0808_create_dtap;
gsm0808_create_layer3;
gsm0808_create_layer3_aoip;
diff --git a/tests/gsm0808/gsm0808_test.c b/tests/gsm0808/gsm0808_test.c
index bf979bb..02de5e1 100644
--- a/tests/gsm0808/gsm0808_test.c
+++ b/tests/gsm0808/gsm0808_test.c
@@ -21,6 +21,7 @@
#include <osmocom/gsm/gsm0808.h>
#include <osmocom/gsm/gsm0808_utils.h>
#include <osmocom/gsm/protocol/gsm_08_08.h>
+#include <osmocom/gsm/protocol/gsm_08_58.h>
#include <stdio.h>
#include <stdlib.h>
@@ -368,6 +369,46 @@
printf("Testing creating Clear Request\n");
msg = gsm0808_create_clear_rqst(0x23);
VERIFY(msg, res, ARRAY_SIZE(res));
+ msgb_free(msg);
+}
+
+static void test_create_paging()
+{
+ static const uint8_t res[] =
+ { 0x00, 0x10, 0x52, 0x08, 0x08, 0x09, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x21, 0x43, 0x1a, 0x03, 0x05, 0x23, 0x42 };
+ static const uint8_t res2[] =
+ { 0x00, 0x16, 0x52, 0x08, 0x08, 0x09, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x21, 0x43, GSM0808_IE_TMSI, 0x04, 0x12, 0x34, 0x56, 0x78, 0x1a,
+ 0x03, 0x05, 0x23, 0x42 };
+ static const uint8_t res3[] =
+ { 0x00, 0x18, 0x52, 0x08, 0x08, 0x09, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x21, 0x43, GSM0808_IE_TMSI, 0x04, 0x12, 0x34, 0x56, 0x78, 0x1a,
+ 0x03, 0x05, 0x23, 0x42, GSM0808_IE_CHANNEL_NEEDED,
+ RSL_CHANNEED_TCH_ForH };
+
+ struct msgb *msg;
+ struct gsm0808_cell_id_list cil;
+ uint32_t tmsi = 0x12345678;
+ uint8_t chan_needed = RSL_CHANNEED_TCH_ForH;
+
+ char imsi[] = "001010000001234";
+
+ cil.id_discr = CELL_IDENT_LAC;
+ cil.id_list_lac[0] = 0x2342;
+ cil.id_list_len = 1;
+
+ printf("Testing creating Paging Request\n");
+ msg = gsm0808_create_paging(imsi, NULL, &cil, NULL);
+ VERIFY(msg, res, ARRAY_SIZE(res));
+ msgb_free(msg);
+
+ msg = gsm0808_create_paging(imsi, &tmsi, &cil, NULL);
+ VERIFY(msg, res2, ARRAY_SIZE(res2));
+ msgb_free(msg);
+
+ msg = gsm0808_create_paging(imsi, &tmsi, &cil, &chan_needed);
+ VERIFY(msg, res3, ARRAY_SIZE(res3));
msgb_free(msg);
}
@@ -751,6 +792,7 @@
test_create_ass_fail();
test_create_ass_fail_aoip();
test_create_clear_rqst();
+ test_create_paging();
test_create_dtap();
test_prepend_dtap();
test_enc_dec_aoip_trasp_addr_v4();
diff --git a/tests/gsm0808/gsm0808_test.ok b/tests/gsm0808/gsm0808_test.ok
index 8e2087d..6170a7a 100644
--- a/tests/gsm0808/gsm0808_test.ok
+++ b/tests/gsm0808/gsm0808_test.ok
@@ -14,6 +14,7 @@
Testing creating Assignment Failure
Testing creating Assignment Failure (AoIP)
Testing creating Clear Request
+Testing creating Paging Request
Testing creating DTAP
Testing prepend DTAP
Done
--
To view, visit https://gerrit.osmocom.org/2183
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I9afecf0109305ca5153bf081bb29cd94071dd2b7
Gerrit-PatchSet: 4
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder