aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-05-25 16:56:35 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2018-05-27 21:54:12 +0200
commit38e58416b1ab32a7f156d01b166493411f4cffdb (patch)
tree961eac0362d11fc1ef6f39d39f1d53511f43fbf3
parentb4186824c20cbb5a18963d737f47718aed791e33 (diff)
add gsm0808_cell_id_to_list()
The idea is to be able to add a gsm0808_cell_id to a gsm0808_cell_id_list2: first convert it to a list, then re-use gsm0808_cell_id_list_add(). It will be used by osmo-bsc to manage neighbor-BSS cell identifiers from VTY. Change-Id: Ibf746ac60b1b1e920baf494b396658a5ceabd788
-rw-r--r--include/osmocom/gsm/gsm0808_utils.h1
-rw-r--r--src/gsm/gsm0808_utils.c31
-rw-r--r--src/gsm/libosmogsm.map1
3 files changed, 33 insertions, 0 deletions
diff --git a/include/osmocom/gsm/gsm0808_utils.h b/include/osmocom/gsm/gsm0808_utils.h
index 24c139a8..6555734f 100644
--- a/include/osmocom/gsm/gsm0808_utils.h
+++ b/include/osmocom/gsm/gsm0808_utils.h
@@ -98,6 +98,7 @@ int gsm0808_dec_cell_id_list(struct gsm0808_cell_id_list *cil,
const uint8_t *elem, uint8_t len)
OSMO_DEPRECATED("use gsm0808_dec_cell_id_list2 instead");
int gsm0808_cell_id_list_add(struct gsm0808_cell_id_list2 *dst, const struct gsm0808_cell_id_list2 *src);
+void gsm0808_cell_id_to_list(struct gsm0808_cell_id_list2 *dst, const struct gsm0808_cell_id *src);
uint8_t gsm0808_enc_cell_id(struct msgb *msg, const struct gsm0808_cell_id *ci);
int gsm0808_dec_cell_id(struct gsm0808_cell_id *ci, const uint8_t *elem, uint8_t len);
int gsm0808_chan_type_to_speech_codec(uint8_t perm_spch);
diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c
index 2c659bba..080fc95b 100644
--- a/src/gsm/gsm0808_utils.c
+++ b/src/gsm/gsm0808_utils.c
@@ -988,6 +988,37 @@ int gsm0808_cell_id_list_add(struct gsm0808_cell_id_list2 *dst, const struct gsm
return added;
}
+/*! Convert a single Cell Identifier to a Cell Identifier List with one entry.
+ * \param dst[out] Overwrite this list.
+ * \param src[in] Set \a dst to contain exactly this item.
+ */
+void gsm0808_cell_id_to_list(struct gsm0808_cell_id_list2 *dst, const struct gsm0808_cell_id *src)
+{
+ if (!dst)
+ return;
+ if (!src) {
+ *dst = (struct gsm0808_cell_id_list2){
+ .id_discr = CELL_IDENT_NO_CELL,
+ };
+ return;
+ }
+
+ *dst = (struct gsm0808_cell_id_list2){
+ .id_discr = src->id_discr,
+ .id_list = { src->id },
+ .id_list_len = 1,
+ };
+
+ switch (src->id_discr) {
+ case CELL_IDENT_NO_CELL:
+ case CELL_IDENT_BSS:
+ dst->id_list_len = 0;
+ break;
+ default:
+ break;
+ }
+}
+
/*! Encode Cell Identifier IE (3GPP TS 48.008 3.2.2.17).
* \param[out] msg Message Buffer to which IE is to be appended
* \param[in] ci Cell ID to be encoded
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index c4b1b75e..5a574290 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -177,6 +177,7 @@ gsm0808_enc_cell_id_list2;
gsm0808_dec_cell_id_list;
gsm0808_dec_cell_id_list2;
gsm0808_cell_id_list_add;
+gsm0808_cell_id_to_list;
gsm0808_enc_cell_id;
gsm0808_dec_cell_id;
gsm0808_cell_id_name;