mirror of https://gerrit.osmocom.org/libosmocore
libosmogsm: (re)introduce gsm48_push_l3hdr()
There was gsm0480_l3hdr_push() declared in a header file, but not exposed in 'libosmogsm.map'. Furthermore, for some reason it was a part of GSM 04.80 API, what is not actually correct. Let's rename this symbol, and properly expose it as a part of the GSM 04.08 API. Also, let's introduce an auxiliary wrapper for messages, where the transaction identifier is required (see GSM 04.07, section 11.2.3.1.2). Change-Id: I8a045efe8335d83fcbe8d43eb180972e3b1d9dda
This commit is contained in:
parent
39a36d0193
commit
30cfeeb4a0
|
@ -7,3 +7,6 @@
|
|||
# If any interfaces have been added since the last public release: c:r:a + 1.
|
||||
# If any interfaces have been removed or changed since the last public release: c:r:0.
|
||||
#library what description / commit summary line
|
||||
libosmogsm gsm0480_l3hdr_push() removed from gsm/gsm0480.h (was not exposed)
|
||||
libosmogsm gsm48_push_l3hdr() (re)introduced in gsm/gsm48.h (GSM 04.08 API)
|
||||
libosmogsm gsm48_push_l3hdr_tid() a wrapper around gsm48_push_l3hdr()
|
||||
|
|
|
@ -121,6 +121,3 @@ struct msgb *gsm0480_create_ussd_release_complete(void);
|
|||
|
||||
int gsm0480_wrap_invoke(struct msgb *msg, int op, int link_id);
|
||||
int gsm0480_wrap_facility(struct msgb *msg);
|
||||
|
||||
struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr,
|
||||
uint8_t msg_type);
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <osmocom/core/msgb.h>
|
||||
|
||||
#include <osmocom/gsm/tlv.h>
|
||||
#include <osmocom/gsm/protocol/gsm_04_08.h>
|
||||
#include <osmocom/gsm/gsm48_ie.h>
|
||||
|
@ -63,3 +65,9 @@ void gsm48_mcc_mnc_to_bcd(uint8_t *bcd_dst, uint16_t mcc, uint16_t mnc)
|
|||
OSMO_DEPRECATED("Use osmo_plmn_to_bcd() instead, to not lose leading zeros in the MNC");
|
||||
void gsm48_mcc_mnc_from_bcd(uint8_t *bcd_src, uint16_t *mcc, uint16_t *mnc)
|
||||
OSMO_DEPRECATED("Use osmo_plmn_from_bcd() instead, to not lose leading zeros in the MNC");
|
||||
|
||||
struct gsm48_hdr *gsm48_push_l3hdr(struct msgb *msg,
|
||||
uint8_t pdisc, uint8_t msg_type);
|
||||
|
||||
#define gsm48_push_l3hdr_tid(msg, pdisc, tid, msg_type) \
|
||||
gsm48_push_l3hdr(msg, (pdisc & 0x0f) | (tid << 4), msg_type)
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
#include <osmocom/core/logging.h>
|
||||
|
||||
#include <osmocom/gsm/gsm48.h>
|
||||
#include <osmocom/gsm/gsm0480.h>
|
||||
#include <osmocom/gsm/gsm_utils.h>
|
||||
#include <osmocom/gsm/protocol/gsm_03_40.h>
|
||||
#include <osmocom/gsm/protocol/gsm_04_11.h>
|
||||
|
@ -354,7 +353,7 @@ int gsm411_push_cp_header(struct msgb *msg, uint8_t proto, uint8_t trans,
|
|||
uint8_t msg_type)
|
||||
{
|
||||
/* Outgoing proto_discr needs the highest bit set */
|
||||
gsm0480_l3hdr_push(msg, proto | (trans << 4), msg_type);
|
||||
gsm48_push_l3hdr_tid(msg, proto, trans, msg_type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <osmocom/gsm/gsm48.h>
|
||||
#include <osmocom/gsm/gsm0480.h>
|
||||
#include <osmocom/gsm/gsm_utils.h>
|
||||
|
||||
|
@ -863,10 +864,11 @@ struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const
|
|||
msgb_wrap_with_TL(msg, GSM0480_IE_FACILITY);
|
||||
|
||||
/* And finally pre-pend the L3 header */
|
||||
gsm0480_l3hdr_push(msg,
|
||||
GSM48_PDISC_NC_SS | trans_id
|
||||
| (1<<7) /* TI direction = 1 */,
|
||||
GSM0480_MTYPE_RELEASE_COMPLETE);
|
||||
gsm48_push_l3hdr_tid(msg, GSM48_PDISC_NC_SS,
|
||||
/* FIXME: TI direction is always 1 ?!? */
|
||||
trans_id | (1 << 7),
|
||||
GSM0480_MTYPE_RELEASE_COMPLETE);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
@ -932,17 +934,6 @@ struct msgb *gsm0480_gen_reject(int invoke_id, uint8_t problem_tag, uint8_t prob
|
|||
return msg;
|
||||
}
|
||||
|
||||
|
||||
struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr,
|
||||
uint8_t msg_type)
|
||||
{
|
||||
struct gsm48_hdr *gh;
|
||||
gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));
|
||||
gh->proto_discr = proto_discr;
|
||||
gh->msg_type = msg_type;
|
||||
return gh;
|
||||
}
|
||||
|
||||
struct msgb *gsm0480_create_ussd_notify(int level, const char *text)
|
||||
{
|
||||
struct msgb *msg;
|
||||
|
@ -954,7 +945,11 @@ struct msgb *gsm0480_create_ussd_notify(int level, const char *text)
|
|||
gsm0480_wrap_invoke(msg, GSM0480_OP_CODE_USS_NOTIFY, 0);
|
||||
gsm0480_wrap_facility(msg);
|
||||
|
||||
gsm0480_l3hdr_push(msg, GSM48_PDISC_NC_SS, GSM0480_MTYPE_REGISTER);
|
||||
/* And finally pre-pend the L3 header */
|
||||
gsm48_push_l3hdr(msg, GSM48_PDISC_NC_SS,
|
||||
/* FIXME: no transactionID?!? */
|
||||
GSM0480_MTYPE_REGISTER);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
@ -966,8 +961,10 @@ struct msgb *gsm0480_create_ussd_release_complete(void)
|
|||
if (!msg)
|
||||
return NULL;
|
||||
|
||||
/* FIXME: should this set trans_id and TI direction flag? */
|
||||
gsm0480_l3hdr_push(msg, GSM48_PDISC_NC_SS,
|
||||
GSM0480_MTYPE_RELEASE_COMPLETE);
|
||||
/* And finally pre-pend the L3 header */
|
||||
gsm48_push_l3hdr(msg, GSM48_PDISC_NC_SS,
|
||||
/* FIXME: no transactionID?!? */
|
||||
GSM0480_MTYPE_RELEASE_COMPLETE);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
|
|
@ -1024,4 +1024,24 @@ const struct value_string gsm48_reject_value_names[] = {
|
|||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/*! Wrap a given \ref msg with \ref gsm48_hdr structure
|
||||
* \param[out] msg A message to be wrapped
|
||||
* \param[in] pdisc GSM TS 04.07 protocol discriminator 1/2,
|
||||
* sub-pdisc, trans_id or skip_ind 1/2,
|
||||
* see section 11.2.3.1 for details
|
||||
* \param[in] msg_type GSM TS 04.08 message type
|
||||
* @return pointer to pushed header within \ref msg
|
||||
*/
|
||||
struct gsm48_hdr *gsm48_push_l3hdr(struct msgb *msg,
|
||||
uint8_t pdisc, uint8_t msg_type)
|
||||
{
|
||||
struct gsm48_hdr *gh;
|
||||
|
||||
gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));
|
||||
gh->proto_discr = pdisc;
|
||||
gh->msg_type = msg_type;
|
||||
|
||||
return gh;
|
||||
}
|
||||
|
||||
/*! @} */
|
||||
|
|
|
@ -241,6 +241,7 @@ gsm411_rp_state_names;
|
|||
|
||||
gsm414_msgt_names;
|
||||
|
||||
gsm48_push_l3hdr;
|
||||
gsm48_att_tlvdef;
|
||||
gsm48_cc_msg_name;
|
||||
gsm48_rr_msg_name;
|
||||
|
|
Loading…
Reference in New Issue