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/OpenBSC@lists.osmocom.org/.
Alexander Chemeris alexander.chemeris at gmail.combump. Still hope to get this merged.
On Wed, Nov 25, 2015 at 3:31 PM, Alexander Chemeris
<alexander.chemeris at gmail.com> wrote:
> ---
> openbsc/include/openbsc/mncc.h | 5 +-
> openbsc/src/libmsc/mncc.c | 103 ++++++++++++++++++++++++++++++++++++++---
> 2 files changed, 100 insertions(+), 8 deletions(-)
>
> diff --git a/openbsc/include/openbsc/mncc.h b/openbsc/include/openbsc/mncc.h
> index 46ba237..92389c2 100644
> --- a/openbsc/include/openbsc/mncc.h
> +++ b/openbsc/include/openbsc/mncc.h
> @@ -191,8 +191,11 @@ struct gsm_mncc_rtp {
> uint32_t payload_msg_type;
> };
>
> -char *get_mncc_name(int value);
> +const char *get_mncc_name(int value);
> void mncc_set_cause(struct gsm_mncc *data, int loc, int val);
> +int mncc_has_cause(struct gsm_mncc *data);
> +const char *get_mncc_location(int value);
> +const char *get_mncc_cause(int value);
> void cc_tx_to_mncc(struct gsm_network *net, struct msgb *msg);
>
> /* input from CC code into mncc_builtin */
> diff --git a/openbsc/src/libmsc/mncc.c b/openbsc/src/libmsc/mncc.c
> index 2767faa..e8bd9ba 100644
> --- a/openbsc/src/libmsc/mncc.c
> +++ b/openbsc/src/libmsc/mncc.c
> @@ -34,10 +34,12 @@
> #include <openbsc/transaction.h>
> #include <openbsc/rtp_proxy.h>
>
> -static struct mncc_names {
> +struct name_value {
> char *name;
> int value;
> -} mncc_names[] = {
> +};
> +
> +static struct name_value mncc_names[] = {
> {"MNCC_SETUP_REQ", 0x0101},
> {"MNCC_SETUP_IND", 0x0102},
> {"MNCC_SETUP_RSP", 0x0103},
> @@ -95,16 +97,103 @@ static struct mncc_names {
>
> {NULL, 0} };
>
> -char *get_mncc_name(int value)
> +static struct name_value mncc_locations[] = {
> + {"GSM48_CAUSE_LOC_USER", 0x00},
> + {"GSM48_CAUSE_LOC_PRN_S_LU", 0x01},
> + {"GSM48_CAUSE_LOC_PUN_S_LU", 0x02},
> + {"GSM48_CAUSE_LOC_TRANS_NET", 0x03},
> + {"GSM48_CAUSE_LOC_PUN_S_RU", 0x04},
> + {"GSM48_CAUSE_LOC_PRN_S_RU", 0x05},
> + /* not defined */
> + {"GSM48_CAUSE_LOC_INN_NET", 0x07},
> + {"GSM48_CAUSE_LOC_NET_BEYOND", 0x0a},
> +
> + {NULL, 0} };
> +
> +static struct name_value mncc_causes[] = {
> + {"GSM48_CC_CAUSE_UNASSIGNED_NR", 1},
> + {"GSM48_CC_CAUSE_NO_ROUTE", 3},
> + {"GSM48_CC_CAUSE_CHAN_UNACCEPT", 6},
> + {"GSM48_CC_CAUSE_OP_DET_BARRING", 8},
> + {"GSM48_CC_CAUSE_NORM_CALL_CLEAR", 16},
> + {"GSM48_CC_CAUSE_USER_BUSY", 17},
> + {"GSM48_CC_CAUSE_USER_NOTRESPOND", 18},
> + {"GSM48_CC_CAUSE_USER_ALERTING_NA", 19},
> + {"GSM48_CC_CAUSE_CALL_REJECTED", 21},
> + {"GSM48_CC_CAUSE_NUMBER_CHANGED", 22},
> + {"GSM48_CC_CAUSE_PRE_EMPTION", 25},
> + {"GSM48_CC_CAUSE_NONSE_USER_CLR", 26},
> + {"GSM48_CC_CAUSE_DEST_OOO", 27},
> + {"GSM48_CC_CAUSE_INV_NR_FORMAT", 28},
> + {"GSM48_CC_CAUSE_FACILITY_REJ", 29},
> + {"GSM48_CC_CAUSE_RESP_STATUS_INQ", 30},
> + {"GSM48_CC_CAUSE_NORMAL_UNSPEC", 31},
> + {"GSM48_CC_CAUSE_NO_CIRCUIT_CHAN", 34},
> + {"GSM48_CC_CAUSE_NETWORK_OOO", 38},
> + {"GSM48_CC_CAUSE_TEMP_FAILURE", 41},
> + {"GSM48_CC_CAUSE_SWITCH_CONG", 42},
> + {"GSM48_CC_CAUSE_ACC_INF_DISCARD", 43},
> + {"GSM48_CC_CAUSE_REQ_CHAN_UNAVAIL", 44},
> + {"GSM48_CC_CAUSE_RESOURCE_UNAVAIL", 47},
> + {"GSM48_CC_CAUSE_QOS_UNAVAIL", 49},
> + {"GSM48_CC_CAUSE_REQ_FAC_NOT_SUBSC", 50},
> + {"GSM48_CC_CAUSE_INC_BARRED_CUG", 55},
> + {"GSM48_CC_CAUSE_BEARER_CAP_UNAUTH", 57},
> + {"GSM48_CC_CAUSE_BEARER_CA_UNAVAIL", 58},
> + {"GSM48_CC_CAUSE_SERV_OPT_UNAVAIL", 63},
> + {"GSM48_CC_CAUSE_BEARERSERV_UNIMPL", 65},
> + {"GSM48_CC_CAUSE_ACM_GE_ACM_MAX", 68},
> + {"GSM48_CC_CAUSE_REQ_FAC_NOTIMPL", 69},
> + {"GSM48_CC_CAUSE_RESTR_BCAP_AVAIL", 70},
> + {"GSM48_CC_CAUSE_SERV_OPT_UNIMPL", 79},
> + {"GSM48_CC_CAUSE_INVAL_TRANS_ID", 81},
> + {"GSM48_CC_CAUSE_USER_NOT_IN_CUG", 87},
> + {"GSM48_CC_CAUSE_INCOMPAT_DEST", 88},
> + {"GSM48_CC_CAUSE_INVAL_TRANS_NET", 91},
> + {"GSM48_CC_CAUSE_SEMANTIC_INCORR", 95},
> + {"GSM48_CC_CAUSE_INVAL_MAND_INF", 96},
> + {"GSM48_CC_CAUSE_MSGTYPE_NOTEXIST", 97},
> + {"GSM48_CC_CAUSE_MSGTYPE_INCOMPAT", 98},
> + {"GSM48_CC_CAUSE_IE_NOTEXIST", 99},
> + {"GSM48_CC_CAUSE_COND_IE_ERR", 100},
> + {"GSM48_CC_CAUSE_MSG_INCOMP_STATE", 101},
> + {"GSM48_CC_CAUSE_RECOVERY_TIMER", 102},
> + {"GSM48_CC_CAUSE_PROTO_ERR", 111},
> + {"GSM48_CC_CAUSE_INTERWORKING", 127},
> +
> + {NULL, 0} };
> +
> +const char *get_name_by_value(struct name_value *pairs, int value, const char *default_val)
> {
> int i;
>
> - for (i = 0; mncc_names[i].name; i++) {
> - if (mncc_names[i].value == value)
> - return mncc_names[i].name;
> + for (i = 0; pairs[i].name; i++) {
> + if (pairs[i].value == value)
> + return pairs[i].name;
> }
>
> - return "MNCC_Unknown";
> + return default_val;
> +}
> +
> +
> +const char *get_mncc_name(int value)
> +{
> + return get_name_by_value(mncc_names, value, "MNCC_Unknown");
> +}
> +
> +const char *get_mncc_location(int value)
> +{
> + return get_name_by_value(mncc_locations, value, "GSM48_CAUSE_LOC_Unknown");
> +}
> +
> +const char *get_mncc_cause(int value)
> +{
> + return get_name_by_value(mncc_causes, value, "GSM48_CC_CAUSE_Unknown");
> +}
> +
> +int mncc_has_cause(struct gsm_mncc *data)
> +{
> + return data->fields & MNCC_F_CAUSE;
> }
>
> void mncc_set_cause(struct gsm_mncc *data, int loc, int val)
> --
> 1.9.1
>
--
Regards,
Alexander Chemeris.
CEO, Fairwaves, Inc.
https://fairwaves.co